diff --git a/.travis.yml b/.travis.yml index 30708de36a..845c103906 100644 --- a/.travis.yml +++ b/.travis.yml @@ -42,7 +42,7 @@ install: true before_script: - if [[ ! -e $HOME/nndc_hdf5/cross_sections.xml ]]; then - wget https://anl.box.com/shared/static/6pwyfjnufam0sb96kqwwrve6vdn8m7u4.xz -O - | tar -C $HOME -xvJ; + wget https://anl.box.com/shared/static/68b2yhu8e6mx1f6hnbzz9mxsgg42d9ls.xz -O - | tar -C $HOME -xvJ; fi - export OPENMC_CROSS_SECTIONS=$HOME/nndc_hdf5/cross_sections.xml diff --git a/data/fission_Q_data_endfb71.h5 b/data/fission_Q_data_endfb71.h5 new file mode 100644 index 0000000000..7cc5a86b52 Binary files /dev/null and b/data/fission_Q_data_endfb71.h5 differ diff --git a/data/get_nndc_data.py b/data/get_nndc_data.py index a0429fba5d..5bec3865ec 100755 --- a/data/get_nndc_data.py +++ b/data/get_nndc_data.py @@ -151,5 +151,6 @@ if not response or response.lower().startswith('y'): env = os.environ.copy() env['PYTHONPATH'] = os.path.join(cwd, '..') - subprocess.call(['../scripts/openmc-ace-to-hdf5', '-d', 'nndc_hdf5'] + subprocess.call(['../scripts/openmc-ace-to-hdf5', '-d', 'nndc_hdf5', + '--fission_energy_release', 'fission_Q_data_endfb71.h5'] + ace_files, env=env) diff --git a/docs/source/_images/openmc.png b/docs/source/_images/openmc.png deleted file mode 100644 index 9f5e97cd6e..0000000000 Binary files a/docs/source/_images/openmc.png and /dev/null differ diff --git a/docs/source/_images/openmc200px.png b/docs/source/_images/openmc200px.png deleted file mode 100644 index 3997c6baa0..0000000000 Binary files a/docs/source/_images/openmc200px.png and /dev/null differ diff --git a/docs/source/_images/openmc_logo.png b/docs/source/_images/openmc_logo.png new file mode 100644 index 0000000000..73d4765387 Binary files /dev/null and b/docs/source/_images/openmc_logo.png differ diff --git a/docs/source/_images/openmc_logo.svg b/docs/source/_images/openmc_logo.svg new file mode 100644 index 0000000000..a7352b79ab --- /dev/null +++ b/docs/source/_images/openmc_logo.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + diff --git a/docs/source/_static/theme_overrides.css b/docs/source/_static/theme_overrides.css index bee03f4150..dea941814d 100644 --- a/docs/source/_static/theme_overrides.css +++ b/docs/source/_static/theme_overrides.css @@ -16,3 +16,7 @@ .wy-table, .rst-content table.docutils, .rst-content table.field-list { margin-bottom: 0px; } + +.wy-side-nav-search { + background-color: #343131; +} diff --git a/docs/source/conf.py b/docs/source/conf.py index 4aa000f386..75e621bc17 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -28,6 +28,9 @@ MOCK_MODULES = ['numpy', 'numpy.polynomial', 'numpy.polynomial.polynomial', 'h5py', 'pandas', 'opencg'] sys.modules.update((mod_name, MagicMock()) for mod_name in MOCK_MODULES) +import numpy as np +np.polynomial.Polynomial = MagicMock + # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the @@ -126,7 +129,7 @@ if not on_rtd: html_theme = 'sphinx_rtd_theme' html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] -html_logo = '_images/openmc200px.png' +html_logo = '_images/openmc_logo.png' # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". diff --git a/docs/source/io_formats/fission_energy.rst b/docs/source/io_formats/fission_energy.rst new file mode 100644 index 0000000000..f80db4569a --- /dev/null +++ b/docs/source/io_formats/fission_energy.rst @@ -0,0 +1,53 @@ +.. _usersguide_fission_energy: + +================================== +Fission Energy Release File Format +================================== + +This file is a compact HDF5 representation of the ENDF MT=1, MF=458 data (see +ENDF-102_ for details). It gives the information needed to compute the energy +carried away from fission reactions by each reaction product (e.g. fragment +nuclei, neutrons) which depends on the incident neutron energy. OpenMC is +distributed with one of these files under +data/fission_Q_data_endfb71.h5. More files of this format can be created from +ENDF files with the +``openmc.data.write_compact_458_library`` function. They can be read with the +``openmc.data.FissionEnergyRelease.from_compact_hdf5`` class method. + +:Attributes: - **comment** (*char[]*) -- An optional text comment + - **component order** (*char[][]*) -- An array of strings + specifying the order each reaction product occurs in the data + arrays. The components use the 2-3 letter abbreviations + specified in ENDF-102 e.g. EFR for fission fragments and ENP for + prompt neutrons. + +**//** + Nuclides are named by concatenating their atomic symbol and mass number. For + example, 'U235' or 'Pu239'. Metastable nuclides are appended with an + '_m' and their metastable number. For example, 'Am242_m1' + +:Datasets: + - **data** (*double[][][]*) -- The energy release coefficients. The + first axis indexes the component type. The second axis specifies + values or uncertainties. The third axis indexes the polynomial + order. If the data uses the Sher-Beck format, then the last axis + will have a length of one and ENDF-102 should be consulted for + energy dependence. Otherwise, the data uses the Madland format + which is a polynomial of incident energy. + + For example, if 'EFR' is given first in the **component order** + attribute and the data uses the Madland format, then the energy + released in the form of fission fragments at an incident energy + :math:`E` is given by + + .. math:: + \text{data}[0, 0, 0] + \text{data}[0, 0, 1] \cdot E + + \text{data}[0, 0, 2] \cdot E^2 + \ldots + + And its uncertainty is + + .. math:: + \text{data}[0, 1, 0] + \text{data}[0, 1, 1] \cdot E + + \text{data}[0, 1, 2] \cdot E^2 + \ldots + +.. _ENDF-102: http://www.nndc.bnl.gov/endfdocs/ENDF-102-2012.pdf diff --git a/docs/source/io_formats/index.rst b/docs/source/io_formats/index.rst index acab7e8930..6de9f199c8 100644 --- a/docs/source/io_formats/index.rst +++ b/docs/source/io_formats/index.rst @@ -15,6 +15,7 @@ Data Files nuclear_data mgxs_library data_wmp + fission_energy ------------ Output Files @@ -30,3 +31,4 @@ Output Files particle_restart track voxel + volume diff --git a/docs/source/io_formats/nuclear_data.rst b/docs/source/io_formats/nuclear_data.rst index ba6a54eb1e..060e96c0c9 100644 --- a/docs/source/io_formats/nuclear_data.rst +++ b/docs/source/io_formats/nuclear_data.rst @@ -1,4 +1,4 @@ -.. _usersguide_nuclear_data: +.. _io_nuclear_data: ======================== Nuclear Data File Format @@ -16,29 +16,53 @@ Incident Neutron Data - **metastable** (*int*) -- Metastable state (0=ground, 1=first excited, etc.) - **atomic_weight_ratio** (*double*) -- Mass in units of neutron masses - - **temperature** (*double*) -- Temperature in MeV - **n_reaction** (*int*) -- Number of reactions :Datasets: - **energy** (*double[]*) -- Energy points at which cross sections are tabulated +**//kTs/** + +K is the temperature in Kelvin, rounded to the nearest integer, of the +temperature-dependent data set. For example, the data set corresponding to +300 Kelvin would be located at `300K`. + +:Datasets: + - **K** (*double*) -- kT values (in MeV) for each Temperature + TTT (in Kelvin) + **//reactions/reaction_/** :Attributes: - **mt** (*int*) -- ENDF MT reaction number - **label** (*char[]*) -- Name of the reaction - **Q_value** (*double*) -- Q value in MeV - - **threshold_idx** (*int*) -- Index on the energy grid that the - reaction threshold corresponds to - **center_of_mass** (*int*) -- Whether the reference frame for scattering is center-of-mass (1) or laboratory (0) - **n_product** (*int*) -- Number of reaction products -:Datasets: - **xs** (*double[]*) -- Cross section values tabulated against the nuclide energy grid +**//reactions/reaction_/K/** + +K is the temperature in Kelvin, rounded to the nearest integer, of the +temperature-dependent data set. For example, the data set corresponding to +300 Kelvin would be located at `300K`. + +:Datasets: + - **xs** (*double[]*) -- Cross section values tabulated against the + nuclide energy grid for temperature TTT (in Kelvin) + + :Attributes: + - **threshold_idx** (*int*) -- Index on the energy + grid that the reaction threshold corresponds to for + temperature TTT (in Kelvin) **//reactions/reaction_/product_/** Reaction product data is described in :ref:`product`. -**//urr** +**//urr/K/** + +K is the temperature in Kelvin, rounded to the nearest integer, of the +temperature-dependent data set. For example, the data set corresponding to +300 Kelvin would be located at `300K`. :Attributes: - **interpolation** (*int*) -- interpolation scheme - **inelastic** (*int*) -- flag indicating inelastic scattering @@ -55,6 +79,36 @@ Incident Neutron Data from fission. It is formatted as a reaction product, described in :ref:`product`. +**//fission_energy_release/** + +:Datasets: - **fragments** (:ref:`polynomial <1d_polynomial>`) -- Energy + released in the form of fragments as a function of incident + neutron energy. + - **prompt_neutrons** (:ref:`polynomial <1d_polynomial>` or + :ref:`tabulated <1d_tabulated>`) -- Energy released in the form of + prompt neutrons as a function of incident neutron energy. + - **delayed_neutrons** (:ref:`polynomial <1d_polynomial>`) -- Energy + released in the form of delayed neutrons as a function of incident + neutron energy. + - **prompt_photons** (:ref:`polynomial <1d_polynomial>`) -- Energy + released in the form of prompt photons as a function of incident + neutron energy. + - **delayed_photons** (:ref:`polynomial <1d_polynomial>`) -- Energy + released in the form of delayed photons as a function of incident + neutron energy. + - **betas** (:ref:`polynomial <1d_polynomial>`) -- Energy + released in the form of betas as a function of incident + neutron energy. + - **neutrinos** (:ref:`polynomial <1d_polynomial>`) -- Energy + released in the form of neutrinos as a function of incident + neutron energy. + - **q_prompt** (:ref:`polynomial <1d_polynomial>` or + :ref:`tabulated <1d_tabulated>`) -- The prompt fission Q-value + (fragments + prompt neutrons + prompt photons - incident energy) + - **q_recoverable** (:ref:`polynomial <1d_polynomial>` or + :ref:`tabulated <1d_tabulated>`) -- The recoverable fission Q-value + (Q_prompt + delayed neutrons + delayed photons + betas) + ------------------------------- Thermal Neutron Scattering Data ------------------------------- @@ -62,32 +116,48 @@ Thermal Neutron Scattering Data **//** :Attributes: - **atomic_weight_ratio** (*double*) -- Mass in units of neutron masses - - **temperature** (*double*) -- Temperature in MeV - - **zaids** (*int[]*) -- ZAID identifiers for which the thermal + - **nuclides** (*char[][]*) -- Names of nuclides for which the thermal scattering data applies to - -**//elastic/** - -:Datasets: - **xs** (:ref:`tabulated <1d_tabulated>`) -- Thermal inelastic - scattering cross section - - **mu_out** (*double[][]*) -- Distribution of outgoing energies - and angles for coherent elastic scattering - -**//inelastic/** - -:Attributes: - **secondary_mode** (*char[]*) -- Indicates how the inelastic outgoing angle-energy distributions are represented ('equal', 'skewed', or 'continuous'). +**//kTs/** + +K is the temperature in Kelvin, rounded to the nearest integer, of the +temperature-dependent data set. For example, the data set corresponding to +300 Kelvin would be located at `300K`. + +:Datasets: + - **K** (*double*) -- kT values (in MeV) for each Temperature + TTT (in Kelvin) + +**//elastic/K/** + +K is the temperature in Kelvin, rounded to the nearest integer, of the +temperature-dependent data set. For example, the data set corresponding to +300 Kelvin would be located at `300K`. + :Datasets: - **xs** (:ref:`tabulated <1d_tabulated>`) -- Thermal inelastic - scattering cross section + scattering cross section for temperature TTT (in Kelvin) + - **mu_out** (*double[][]*) -- Distribution of outgoing energies + and angles for coherent elastic scattering for temperature TTT + (in Kelvin) + +**//inelastic/K/** + +K is the temperature in Kelvin, rounded to the nearest integer, of the +temperature-dependent data set. For example, the data set corresponding to +300 Kelvin would be located at `300K`. + +:Datasets: - **xs** (:ref:`tabulated <1d_tabulated>`) -- Thermal inelastic + scattering cross section for temperature TTT (in Kelvin) - **energy_out** (*double[][]*) -- Distribution of outgoing - energies for each incoming energy. Only present if secondary mode - is not continuous. + energies for each incoming energy for temperature TTT (in Kelvin). + Only present if secondary mode is not continuous. - **mu_out** (*double[][][]*) -- Distribution of scattering cosines - for each pair of incoming and outgoing energies. Only present if - secondary mode is not continuous. + for each pair of incoming and outgoing energies. for temperature + TTT (in Kelvin). Only present if secondary mode is not continuous. If the secondary mode is continuous, the outgoing energy-angle distribution is given as a :ref:`correlated angle-energy distribution @@ -142,17 +212,19 @@ Tabulated :Object type: Dataset :Datatype: *double[2][]* :Description: x-values are listed first followed by corresponding y-values -:Attributes: - **type** (*char[]*) -- 'tabulated' +:Attributes: - **type** (*char[]*) -- 'Tabulated1D' - **breakpoints** (*int[]*) -- Region breakpoints - **interpolation** (*int[]*) -- Region interpolation codes +.. _1d_polynomial: + Polynomial ---------- :Object type: Dataset :Datatype: *double[]* :Description: Polynomial coefficients listed in order of increasing power -:Attributes: - **type** (*char[]*) -- 'polynomial' +:Attributes: - **type** (*char[]*) -- 'Polynomial' Coherent elastic scattering --------------------------- diff --git a/docs/source/io_formats/volume.rst b/docs/source/io_formats/volume.rst new file mode 100644 index 0000000000..10b7a3b732 --- /dev/null +++ b/docs/source/io_formats/volume.rst @@ -0,0 +1,22 @@ +.. _io_volume: + +================== +Volume File Format +================== + +**/** + +:Attributes: - **samples** (*int*) -- Number of samples + - **lower_left** (*double[3]*) -- Lower-left coordinates of + bounding box + - **upper_right** (*double[3]*) -- Upper-right coordinates of + bounding box + +**/cell_/** + +:Datasets: - **volume** (*double[2]*) -- Calculated volume and its uncertainty + in cubic centimeters + - **nuclides** (*char[][]*) -- Names of nuclides identified in the + cell + - **atoms** (*double[][2]*) -- Total number of atoms of each nuclide + and its uncertainty diff --git a/docs/source/methods/cross_sections.rst b/docs/source/methods/cross_sections.rst index 4ed7775367..a4d0f7d248 100644 --- a/docs/source/methods/cross_sections.rst +++ b/docs/source/methods/cross_sections.rst @@ -53,12 +53,12 @@ speed up the calculation. Logarithmic Mapping +++++++++++++++++++ -To speed up energy grid searches, OpenMC uses logarithmic mapping technique -[Brown]_ to limit the range of energies that must be searched for each -nuclide. The entire energy range is divided up into equal-lethargy segments, and -the bounding energies of each segment are mapped to bounding indices on each of -the nuclide energy grids. By default, OpenMC uses 8000 equal-lethargy segments -as recommended by Brown. +To speed up energy grid searches, OpenMC uses a `logarithmic mapping technique`_ +to limit the range of energies that must be searched for each nuclide. The +entire energy range is divided up into equal-lethargy segments, and the bounding +energies of each segment are mapped to bounding indices on each of the nuclide +energy grids. By default, OpenMC uses 8000 equal-lethargy segments as +recommended by Brown. Other Methods +++++++++++++ @@ -74,9 +74,9 @@ offers support for an experimental data format called windowed multipole (WMP). This data format requires less memory than pointwise cross sections, and it allows on-the-fly Doppler broadening to arbitrary temperature. -The multipole method was introduced by [Hwang]_ and the faster windowed -multipole method by [Josey]_. In the multipole format, cross section resonances -are represented by poles, :math:`p_j`, and residues, :math:`r_j`, in the complex +The multipole method was introduced by Hwang_ and the faster windowed multipole +method by Josey_. In the multipole format, cross section resonances are +represented by poles, :math:`p_j`, and residues, :math:`r_j`, in the complex plane. The 0K cross sections in the resolved resonance region can be computed by summing up a contribution from each pole: @@ -232,21 +232,10 @@ sections. This allows flexibility for the model to use highly anisotropic scattering information in the water while the fuel can be simulated with linear or even isotropic scattering. -.. only:: html - - .. rubric:: References - -.. [Brown] Forrest B. Brown, "New Hash-based Energy Lookup Algorithm for Monte - Carlo codes," LA-UR-14-24530, Los Alamos National Laboratory (2014). - -.. [Hwang] R. N. Hwang, "A Rigorous Pole Representation of Multilevel Cross - Sections and Its Practical Application," *Nucl. Sci. Eng.*, **96**, - 192-209 (1987). - -.. [Josey] Colin Josey, Pablo Ducru, Benoit Forget, and Kord Smith, "Windowed - Multipole for Cross Section Doppler Broadening," *J. Comp. Phys*, - **307**, 715-727 (2016). http://dx.doi.org/10.1016/j.jcp.2015.08.013 - +.. _logarithmic mapping technique: + https://laws.lanl.gov/vhosts/mcnp.lanl.gov/pdf_files/la-ur-14-24530.pdf +.. _Hwang: http://www.ans.org/pubs/journals/nse/a_16381 +.. _Josey: http://dx.doi.org/10.1016/j.jcp.2015.08.013 .. _MCNP: http://mcnp.lanl.gov .. _Serpent: http://montecarlo.vtt.fi .. _NJOY: http://t2.lanl.gov/codes.shtml diff --git a/docs/source/pythonapi/examples/images/mdgxs.png b/docs/source/pythonapi/examples/images/mdgxs.png new file mode 100644 index 0000000000..b93d0f0423 Binary files /dev/null and b/docs/source/pythonapi/examples/images/mdgxs.png differ diff --git a/docs/source/pythonapi/examples/mdgxs-part-i.ipynb b/docs/source/pythonapi/examples/mdgxs-part-i.ipynb new file mode 100644 index 0000000000..5d65a0a202 --- /dev/null +++ b/docs/source/pythonapi/examples/mdgxs-part-i.ipynb @@ -0,0 +1,1379 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This IPython Notebook introduces the use of the `openmc.mgxs` module to calculate multi-energy-group and multi-delayed-group cross sections for an infinite homogeneous medium. In particular, this Notebook introduces the the following features:\n", + "\n", + "* Creation of multi-delayed-group cross sections for an **infinite homogeneous medium**\n", + "* Calculation of delayed neutron precursor concentrations\n", + "\n", + "**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-Delayed-Group Cross Sections (MDGXS)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Many Monte Carlo 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*. Furthermore, kinetics calculations typically separate out parameters that involve delayed neutrons into prompt and delayed components and further subdivide delayed components by delayed groups. An example is the energy spectrum for prompt and delayed neutrons for U-235 and Pu-239 computed for a light water reactor spectrum." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\nfmI+3IqsCwAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "execution_count": 1, + "metadata": { + "image/png": { + "width": 350 + } + }, + "output_type": "execute_result" + } + ], + "source": [ + "from IPython.display import Image\n", + "Image(filename='images/mdgxs.png', width=350)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "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 and different delayed group models (e.g. 6, 7, or 8 delayed group models) 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-energy-group and multi-delayed-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", + "The delayed neutrons created from fissions are created from > 30 delayed neutron precursors. Modeling each of the delayed neutron precursors is possible, but this approach has not recieved much attention due to large uncertainties in certain precursors. Therefore, the delayed neutrons are often combined into \"delayed groups\" that have a set time constant, $\\lambda_d$. Some cross section libraries use the same group time constants for all nuclides (e.g. JEFF 3.1) while other libraries use different time constants for all nuclides (e.g. ENDF/B-VII.1). Multi-delayed-group cross sections can either be created with the entire delayed group set, a subset of delayed groups, or integrated over all delayed groups.\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, an arbitrary unstructured mesh or 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 MDGXS\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. For instance, the delayed-nu-fission multi-energy-group and multi-delayed-group cross section, $\\nu_d \\sigma_{f,x,k,g}$, can be computed as follows:\n", + "\n", + "$$\\nu_d \\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} \\nu_d \\sigma_{f,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 only the delayed-nu-fission and delayed neutron fraction reaction type at the moment. 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, universe, or mesh) define the bounds of integration for both numerator and denominator." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Multi-Group Prompt and Delayed 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", + "Computing the cumulative energy spectrum of emitted neutrons, $\\chi_{n}(\\mathbf{r},E)$, has been presented in the `mgxs-part-i.ipynb` notebook. Here, we will present the energy spectrum of prompt and delayed emission neutrons, $\\chi_{n,p}(\\mathbf{r},E)$ and $\\chi_{n,d}(\\mathbf{r},E)$, respectively. 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,p}(\\mathbf{r},E)$ and $\\nu_{n,d}(\\mathbf{r},E)$ for prompt and delayed neutrons, respectively. The multi-group fission spectrum $\\chi_{n,k,g,d}$ is then the probability of fission neutrons emitted into energy group $g$ and delayed group $d$. There are not prompt groups, so inserting $p$ in place of $d$ just denotes all prompt neutrons. \n", + "\n", + "Similar to before, spatial homogenization and energy condensation are used to find the multi-energy-group and multi-delayed-group fission spectrum $\\chi_{n,k,g,d}$ as follows:\n", + "\n", + "$$\\chi_{n,k,g',d} = \\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,d}(\\mathbf{r},E'\\rightarrow E'')\\nu_{n,d}(\\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,d}(\\mathbf{r},E')\\sigma_{n,f}(\\mathbf{r},E')\\Phi(\\mathbf{r},E')}$$\n", + "\n", + "The fission production-weighted multi-energy-group and multi-delayed-group fission spectrum for delayed neutrons is computed using OpenMC tallies with energy in, energy out, and delayed group filters. Alternatively, the delayed group filter can be omitted to compute the fission spectrum integrated over all delayed groups.\n", + "\n", + "This concludes our brief overview on the methodology to compute multi-energy-group and multi-delayed-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" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "import openmc\n", + "import openmc.mgxs as mgxs" + ] + }, + { + "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": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Instantiate some Nuclides\n", + "h1 = openmc.Nuclide('H1')\n", + "o16 = openmc.Nuclide('O16')\n", + "u235 = openmc.Nuclide('U235')\n", + "u238 = openmc.Nuclide('U238')\n", + "pu239 = openmc.Nuclide('Pu239')\n", + "zr90 = openmc.Nuclide('Zr90')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the nuclides we defined, we will now create a material for the homogeneous medium." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Instantiate a Material and register the Nuclides\n", + "inf_medium = openmc.Material(name='moderator')\n", + "inf_medium.set_density('g/cc', 5.)\n", + "inf_medium.add_nuclide(h1, 0.03)\n", + "inf_medium.add_nuclide(o16, 0.015)\n", + "inf_medium.add_nuclide(u235 , 0.0001)\n", + "inf_medium.add_nuclide(u238 , 0.007)\n", + "inf_medium.add_nuclide(pu239, 0.00003)\n", + "inf_medium.add_nuclide(zr90, 0.002)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With our material, we can now create a `Materials` object that can be exported to an actual XML file." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Instantiate a Materials collection and export to XML\n", + "materials_file = openmc.Materials([inf_medium])\n", + "materials_file.default_xs = '71c'\n", + "materials_file.export_to_xml()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's move on to the geometry. This problem will be a simple square cell with reflective boundary conditions to simulate an infinite homogeneous medium. The first step is to create the outer bounding surfaces of the problem." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Instantiate boundary Planes\n", + "min_x = openmc.XPlane(boundary_type='reflective', x0=-0.63)\n", + "max_x = openmc.XPlane(boundary_type='reflective', x0=0.63)\n", + "min_y = openmc.YPlane(boundary_type='reflective', y0=-0.63)\n", + "max_y = openmc.YPlane(boundary_type='reflective', y0=0.63)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the surfaces defined, we can now create a cell that is defined by intersections of half-spaces created by the surfaces." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Instantiate a Cell\n", + "cell = openmc.Cell(cell_id=1, name='cell')\n", + "\n", + "# Register bounding Surfaces with the Cell\n", + "cell.region = +min_x & -max_x & +min_y & -max_y\n", + "\n", + "# Fill the Cell with the Material\n", + "cell.fill = inf_medium" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "OpenMC requires that there is a \"root\" universe. Let us create a root universe and add our square cell to it." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Instantiate Universe\n", + "root_universe = openmc.Universe(universe_id=0, name='root universe')\n", + "root_universe.add_cell(cell)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now must create a geometry that is assigned a root universe and export it to XML." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Create Geometry and set root Universe\n", + "openmc_geometry = openmc.Geometry()\n", + "openmc_geometry.root_universe = root_universe\n", + "\n", + "# Export to \"geometry.xml\"\n", + "openmc_geometry.export_to_xml()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we must define simulation parameters. In this case, we will use 10 inactive batches and 40 active batches each with 2500 particles." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# OpenMC simulation parameters\n", + "batches = 50\n", + "inactive = 10\n", + "particles = 5000\n", + "\n", + "# Instantiate a Settings object\n", + "settings_file = openmc.Settings()\n", + "settings_file.batches = batches\n", + "settings_file.inactive = inactive\n", + "settings_file.particles = particles\n", + "settings_file.output = {'tallies': True}\n", + "\n", + "# Create an initial uniform spatial source distribution over fissionable zones\n", + "bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", + "uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True)\n", + "settings_file.source = openmc.source.Source(space=uniform_dist)\n", + "\n", + "# Export to \"settings.xml\"\n", + "settings_file.export_to_xml()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we are ready to generate multi-group cross sections! First, let's define a 100-energy-group structure and 1-energy-group structure using the built-in `EnergyGroups` class. We will also create a 6-delayed-group list." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Instantiate a 100-group EnergyGroups object\n", + "energy_groups = mgxs.EnergyGroups()\n", + "energy_groups.group_edges = np.logspace(-9,1.3,101)\n", + "\n", + "# Instantiate a 1-group EnergyGroups object\n", + "one_group = mgxs.EnergyGroups()\n", + "one_group.group_edges = np.array([energy_groups.group_edges[0], energy_groups.group_edges[-1]])\n", + "\n", + "delayed_groups = list(range(1,7))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can now use the `EnergyGroups` object and delayed group list, 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", + "* `NuTransportXS`\n", + "* `AbsorptionXS`\n", + "* `CaptureXS`\n", + "* `FissionXS`\n", + "* `NuFissionXS`\n", + "* `KappaFissionXS`\n", + "* `ScatterXS`\n", + "* `NuScatterXS`\n", + "* `ScatterMatrixXS`\n", + "* `NuScatterMatrixXS`\n", + "* `Chi`\n", + "* `ChiPrompt`\n", + "* `InverseVelocity`\n", + "* `PromptNuFissionXS`\n", + "\n", + "A separate abstract `MDGXS` class is used for cross-sections and parameters that involve delayed neutrons. The subclasses of `MDGXS` include:\n", + "\n", + "* `DelayedNuFissionXS`\n", + "* `ChiDelayed`\n", + "* `Beta`\n", + "\n", + "These classes provide us with an interface to generate the tally inputs as well as perform post-processing of OpenMC's tally data to compute the respective multi-group cross sections. In this case, let's create the multi-group chi-prompt, chi-delayed, and prompt-nu-fission cross sections with our 100-energy-group structure and multi-group delayed-nu-fission and beta cross sections with our 100-energy-group and 6-delayed-group structures. " + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Instantiate a few different sections\n", + "chi_prompt = mgxs.ChiPrompt(domain=cell, groups=energy_groups, by_nuclide=True)\n", + "prompt_nu_fission = mgxs.PromptNuFissionXS(domain=cell, groups=energy_groups, by_nuclide=True)\n", + "chi_delayed = mgxs.ChiDelayed(domain=cell, energy_groups=energy_groups, by_nuclide=True)\n", + "delayed_nu_fission = mgxs.DelayedNuFissionXS(domain=cell, energy_groups=energy_groups, delayed_groups=delayed_groups, by_nuclide=True)\n", + "beta = mgxs.Beta(domain=cell, energy_groups=energy_groups, delayed_groups=delayed_groups, by_nuclide=True)\n", + "\n", + "chi_prompt.nuclides = ['U235', 'Pu239']\n", + "prompt_nu_fission.nuclides = ['U235', 'Pu239']\n", + "chi_delayed.nuclides = ['U235', 'Pu239']\n", + "delayed_nu_fission.nuclides = ['U235', 'Pu239']\n", + "beta.nuclides = ['U235', 'Pu239']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Each multi-group cross section object stores its tallies in a Python dictionary called `tallies`. We can inspect the tallies in the dictionary for our `Beta` object as follows. " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "OrderedDict([('nu-fission', Tally\n", + " \tID =\t10000\n", + " \tName =\t\n", + " \tFilters =\t\n", + " \t\tcell\t[1]\n", + " \t\tenergy\t[ 1.00000000e-09 1.26765187e-09 1.60694125e-09 2.03704208e-09\n", + " 2.58226019e-09 3.27340695e-09 4.14954043e-09 5.26017266e-09\n", + " 6.66806769e-09 8.45278845e-09 1.07151931e-08 1.35831345e-08\n", + " 1.72186857e-08 2.18272991e-08 2.76694165e-08 3.50751874e-08\n", + " 4.44631267e-08 5.63637656e-08 7.14496326e-08 9.05732601e-08\n", + " 1.14815362e-07 1.45545908e-07 1.84501542e-07 2.33883724e-07\n", + " 2.96483139e-07 3.75837404e-07 4.76430987e-07 6.03948629e-07\n", + " 7.65596607e-07 9.70509967e-07 1.23026877e-06 1.55955250e-06\n", + " 1.97696964e-06 2.50610925e-06 3.17687407e-06 4.02717034e-06\n", + " 5.10505000e-06 6.47142616e-06 8.20351544e-06 1.03992017e-05\n", + " 1.31825674e-05 1.67109061e-05 2.11836114e-05 2.68534445e-05\n", + " 3.40408190e-05 4.31519077e-05 5.47015963e-05 6.93425806e-05\n", + " 8.79022517e-05 1.11429453e-04 1.41253754e-04 1.79060585e-04\n", + " 2.26986485e-04 2.87739841e-04 3.64753947e-04 4.62381021e-04\n", + " 5.86138165e-04 7.43019138e-04 9.41889597e-04 1.19398810e-03\n", + " 1.51356125e-03 1.91866874e-03 2.43220401e-03 3.08318795e-03\n", + " 3.90840896e-03 4.95450191e-03 6.28058359e-03 7.96159350e-03\n", + " 1.00925289e-02 1.27938130e-02 1.62181010e-02 2.05589060e-02\n", + " 2.60615355e-02 3.30369541e-02 4.18793565e-02 5.30884444e-02\n", + " 6.72976656e-02 8.53100114e-02 1.08143395e-01 1.37088177e-01\n", + " 1.73780083e-01 2.20292646e-01 2.79254384e-01 3.53997341e-01\n", + " 4.48745390e-01 5.68852931e-01 7.21107479e-01 9.14113241e-01\n", + " 1.15877736e+00 1.46892628e+00 1.86208714e+00 2.36047823e+00\n", + " 2.99226464e+00 3.79314985e+00 4.80839348e+00 6.09536897e+00\n", + " 7.72680585e+00 9.79489985e+00 1.24165231e+01 1.57398286e+01\n", + " 1.99526231e+01]\n", + " \tNuclides =\tU235 Pu239 \n", + " \tScores =\t['nu-fission']\n", + " \tEstimator =\ttracklength), ('delayed-nu-fission', Tally\n", + " \tID =\t10001\n", + " \tName =\t\n", + " \tFilters =\t\n", + " \t\tcell\t[1]\n", + " \t\tdelayedgroup\t[1 2 3 4 5 6]\n", + " \t\tenergy\t[ 1.00000000e-09 1.26765187e-09 1.60694125e-09 2.03704208e-09\n", + " 2.58226019e-09 3.27340695e-09 4.14954043e-09 5.26017266e-09\n", + " 6.66806769e-09 8.45278845e-09 1.07151931e-08 1.35831345e-08\n", + " 1.72186857e-08 2.18272991e-08 2.76694165e-08 3.50751874e-08\n", + " 4.44631267e-08 5.63637656e-08 7.14496326e-08 9.05732601e-08\n", + " 1.14815362e-07 1.45545908e-07 1.84501542e-07 2.33883724e-07\n", + " 2.96483139e-07 3.75837404e-07 4.76430987e-07 6.03948629e-07\n", + " 7.65596607e-07 9.70509967e-07 1.23026877e-06 1.55955250e-06\n", + " 1.97696964e-06 2.50610925e-06 3.17687407e-06 4.02717034e-06\n", + " 5.10505000e-06 6.47142616e-06 8.20351544e-06 1.03992017e-05\n", + " 1.31825674e-05 1.67109061e-05 2.11836114e-05 2.68534445e-05\n", + " 3.40408190e-05 4.31519077e-05 5.47015963e-05 6.93425806e-05\n", + " 8.79022517e-05 1.11429453e-04 1.41253754e-04 1.79060585e-04\n", + " 2.26986485e-04 2.87739841e-04 3.64753947e-04 4.62381021e-04\n", + " 5.86138165e-04 7.43019138e-04 9.41889597e-04 1.19398810e-03\n", + " 1.51356125e-03 1.91866874e-03 2.43220401e-03 3.08318795e-03\n", + " 3.90840896e-03 4.95450191e-03 6.28058359e-03 7.96159350e-03\n", + " 1.00925289e-02 1.27938130e-02 1.62181010e-02 2.05589060e-02\n", + " 2.60615355e-02 3.30369541e-02 4.18793565e-02 5.30884444e-02\n", + " 6.72976656e-02 8.53100114e-02 1.08143395e-01 1.37088177e-01\n", + " 1.73780083e-01 2.20292646e-01 2.79254384e-01 3.53997341e-01\n", + " 4.48745390e-01 5.68852931e-01 7.21107479e-01 9.14113241e-01\n", + " 1.15877736e+00 1.46892628e+00 1.86208714e+00 2.36047823e+00\n", + " 2.99226464e+00 3.79314985e+00 4.80839348e+00 6.09536897e+00\n", + " 7.72680585e+00 9.79489985e+00 1.24165231e+01 1.57398286e+01\n", + " 1.99526231e+01]\n", + " \tNuclides =\tU235 Pu239 \n", + " \tScores =\t['delayed-nu-fission']\n", + " \tEstimator =\ttracklength)])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "beta.tallies" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `Beta` object includes tracklength tallies for the 'nu-fission' and 'delayed-nu-fission' scores in the 100-energy-group and 6-delayed-group structure in cell 1. Now that each `MGXS` and `MDGXS` object contains the tallies that it needs, we must add these tallies to a `Tallies` object to generate the \"tallies.xml\" input file for OpenMC." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Instantiate an empty Tallies object\n", + "tallies_file = openmc.Tallies()\n", + "\n", + "# Add chi-prompt tallies to the tallies file\n", + "tallies_file += chi_prompt.tallies.values()\n", + "\n", + "# Add prompt-nu-fission tallies to the tallies file\n", + "tallies_file += prompt_nu_fission.tallies.values()\n", + "\n", + "# Add chi-delayed tallies to the tallies file\n", + "tallies_file += chi_delayed.tallies.values()\n", + "\n", + "# Add delayed-nu-fission tallies to the tallies file\n", + "tallies_file += delayed_nu_fission.tallies.values()\n", + "\n", + "# Add beta tallies to the tallies file\n", + "tallies_file += beta.tallies.values()\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": 15, + "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-2016 Massachusetts Institute of Technology\n", + " License: http://openmc.readthedocs.io/en/latest/license.html\n", + " Version: 0.8.0\n", + " Git SHA1: c21ceb0aea4abc243b84106576c4f9010f608d0b\n", + " Date/Time: 2016-08-11 08:23:44\n", + " MPI Processes: 1\n", + "\n", + " ===========================================================================\n", + " ========================> INITIALIZATION <=========================\n", + " ===========================================================================\n", + "\n", + " Reading settings XML file...\n", + " Reading geometry XML file...\n", + " Reading cross sections XML file...\n", + " Reading materials XML file...\n", + " Reading H1.71c from /Users/sam/git/openmc-sam/data/nndc_hdf5/H1_71c.h5\n", + " Reading O16.71c from /Users/sam/git/openmc-sam/data/nndc_hdf5/O16_71c.h5\n", + " Reading U235.71c from /Users/sam/git/openmc-sam/data/nndc_hdf5/U235_71c.h5\n", + " Reading U238.71c from /Users/sam/git/openmc-sam/data/nndc_hdf5/U238_71c.h5\n", + " Reading Pu239.71c from /Users/sam/git/openmc-sam/data/nndc_hdf5/Pu239_71c.h5\n", + " Reading Zr90.71c from /Users/sam/git/openmc-sam/data/nndc_hdf5/Zr90_71c.h5\n", + " Maximum neutron transport energy: 20.0000 MeV for H1.71c\n", + " Reading tallies XML file...\n", + " Building neighboring cells lists for each surface...\n", + " Initializing source particles...\n", + "\n", + " ===========================================================================\n", + " ====================> K EIGENVALUE SIMULATION <====================\n", + " ===========================================================================\n", + "\n", + " Bat./Gen. k Average k \n", + " ========= ======== ==================== \n", + " 1/1 1.21670 \n", + " 2/1 1.24155 \n", + " 3/1 1.21924 \n", + " 4/1 1.22486 \n", + " 5/1 1.21719 \n", + " 6/1 1.24330 \n", + " 7/1 1.22322 \n", + " 8/1 1.24133 \n", + " 9/1 1.21840 \n", + " 10/1 1.25141 \n", + " 11/1 1.21217 \n", + " 12/1 1.25625 1.23421 +/- 0.02204\n", + " 13/1 1.22056 1.22966 +/- 0.01351\n", + " 14/1 1.21757 1.22664 +/- 0.01002\n", + " 15/1 1.24571 1.23045 +/- 0.00865\n", + " 16/1 1.26489 1.23619 +/- 0.00910\n", + " 17/1 1.22323 1.23434 +/- 0.00791\n", + " 18/1 1.26108 1.23768 +/- 0.00762\n", + " 19/1 1.23145 1.23699 +/- 0.00676\n", + " 20/1 1.23548 1.23684 +/- 0.00605\n", + " 21/1 1.20446 1.23390 +/- 0.00621\n", + " 22/1 1.20533 1.23152 +/- 0.00615\n", + " 23/1 1.22520 1.23103 +/- 0.00568\n", + " 24/1 1.18367 1.22765 +/- 0.00625\n", + " 25/1 1.23614 1.22821 +/- 0.00585\n", + " 26/1 1.23746 1.22879 +/- 0.00550\n", + " 27/1 1.23626 1.22923 +/- 0.00518\n", + " 28/1 1.21334 1.22835 +/- 0.00497\n", + " 29/1 1.25169 1.22958 +/- 0.00486\n", + " 30/1 1.25579 1.23089 +/- 0.00479\n", + " 31/1 1.23828 1.23124 +/- 0.00457\n", + " 32/1 1.26911 1.23296 +/- 0.00468\n", + " 33/1 1.20090 1.23157 +/- 0.00469\n", + " 34/1 1.28606 1.23384 +/- 0.00503\n", + " 35/1 1.23129 1.23374 +/- 0.00483\n", + " 36/1 1.22535 1.23341 +/- 0.00465\n", + " 37/1 1.20367 1.23231 +/- 0.00461\n", + " 38/1 1.22886 1.23219 +/- 0.00444\n", + " 39/1 1.24056 1.23248 +/- 0.00429\n", + " 40/1 1.25038 1.23307 +/- 0.00419\n", + " 41/1 1.21504 1.23249 +/- 0.00410\n", + " 42/1 1.20762 1.23171 +/- 0.00404\n", + " 43/1 1.20597 1.23093 +/- 0.00399\n", + " 44/1 1.24424 1.23133 +/- 0.00389\n", + " 45/1 1.24767 1.23179 +/- 0.00381\n", + " 46/1 1.22998 1.23174 +/- 0.00370\n", + " 47/1 1.26352 1.23260 +/- 0.00370\n", + " 48/1 1.23155 1.23257 +/- 0.00360\n", + " 49/1 1.22059 1.23227 +/- 0.00352\n", + " 50/1 1.24724 1.23264 +/- 0.00345\n", + " Creating state point statepoint.50.h5...\n", + "\n", + " ===========================================================================\n", + " ======================> SIMULATION FINISHED <======================\n", + " ===========================================================================\n", + "\n", + "\n", + " =======================> TIMING STATISTICS <=======================\n", + "\n", + " Total time for initialization = 6.1600E-01 seconds\n", + " Reading cross sections = 3.6500E-01 seconds\n", + " Total time in simulation = 8.3297E+01 seconds\n", + " Time in transport only = 8.3256E+01 seconds\n", + " Time in inactive batches = 4.4890E+00 seconds\n", + " Time in active batches = 7.8808E+01 seconds\n", + " Time synchronizing fission bank = 1.6000E-02 seconds\n", + " Sampling source sites = 1.1000E-02 seconds\n", + " SEND/RECV source sites = 3.0000E-03 seconds\n", + " Time accumulating tallies = 5.0000E-03 seconds\n", + " Total time for finalization = 8.0000E-02 seconds\n", + " Total time elapsed = 8.4019E+01 seconds\n", + " Calculation Rate (inactive) = 11138.3 neutrons/second\n", + " Calculation Rate (active) = 2537.81 neutrons/second\n", + "\n", + " ============================> RESULTS <============================\n", + "\n", + " k-effective (Collision) = 1.23260 +/- 0.00309\n", + " k-effective (Track-length) = 1.23264 +/- 0.00345\n", + " k-effective (Absorption) = 1.23111 +/- 0.00186\n", + " Combined k-effective = 1.23135 +/- 0.00185\n", + " Leakage Fraction = 0.00000 +/- 0.00000\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Run OpenMC\n", + "openmc.run()" + ] + }, + { + "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": 16, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Load the last statepoint file\n", + "sp = openmc.StatePoint('statepoint.50.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. By default, a `Summary` object is automatically linked when a `StatePoint` is loaded. This is necessary for the `openmc.mgxs` module to properly process the tally data." + ] + }, + { + "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": [ + "# Load the tallies from the statepoint into each MGXS object\n", + "chi_prompt.load_from_statepoint(sp)\n", + "prompt_nu_fission.load_from_statepoint(sp)\n", + "chi_delayed.load_from_statepoint(sp)\n", + "delayed_nu_fission.load_from_statepoint(sp)\n", + "beta.load_from_statepoint(sp)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Voila! Our multi-group cross sections are now ready to rock 'n roll!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Extracting and Storing MGXS Data" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's first inspect our delayed-nu-fission section by printing it to the screen after condensing the cross section down to one group." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 5.14239169e-06, 1.16429778e-06],\n", + " [ 2.65434434e-05, 7.58244504e-06],\n", + " [ 2.53406770e-05, 5.73814391e-06],\n", + " [ 5.68158884e-05, 1.04761254e-05],\n", + " [ 2.32937121e-05, 5.45676114e-06],\n", + " [ 9.75765501e-06, 1.65156185e-06]])" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "delayed_nu_fission.get_condensed_xs(one_group).get_xs()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "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." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + "
celldelayedgroupgroup innuclidemeanstd. dev.
198111U2359.533842e-114.789050e-11
199111Pu2391.606499e-118.071081e-12
398121U2351.224131e-096.149449e-10
399121Pu2392.602518e-101.307590e-10
598131U2359.033000e-104.537601e-10
599131Pu2391.522295e-107.648264e-11
798141U2351.749138e-098.786432e-10
799141Pu2392.400317e-101.205943e-10
998151U2352.724017e-101.368376e-10
999151Pu2394.749191e-112.386080e-11
\n", + "
" + ], + "text/plain": [ + " cell delayedgroup group in nuclide mean std. dev.\n", + "198 1 1 1 U235 9.533842e-11 4.789050e-11\n", + "199 1 1 1 Pu239 1.606499e-11 8.071081e-12\n", + "398 1 2 1 U235 1.224131e-09 6.149449e-10\n", + "399 1 2 1 Pu239 2.602518e-10 1.307590e-10\n", + "598 1 3 1 U235 9.033000e-10 4.537601e-10\n", + "599 1 3 1 Pu239 1.522295e-10 7.648264e-11\n", + "798 1 4 1 U235 1.749138e-09 8.786432e-10\n", + "799 1 4 1 Pu239 2.400317e-10 1.205943e-10\n", + "998 1 5 1 U235 2.724017e-10 1.368376e-10\n", + "999 1 5 1 Pu239 4.749191e-11 2.386080e-11" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = delayed_nu_fission.get_pandas_dataframe()\n", + "df.head(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Each multi-group cross section object can be easily exported to a variety of file formats, including CSV, Excel, and LaTeX for storage or data processing." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "beta.export_xs_data(filename='beta', format='excel')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following code snippet shows how to export the chi-prompt and chi-delayed `MGXS` to the same HDF5 binary data store." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "chi_prompt.build_hdf5_store(filename='mdgxs', append=True)\n", + "chi_delayed.build_hdf5_store(filename='mdgxs', append=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Using Tally Arithmetic to Compute the Delayed Neutron Precursor Concentrations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "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 compute the delayed neutron precursor concentrations using the `Beta` and `DelayedNuFissionXS` objects. The delayed neutron precursor concentrations are modeled using the following equations:\n", + "\n", + "$$\\frac{\\partial}{\\partial t} C_{k,d} (t) = \\int_{0}^{\\infty}\\mathrm{d}E'\\int_{\\mathbf{r} \\in V_{k}}\\mathrm{d}\\mathbf{r} \\beta_{k,d} (t) \\nu_d \\sigma_{f,x}(\\mathbf{r},E',t)\\Phi(\\mathbf{r},E',t) - \\lambda_{d} C_{k,d} (t) $$\n", + "\n", + "$$C_{k,d} (t=0) = \\frac{1}{\\lambda_{d}} \\int_{0}^{\\infty}\\mathrm{d}E'\\int_{\\mathbf{r} \\in V_{k}}\\mathrm{d}\\mathbf{r} \\beta_{k,d} (t=0) \\nu_d \\sigma_{f,x}(\\mathbf{r},E',t=0)\\Phi(\\mathbf{r},E',t=0) $$" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "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", + " \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", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
celldelayedgroupnuclidescoremeanstd. dev.
011(U235 / total)(((delayed-nu-fission / nu-fission) * (delayed...9.391610e-082.566220e-10
111(Pu239 / total)(((delayed-nu-fission / nu-fission) * (delayed...7.611347e-092.278727e-11
212(U235 / total)(((delayed-nu-fission / nu-fission) * (delayed...1.102594e-063.012794e-09
312(Pu239 / total)(((delayed-nu-fission / nu-fission) * (delayed...1.422470e-074.258670e-10
413(U235 / total)(((delayed-nu-fission / nu-fission) * (delayed...6.685886e-071.826892e-09
513(Pu239 / total)(((delayed-nu-fission / nu-fission) * (delayed...5.419872e-081.622631e-10
614(U235 / total)(((delayed-nu-fission / nu-fission) * (delayed...4.886781e-071.335293e-09
714(Pu239 / total)(((delayed-nu-fission / nu-fission) * (delayed...2.626687e-087.863920e-11
815(U235 / total)(((delayed-nu-fission / nu-fission) * (delayed...1.469529e-084.015430e-11
915(Pu239 / total)(((delayed-nu-fission / nu-fission) * (delayed...1.274953e-093.817026e-12
1016(U235 / total)(((delayed-nu-fission / nu-fission) * (delayed...1.185934e-093.240517e-12
1116(Pu239 / total)(((delayed-nu-fission / nu-fission) * (delayed...5.371343e-111.608102e-13
\n", + "
" + ], + "text/plain": [ + " cell delayedgroup nuclide \\\n", + "0 1 1 (U235 / total) \n", + "1 1 1 (Pu239 / total) \n", + "2 1 2 (U235 / total) \n", + "3 1 2 (Pu239 / total) \n", + "4 1 3 (U235 / total) \n", + "5 1 3 (Pu239 / total) \n", + "6 1 4 (U235 / total) \n", + "7 1 4 (Pu239 / total) \n", + "8 1 5 (U235 / total) \n", + "9 1 5 (Pu239 / total) \n", + "10 1 6 (U235 / total) \n", + "11 1 6 (Pu239 / total) \n", + "\n", + " score mean std. dev. \n", + "0 (((delayed-nu-fission / nu-fission) * (delayed... 9.39e-08 2.57e-10 \n", + "1 (((delayed-nu-fission / nu-fission) * (delayed... 7.61e-09 2.28e-11 \n", + "2 (((delayed-nu-fission / nu-fission) * (delayed... 1.10e-06 3.01e-09 \n", + "3 (((delayed-nu-fission / nu-fission) * (delayed... 1.42e-07 4.26e-10 \n", + "4 (((delayed-nu-fission / nu-fission) * (delayed... 6.69e-07 1.83e-09 \n", + "5 (((delayed-nu-fission / nu-fission) * (delayed... 5.42e-08 1.62e-10 \n", + "6 (((delayed-nu-fission / nu-fission) * (delayed... 4.89e-07 1.34e-09 \n", + "7 (((delayed-nu-fission / nu-fission) * (delayed... 2.63e-08 7.86e-11 \n", + "8 (((delayed-nu-fission / nu-fission) * (delayed... 1.47e-08 4.02e-11 \n", + "9 (((delayed-nu-fission / nu-fission) * (delayed... 1.27e-09 3.82e-12 \n", + "10 (((delayed-nu-fission / nu-fission) * (delayed... 1.19e-09 3.24e-12 \n", + "11 (((delayed-nu-fission / nu-fission) * (delayed... 5.37e-11 1.61e-13 " + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Set the time constants for the delayed precursors (in seconds^-1) using some ficticious time constant data.\n", + "precursor_halflife = np.array([55.6, 24.5, 16.3, 2.37, 0.424, 0.195])\n", + "precursor_lambda = -np.log(0.5) / precursor_halflife\n", + "\n", + "# Create a tally object with only the delayed group filter for the time constants\n", + "beta_filters = [f for f in beta.xs_tally.filters if f.type != 'delayedgroup']\n", + "lambda_tally = beta.get_condensed_xs(one_group).xs_tally.summation(nuclides=beta.xs_tally.nuclides)\n", + "for f in beta_filters:\n", + " lambda_tally = lambda_tally.summation(filter_type=f.type, remove_filter=True) * 0. + 1.\n", + "\n", + "# Set the mean of the lambda tally and reshape to account for nuclides and scores\n", + "lambda_tally._mean = precursor_lambda\n", + "lambda_tally._mean.shape = lambda_tally.std_dev.shape\n", + "\n", + "# Set a total nuclide and lambda score\n", + "lambda_tally.nuclides = [openmc.Nuclide(name='total')]\n", + "lambda_tally.scores = ['lambda']\n", + "\n", + "# Use tally arithmetic to compute the precursor concentrations\n", + "precursor_conc = beta.get_condensed_xs(one_group).xs_tally.summation(filter_type='energy', remove_filter=True) * \\\n", + " delayed_nu_fission.get_condensed_xs(one_group).xs_tally.summation(filter_type='energy', remove_filter=True) / lambda_tally\n", + " \n", + "# The difference is a derived tally which can generate Pandas DataFrames for inspection\n", + "precursor_conc.get_pandas_dataframe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can plot the delayed neutron fractions for each nuclide." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Beta (U-235) : 0.006504 +/- 0.000007\n", + "Beta (Pu-239): 0.002245 +/- 0.000002\n" + ] + }, + { + "data": { + "text/plain": [ + "(0, 7)" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nA9YuP+yww7jqqqtYtGgRCxYsWHtHyra09eRV78RSKQWXv6PNbdPivpL6kJVwzo+I5WnxdcCHI2JP\nslLND1sdsVkHGTMGli+vulmntnx5dh22zr333svixYt59dVXueaaa+jVq1eL25911llrb1d8+eWX\nr7fum9/8JtOmTePXv/51xX179uzJyJEjueyyy3j55ZcB+K//+i/22msv9txzTw488ECOOeYYNtts\nM7bZZpvaXGAF9a4KmwsMLnm9AzC/bJs5wI7AfEmbAP0i4i1Jc9PyDfaVtClZUrk5Iu5t2iAi/lmy\n/S+Aic0FNqbk09/Y2EhjY2PuizKrh6InlSad6TraU3VVsxgqlE569+69XolhwYIFa59ff/31XH/9\n9RvsM3r0aB588EGeeOIJ+vTp0+I5V65cySuvvMLuu+9Or169uPrqq7n66qsB+PnPf87ee++dq+pt\n8uTJTJ48uep2G8hzN7C2PoBNgP8GhgA9gReAXcu2ORu4Lj0fRdauArAb8Hzab1g6TtONyW4ia6Qv\nP992Jc8vAG5rJq7qt1Az28iyO7RnjyLqqPg789/z0KFD45FHHtlg+YknnhgnnnhirFy5MqZMmRID\nBw6Mk08+udnjfO9734vhw4fHggULNlj39NNPx5NPPhnvv/9+rFixIi6//PLo27dvvPHGGxERMW/e\nvJg/f35ERDz11FOx4447xsMPP9xi3M29p+S8g+TGuA3wocDfgFnARWnZWOBz6fnmwB1p/dPA0JJ9\nL04JZTowIi07AFidktTzwFTg0FiXcF5K6/4fsG0zMbX4ppp1BCeWtp63875hw4YNq5hYXnnlldhv\nv/2ioaEhPve5z8X555/fYmKRFL169YqGhoa1tyu+7LLLIiLi8ccfjz322CP69u0bAwYMiMbGxnjy\nySfX7vvEE0/E0KFDo3fv3rHLLrvE7bffXjXu9iYW35rYrJMorZko4sezo+L3rYlrz7cmNjOzTqVq\n472k/YGTgE8C2wMrgL8AvwVuiYgldY3QzMwKpcWqMEm/I+uJdS/wZ+AfQC9gZ+Ag4AiyRvT76h9q\n7bgqzDojV4W19byuCqu19laFVUssAyNiUZUAqm7T2TixWGfkxNLW8zqx1Fpd21iaEoak3mneLyTt\nLOlISZuVbmNmZgb5G++fAHpJGgQ8AnwR+FW9gjIzs+LKO/JeEfGupNOAayLiCknP1zMwM7M8hgwZ\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "energy_filter = [f for f in beta.xs_tally.filters if f.type == 'energy']\n", + "beta_integrated = beta.get_condensed_xs(one_group).xs_tally.summation(filter_type='energy', remove_filter=True)\n", + "beta_u235 = beta_integrated.get_values(nuclides=['U235'])\n", + "beta_pu239 = beta_integrated.get_values(nuclides=['Pu239'])\n", + "\n", + "# Reshape the betas\n", + "beta_u235.shape = (beta_u235.shape[0])\n", + "beta_pu239.shape = (beta_pu239.shape[0])\n", + "\n", + "df = beta_integrated.summation(filter_type='delayedgroup', remove_filter=True).get_pandas_dataframe()\n", + "print('Beta (U-235) : {:.6f} +/- {:.6f}'.format(df[df['nuclide'] == 'U235']['mean'][0], df[df['nuclide'] == 'U235']['std. dev.'][0]))\n", + "print('Beta (Pu-239): {:.6f} +/- {:.6f}'.format(df[df['nuclide'] == 'Pu239']['mean'][1], df[df['nuclide'] == 'Pu239']['std. dev.'][1]))\n", + "\n", + "beta_u235 = np.append(beta_u235[0], beta_u235)\n", + "beta_pu239 = np.append(beta_pu239[0], beta_pu239)\n", + "\n", + "# Create a step plot for the MGXS\n", + "plt.plot(np.arange(0.5, 7.5, 1), beta_u235, drawstyle='steps', color='b', linewidth=3)\n", + "plt.plot(np.arange(0.5, 7.5, 1), beta_pu239, drawstyle='steps', color='g', linewidth=3)\n", + "\n", + "plt.title('Delayed Neutron Fraction (beta)')\n", + "plt.xlabel('Delayed Group')\n", + "plt.ylabel('Beta(fraction total neutrons)')\n", + "plt.legend(['U-235', 'Pu-239'])\n", + "plt.xlim([0,7])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also plot the energy spectrum for fission emission of prompt and delayed neutrons." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(0.001, 20)" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\nvPBCdR+hwWCIQFYrhnSlsrKS4cOHM2rUKI4++uigtO+//54dO3bw8MMP06VLl8DxIUOGsHz5cjZv\n3szjjz/OHXfcwT//+c+w5T/33HOMHj2a4447jkMPPRTLsoJ6OH//+9+5//77KSgooHHjxtx6663M\nnDkzbFkXX3wxRxxxBACXXnopnTt35sMPPwTg8ssv55lnDob6nj59OpdffnngGtdeey2nnXYaIsKI\nESNo0KAB77//Pu+//z6VlZWMGTOGevXqcfHFF3P66afX4EmmLyW9SwJbTbB8VmAzGEIx5qpJol69\nelRUVAQdq6iooH79+gCcf/75vPPOO4gIjz32GMOG2WEsVJXhw4fToEEDHnroobBlH3rooVxzzTUc\ndthhrFixgpYtW3LssccG0s8880zGjh3L888/z5AhQ6qcv2HDBk477WCI7cLCwsD3zZs3s2fPHrp1\n6xY4duDAgYhDY0899RT3339/YKL7hx9+YMuWLQB0796dvLw8Fi5cSKtWrfj6668ZOHAgYLs0eeqp\npwL3qKpUVFSwYYMd56lt27ZB13HLmA3UxETVTenC0lory5B5ZLVisKzqDQVVN380OnToQFlZGccc\nc9Aj+TfffBPYnzdvXtjzrrzySrZs2cK8efOoV69exPL379/Pnj17WL9+PS1btqySHs1Ms3Xr1kHm\npuXl5YE5hpYtW9KoUSO+/PJLWrduHfUe16xZw9VXX82CBQs488wzATjllFOCrjty5EimT59Oq1at\nuOSSS8jNzQWgffv2jB8/nttuu61KuYsWLWL9+vVVrtWpU6eo8hgMBm+YoaQkMWTIECZOnMj69etR\nVd58803mzJnDJZdcEvGca6+9lhUrVvDKK68EKlA/b775Jp999hkHDhxg586d3HzzzTRv3pzjjjsO\ngFdeeYXt27cD8OGHHzJlyhQuvPDCsNcZPHgwTz75JMuXL2fPnj1B8wciwlVXXcVNN93E5s2bAVi/\nfj2vv/56lXJ++OEHcnJyaNmyJQcOHOCJJ57giy++CMozfPhwXnrpJZ555pnAMBLAVVddxaOPPhoY\ndvrhhx+YN28eP/zwA2eeeSaHHHIIDz30EPv37+fFF18M5DMYDPFjFEOSmDBhAmeddRY9e/akefPm\n3HrrrcyYMYPjjz8+bP41a9bw+OOP89lnn3HEEUcE1iL4x/a3b9/OsGHDaNq0KZ07d2b16tXMnz8/\n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\nalQgII2f77//nh9//DHQGvczZMgQrrnmGo444gjef/99Lr74Ypo1a8aQIUPCXkNEuPPOO6lfvz5n\nn302/fviYcdKAAAgAElEQVT359lnn2X8+PEADBo0iB49egBQv359nn32WZYuXUqjRo0oLCxk3Lhx\nTJ8+PaAY3OE4hwwZwt13301JSQn169fn5z//Obm5uaxatYqTT7Y9rfTv35+f/exnANx1110UFBSw\nfv162rZtC1S/x5XOhBvWSfc4C4nGDFXFh9cIbk2Bbc73ggTJklXUq1ePioqKoGMVFRXUr18fgPPP\nP5933nkHEeGxxx4LOJNTVYYPH06DBg0C8ZlDOfTQQ7nmmms47LDDWLFiBS1btuTYY48NpJ955pmM\nHTuW559/PqJiaNasGQ0bNgzsFxYWsmHDhsC+O6Tnli1bqKioCFJEhYWFQSE9jzjiiCD5AFq2bBl0\nbPfug61kd/mNGzemefPmbNiwIaAYsp10r/dMxZ3aeFEMk4BPRWQBIMDZQPxR61OASN3Qmu5Xhw4d\nOlBWVsYxxxwTOPbNN98E9ufNC28dfOWVV7JlyxbmzZtHvXr1Ipa/f/9+9uzZw/r164MqYD+xXEH4\nex7+SnzNmjWcdNJJQef7admyJfXr16e8vDyggMrLy+OqxN0hQ3fv3s22bduySinEaw2U6b6SYmFc\nZsRHVMUg9r//30AP7HkGAX6vqt9GO88QmyFDhjBx4kROPPFE2rRpw1tvvcWcOXMCQzXhuPbaa1mx\nYgVvvvkmubm5QWlvvvkmLVu25OSTT2b37t3cfvvtNG/enOOOOw6AV155hbPPPpumTZvy4YcfMmXK\nFO65556I11JVSkpKuOuuu3j//feZO3dulTkLPzk5OQwePJjx48czbdo0tm7dyv3338/vfve7qOVH\nY968ebz33nucdtpp/PGPf6RHjx60adMGgFatWrF69WqOPPLIqGWkM/FWxqWu+Ds1qRcTvbLaVNyp\nTVTFoKoqIi+rajfglTqSKSuYMGECJSUl9OzZk+3bt3PUUUcxY8YMjj/++LD516xZw+OPP07Dhg0D\nwzLuYabt27dz4403sn79eg499FBOP/105s+fH1Ags2bN4oorrmDfvn20a9eO2267jeHDh0eUr3Xr\n1jRr1ow2bdrQuHFjHnvsscDEczhz0SlTpnDjjTdy5JFHcuihh3L11VcH5hfCEVpG6P5ll12GZVks\n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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "chi_d_u235 = np.squeeze(chi_delayed.get_xs(nuclides=['U235'], order_groups='decreasing'))\n", + "chi_d_pu239 = np.squeeze(chi_delayed.get_xs(nuclides=['Pu239'], order_groups='decreasing'))\n", + "chi_p_u235 = np.squeeze(chi_prompt.get_xs(nuclides=['U235'], order_groups='decreasing'))\n", + "chi_p_pu239 = np.squeeze(chi_prompt.get_xs(nuclides=['Pu239'], order_groups='decreasing'))\n", + "\n", + "chi_d_u235 = np.append(chi_d_u235 , chi_d_u235[0])\n", + "chi_d_pu239 = np.append(chi_d_pu239, chi_d_pu239[0])\n", + "chi_p_u235 = np.append(chi_p_u235 , chi_p_u235[0])\n", + "chi_p_pu239 = np.append(chi_p_pu239, chi_p_pu239[0])\n", + "\n", + "# Create a step plot for the MGXS\n", + "plt.semilogx(energy_groups.group_edges, chi_d_u235 , drawstyle='steps', color='b', linestyle='--', linewidth=3)\n", + "plt.semilogx(energy_groups.group_edges, chi_d_pu239, drawstyle='steps', color='g', linestyle='--', linewidth=3)\n", + "plt.semilogx(energy_groups.group_edges, chi_p_u235 , drawstyle='steps', color='b', linestyle=':', linewidth=3)\n", + "plt.semilogx(energy_groups.group_edges, chi_p_pu239, drawstyle='steps', color='g', linestyle=':', linewidth=3)\n", + "\n", + "plt.title('Energy Spectrum for Fission Neutrons')\n", + "plt.xlabel('Energy (MeV)')\n", + "plt.ylabel('Fraction on emitted neutrons')\n", + "plt.legend(['U-235 delayed', 'Pu-239 delayed', 'U-235 prompt', 'Pu-239 prompt'],loc=2)\n", + "plt.xlim(0.001,20)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/docs/source/pythonapi/examples/mdgxs-part-i.rst b/docs/source/pythonapi/examples/mdgxs-part-i.rst new file mode 100644 index 0000000000..953dcf4700 --- /dev/null +++ b/docs/source/pythonapi/examples/mdgxs-part-i.rst @@ -0,0 +1,13 @@ +.. _notebook_mdgxs_part_i: + +========================== +MDGXS Part I: Introduction +========================== + +.. only:: html + + .. notebook:: mdgxs-part-i.ipynb + +.. only:: latex + + IPython notebooks must be viewed in the online HTML documentation. diff --git a/docs/source/pythonapi/examples/mdgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mdgxs-part-ii.ipynb new file mode 100644 index 0000000000..ee652bc1f4 --- /dev/null +++ b/docs/source/pythonapi/examples/mdgxs-part-ii.ipynb @@ -0,0 +1,1328 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "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-energy-group and multi-delayed-group cross sections for a **fuel assembly**\n", + "* Automated creation, manipulation and storage of `MGXS` with **`openmc.mgxs.Library`**\n", + "* Steady-state pin-by-pin **delayed neutron fractions (beta)** for each delayed group.\n", + "* Generation of surface currents on the interfaces and surfaces of a Mesh." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Generate Input Files" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/__init__.py:1357: 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", + "\n", + "from IPython.display import Image\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "import openmc\n", + "import openmc.mgxs\n", + "import openmoc\n", + "import openmoc.process\n", + "from openmoc.opencg_compatible import get_openmoc_geometry\n", + "from openmoc.materialize import load_openmc_mgxs_lib\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": false + }, + "outputs": [], + "source": [ + "# Instantiate some Nuclides\n", + "h1 = openmc.Nuclide('H1')\n", + "b10 = openmc.Nuclide('B10')\n", + "o16 = openmc.Nuclide('O16')\n", + "u235 = openmc.Nuclide('U235')\n", + "u238 = openmc.Nuclide('U238')\n", + "zr90 = openmc.Nuclide('Zr90')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the nuclides we defined, we will now create three materials for the fuel, water, and cladding of the fuel pins." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "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", + "water.add_nuclide(b10, 8.0042e-6)\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 three materials, we can now create a `Materials` object that can be exported to an actual XML file." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Instantiate a Materials object\n", + "materials_file = openmc.Materials((fuel, water, 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. This problem will be a square array of fuel pins and control rod guide tubes for which we can use OpenMC's lattice/universe feature. The basic universe will have three regions for the fuel, the clad, and the surrounding coolant. The first step is to create the bounding surfaces for fuel and clad, as well as the outer bounding surfaces of the problem." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "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=-10.71, boundary_type='reflective')\n", + "max_x = openmc.XPlane(x0=+10.71, boundary_type='reflective')\n", + "min_y = openmc.YPlane(y0=-10.71, boundary_type='reflective')\n", + "max_y = openmc.YPlane(y0=+10.71, boundary_type='reflective')\n", + "min_z = openmc.ZPlane(z0=-10., boundary_type='reflective')\n", + "max_z = openmc.ZPlane(z0=+10., boundary_type='reflective')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the surfaces defined, we can now construct a fuel pin cell from cells that are defined by intersections of half-spaces created by the surfaces." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "# Create a Universe to encapsulate a fuel pin\n", + "fuel_pin_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", + "fuel_pin_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", + "fuel_pin_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", + "fuel_pin_universe.add_cell(moderator_cell)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Likewise, we can construct a control rod guide tube with the same surfaces." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Create a Universe to encapsulate a control rod guide tube\n", + "guide_tube_universe = openmc.Universe(name='Guide Tube')\n", + "\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", + "guide_tube_universe.add_cell(guide_tube_cell)\n", + "\n", + "# Create a clad Cell\n", + "clad_cell = openmc.Cell(name='Guide Clad')\n", + "clad_cell.fill = zircaloy\n", + "clad_cell.region = +fuel_outer_radius & -clad_outer_radius\n", + "guide_tube_universe.add_cell(clad_cell)\n", + "\n", + "# Create a moderator Cell\n", + "moderator_cell = openmc.Cell(name='Guide Tube Moderator')\n", + "moderator_cell.fill = water\n", + "moderator_cell.region = +clad_outer_radius\n", + "guide_tube_universe.add_cell(moderator_cell)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using the pin cell universe, we can construct a 17x17 rectangular lattice with a 1.26 cm pitch." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Create fuel assembly Lattice\n", + "assembly = openmc.RectLattice(name='1.6% Fuel Assembly')\n", + "assembly.pitch = (1.26, 1.26)\n", + "assembly.lower_left = [-1.26 * 17. / 2.0] * 2" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we create a NumPy array of fuel pin and guide tube universes for the lattice." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Create array indices for guide tube locations in lattice\n", + "template_x = np.array([5, 8, 11, 3, 13, 2, 5, 8, 11, 14, 2, 5, 8,\n", + " 11, 14, 2, 5, 8, 11, 14, 3, 13, 5, 8, 11])\n", + "template_y = np.array([2, 2, 2, 3, 3, 5, 5, 5, 5, 5, 8, 8, 8, 8,\n", + " 8, 11, 11, 11, 11, 11, 13, 13, 14, 14, 14])\n", + "\n", + "# Initialize an empty 17x17 array of the lattice universes\n", + "universes = np.empty((17, 17), dtype=openmc.Universe)\n", + "\n", + "# Fill the array with the fuel pin and guide tube universes\n", + "universes[:,:] = fuel_pin_universe\n", + "universes[template_x, template_y] = guide_tube_universe\n", + "\n", + "# Store the array of universes in the lattice\n", + "assembly.universes = universes" + ] + }, + { + "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": 10, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Create root Cell\n", + "root_cell = openmc.Cell(name='root cell')\n", + "root_cell.fill = assembly\n", + "\n", + "# Add boundary planes\n", + "root_cell.region = +min_x & -max_x & +min_y & -max_y & +min_z & -max_z\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 and export it to XML." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Create Geometry and set root Universe\n", + "geometry = openmc.Geometry()\n", + "geometry.root_universe = root_universe" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Export to \"geometry.xml\"\n", + "geometry.export_to_xml()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the geometry and materials finished, we now just need to define simulation parameters. In this case, we will use 10 inactive batches and 40 active batches each with 2500 particles." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# OpenMC simulation parameters\n", + "batches = 50\n", + "inactive = 10\n", + "particles = 2500\n", + "\n", + "# Instantiate a Settings object\n", + "settings_file = openmc.Settings()\n", + "settings_file.batches = batches\n", + "settings_file.inactive = inactive\n", + "settings_file.particles = particles\n", + "settings_file.output = {'tallies': False}\n", + "\n", + "# Create an initial uniform spatial source distribution over fissionable zones\n", + "bounds = [-10.71, -10.71, -10, 10.71, 10.71, 10.]\n", + "uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True)\n", + "settings_file.source = openmc.source.Source(space=uniform_dist)\n", + "\n", + "# Export to \"settings.xml\"\n", + "settings_file.export_to_xml()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let us also create a `Plots` file that we can use to verify that our fuel assembly geometry was created successfully." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Instantiate a Plot\n", + "plot = openmc.Plot(plot_id=1)\n", + "plot.filename = 'materials-xy'\n", + "plot.origin = [0, 0, 0]\n", + "plot.pixels = [250, 250]\n", + "plot.width = [-10.71*2, -10.71*2]\n", + "plot.color = 'mat'\n", + "\n", + "# Instantiate a Plots object, add Plot, and export to \"plots.xml\"\n", + "plot_file = openmc.Plots([plot])\n", + "plot_file.export_to_xml()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the plots.xml file, we can now generate and view the plot. OpenMC outputs plots in .ppm format, which can be converted into a compressed format like .png with the convert utility." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Run openmc in plotting mode\n", + "openmc.plot_geometry(output=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Convert OpenMC's funky ppm to png\n", + "!convert materials-xy.ppm materials-xy.png\n", + "\n", + "# Display the materials plot inline\n", + "Image(filename='materials-xy.png')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "As we can see from the plot, we have a nice array of fuel and guide tube pin cells with fuel, cladding, and water!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create an MGXS Library" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we are ready to generate multi-group cross sections! First, let's define 20-energy-group, 1-energy-group, and 6-delayed-group structures." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Instantiate a 20-group EnergyGroups object\n", + "energy_groups = openmc.mgxs.EnergyGroups()\n", + "energy_groups.group_edges = np.logspace(-9,1.3,21)\n", + "\n", + "# Instantiate a 1-group EnergyGroups object\n", + "one_group = openmc.mgxs.EnergyGroups()\n", + "one_group.group_edges = np.array([energy_groups.group_edges[0], energy_groups.group_edges[-1]])\n", + "\n", + "# Instantiate a 6-delayed-group list\n", + "delayed_groups = list(range(1,7))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we will instantiate an `openmc.mgxs.Library` for the energy and delayed groups with our the fuel assembly geometry." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Instantiate a tally mesh \n", + "mesh = openmc.Mesh(mesh_id=1)\n", + "mesh.type = 'regular'\n", + "mesh.dimension = [17, 17, 1]\n", + "mesh.lower_left = [-10.71, -10.71, -10000.]\n", + "mesh.width = [1.26, 1.26, 20000.]\n", + "\n", + "# Initialize an 20-energy-group and 6-delayed-group MGXS Library\n", + "mgxs_lib = openmc.mgxs.Library(geometry)\n", + "mgxs_lib.energy_groups = energy_groups\n", + "mgxs_lib.delayed_groups = delayed_groups\n", + "\n", + "# Specify multi-group cross section types to compute\n", + "mgxs_lib.mgxs_types = ['total', 'transport', 'nu-scatter matrix', 'kappa-fission', 'inverse-velocity', 'chi-prompt',\n", + " 'prompt-nu-fission', 'chi-delayed', 'delayed-nu-fission', 'beta']\n", + "\n", + "# Specify a \"mesh\" domain type for the cross section tally filters\n", + "mgxs_lib.domain_type = 'mesh'\n", + "\n", + "# Specify the mesh domain over which to compute multi-group cross sections\n", + "mgxs_lib.domains = [mesh]\n", + "\n", + "# Construct all tallies needed for the multi-group cross section library\n", + "mgxs_lib.build_library()\n", + "\n", + "# Create a \"tallies.xml\" file for the MGXS Library\n", + "tallies_file = openmc.Tallies()\n", + "mgxs_lib.add_to_tallies_file(tallies_file, merge=True)\n", + "\n", + "# Instantiate a current tally\n", + "mesh_filter = openmc.Filter()\n", + "mesh_filter.mesh = mesh\n", + "current_tally = openmc.Tally(name='current tally')\n", + "current_tally.scores = ['current']\n", + "current_tally.filters = [mesh_filter]\n", + "\n", + "# Add current tally to the tallies file\n", + "tallies_file.append(current_tally)\n", + "\n", + "# Export to \"tallies.xml\"\n", + "tallies_file.export_to_xml()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we can run OpenMC to generate the cross sections." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "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-2016 Massachusetts Institute of Technology\n", + " License: http://openmc.readthedocs.io/en/latest/license.html\n", + " Version: 0.8.0\n", + " Git SHA1: 2636be6779b4c821dc6fb7a49de391fecb471358\n", + " Date/Time: 2016-08-16 16:45:50\n", + " MPI Processes: 1\n", + "\n", + " ===========================================================================\n", + " ========================> INITIALIZATION <=========================\n", + " ===========================================================================\n", + "\n", + " Reading settings XML file...\n", + " Reading geometry XML file...\n", + " Reading cross sections XML file...\n", + " Reading materials XML file...\n", + " Reading U235.71c from /Users/sam/git/openmc-sam/data/nndc_hdf5/U235_71c.h5\n", + " Reading U238.71c from /Users/sam/git/openmc-sam/data/nndc_hdf5/U238_71c.h5\n", + " Reading O16.71c from /Users/sam/git/openmc-sam/data/nndc_hdf5/O16_71c.h5\n", + " Reading H1.71c from /Users/sam/git/openmc-sam/data/nndc_hdf5/H1_71c.h5\n", + " Reading B10.71c from /Users/sam/git/openmc-sam/data/nndc_hdf5/B10_71c.h5\n", + " Reading Zr90.71c from /Users/sam/git/openmc-sam/data/nndc_hdf5/Zr90_71c.h5\n", + " Maximum neutron transport energy: 20.0000 MeV for U235.71c\n", + " Reading tallies XML file...\n", + " WARNING: A delayedgroup filter was used on a total nuclide tally. Cross section\n", + " libraries are not guaranteed to have the same delayed group structure\n", + " across all isotopes. In particular, ENDF/B-VII.1 does not have a\n", + " consistent delayed group structure across all isotopes while the JEFF\n", + " 3.1.1 library has the same delayed group structure across all\n", + " isotopes. Use with caution!\n", + " WARNING: A delayedgroup filter was used on a total nuclide tally. Cross section\n", + " libraries are not guaranteed to have the same delayed group structure\n", + " across all isotopes. In particular, ENDF/B-VII.1 does not have a\n", + " consistent delayed group structure across all isotopes while the JEFF\n", + " 3.1.1 library has the same delayed group structure across all\n", + " isotopes. Use with caution!\n", + " WARNING: A delayedgroup filter was used on a total nuclide tally. Cross section\n", + " libraries are not guaranteed to have the same delayed group structure\n", + " across all isotopes. In particular, ENDF/B-VII.1 does not have a\n", + " consistent delayed group structure across all isotopes while the JEFF\n", + " 3.1.1 library has the same delayed group structure across all\n", + " isotopes. Use with caution!\n", + " Building neighboring cells lists for each surface...\n", + " Initializing source particles...\n", + "\n", + " ===========================================================================\n", + " ====================> K EIGENVALUE SIMULATION <====================\n", + " ===========================================================================\n", + "\n", + " Bat./Gen. k Average k \n", + " ========= ======== ==================== \n", + " 1/1 1.03852 \n", + " 2/1 0.99743 \n", + " 3/1 1.02987 \n", + " 4/1 1.04472 \n", + " 5/1 1.02183 \n", + " 6/1 1.05263 \n", + " 7/1 0.99048 \n", + " 8/1 1.02753 \n", + " 9/1 1.03159 \n", + " 10/1 1.04005 \n", + " 11/1 1.05278 \n", + " 12/1 1.02555 1.03917 +/- 0.01362\n", + " 13/1 0.99400 1.02411 +/- 0.01699\n", + " 14/1 1.03508 1.02685 +/- 0.01232\n", + " 15/1 1.00055 1.02159 +/- 0.01090\n", + " 16/1 1.01334 1.02022 +/- 0.00900\n", + " 17/1 0.99822 1.01707 +/- 0.00823\n", + " 18/1 1.01767 1.01715 +/- 0.00713\n", + " 19/1 1.05052 1.02086 +/- 0.00730\n", + " 20/1 1.03133 1.02190 +/- 0.00661\n", + " 21/1 1.04112 1.02365 +/- 0.00623\n", + " 22/1 1.04175 1.02516 +/- 0.00588\n", + " 23/1 1.01909 1.02469 +/- 0.00543\n", + " 24/1 1.07119 1.02801 +/- 0.00603\n", + " 25/1 0.97414 1.02442 +/- 0.00666\n", + " 26/1 1.04709 1.02584 +/- 0.00639\n", + " 27/1 1.05872 1.02777 +/- 0.00631\n", + " 28/1 1.03930 1.02841 +/- 0.00598\n", + " 29/1 1.01488 1.02770 +/- 0.00570\n", + " 30/1 1.04513 1.02857 +/- 0.00548\n", + " 31/1 0.99538 1.02699 +/- 0.00545\n", + " 32/1 1.00106 1.02581 +/- 0.00532\n", + " 33/1 0.99389 1.02442 +/- 0.00527\n", + " 34/1 0.99938 1.02338 +/- 0.00516\n", + " 35/1 1.02161 1.02331 +/- 0.00495\n", + " 36/1 1.04084 1.02398 +/- 0.00480\n", + " 37/1 0.98801 1.02265 +/- 0.00481\n", + " 38/1 1.01348 1.02232 +/- 0.00464\n", + " 39/1 1.06693 1.02386 +/- 0.00474\n", + " 40/1 1.07729 1.02564 +/- 0.00491\n", + " 41/1 1.03191 1.02585 +/- 0.00475\n", + " 42/1 1.05209 1.02667 +/- 0.00468\n", + " 43/1 1.02997 1.02677 +/- 0.00453\n", + " 44/1 1.07288 1.02812 +/- 0.00460\n", + " 45/1 1.01268 1.02768 +/- 0.00449\n", + " 46/1 1.03759 1.02796 +/- 0.00437\n", + " 47/1 1.02620 1.02791 +/- 0.00425\n", + " 48/1 1.02509 1.02783 +/- 0.00414\n", + " 49/1 1.01043 1.02739 +/- 0.00406\n", + " 50/1 1.01457 1.02707 +/- 0.00397\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.3700E-01 seconds\n", + " Reading cross sections = 2.3700E-01 seconds\n", + " Total time in simulation = 6.7426E+01 seconds\n", + " Time in transport only = 6.7172E+01 seconds\n", + " Time in inactive batches = 4.8900E+00 seconds\n", + " Time in active batches = 6.2536E+01 seconds\n", + " Time synchronizing fission bank = 7.0000E-03 seconds\n", + " Sampling source sites = 7.0000E-03 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Time accumulating tallies = 2.0100E-01 seconds\n", + " Total time for finalization = 6.0000E-03 seconds\n", + " Total time elapsed = 6.7893E+01 seconds\n", + " Calculation Rate (inactive) = 5112.47 neutrons/second\n", + " Calculation Rate (active) = 1599.08 neutrons/second\n", + "\n", + " ============================> RESULTS <============================\n", + "\n", + " k-effective (Collision) = 1.02489 +/- 0.00308\n", + " k-effective (Track-length) = 1.02707 +/- 0.00397\n", + " k-effective (Absorption) = 1.02637 +/- 0.00325\n", + " Combined k-effective = 1.02581 +/- 0.00264\n", + " Leakage Fraction = 0.00000 +/- 0.00000\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Run OpenMC\n", + "openmc.run()" + ] + }, + { + "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": 20, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Load the last statepoint file\n", + "sp = openmc.StatePoint('statepoint.50.h5')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The statepoint is now ready to be analyzed by the `Library`. We simply have to load the tallies from the statepoint into the `Library` and our `MGXS` objects will compute the cross sections for us under-the-hood." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Initialize MGXS Library with OpenMC statepoint data\n", + "mgxs_lib.load_from_statepoint(sp)\n", + "\n", + "# Extrack the current tally separately\n", + "current_tally = sp.get_tally(name='current tally')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Using Tally Arithmetic to Compute the Delayed Neutron Precursor Concentrations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "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 compute the delayed neutron precursor concentrations using the `Beta` and `DelayedNuFissionXS` objects. The delayed neutron precursor concentrations are modeled using the following equations:\n", + "\n", + "$$\\frac{\\partial}{\\partial t} C_{k,d} (t) = \\int_{0}^{\\infty}\\mathrm{d}E'\\int_{\\mathbf{r} \\in V_{k}}\\mathrm{d}\\mathbf{r} \\beta_{k,d} (t) \\nu_d \\sigma_{f,x}(\\mathbf{r},E',t)\\Phi(\\mathbf{r},E',t) - \\lambda_{d} C_{k,d} (t) $$\n", + "\n", + "$$C_{k,d} (t=0) = \\frac{1}{\\lambda_{d}} \\int_{0}^{\\infty}\\mathrm{d}E'\\int_{\\mathbf{r} \\in V_{k}}\\mathrm{d}\\mathbf{r} \\beta_{k,d} (t=0) \\nu_d \\sigma_{f,x}(\\mathbf{r},E',t=0)\\Phi(\\mathbf{r},E',t=0) $$" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "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", + " \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", + " \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", + "
mesh 1delayedgroupnuclidescoremeanstd. dev.
xyz
01111total(((delayed-nu-fission / nu-fission) * (delayed...0.0033810.000837
11112total(((delayed-nu-fission / nu-fission) * (delayed...0.0009600.000074
21113total(((delayed-nu-fission / nu-fission) * (delayed...0.0069460.000771
31114total(((delayed-nu-fission / nu-fission) * (delayed...0.0747210.005119
41115total(((delayed-nu-fission / nu-fission) * (delayed...0.0341060.002235
51116total(((delayed-nu-fission / nu-fission) * (delayed...0.0025000.000358
61211total(((delayed-nu-fission / nu-fission) * (delayed...0.0114660.004394
71212total(((delayed-nu-fission / nu-fission) * (delayed...0.0009600.000081
81213total(((delayed-nu-fission / nu-fission) * (delayed...0.0074070.000779
91214total(((delayed-nu-fission / nu-fission) * (delayed...0.0833270.005229
\n", + "
" + ], + "text/plain": [ + " mesh 1 delayedgroup nuclide \\\n", + " x y z \n", + "0 1 1 1 1 total \n", + "1 1 1 1 2 total \n", + "2 1 1 1 3 total \n", + "3 1 1 1 4 total \n", + "4 1 1 1 5 total \n", + "5 1 1 1 6 total \n", + "6 1 2 1 1 total \n", + "7 1 2 1 2 total \n", + "8 1 2 1 3 total \n", + "9 1 2 1 4 total \n", + "\n", + " score mean std. dev. \n", + " \n", + "0 (((delayed-nu-fission / nu-fission) * (delayed... 0.003381 0.000837 \n", + "1 (((delayed-nu-fission / nu-fission) * (delayed... 0.000960 0.000074 \n", + "2 (((delayed-nu-fission / nu-fission) * (delayed... 0.006946 0.000771 \n", + "3 (((delayed-nu-fission / nu-fission) * (delayed... 0.074721 0.005119 \n", + "4 (((delayed-nu-fission / nu-fission) * (delayed... 0.034106 0.002235 \n", + "5 (((delayed-nu-fission / nu-fission) * (delayed... 0.002500 0.000358 \n", + "6 (((delayed-nu-fission / nu-fission) * (delayed... 0.011466 0.004394 \n", + "7 (((delayed-nu-fission / nu-fission) * (delayed... 0.000960 0.000081 \n", + "8 (((delayed-nu-fission / nu-fission) * (delayed... 0.007407 0.000779 \n", + "9 (((delayed-nu-fission / nu-fission) * (delayed... 0.083327 0.005229 " + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Set the time constants for the delayed precursors (in seconds^-1)\n", + "precursor_halflife = np.array([55.6, 24.5, 16.3, 2.37, 0.424, 0.195])\n", + "precursor_lambda = -np.log(0.5) / precursor_halflife\n", + "\n", + "beta = mgxs_lib.get_mgxs(mesh, 'beta')\n", + "\n", + "# Create a tally object with only the delayed group filter for the time constants\n", + "beta_filters = [f for f in beta.xs_tally.filters if f.type != 'delayedgroup']\n", + "lambda_tally = beta.xs_tally.summation(nuclides=beta.xs_tally.nuclides)\n", + "for f in beta_filters:\n", + " lambda_tally = lambda_tally.summation(filter_type=f.type, remove_filter=True) * 0. + 1.\n", + "\n", + "# Set the mean of the lambda tally and reshape to account for nuclides and scores\n", + "lambda_tally._mean = precursor_lambda\n", + "lambda_tally._mean.shape = lambda_tally.std_dev.shape\n", + "\n", + "# Set a total nuclide and lambda score\n", + "lambda_tally.nuclides = [openmc.Nuclide(name='total')]\n", + "lambda_tally.scores = ['lambda']\n", + "\n", + "delayed_nu_fission = mgxs_lib.get_mgxs(mesh, 'delayed-nu-fission')\n", + "\n", + "# Use tally arithmetic to compute the precursor concentrations\n", + "precursor_conc = beta.xs_tally.summation(filter_type='energy', remove_filter=True) * \\\n", + " delayed_nu_fission.xs_tally.summation(filter_type='energy', remove_filter=True) / lambda_tally\n", + " \n", + "# The difference is a derived tally which can generate Pandas DataFrames for inspection\n", + "precursor_conc.get_pandas_dataframe().head(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Another useful feature of the Python API is the ability to extract the surface currents for the interfaces and surfaces of a mesh. We can inspect the currents for the mesh by getting the pandas dataframe." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "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", + " \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", + " \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", + "
mesh 1surfacenuclidescoremeanstd. dev.
xyz
0111x-mintotalcurrent0.000000.000000
1111x-maxtotalcurrent0.029860.000678
2111y-mintotalcurrent0.000000.000000
3111y-maxtotalcurrent0.030910.000636
4111z-mintotalcurrent0.000000.000000
5111z-maxtotalcurrent0.000000.000000
6121x-mintotalcurrent0.030390.000670
7121x-maxtotalcurrent0.030670.000567
8121y-mintotalcurrent0.000000.000000
9121y-maxtotalcurrent0.030820.000617
\n", + "
" + ], + "text/plain": [ + " mesh 1 surface nuclide score mean std. dev.\n", + " x y z \n", + "0 1 1 1 x-min total current 0.00000 0.000000\n", + "1 1 1 1 x-max total current 0.02986 0.000678\n", + "2 1 1 1 y-min total current 0.00000 0.000000\n", + "3 1 1 1 y-max total current 0.03091 0.000636\n", + "4 1 1 1 z-min total current 0.00000 0.000000\n", + "5 1 1 1 z-max total current 0.00000 0.000000\n", + "6 1 2 1 x-min total current 0.03039 0.000670\n", + "7 1 2 1 x-max total current 0.03067 0.000567\n", + "8 1 2 1 y-min total current 0.00000 0.000000\n", + "9 1 2 1 y-max total current 0.03082 0.000617" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "current_tally.get_pandas_dataframe().head(10)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Cross Section Visualizations" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In addition to inspecting the data in the tallies by getting the pandas dataframe, we can also plot the tally data on the domain mesh. Below is the delayed neutron fraction tallied in each mesh cell for each delayed group." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABBwAAAIhCAYAAADtr6lMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XmcHFW5//HPdyYE2beAQcIewnrZQa+CGUE2RQLIrhAB\nwXu5XHC5Pxa3JLggeFUUxSsYEIQYEJBNNhHDvoQ1QAKJaIAQiEBYRDQkk+f3R9UkTad7uk71zPTA\nfN+vV73Sfeo8daorydM1Z06do4jAzMzMzMzMzKwntbX6BMzMzMzMzMzsvccdDmZmZmZmZmbW49zh\nYGZmZmZmZmY9zh0OZmZmZmZmZtbj3OFgZmZmZmZmZj3OHQ5mZmZmZmZm1uPc4fAeIekCSacVrPtX\nSbv09jlVtTlS0nN92aaZWV9yHjYzaz3nYrP+xR0OdUiaKektSW9IekXStZLWKhjrRFJbtPoEypB0\nmqQpkuZL+marz8dsoHAe7hXvujwsaXVJEyQ9L+lVSXdI2rHV52U2UDgX94p3XS4GkHSrpL9Jek3S\nw5L2afU5Wf/nDof6AvhkRKwIrAn8DTi7YKx4lyaSdwNJ7X3c5Azg/wHX9XG7ZgOd83A/1cd5eHng\nfmAbYFXgIuD3kpbtw3MwG8ici/upFtwTnwAMjYiVgS8AF0t6fx+fg73LuMOhewKIiLeBy4HNFu2Q\nBkv6X0nPSHpB0s8lLZ3fAF0PfEDS3/Pe4KGSdpB0d/7bmeclnS1pUOkTk7aR9KCk1yVNBN5XtX/v\nvOfxVUl3Svq3Osepe16Sfirpf6vqXyPphPz1mpIuz3s6n5b03xX13ifpV5LmSnoc2KHB59ld0pP5\nefxM0iRJR+X7Ruef4YeSXgHGKPP1vNf9xbytFfL6S/SmVw6ZkzRG0m8lTcz/fh6QtGW9c4uIX0fE\nTcCb3X0GM+sVzsMDPA9HxF8j4qyI+FtkzgMGAxt393nMrEc5Fw/wXAwQEY9HxMKKokHA2t19HjN3\nOBSQJ8yDgXsqis8EhgNb5n9+APhmRLwF7AXMjogVImLFiHgR6AS+SPbbmX8HdgGOK3k+SwG/Ay7M\nj/db4NMV+7cFxgPH5Pt/AVyTx1Xr7rwuBA6pOO5q+f4JkgRcCzxM1tu9K3CipN3y6mOB9fNtD2B0\nN59ntfwznAysBjyVn0ulDwJ/BlYHvgMcCRwBjAQ2AFYAflZRv1Fv+j7ApcAqwG+AOyXNkTSlQVxD\n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\n6TKyH/TnA8flK1QgaQLQAawm6VlgTERcIGlfskknhwDXSXokIvYC1iCbzL2TbC6Iw/PjrAV8FZgm\n6WGyRzZ+GhHnAydI2idvey7wuUaf1x0OZlZYJ77RNTNrJedhM7PWazYXR8SNwMZVZWMqXs8jW/6y\nVuzpwOk1yg+rU/8q4Koa5c8Am9Qof546y9hHxFfJOiMKc4eDmRW2wDe6ZmYt5TxsZtZ6zsXFucPB\nzArrdMowM2sp52Ezs9ZzLi7OV8rMCvNQXjOz1nIeNjNrPefi4tzhYGaFvc3gVp+CmdmA5jxsZtZ6\nzsXFucPBzArz82pmZq3lPGxm1nrOxcW5w8HMCvPzamZmreU8bGbWes7FxflKmVlhfl7NzKy1nIfN\nzFrPubg4dziYWWFOrmZmreU8bGbWes7FxbnDwcwK8/NqZmat5TxsZtZ6zsXFucPBzArz82pmZq3l\nPGxm1nrOxcX1yZW6+gN7J9UftfbOpdrRWpEcs9+s35Vq6wxOTo75QdtXSrW1zvTpyTFvx6rJMcts\nmn79AIZd90pyzCkfHlOqrYN1aXLM0d8aX6qtwcxLjmnrTL+G/xqzSnIMgD5XKqwpHj727jWPpZNj\nxiwYlxwz9wdrJccAMCw9ZIcf3l6qqb9r+eSY51ZbOzlmP8p9v7x59+rJMUN2f65UW3/Yap/kmGMe\n/Umpth7VVskxZX6DdMinL0iOAfjPN85Ljpm3Zno7bU2mUefhd7cXlfaP5oLYulQ7133twPSgfUs1\nxUdPuik5psySgne8NTI5BuCIZS9Mjnn9mqGl2hpyUHouPn/Uf5Vq65Sr0++l79cOyTGTSY8B2P/g\nS5Jjdtadpdp6ec3lSkT9o1RbXZyLi3PXjJkV5uRqZtZazsNmZq3nXFycOxzMrLB5JX4jYWZmPcd5\n2Mys9ZyLi3OHg5kV5ufVzMxay3nYzKz1nIuLa2v1CZjZu0cn7YU2MzPrHUXzcHe5WNKekp6UNF3S\nEpNSSRosaaKkGZLukbROxb5T8/JpknavKB8vaY6kKVXHOjOv+4ikKyStmJevKulWSX+X9JOqmEMl\nTcljrpeUPjGVmVkv8j1xce5wMLPCnFzNzFqr2Q4HSW3AT4E9gM2BQyVtUlXtaGBuRGwEnAWcmcdu\nBhwEbArsBZwjSXnMBfkxq90MbB4RWwMzgFPz8n8BXwfeMaO2pPa8zZF5zGPA8cWujplZ3/A9cXHu\n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\nt+4xU5OXpbvKBMwBPpe2fxXYjFVLHC+PiHGS3gN8Epgr6V6yH+u+kv7uKM0dDmZWWKNwvavnRe7q\nqTtWOG/IJiprMsbsKOAnudfjyIZibAVsDvxW0qw006+ZWUfz5L1mZu3XahYPUcfvGsdM28c3OM4/\nAP9QZ/utMHh/2bjDwcwKazRebY/ujdmje+P+1z+c/FS93YZkorKBxpilYxxKNkFkn6OBGyNiJfCk\npFuBvwUW1f1wZmYdZBDmcDAzsxY5i4sblg6HP2jH5jvlPBF/Xamd8087s3zRibUrghRzwHHXVqqr\n4qon/650zT++qfxwm2euqLa86pZHP1K65puf/Wqltv7lB6c036nGLXpv853quIu9S9ccctj00jU7\namHpGoA/brpphapnm+8ygBbHDg/VRGUDjTE7AJgfEfmOjcfIZkq/TNLrgXcC327lg60N5uqtpWv+\nHG8oXfN/Tvlm6RqA9Sc9U7rmI4fOqNRWFd9bdHLpmlO2O7v5TnU8+eMxzXeqseWny+cwwKTTzi1d\nc/43/qlSWz0qf4f8Pav1FRbzkcOq/XfxRpUfWfXHjbcoXbM+GzffaQCtzuFg7VU2i6vkMFTL4io5\nDNWyuIsVpWt+uOSk0jUAJ41e44fgpqrkMFTL4kmnlM9hgPPPK5/Fw5XDUC2LN9PTldqqksXZYmjV\nOYuL8zdlZoV12ni1AmPMjmT14RQA/wZMlfRAej0lIh7AzGwt4CEVZmbt5ywuzh0OZlZYi2sOD/p4\ntWZjzCJijZnNI+LFRm2YmXW6VnPYzMxa5ywuzh0OZlaYx6uZmbWXc9jMrP2cxcW5w8HMCvN4NTOz\n9nIOm5m1n7O4OH9TZlaYx6uZmbWXc9jMrP2cxcW5w8HMCnO4mpm1l3PYzKz9nMXFucPBzArzeDUz\ns/ZyDpuZtZ+zuDh3OJhZYR6vZmbWXs5hM7P2cxYX52/KzArz7WNmZu3lHDYzaz9ncXHucDCzwl7x\nmsNmZm3lHDYzaz9ncXHucDCzwnz7mJlZezmHzczaz1lcnL8pMyvMt4+ZmbWXc9jMrP2cxcW5w8HM\nCnO4mpm1l3PYzKz9nMXFDUuHww8fPaHU/ieO+XaldlaeW76ma9nySm3Nuu+jpWt6365KbW04qnxb\nr1y4aemalSeVLgFgxKTtS9cc+P1rKrV1BueXrvlgXFupraseOrp0Te/fjChdsxXvLl0DcIIurlD1\nzUpt9XG4rr1+8PTnStf882b/Vrpm5XmlSwB4My+WrrnhwcMqtdW7W/ks3vSvPl665k9TtixdA7Dy\n+PI1VXIY4OCv/6x0zUl8v1Jbs2JG6Zornj6idM3Lm29SugZga/YsXfNFXVC6Znt2Acp/730GI4cl\nHQRcAIwApkTEN2reHwX8GNgLeAo4MiIeS++dARwHrABOioiZafsU4GBgWUTsnjvWucBHgVeAh4Bj\nI+JPuffHAA8CkyLi/LTtS8DxwEpgbqp5teUP3gHKZnGVHIZqWVwlh6FaFlfK4TeVz2GolsVVchiq\nZfHB36qWB1WyeLhyGKplcZUcBvi8LqpQdWGltvq0msVDlMN1jylpKrAf8DwQwGci4n5JOwFTgT2B\nr/RlcKo5Cfj79PKSiPhO1c9a/l9HZrbOWkFXoYeZmQ2NojncKIsljQAuAj4I7AYcJWnnmt2OB56J\niLFkF6/nptpdgSOAXYAPARdL6vuX49R0zFozgd0iYg9gIXBGzfvnAzfkzu+vgc8De6aOi5HAxAJf\njZnZsOm0HC5wzFMi4h0RsWdE3J+2PU2Wt6v9Iilpt9T+3wJ7AB+V9DcVvibAHQ5mVkIvIws9zMxs\naBTN4QGyeBywMCIejYjlwHRgQs0+E4AfpeczgPen54cA0yNiRUQsIutAGAcQEbcAz9Y2FhGzImJl\nenk7MLrvPUkTyO56eLCmrAt4vaSRwIbAEwN+KWZmw6wDc7jZMdf4d39EPBURd5PdKZG3C3B7RLwS\nEb3Ab4BqtxjVa9jMrJFeugo9zMxsaBTN4QGyeGtgce71krSt7j7pYvN5SZvVqX28Tu1AjgN+ASBp\nQ+BUYDLQf399RDwBnAc8lo7/XETMKtGGmdmQ68AcbnbMsyXNkXSepPWafLwHgH0lbZqy+sPANk1q\nGvJPkWZWmNccNjNrr4Fy+JGexTzSs7jh+0m9wfNRcJ8itfUblc4ElkfE5WnTZODbEfFSGpWhtN8b\nyX6V25ZsvPEMSUfn6szM2q5RFrcxh+vdSNB3zNMjYlnqaLgEOA04u9HJRcQCSd8AZgF/Buaw5l0Q\nhbnDwcwK83AJM7P2GiiHx3Rvz5juVZPW/XrybfV2WwKMyb0ezZpDFhaT/Zr1hKQuYJOIeFbSElb/\nlate7RokHUP2C9n7c5v3AQ5Lk0puCvRK+gvwv8DDEfFMqr0KeDfgDgcz6xiNsriNOaxGx4yIZenP\n5WkCyVOafDwiYirZ3DxI+hdWv3uiFA+pMLPCWh1SIekgSQsk/UHSaXXeHyVpuqSFkm5Ls5f3vXdG\n2j5f0oFp22hJN0uaJ2mupC/k9p8u6Z70eETSPWn70ZLuTdvvldQraffaczEz60SDMKRiNrCDpG3T\nLOgTgdrlnK4DjknPDwduTs+vBSamrN4e2AG4M1cnan59S7OmnwocEhGv9G2PiH0j4i0R8RayCdH+\nNSIuJhtK8U5J66cJKccD80t8RWZmQ64Dc7jhMSVtlf4U8DGyIRO1arP7TenPMWTzN/ykyPdSj3+u\nNLPCWpmfITd77niyHtfZkq6JiAW53fpn5JV0JNmMvBNrZuQdDcySNJbs9q6TI2KOpI2AuyXNjIgF\nETEx1/a3gOcA0m25l6ftbwX+Kzdbr5lZR2t1npyI6JV0ItnqEX1Lp82XNBmYHRHXA1OAaZIWks1i\nPjHVzpN0BTAPWA6cEBEBIOlyoBvYXNJjZMtcTgW+C4wCbkpDJ26PiIbrpUfEnZJmAPemNu4FftjS\nhzYzG2StZPEQ5XDdY6YmL5O0BVmnwhzgcwCStgTuAt4ArExLYe4aES8AV6Y5I/raeL7q53WHg5kV\n1uKFbv/suZDdgUA2Tjff4TABmJSezyC7UIXcjLzAohS+4yLiDmApQES8IGk+2QQ5+WNC1lmxf51z\nOooWemzNzIbbYEzMGxE3AjvVbJuUe/4KWW7Wqz0HOKfO9qMb7D+2wPlMrvN6coPdzczabhA6f4ci\nh9c4Zto+vsFxltFgMsiI2HeA0y/FHQ5mVlij9YQLqjd77rhG+6Te3/yMvPlBcGvMjC5pO7K1gu+o\n2f4+YGlEPFTnnI4k68wwM1srtJjDZmY2CJzFxbnDwcwKa3HSyCGbGT0Np5gBnJRuA8urexeDpHHA\nixExb6CTNjPrJJ6818ys/ZzFxfmbMrPCGt0+tqTnIR7vqXcDweq7MQQzo0saSdbZMC0irskfLB3j\nUGDPOuczEQ+nMLO1zGAMqTAzs9Y4i4tzh4OZFdYoXP+qe0f+qnvH/td3Tp5Vb7f+2XOBP5L9g/+o\nmn36ZuS9gzVn5L1M0rfJhlLkZ0a/FJgXERfWafMAYH5ErNaxkWbpPRx4X90PZGbWoXyRa2bWfs7i\n4oalw+Efxnyv1P5zeEeldjZ+4cnSNbHkTZXa4kv17vAeWNcbVlZqaouf194h3tz4k25uvlONrl8d\nVroG4PCvTStd87MJn67UVtd7ytfENtWG6F96dO2/hZvrurv8MuErlm3ffKc6zjq4UllLXuF1lWuH\nYkZeSe8BPgnMlXQv2TCLr6RJcyCbo6HeXQz7AosjYlHlD7SWOX6zKaVr7tfbStf89cqHS9cAPPVY\n3TmLBvblais7d21QPos3vaK3dM1Hj/9p6RqArt8cWbrm0K+Vzx6Aq47/ZOmarrdXaorY5hOlay49\ntEIOP1jtu1ixrOnchms46wPl23n5gx8sX5TTSg5b+5XN4ntV7Zq4ShZXymGolMXDlcNQLYur5DBU\ny+IqOQzVsni4chiqZXGVHIZqWdwqZ3FxvsPBzArrtBl5I+JWaHxSEXFsg+2/Ad5d+MTNzDqEf1Uz\nM2s/Z3Fx7nAws8IcrmZm7eUcNjNrP2dxce5wMLPCHK5mZu3lHDYzaz9ncXHucDCzwrzmsJlZezmH\nzczaz1lcnDsczKwwrzlsZtZezmEzs/ZzFhfnb8rMCvPtY2Zm7eUcNjNrP2dxce5wMLPCHK5mZu3l\nHDYzaz9ncXHucDCzwrzmsJlZezmHzczaz1lcnDsczKww9+aambWXc9jMrP2cxcWNaPcJmNnao5eu\nQg8zMxsaRXPYWWxmNnRazWFJB0laIOkPkk6r8/4oSdMlLZR0m6QxuffOSNvnSzqw2TElTZX0sKR7\nJd0jafe0fSdJv5P0sqSTa9rfRNLPUhsPStqn6nflOxzMrDAvAWRm1l7OYTOz9msliyWNAC4CxgNP\nALMlXRMRC3K7HQ88ExFjJR0JnAtMlLQrcASwCzAamCVpLKAmxzwlIq6uOZWngc8DH6tzmhcCN0TE\n4ZJGAhtW/by+w8HMCutlZKGHmZkNjaI5PFAWD9Eva1MkLZN0f82xzk37zpF0paSNa94fI+nP+V/X\nmp2fmVm7tZjD44CFEfFoRCwHpgMTavaZAPwoPZ8BvD89PwSYHhErImIRsDAdr9kx1/h3f0Q8FRF3\nAyvy2yW9AXhfRExN+62IiD8V+FrqcoeDmRXm23jNzNqr1SEVuV/WPgjsBhwlaeea3fp/WQMuIPtl\njZpf1j4EXCxJqWZqOmatmcBuEbEH2YXxGTXvnw/cUPL8zMzaqsVr4q2BxbnXS9K2uvtERC/wvKTN\n6tQ+nrY1O+bZqeP3PEnrNfl4bwGeSkMx7pH0Q0kbNKlpaFh+ivyPZz5Tav9zNz+1UjvLNnpz6Zru\nvX5Sqa1d/3te6Zp5sWulti456Qula975ne+Urvnq+P9bugbgnb+8r3zR9ZWaIgeYvbAAACAASURB\nVH7+3dI1b+kdX6mtqzisdE38XM13qrHipNIlAFy8clH5ohHbVWsscWfC2mvKM8eXrrlg8/L/cT49\nYovSNQBHb1s+i/e4YU6ltubG20rXfPP0/1O6Zr9z/7t0DcDZ+321dM3uv19YqS3+o3xJ6N8rNbVb\n7x6la37G4aVr4sryOQygz5WvqZLD+7M+jNiqfGPJIORw/69gAJL6fgXL38o7AZiUns8A+v7y7f9l\nDVgkqe+XtTsi4hZJ29Y2FhGzci9vh1V/uUqaADwEvFjy/NZaZbO4Sg4DfG/ECaVrquQwwNtumFu6\npso1cZUchmpZXCWHoWIW/0elpipl8c69e5WuqZLDUC2Lq+QwdNY18Z977uHPPfc2K6/35UTBfRpt\nr3cjQd8xT4+IZamj4RLgNODsAc5vJLAn8M8RcZekC4DTWfX3Qim+99nMCnOHg5lZew1CDtf7FWxc\no30ioldS/pe123L79f2yVtRxZLf5ImlD4FTgAODLJc/PzKytGmXxht17s2H33v2v/zh5ar3dlgBj\ncq9Hk827kLcY2AZ4QlIXsElEPCtpSdpeW6tGx4yIZenP5ZKmAqc0+XhLgMURcVd6PYOsk6KSph0O\nkqYABwPLIqJvRstNgZ8C2wKLgCMi4vmqJ2FmawevOdw+zmIzg4Fz+MWeu3ip566G7ydD8ctaU5LO\nBJZHxOVp02Tg2xHx0qpRGYXPry2cw2bWp8Vr4tnADumusD8CE4Gjava5DjgGuAM4HLg5bb8WuEzS\nt8k6aHcA7iS7w6HuMSVtFRFL0xC4jwEP1Dmn/uxNd0MslrRjRPyBbCLK8rf3J0XmcKg3Ju90YFZE\n7ET24WvH45nZa5DncGgrZ7GZDZi963fvw2Zf++f+RwNlflkj/8taqq33y9qAJB0DfBg4Ord5H+Bc\nSQ8DXwS+IumEgufXLs5hMwNauyZOczKcSDbHzYNkQ9XmS5os6eC02xRgizR07YtkWUNEzAOuIOsA\nuAE4ITJ1j5mOdZmk+4D7gM1JwykkbSlpMfAl4ExJj0naKNV8IdXNAd4O/GvV76rpHQ4NxuRNAPZL\nz38E9JC+BDN77XJnQvs4i80MBiWHh+KXtT6i5g4FSQeRDZ3YNyJe6dseEfvm9pkE/DkiLk4dHM3O\nry2cw2bWp9UsjogbgZ1qtk3KPX+FbJLeerXnAOcUOWbaXndCuzTUYpsG790H7F3vvbKqzuHw5txY\nkKWS3jQYJ2Nmnc3rv3ccZ7HZOqbVHE5zMvT9CjYCmNL3yxowOyKuJ/tlbVr6Ze1psn/0ExHzJPX9\nsrac9MsagKTLgW5gc0mPAZPSkmrfBUYBN6WhE7dHRMMZDRudX0sfemg5h83WQb4mLs6TRppZYQOt\n615E+qXrAlZdRH6j5v1RwI+BvYCngCMj4rH03hlkE46tAE6KiJmSRqf9twJ6gUsi4jtp/+nAjunQ\nmwLPRsSe6b3dge8DG6e6vSPi1ZY+nJnZMGg1h2HIflk7us7upKU1m53P5GbnZ2bWSQYji9cVVb+p\nZZK2TBNKbAX870A7935j1d9Les97GfHe91Vs1szKeLXnNpb33D5ox2vl9rHc2urjycbjzpZ0TUTk\nlzrrX/td0pFka79PrFn7fTQwS9JYss6HkyNiThpzdrekmRGxICIm5tr+FvBcet4FTAM+GREPpAm/\nllf+YO1VOIudw2btk8/iB1q8SPXQto7ja2KztUAnXROva4r+rVc7Ju9a4DPAN8jG+F0zUHHXaZ4/\nx6wdRnW/i1Hd7+p//dJZF7Z0vBbDddDXfo+IO4ClABHxgqT5ZOOKa9drPwLYPz0/ELgvIh5Idc+2\n8qGGWeUsdg6btU8+i9/K+sw767zKx/JFbtv5mthsLdRh18TrlCLLYq4xJg/4OvAzSccBj5FNKGRm\nr3G9K1sK1yFd+13SdsAeZJOc5be/D1gaEQ+lTTum7TcCWwA/jYhvVv5Uw8RZbGbQcg5bC5zDZtbH\nWVxckVUq6o7JAz4wyOdiZh3ulZfrrzm84r9vpfe3tzYrH7K139Nwihlkczu8ULPfUcBPcq9HAu8B\n/hZ4GfiVpLsi4tcDn357OYvNDBrnsA0957CZ9XEWF+fZLsyssN4V9Xtz9e59Gfnu/hXOWP6vdW8Y\nKLP2+xP5td8lNVz7XdJIss6GaRGx2q2s6RiHAnvWnMdv+oZSSLohvd/RHQ5mZtA4h83MbPg4i4sb\n0e4TMLO1R++KrkKPBvrXfk+rUUwkG/ua17f2O6y59vtESaMkbc/qa79fCsyLiHqD8Q4A5kdEvmPj\nl8DuktZPnRX7kS3xZmbW8YrmsC+GzcyGjnO4uGG5w+Hl3k1L7X9MfL9SO7/n7aVrRpxUvgZgg7Oe\nLl3z4iabV2rrki3L1/w6ukvXnMm3yjcE8C/17nYfmD5Xeyd9Mb0Xf750zYe5ulJbP//sYaVrVv6g\nfDtd9/eWLwJe3q58iLV689eK5dWDcyjWfpf0HuCTwFxJ95INs/hKWlIN4EhWH05BRDwn6XzgLmAl\n8POI+EXlD7aWKJvDAH8Xl5SuuZd3lq4BGHFW+brNz1xSqa0nu0aXrvlmhRy+Lj5avgj4EhdXKCqf\nwwD6/8pnce+5f1+prSpZfONnP166pkoOQ7UsfnGj8pk4ouuDXFG6apVWctjar2wWV8lhgPvZu3TN\niLPK10C1LB6uHIZqWVwph6FSFlfJYaiWxcOVwzC818RVsnjDSi2t4iwuzkMqzKywlb2tRcZgr/0e\nEbdC42mCI+LYBtsvBy4vfOJmZh2i1Rw2M7PWOYuL8zdlZsX51jAzs/ZyDpuZtZ+zuDB3OJhZcQ5X\nM7P2cg6bmbWfs7gwdziYWXErqo0TNzOzQeIcNjNrP2dxYe5wMLPiVrT7BMzM1nHOYTOz9nMWF+Zl\nMc2suJcLPszMbGgUzWFnsZnZ0GkxhyUdJGmBpD9IOq3O+6MkTZe0UNJtksbk3jsjbZ8v6cBmx5Q0\nVdLDku6VdI+k3dP2nST9TtLLkk7O7f86SXek/edK6p/gvQrf4WBmxS1v9wmYma3jnMNmZu3XQhZL\nGgFcBIwHngBmS7omIhbkdjseeCYixko6EjgXmChpV7IV3XYBRgOzJI0F1OSYp0RE7bqoTwOfBz6W\n3xgRr0jaPyJektQF3CrpFxFxZ5XP6zsczKy43oIPMzMbGkVz2FlsZjZ0WsvhccDCiHg0IpYD04EJ\nNftMAH6Uns8A3p+eHwJMj4gVEbEIWJiO1+yYa/y7PyKeioi7qTNAJCJeSk9fR3aTQjT8NE24w8HM\niltR8GFmZkOjaA47i83Mhk5rObw1sDj3eknaVnefiOgFnpe0WZ3ax9O2Zsc8W9IcSedJWq/Zx5M0\nQtK9wFLgpoiY3aymEXc4mFlxvsg1M2uvQehwGKKxw1MkLZN0f82xzk37zpF0paSN0/a90/jgvsfH\n0vbRkm6WNC+NHf5C1a/KzGzItJbD9Za4qL2DoNE+ZbcDnB4RuwB7A5sDa+T+GoURKyPiHWTDNvZJ\nQzkq8RwOZlacOxPMzNqrxRweirHDERHAVOC7wI9rmpxJdrG7UtLXgTPSYy6wV9q+FXCfpGvTJzw5\nIuZI2gi4W9LMmvMzM2uvRll8Xw/c39OsegkwJvd6NFke5y0GtgGeSPMobBIRz0pakrbX1qrRMSNi\nWfpzuaSpwCnNTrBPRPxJUg9wEDCvaF2e73Aws+J8h4OZWXu1fofDUIwdJiJuAZ6tbSwiZkXEyvTy\ndrKLYCLi5dz2DYCVafvSiJiTnr8AzGfNW43NzNqrUe7u1g1HfW3Vo77ZwA6StpU0CpgIXFuzz3XA\nMen54cDN6fm1ZB3AoyRtD+wA3DnQMVOnLpJENkHkA3XOqf8OCUlbSNokPd8A+ABQudPXdziYWXHu\nTDAza6/Wc7jeON9xjfaJiF5J+bHDt+X26xs7XNRxZB0cAEgaB1xK9qvcp3IdEH3vbwfsAdxRog0z\ns6HXQhanXD2R7A6wEcCUiJgvaTIwOyKuB6YA0yQtJFtNYmKqnSfpCrK7DZYDJ6S7zOoeMzV5maQt\nyDoV5gCfA5C0JXAX8AZgpaSTgF2BvwJ+lO6IGwH8NCJuqPp5h6XDQceVm9Ry1HWvVmqnq+vp8kXj\nN6/U1js3vr10TVfXk5Xa2n3FLqVrbj704NI1XfuULskcX74k/q1aU5f0d/QV92c+VamteH35G4C6\n7l7ZfKca/7nXoaVrAEau8TvSMPhLG9q0QaF/Kj+58EYzXihd09VVuiRT+/tqAXuPqDZ/UVfXrNI1\nu614a+mank9/qHQNQNdeFYqOrNQUMaV8zTSOqNTWSxX+sojN6w1JHVjXQ+VzGOBnu3+0dM36Vf5a\nH1WhJm+gHH6wB+b1NDvCUIwdbkrSmcDyiLi8vzBbYu2tknYCfpyWXXs17b8R2d0VJ6U7HV4TymZx\nlRyGillcIYehWhYPVw5DtSyulMNQKYur5DBUy+LhymGolsVVchgqZnGrWrwmjogbgZ1qtk3KPX8F\n6v+PHBHnAOcUOWbaPr7BcZax+vCMPnOBPQc4/VJ8h4OZFedl1szM2mugHN65O3v0uXJyvb2GYuzw\ngCQdA3yYVUMzVhMRv5f0IvBW4B5JI8k6G6ZFxDXNjm9mNux8TVyY53Aws+I8h4OZWXu1PofDUIwd\n7iNq7oKQdBBwKnBI+sWub/t2qTMDSdsCOwKL0tuXAvMi4sIBvgkzs/bxNXFhvsPBzIpzcJqZtVeL\nOTxEY4eRdDnQDWwu6TFgUkT0rVwxCrgpm6+M2yPiBOC9wOmSXiWbMPKfIuIZSe8BPgnMTWvAB/CV\ndKuwmVln8DVxYe5wMLPiHK5mZu01CDk8RGOHj26w/9gG2/8T+M86228Fqs4GY2Y2PHxNXJg7HMys\nOIermVl7OYfNzNrPWVyY53Aws+JaHK8m6SBJCyT9QdJpdd4fJWm6pIWSbpM0JvfeGWn7fEkHpm2j\nJd0saZ6kuZK+kNt/uqR70uMRSfek7dtKein33sWD8M2YmQ2P1udwMDOzVjmHC/MdDmZWXAvBmdby\nvQgYTzar+WxJ10TEgtxuxwPPRMRYSUcC55JNULYr2e29u5DNij5L0th0RidHxJy0hNrdkmZGxIKI\nmJhr+1vAc7l2/iciBm25HzOzYeMLWDOz9nMWF+YOBzMr7uWWqscBCyPiUcjuQCBb9Tvf4TAB6BtH\nPINssjGAQ4DpEbECWJQmMhsXEXcASwEi4gVJ84Gta44JWWfF/rnX1RaVNjNrt9Zy2MzMBoOzuDAP\nqTCz4lq7fWxrsrXd+yxJ2+ruExG9wPOSNqtT+3htraTtgD2AO2q2vw9YGhEP5TZvJ+luSb+W9N6G\nZ2xm1mk8pMLMrP2cw4X5DgczK65RcC7qgUd7mlXXu6sgCu4zYG0aTjEDOCkiXqjZ7yjgJ7nXTwBj\nIuJZSXsC/yVp1zp1ZmadxxewZmbt5ywuzB0OZlZco3Ad3Z09+vz35Hp7LQHG5F6PJvvHf95iYBvg\nCUldwCapY2BJ2r5GraSRZJ0N0yLimvzB0jEOBfrna4iI5cCz6fk9kh4CdgTuafDpzMw6hy9yzcza\nz1lcmIdUmFlxyws+6psN7JBWiRgFTASurdnnOuCY9Pxw4Ob0/FqyySNHSdoe2AG4M713KTAvIi6s\n0+YBwPyI6O/YkLRFmsASSW9Jx3q46Wc3M+sERXO4cRabmVmrnMOFDc8dDjuX231Hfl+tnR9sVrpk\n5d9Xa2rE6z5Svujm2rvHi5k54o2la8658ozSNRdecnrpGoDed5fvt/rep49pvlMdnz3/R6Vrxp38\nm0ptrTy//P9eG7/wVOmaCRtf03ynOi7+03EVqi6t1Fa/3uqlEdEr6URgJlln55SImC9pMjA7Iq4H\npgDT0qSQT5N1ShAR8yRdAcwji+8TIiIkvQf4JDBX0r1kwyy+EhE3pmaPZPXhFAD7AmdJWp4+0Wcj\n4jle68rHI29jbvmi8v8XBWDl35WvGbHJx6s1NrP8/7dviQ1K13zjR9Uy9etTv1a6pnevar8fXPTp\n40vXHHPuFZXa2u/UG5vvVGPlv5ZvZ4sVfyxfBBy6zS9K18xYXP5aYEv2BH5Zuq5fCzlsHaBkFlfK\nYaiUxVVyGCpm8TDlMFTL4io5DNWyuEoOQ7UsHq4chmpZXCWHAaYvPqRCVe1vXiU5iwvzkAozK67F\n28dSR8BONdsm5Z6/QraiRL3ac4BzarbdCnQN0N6xdbZdBVxV6sTNzDqFb+M1M2s/Z3Fh7nAws+Ic\nrmZm7eUcNjNrP2dxYZ7DwcyKe7ngw8zMhkbRHHYWm5kNnRZzWNJBkhZI+oOk0+q8P0rSdEkLJd0m\naUzuvTPS9vmSDmx2TElTJT0s6V5J90jaPW3fSdLvJL0s6eQy51eG73Aws+Lcm2tm1l7OYTOz9msh\ni9Pk5RcB48lWXZst6ZqIWJDb7XjgmYgYK+lI4FyyCdR3JRt+vAvZqm2zJI0lW0J+oGOeEhFX15zK\n08DngY9VOL/CfIeDmRW3ouDDzMyGRtEcdhabmQ2d1nJ4HLAwIh5Ny7VPBybU7DOBVdO/zgDen54f\nAkyPiBURsQhYmI7X7Jhr/Ls/Ip6KiLvrnGmR8yvMHQ5mVpyXADIzay8vi2lm1n6t5fDWwOLc6yVp\nW919IqIXeF7SZnVqH0/bmh3zbElzJJ0nab0mn67I+RXmIRVmVpyXADIzay/nsJlZ+zXK4id74Kme\nZtWqs612rdhG+zTaXu9Ggr5jnh4Ry1JHwyXAacDZLZ5fYb7DwcyK8228ZmbtNQhDKoZosrIpkpZJ\nur/mWOemfedIulLSxmn7ByTdJek+SbMl7V/nPK6tPZ6ZWUdolLubdsPYr6161LcEGJN7PZpsroS8\nxcA2AJK6gE0i4tlUu02d2obHjIhl6c/lwFSyIRMDKXJ+hbnDwcyKc4eDmVl7tdjhkJsM7IPAbsBR\nknau2a1/sjLgArLJyqiZrOxDwMWS+n4Jm5qOWWsmsFtE7EE21viMtP1J4OCIeDvwGWBazXl+HPjT\nQF+FmVnbtHZNPBvYQdK2kkYBE4Fra/a5DjgmPT8cuDk9v5Zs8shRkrYHdgDuHOiYkrZKf4psgsgH\n6pxT/q6GIudXmIdUmFlxHhNsZtZeredw/2RgAJL6JgPLzz4+AZiUns8Avpue909WBiyS1DdZ2R0R\ncYukbWsbi4hZuZe3A4el7ffl9nlQ0uskrRcRyyW9HvgS8I/AFS1/YjOzwdZCFkdEr6QTyTpkRwBT\nImK+pMnA7Ii4HpgCTEs5+zTZP/qJiHmSrgDmpbM4ISICqHvM1ORlkrYg61SYA3wOQNKWwF3AG4CV\nkk4Cdo2IFwY4VmnucDCz4l5p9wmYma3jWs/hepOB1d5eu9pkZZLyk5Xdltuvb7Kyoo4jm+18NZI+\nAdybbvcF+L/At4C/lDi2mdnwaTGLI+JGYKeabZNyz18hu6OsXu05wDlFjpm2j29wnGWsPjyj6bGq\ncIeDmRXn4RJmZu01UA4/3wN/6ml2hKGYrKwpSWcCyyPi8prtu5FdOB+QXr8d2CEiTpa0XYM2zcza\ny9fEhQ1Ph8MN5XZf/5vVuoxWjC//cbp+Ve2/lg+9fHXpmp/r0EptfTlOLV3znQ+sMQdUUyt/VboE\ngB0oP5/TGB6r1NbKk8vXfIqFldrqOmzf0jU7XFl+PpWT//Tt0jUAb1O94VdDzEMq1l6/KF+yssI0\nPyv26SrfENB1R/ksPvi5GZXaulaHl645na+UrvnmR75augZg5c/L1+zO7ZXa2onfl65ZWf6vJAD+\nnodK13R9svyk2Ltftrj5TnX88+Jvla7ZSeW/v/XYvHTNagbK4Q27s0efJZPr7VVmsrIn8pOVSWo0\nWdmAJB0DfJhV68j3bR8NXAV8Kq0nD/AuYE9JDwPrAW+WdHNErFa71iqZxVVyGKplcZUchmpZPFw5\nDNWyuEoOQ7UsrpLDUC2LP8Oi0jVVchhgt8vKXxNXyWGolsUt8zVxYZ400syK6y34MDOzoVE0hxtn\n8VBMVtZH1NyRIOkg4FTgkHSLcN/2TYDryZZr6/9XWkR8PyJGR8RbgPcCv3/NdDaY2WuHr4kLc4eD\nmRXnVSrMzNqrxVUqIqIX6JsM7EGySSDnS5os6eC02xRgizRZ2ReB01PtPLJJHOeR3b/aN1kZki4H\nfgfsKOkxScemY30X2Ai4SdI9ki5O208E/gb4qqR703tbtPr1mJkNC18TF+Y5HMysOAenmVl7DUIO\nD9FkZUc32H9sg+3/AvxLk/N8FNh9oH3MzNrC18SFucPBzIrzeDUzs/ZyDpuZtZ+zuDB3OJhZcR6L\nZmbWXs5hM7P2cxYX5jkczKy4FserSTpI0gJJf5C0xlIqaSKy6ZIWSrpN0pjce2ek7fMlHZi2jZZ0\ns6R5kuZK+kJu/+lpTPA9kh6RdE9NW2Mk/VlShbVPzMzapMU5HMzMbBA4hwvzHQ5mVtxfqpdKGgFc\nBIwnW0ZttqRrImJBbrfjgWciYqykI4FzyWZE35VsPPEuZMuwzZI0lizKT46IOZI2Au6WNDMiFkTE\nxFzb3wKeqzml8ym9aK+ZWZu1kMNmZjZInMWF+Q4HMyuutSWAxgELI+LRiFgOTAcm1OwzAfhRej6D\nVWu2H0I2k/qKtFb7QmBcRCyNiDkAEfECMB/Yuk7bRwA/6XshaQLwENkM7WZma4/Wl8U0M7NWOYcL\nc4eDmRXX2u1jWwOLc6+XsGbnQP8+aem25yVtVqf28dpaSdsBewB31Gx/H7A0Ih5KrzckWxN+MjXr\nxZuZdTwPqTAzaz/ncGEeUmFmxbUWnPX+cR8F9xmwNg2nmAGclO50yDuK3N0NZB0N346IlyQ1atPM\nrDP5AtbMrP2cxYW5w8HMimu0BNDKHoieZtVLgDG516PJ5nLIWwxsAzwhqQvYJCKelbQkbV+jVtJI\nss6GaRFxTf5g6RiHAnvmNu8DHCbpXGBToFfSXyLi4mYfwMys7bwUm5lZ+zmLC3OHg5kV13AsWnd6\n9Jlcb6fZwA6StgX+CEwku/sg7zrgGLJhEYcDN6ft1wKXSfo22VCKHYA703uXAvMi4sI6bR4AzI+I\n/o6NiNi377mkScCf3dlgZmsNjwk2M2s/Z3FhnsPBzIqLgo96pdmcDCcCM8kma5weEfMlTZZ0cNpt\nCrCFpIXAF4HTU+084ApgHtnKEidEREh6D/BJ4P2S7k1LYB6Ua/ZIVh9OYWa2diuaww2y2MzMBkGL\nOTzYS8UPdExJUyU9nLtW3j333nfSseZI2iNt687te6+kv0g6pOpXNSx3OHz5wbNK7X88Uyq1ozPK\n/+36/enHVGprP35TuqbrRx+v1NaSz5xXuub2X+1TuuZ0bi1dA/A9/ap0zSuMqtTWp2NJ6ZoteLpS\nW7FT+aH926w2r2Ex37vv5NI1AKfscXalunaKiBuBnWq2Tco9f4VsRYl6tecA59RsuxXoGqC9Y5uc\nT91bMV6Lvry4XA4DfJELStfohGr/yrnmpgNK17yL2yq11XXlJ0rX/O8nvlG6ZvbP9ypdA3A2PaVr\nLtDvKrX1aoUsPjb+XKmtN1K+brhyGOCim75cuubEA79ZuqaL0aVr7LWjbBZXyWEAfaF8Fl/1iw9V\nauu9/LZ0zXDlMFTL4io5DNWyuEoOQ7Us3pTnS9dUyWGolsUX/bp8DgOc+P7yWdxOQ7RUvJoc85SI\nuLrmPD4E/E1qYx/g+8A7I6IHeEfaZ1Oy1eFmVv28vsPBzMzMzMzMbHgM+lLxBY5Z79/9E4AfA0TE\nHcAmkras2ecTwC8i4uXyH7Nxw6uRNEXSMkn357ZNkrQk3WZRewuzmb1mLS/4sMHmLDazTNEcdhYP\nNuewma3SUg4PxVLxzY55dho2cZ6k9RqcxxrLzpPNudbS8OQidzhMBT5YZ/v5EbFnetzYykmY2drC\niw63kbPYzCiew87iIeAcNrOkpRweiqXiBzrm6RGxC7A3sDnQN79Ds2XntwLeCvyyzn6FNZ3DISJu\nSbPK1/La9WbrHP9i1i7OYjPLOIfbxTlsZqs0yuLfArc0Kx6KpeLV6JgRsSz9uVzSVOCU3HnUXXY+\nOQK4Ot1hUVkrczj8c7ot498lbdLKSZjZ2sK/qnUgZ7HZOsV3OHQg57DZOqdR7r4L+HLuUVf/UvGS\nRpENW7i2Zp++peJhzaXiJ6ZVLLZn1VLxDY+Z7lRAkoCPAQ/kjvXp9N47gef6OieSoxiE1d6qdjhc\nTDaj5R7AUuD8Vk/EzNYGHjfcYZzFZuuc1udwGKLl2NaY3yBtPzftO0fSlZI2Tts3k3SzpD9L+k5N\nzXqSfiDp95LmSaq2zNfwcA6brZOq5/BQLBXf6JjpWJdJug+4j2xIxdnpWDcAj0j6H+AHwAl955ju\n5hodEeWXZqxRaVnMiHgy9/ISsh6Yhn73tZv7n2/TvT3bdG9fpVkzK2lxz8Ms6XlkEI/ozoROUiaL\nncNm7fN4z//wRM9DACzijS0erbUcHorl2CIiyOY3+C5pxvOcmWTjh1dK+jpwRnq8DPz/ZOOD31pT\ncyawLCJ2Sue8WUsfegj5mths7ZDP4cHRWhYP9lLxjY6Zto8f4DxObLD9UVYfblFZ0Q4HkRufJmmr\niFiaXh7Kqtsy6nr3194/0NtmNkS26X4L23S/pf/1HZNvHmDvInyLbptVzmLnsFn7bN29A1t37wDA\nrmzHLyb/rIWjtZzD/UunAUjqWzot3+EwAei78J1B1pEAueXYgEXpl7dxwB2N5jeIiFm5l7cDh6Xt\nLwG/S+vH1zqO3EVzRDxT+lMOHV8Tm62F8jkMcNfkm1o8oq+Ji2ra4SDpcqAb2FzSY2R/Ae0vaQ9g\nJbAI+OwQnqOZdYy/tPsE1lnOYjPLtJzD9ZZOG9don4jolZRfju223H71llAbyHFka8M3lJsD4WxJ\n3cD/ACfW3EnQFs5hM1vF18RFFVml4ug6m6cOwbmYWcfzkIp2cRabWWaghn4KRQAACltJREFUHJ4N\n3NXsAEOxHFtTks4ElkfE5U12HUk2XOO3EXGKpC8B55EmNmsn57CZreJr4qIqzeFgZusq3z5mZtZe\nA+XwO9Kjz/fr7TQUy7ENSNIxwIeBpuMJIuJpSS9GxH+lTT8juzPCzKyD+Jq4qFaWxTSzdY5XqTAz\na6+WV6kYiuXY+qw2vwFkK2IApwKHpEnQ6qm9c+I6Sfun5x8gm43dzKyD+Jq4KGUTCw9hA1KsrJ2v\nuImnK/Zjr3h149I1I1XtP4SD4sbSNXfe3F2prZEvlO9B+88Jh5au+Q3dpWsAxvOr0jUXclKltqZy\nbOman3JkpbZeig1L1+yq8tdEqvj/wev00dI1V+hYIqLeLbFNSQq4peDe763cjg2+KjkM8Pgxzfep\ntfGr1W6cG9G7snTNR0cNOBl8Q7+6+eDmO9UY+cYKObxX+RyGall8IDMrtTWNvytdcxGfr9RWlSxe\nEV2la7bXotI1ACOjt3TNDfpQ6ZrdGMPJ+liljCyXw9Aoi1MnwIVkPzxNiYivS5oMzI6I6yW9DphG\ndrvE08DEiFiUas8gW8ViOXBSRMxM2/vnNwCWAZMiYmqaWHJUOg7A7RFxQqp5BHhDev854MCIWJCW\n4ZwGbAI8CRwbEUtKfPCOVCWLq+QwVMviKjkM1bK4Ug5vVO0X5f/cZ/iuiatkcZUcBriAL5auuZJP\nlK6pksNQLYur5DBUy+Ip+oKviYeJh1SYWQnuqTUza6/Wc3iIlmOrN78BEVFvFYq+9+quCRkRjwH7\nNaozM2s/XxMX5Q4HMyvB49XMzNrLOWxm1n7O4qLc4WBmJbg318ysvZzDZmbt5ywuyh0OZlaC1xw2\nM2sv57CZWfs5i4tyh4OZleDeXDOz9nIOm5m1n7O4KC+LaWYlrCj4qE/SQZIWSPqDpNPqvD9K0nRJ\nCyXdlmYq73vvjLR9vqQD07bRkm6WNE/SXElfyO0/XdI96fGIpHvS9r0l3Zt7fGwwvhkzs+FRNIc9\nvtjMbOg4h4vyHQ5mVkL13lxJI4CLgPHAE8BsSddExILcbscDz0TEWElHAueSrfm+K9mM6bsAo4FZ\nksaSJfnJETFH0kbA3ZJmRsSCiJiYa/tbZEuuAcwF9oqIlZK2Au6TdG1EVFsPzMxsWPlXNTOz9nMW\nF+U7HMyshJZ6c8cBCyPi0YhYDkwHJtTsMwH4UXo+A3h/en4IMD0iVqS14BcC4yJiaUTMAYiIF4D5\nwNZ12j4C+Ena7+Vc58IGgDsazGwt4jsczMzazzlclO9wMLMSWurN3RpYnHu9hKwTou4+EdEr6XlJ\nm6Xtt+X2e5yajgVJ2wF7AHfUbH8fsDQiHsptGwdcCowBPuW7G8xs7eFf1czM2s9ZXFRb73Domd/O\n1jtLz5xo9yl0jOd77mv3KXSM+T1PtvsUajTqvZ0PXJt71KU622r/w2+0z4C1aTjFDOCkdKdD3lGk\nuxv6CyPujIi3AnsDX5E0qtFJv9Y5h1dxDq/yVM+8dp9CR3mg5+l2n0KO73B4LXIWr+IsXsVZvEpn\n5TA4h4tzh0OH+I3/jd3PHQ6rdF6Hw/IGj+2AA3KPupaQ3VHQZzTZXA55i4FtACR1AZtExLOpdpt6\ntZJGknU2TIuIa/IHS8c4FPhpvROKiN8DLwJvbXTSr3XO4VWcw6s85f8wVvNgzzPtPoWcRjlc72Fr\nC/9fbhVn8SrO4lU6K4fBOVyc53AwsxJa6s2dDewgadt0R8FE1rwd4jrgmPT8cODm9PxasskjR0na\nHtgBuDO9dykwLyIurNPmAcD8iOjv2JC0XeqIQNK2wI7AoqYf3cysI/gOBzOz9nMOFzU8czhstmf9\n7Rs8AZv99Rqbu95RtaHXl67oqvgfws5sVL7oDQ2+B4DXPQFvWPO7ANizq3xTm/KW0jVjeHP5hoBN\n+ZvSNTvxhobvvcSohu+/jreVbmurunMINvcy65eu2YyXS9dojVEFq2zAH9mswf+W27N56bZa95fK\nlWlOhhOBmWSdnVMiYr6kycDsiLgemAJMk7QQeJqsU4KImCfpCmAeWXfxCRERkt4DfBKYK+lesmEW\nX4mIG1OzR1IznAJ4L3C6pFfJJoz8p4jotG7zwVcyhwHWGyCyGhlBhcACRqj8LbRj2bhSWw2zeKAc\n3rB8M1VyGKpl8RvZoVJbb2HTutuXsX7D99bj7ZXaevNqNykV01vhv6dNK/432DXA/LHr83Td73gM\nbyrdzpvZpHTN6qrnsHWAkllcJYehWhZXyWGomMUVron33KB8MzC818RVsrhR1sLAWTyK3Uu3NVw5\nDNWyuEoOQ7Usbp2zuChFDO04KaliepnZkIiIevMhNCVpEbBtwd0fjYjtqrRjg885bNZ5qmRxyRwG\nZ3FHcRabdRZfEw+PIe9wMDMzMzMzM7N1j+dwMDMzMzMzM7NB5w4HMzMzMzMzMxt0belwkHSQpAWS\n/iDptHacQ6eQtEjSfZLulXRn84rXFklTJC2TdH9u26aSZkr6vaRfSmp1hq21QoPvYpKkJZLuSY+D\n2nmO9triLF5lXc5i5/AqzmEbbs7hVdblHAZncZ6z+LVl2DscJI0ALgI+COwGHCVp5+E+jw6yEuiO\niHdExLh2n0wbTCX7byHvdGBWROxEtiziGcN+Vu1R77sAOD8i9kyPG+u8b1aas3gN63IWO4dXcQ7b\nsHEOr2FdzmFwFuc5i19D2nGHwzhgYUQ8GhHLgenAhDacR6cQ6/DQloi45f+1d8eqUYRRAIXPBbFQ\nO8EIihb6ACm0EQttLGwUQbCLCGKh72BrZWmjFim0sQimM6+QxkKwlRgkMYVPINdiJ+78Jms1O/9m\n5nzV7Da5THbPLpdhB/j1z9N3gNXmeBW42+tQlcw4FzB5jUhds8Wl0bbYDk/ZYfXMDpdG22GwxW22\neFhqvKnPAd9bj7eb58YqgU8RsRkRj2sPsyDOZOYuQGbuQJWb6y6SpxHxOSLejOVSOvXCFpdscckO\nl+yw5sEOl+zwQba4ZIuPoBoLh8M2U2O+N+e1zLwC3GbyJrpeeyAtlFfApcxcBnaAl5Xn0XDY4pIt\n1ix2WPNih0t2WP9ji4+oGguHbeBC6/F54EeFORZCs60kM/eANSaX143dbkQsAUTEWeBn5Xmqycy9\nzNz/8vEauFpzHg2KLW6xxQfY4YYd1hzZ4RY7fChb3LDFR1eNhcMmcDkiLkbEceABsF5hjuoi4kRE\nnGqOTwK3gC91p6oiKLf868DD5ngF+Nj3QBUV56L5cNl3j3G+PjQftrhhiwE73GaH1Rc73LDDf9ni\nKVs8EMf6/oOZ+TsingEbTBYebzPza99zLIglYC0iksn/4l1mblSeqVcR8R64AZyOiC3gOfAC+BAR\nj4At4H69Cfsz41zcjIhlJr/c/A14Um1ADYotLoy6xXZ4yg6rT3a4MOoOgy1us8XDEtMrUyRJkiRJ\nkrox2lvPSJIkSZKk+XHhIEmSJEmSOufCQZIkSZIkdc6FgyRJkiRJ6pwLB0mSJEmS1DkXDpIkSZIk\nqXMuHCRJkiRJUudcOEiSJEmSpM79AUNF5zJ7SK7pAAAAAElFTkSuQmCC\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Extract the energy-condensed delayed neutron fraction tally\n", + "beta_by_group = beta.get_condensed_xs(one_group).xs_tally.summation(filter_type='energy', remove_filter=True)\n", + "beta_by_group.mean.shape = (17, 17, 6)\n", + "beta_by_group.mean[beta_by_group.mean == 0] = np.nan\n", + "\n", + "# Plot the betas\n", + "plt.figure(figsize=(18,9))\n", + "fig = plt.subplot(231)\n", + "plt.imshow(beta_by_group.mean[:,:,0], interpolation='none', cmap='jet')\n", + "plt.colorbar()\n", + "plt.title('Beta - delayed group 1')\n", + "\n", + "fig = plt.subplot(232)\n", + "plt.imshow(beta_by_group.mean[:,:,1], interpolation='none', cmap='jet')\n", + "plt.colorbar()\n", + "plt.title('Beta - delayed group 2')\n", + "\n", + "fig = plt.subplot(233)\n", + "plt.imshow(beta_by_group.mean[:,:,2], interpolation='none', cmap='jet')\n", + "plt.colorbar()\n", + "plt.title('Beta - delayed group 3')\n", + "\n", + "fig = plt.subplot(234)\n", + "plt.imshow(beta_by_group.mean[:,:,3], interpolation='none', cmap='jet')\n", + "plt.colorbar()\n", + "plt.title('Beta - delayed group 4')\n", + "\n", + "fig = plt.subplot(235)\n", + "plt.imshow(beta_by_group.mean[:,:,4], interpolation='none', cmap='jet')\n", + "plt.colorbar()\n", + "plt.title('Beta - delayed group 5')\n", + "\n", + "fig = plt.subplot(236)\n", + "plt.imshow(beta_by_group.mean[:,:,5], interpolation='none', cmap='jet')\n", + "plt.colorbar()\n", + "plt.title('Beta - delayed group 6')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "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.12" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/docs/source/pythonapi/examples/mdgxs-part-ii.rst b/docs/source/pythonapi/examples/mdgxs-part-ii.rst new file mode 100644 index 0000000000..a42eb766b7 --- /dev/null +++ b/docs/source/pythonapi/examples/mdgxs-part-ii.rst @@ -0,0 +1,13 @@ +.. _notebook_mdgxs_part_ii: + +================================ +MDGXS Part II: Advanced Features +================================ + +.. only:: html + + .. notebook:: mdgxs-part-ii.ipynb + +.. only:: latex + + IPython notebooks must be viewed in the online HTML documentation. diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index 7c5132100e..4477e323d7 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -214,7 +214,6 @@ "source": [ "# Instantiate a Materials collection and export to XML\n", "materials_file = openmc.Materials([inf_medium])\n", - "materials_file.default_xs = '71c'\n", "materials_file.export_to_xml()" ] }, @@ -499,23 +498,37 @@ "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", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ################## %%%%%%%%%%%%%%%%%%%%%%%\n", + " ################### %%%%%%%%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%%%%%%\n", + " ##################### %%%%%%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%\n", + " ################# %%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%\n", + " ############ %%%%%%%%%%%%%%%\n", + " ######## %%%%%%%%%%%%%%\n", + " %%%%%%%%%%%\n", "\n", - " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.io/en/latest/license.html\n", - " Version: 0.7.1\n", - " Git SHA1: 3d68c07625e33cd64188df03ee03e9c31b3d4b74\n", - " Date/Time: 2016-07-22 21:03:18\n", + " | The OpenMC Monte Carlo Code\n", + " Copyright | 2011-2016 Massachusetts Institute of Technology\n", + " License | http://openmc.readthedocs.io/en/latest/license.html\n", + " Version | 0.8.0\n", + " Git SHA1 | fbebf7bf709fe2fe1813af95bff9b29c0d59312c\n", + " Date/Time | 2016-08-31 10:40:13\n", + " OpenMP Threads | 4\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -525,12 +538,12 @@ " Reading geometry XML file...\n", " Reading cross sections XML file...\n", " Reading materials XML file...\n", - " Reading H1.71c from /home/romano/openmc/data/nndc_hdf5/H1_71c.h5\n", - " Reading O16.71c from /home/romano/openmc/data/nndc_hdf5/O16_71c.h5\n", - " Reading U235.71c from /home/romano/openmc/data/nndc_hdf5/U235_71c.h5\n", - " Reading U238.71c from /home/romano/openmc/data/nndc_hdf5/U238_71c.h5\n", - " Reading Zr90.71c from /home/romano/openmc/data/nndc_hdf5/Zr90_71c.h5\n", - " Maximum neutron transport energy: 20.0000 MeV for H1.71c\n", + " Reading H1 from /home/romano/openmc/data/nndc_hdf5/H1.h5\n", + " Reading O16 from /home/romano/openmc/data/nndc_hdf5/O16.h5\n", + " Reading U235 from /home/romano/openmc/data/nndc_hdf5/U235.h5\n", + " Reading U238 from /home/romano/openmc/data/nndc_hdf5/U238.h5\n", + " Reading Zr90 from /home/romano/openmc/data/nndc_hdf5/Zr90.h5\n", + " Maximum neutron transport energy: 20.0000 MeV for H1\n", " Reading tallies XML file...\n", " Building neighboring cells lists for each surface...\n", " Initializing source particles...\n", @@ -600,20 +613,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.2300E-01 seconds\n", - " Reading cross sections = 1.6900E-01 seconds\n", - " Total time in simulation = 1.9882E+01 seconds\n", - " Time in transport only = 1.9869E+01 seconds\n", - " Time in inactive batches = 2.6590E+00 seconds\n", - " Time in active batches = 1.7223E+01 seconds\n", + " Total time for initialization = 3.9900E-01 seconds\n", + " Reading cross sections = 2.6500E-01 seconds\n", + " Total time in simulation = 1.1488E+01 seconds\n", + " Time in transport only = 1.1152E+01 seconds\n", + " Time in inactive batches = 1.2180E+00 seconds\n", + " Time in active batches = 1.0270E+01 seconds\n", " Time synchronizing fission bank = 4.0000E-03 seconds\n", - " Sampling source sites = 4.0000E-03 seconds\n", - " SEND/RECV source sites = 0.0000E+00 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 = 2.0217E+01 seconds\n", - " Calculation Rate (inactive) = 9402.03 neutrons/second\n", - " Calculation Rate (active) = 5806.19 neutrons/second\n", + " Total time for finalization = 1.0000E-03 seconds\n", + " Total time elapsed = 1.1901E+01 seconds\n", + " Calculation Rate (inactive) = 20525.5 neutrons/second\n", + " Calculation Rate (active) = 9737.10 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -894,7 +907,7 @@ " 6.250000e-07\n", " total\n", " (((total / flux) - (absorption / flux)) - (sca...\n", - " -3.774758e-15\n", + " -2.886580e-15\n", " 0.011292\n", " \n", " \n", @@ -904,7 +917,7 @@ " 2.000000e+01\n", " total\n", " (((total / flux) - (absorption / flux)) - (sca...\n", - " 1.443290e-15\n", + " -5.551115e-16\n", " 0.002570\n", " \n", " \n", @@ -917,8 +930,8 @@ "1 1 6.25e-07 2.00e+01 total \n", "\n", " score mean std. dev. \n", - "0 (((total / flux) - (absorption / flux)) - (sca... -3.77e-15 1.13e-02 \n", - "1 (((total / flux) - (absorption / flux)) - (sca... 1.44e-15 2.57e-03 " + "0 (((total / flux) - (absorption / flux)) - (sca... -2.89e-15 1.13e-02 \n", + "1 (((total / flux) - (absorption / flux)) - (sca... -5.55e-16 2.57e-03 " ] }, "execution_count": 22, @@ -1167,21 +1180,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.5.2" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index cb4df0fadf..341969fbdd 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -132,7 +132,6 @@ "source": [ "# Instantiate a Materials collection\n", "materials_file = openmc.Materials((fuel, water, zircaloy))\n", - "materials_file.default_xs = '71c'\n", "\n", "# Export to \"materials.xml\"\n", "materials_file.export_to_xml()" @@ -426,23 +425,37 @@ "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", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ################## %%%%%%%%%%%%%%%%%%%%%%%\n", + " ################### %%%%%%%%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%%%%%%\n", + " ##################### %%%%%%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%\n", + " ################# %%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%\n", + " ############ %%%%%%%%%%%%%%%\n", + " ######## %%%%%%%%%%%%%%\n", + " %%%%%%%%%%%\n", "\n", - " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.io/en/latest/license.html\n", - " Version: 0.7.1\n", - " Git SHA1: 3d68c07625e33cd64188df03ee03e9c31b3d4b74\n", - " Date/Time: 2016-07-22 21:32:41\n", + " | The OpenMC Monte Carlo Code\n", + " Copyright | 2011-2016 Massachusetts Institute of Technology\n", + " License | http://openmc.readthedocs.io/en/latest/license.html\n", + " Version | 0.8.0\n", + " Git SHA1 | fbebf7bf709fe2fe1813af95bff9b29c0d59312c\n", + " Date/Time | 2016-08-31 10:55:07\n", + " OpenMP Threads | 4\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -452,12 +465,12 @@ " Reading geometry XML file...\n", " Reading cross sections XML file...\n", " Reading materials XML file...\n", - " Reading U235.71c from /home/romano/openmc/data/nndc_hdf5/U235_71c.h5\n", - " Reading U238.71c from /home/romano/openmc/data/nndc_hdf5/U238_71c.h5\n", - " Reading O16.71c from /home/romano/openmc/data/nndc_hdf5/O16_71c.h5\n", - " Reading H1.71c from /home/romano/openmc/data/nndc_hdf5/H1_71c.h5\n", - " Reading Zr90.71c from /home/romano/openmc/data/nndc_hdf5/Zr90_71c.h5\n", - " Maximum neutron transport energy: 20.0000 MeV for U235.71c\n", + " Reading U235 from /home/romano/openmc/data/nndc_hdf5/U235.h5\n", + " Reading U238 from /home/romano/openmc/data/nndc_hdf5/U238.h5\n", + " Reading O16 from /home/romano/openmc/data/nndc_hdf5/O16.h5\n", + " Reading H1 from /home/romano/openmc/data/nndc_hdf5/H1.h5\n", + " Reading Zr90 from /home/romano/openmc/data/nndc_hdf5/Zr90.h5\n", + " Maximum neutron transport energy: 20.0000 MeV for U235\n", " Reading tallies XML file...\n", " Building neighboring cells lists for each surface...\n", " Initializing source particles...\n", @@ -518,7 +531,7 @@ " 48/1 1.21610 1.22612 +/- 0.00251\n", " 49/1 1.22199 1.22602 +/- 0.00245\n", " 50/1 1.20860 1.22558 +/- 0.00243\n", - " Triggers unsatisfied, max unc./thresh. is 1.25496 for flux in tally 10054\n", + " Triggers unsatisfied, max unc./thresh. is 1.25496 for flux in tally 10057\n", " The estimated number of batches is 73\n", " Creating state point statepoint.050.h5...\n", " 51/1 1.21850 1.22541 +/- 0.00237\n", @@ -544,7 +557,7 @@ " 71/1 1.19720 1.22444 +/- 0.00195\n", " 72/1 1.23770 1.22465 +/- 0.00193\n", " 73/1 1.23894 1.22488 +/- 0.00191\n", - " Triggers unsatisfied, max unc./thresh. is 1.00243 for flux in tally 10054\n", + " Triggers unsatisfied, max unc./thresh. is 1.00243 for flux in tally 10057\n", " The estimated number of batches is 74\n", " 74/1 1.22437 1.22487 +/- 0.00188\n", " Triggers satisfied for batch 74\n", @@ -557,20 +570,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.3000E-01 seconds\n", + " Total time for initialization = 4.0300E-01 seconds\n", " Reading cross sections = 2.6000E-01 seconds\n", - " Total time in simulation = 3.4077E+02 seconds\n", - " Time in transport only = 3.4068E+02 seconds\n", - " Time in inactive batches = 2.3968E+01 seconds\n", - " Time in active batches = 3.1680E+02 seconds\n", + " Total time in simulation = 1.3275E+02 seconds\n", + " Time in transport only = 1.3260E+02 seconds\n", + " Time in inactive batches = 8.2130E+00 seconds\n", + " Time in active batches = 1.2454E+02 seconds\n", " Time synchronizing fission bank = 3.0000E-02 seconds\n", - " Sampling source sites = 1.7000E-02 seconds\n", - " SEND/RECV source sites = 1.3000E-02 seconds\n", + " Sampling source sites = 2.2000E-02 seconds\n", + " SEND/RECV source sites = 8.0000E-03 seconds\n", " Time accumulating tallies = 3.0000E-03 seconds\n", - " Total time for finalization = 1.6000E-02 seconds\n", - " Total time elapsed = 3.4129E+02 seconds\n", - " Calculation Rate (inactive) = 4172.23 neutrons/second\n", - " Calculation Rate (active) = 1262.62 neutrons/second\n", + " Total time for finalization = 1.5000E-02 seconds\n", + " Total time elapsed = 1.3324E+02 seconds\n", + " Calculation Rate (inactive) = 12175.8 neutrons/second\n", + " Calculation Rate (active) = 3211.92 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1774,7 +1787,7 @@ "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1783,16 +1796,17 @@ ], "source": [ "# Create a loglog plot of the U-235 continuous-energy fission cross section \n", - "plt.loglog(fission.xs.x, fission.xs.y, color='b', linewidth=1)\n", + "plt.loglog(fission.xs['294K'].x, fission.xs['294K'].y, 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=['U235'], order_groups='decreasing', xs_type='micro')\n", + "y = np.squeeze(y)\n", "\n", "# Fix low energy bound to the value defined by the ACE library\n", - "x[0] = fission.xs.x[0]\n", + "x[0] = fission.xs['294K'].x[0]\n", "\n", "# Extend the mgxs values array for matplotlib's step plot\n", "y = np.insert(y, 0, y[0])\n", @@ -1857,7 +1871,7 @@ "data": { "image/png": "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\nfn35+EIOpHUAAAAASUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index a1eaa7ad82..0c8b843be1 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -135,7 +135,6 @@ "source": [ "# Instantiate a Materials object\n", "materials_file = openmc.Materials((fuel, water, zircaloy))\n", - "materials_file.default_xs = '71c'\n", "\n", "# Export to \"materials.xml\"\n", "materials_file.export_to_xml()" @@ -458,7 +457,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -552,6 +551,9 @@ "* `ChiPrompt` (`\"chi prompt\"`)\n", "* `InverseVelocity` (`\"inverse-velocity\"`)\n", "* `PromptNuFissionXS` (`\"prompt-nu-fission\"`)\n", + "* `DelayedNuFissionXS` (`\"delayed-nu-fission\"`)\n", + "* `ChiDelayed` (`\"chi-delayed\"`)\n", + "* `Beta` (`\"beta\"`)\n", "\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\"`, `'\"fission\"`, `\"nu-scatter matrix\"` and `\"chi\"` cross sections for our `Library`.\n", "\n", @@ -713,23 +715,37 @@ "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", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ################## %%%%%%%%%%%%%%%%%%%%%%%\n", + " ################### %%%%%%%%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%%%%%%\n", + " ##################### %%%%%%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%\n", + " ################# %%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%\n", + " ############ %%%%%%%%%%%%%%%\n", + " ######## %%%%%%%%%%%%%%\n", + " %%%%%%%%%%%\n", "\n", - " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.io/en/latest/license.html\n", - " Version: 0.7.1\n", - " Git SHA1: 3d68c07625e33cd64188df03ee03e9c31b3d4b74\n", - " Date/Time: 2016-07-23 16:42:32\n", + " | The OpenMC Monte Carlo Code\n", + " Copyright | 2011-2016 Massachusetts Institute of Technology\n", + " License | http://openmc.readthedocs.io/en/latest/license.html\n", + " Version | 0.8.0\n", + " Git SHA1 | fbebf7bf709fe2fe1813af95bff9b29c0d59312c\n", + " Date/Time | 2016-08-31 10:44:00\n", + " OpenMP Threads | 4\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -739,13 +755,13 @@ " Reading geometry XML file...\n", " Reading cross sections XML file...\n", " Reading materials XML file...\n", - " Reading U235.71c from /home/romano/openmc/data/nndc_hdf5/U235_71c.h5\n", - " Reading U238.71c from /home/romano/openmc/data/nndc_hdf5/U238_71c.h5\n", - " Reading O16.71c from /home/romano/openmc/data/nndc_hdf5/O16_71c.h5\n", - " Reading H1.71c from /home/romano/openmc/data/nndc_hdf5/H1_71c.h5\n", - " Reading B10.71c from /home/romano/openmc/data/nndc_hdf5/B10_71c.h5\n", - " Reading Zr90.71c from /home/romano/openmc/data/nndc_hdf5/Zr90_71c.h5\n", - " Maximum neutron transport energy: 20.0000 MeV for U235.71c\n", + " Reading U235 from /home/romano/openmc/data/nndc_hdf5/U235.h5\n", + " Reading U238 from /home/romano/openmc/data/nndc_hdf5/U238.h5\n", + " Reading O16 from /home/romano/openmc/data/nndc_hdf5/O16.h5\n", + " Reading H1 from /home/romano/openmc/data/nndc_hdf5/H1.h5\n", + " Reading B10 from /home/romano/openmc/data/nndc_hdf5/B10.h5\n", + " Reading Zr90 from /home/romano/openmc/data/nndc_hdf5/Zr90.h5\n", + " Maximum neutron transport energy: 20.0000 MeV for U235\n", " Reading tallies XML file...\n", " Building neighboring cells lists for each surface...\n", " Initializing source particles...\n", @@ -815,20 +831,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.3400E-01 seconds\n", - " Reading cross sections = 2.7900E-01 seconds\n", - " Total time in simulation = 6.1121E+01 seconds\n", - " Time in transport only = 6.1101E+01 seconds\n", - " Time in inactive batches = 5.0660E+00 seconds\n", - " Time in active batches = 5.6055E+01 seconds\n", - " Time synchronizing fission bank = 5.0000E-03 seconds\n", - " Sampling source sites = 3.0000E-03 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", + " Total time for initialization = 6.4800E-01 seconds\n", + " Reading cross sections = 4.8000E-01 seconds\n", + " Total time in simulation = 3.2830E+01 seconds\n", + " Time in transport only = 3.2659E+01 seconds\n", + " Time in inactive batches = 2.7510E+00 seconds\n", + " Time in active batches = 3.0079E+01 seconds\n", + " Time synchronizing fission bank = 9.0000E-03 seconds\n", + " Sampling source sites = 4.0000E-03 seconds\n", + " SEND/RECV source sites = 5.0000E-03 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 6.1576E+01 seconds\n", - " Calculation Rate (inactive) = 4934.86 neutrons/second\n", - " Calculation Rate (active) = 1783.96 neutrons/second\n", + " Total time elapsed = 3.3498E+01 seconds\n", + " Calculation Rate (inactive) = 9087.60 neutrons/second\n", + " Calculation Rate (active) = 3324.58 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -951,14 +967,6 @@ "collapsed": false }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/romano/openmc/openmc/tallies.py:1941: RuntimeWarning: invalid value encountered in true_divide\n", - " self_rel_err = data['self']['std. dev.'] / data['self']['mean']\n" - ] - }, { "data": { "text/html": [ @@ -1081,8 +1089,8 @@ "\n", "\tNuclide =\tO16\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", + " Group 1 [6.25e-07 - 20.0 MeV]:\t0.00e+00 +/- 0.00e+00%\n", + " Group 2 [0.0 - 6.25e-07 MeV]:\t0.00e+00 +/- 0.00e+00%\n", "\n", "\n", "\n" @@ -1300,8 +1308,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "[ NORMAL ] Ray tracing for track segmentation...\n", - "[ NORMAL ] Dumping tracks to file...\n", + "[ NORMAL ] Importing ray tracing data from file...\n", "[ NORMAL ] Computing the eigenvalue...\n", "[ NORMAL ] Iteration 0:\tk_eff = 0.854370\tres = 0.000E+00\n", "[ NORMAL ] Iteration 1:\tk_eff = 0.801922\tres = 1.521E-01\n", @@ -1562,7 +1569,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 43, @@ -1571,9 +1578,9 @@ }, { "data": { - "image/png": "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\nSUVORK5CYII=\n", + "image/png": "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\nQkiM+D/axcWYV0AhpgAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1599,21 +1606,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.5.2" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb index eaae92f7c9..301bbf0155 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iv.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iv.ipynb @@ -119,7 +119,6 @@ "source": [ "# Instantiate a Materials object\n", "materials_file = openmc.Materials((fuel, zircaloy, water))\n", - "materials_file.default_xs = '71c'\n", "\n", "# Export to \"materials.xml\"\n", "materials_file.export_to_xml()" @@ -432,7 +431,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -578,7 +577,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/romano/openmc/openmc/mgxs/library.py:312: RuntimeWarning: The P0 correction will be ignored since the scattering order 0 is greater than zero\n", + "/home/romano/openmc/openmc/mgxs/library.py:373: RuntimeWarning: The P0 correction will be ignored since the scattering order 0 is greater than zero\n", " warn(msg, RuntimeWarning)\n" ] } @@ -707,23 +706,37 @@ "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", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ################## %%%%%%%%%%%%%%%%%%%%%%%\n", + " ################### %%%%%%%%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%%%%%%\n", + " ##################### %%%%%%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%\n", + " ################# %%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%\n", + " ############ %%%%%%%%%%%%%%%\n", + " ######## %%%%%%%%%%%%%%\n", + " %%%%%%%%%%%\n", "\n", - " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.io/en/latest/license.html\n", - " Version: 0.7.1\n", - " Git SHA1: 3d68c07625e33cd64188df03ee03e9c31b3d4b74\n", - " Date/Time: 2016-07-23 16:50:57\n", + " | The OpenMC Monte Carlo Code\n", + " Copyright | 2011-2016 Massachusetts Institute of Technology\n", + " License | http://openmc.readthedocs.io/en/latest/license.html\n", + " Version | 0.8.0\n", + " Git SHA1 | fbebf7bf709fe2fe1813af95bff9b29c0d59312c\n", + " Date/Time | 2016-08-31 10:48:01\n", + " OpenMP Threads | 4\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -733,13 +746,13 @@ " Reading geometry XML file...\n", " Reading cross sections XML file...\n", " Reading materials XML file...\n", - " Reading U235.71c from /home/romano/openmc/data/nndc_hdf5/U235_71c.h5\n", - " Reading U238.71c from /home/romano/openmc/data/nndc_hdf5/U238_71c.h5\n", - " Reading O16.71c from /home/romano/openmc/data/nndc_hdf5/O16_71c.h5\n", - " Reading Zr90.71c from /home/romano/openmc/data/nndc_hdf5/Zr90_71c.h5\n", - " Reading H1.71c from /home/romano/openmc/data/nndc_hdf5/H1_71c.h5\n", - " Reading B10.71c from /home/romano/openmc/data/nndc_hdf5/B10_71c.h5\n", - " Maximum neutron transport energy: 20.0000 MeV for U235.71c\n", + " Reading U235 from /home/romano/openmc/data/nndc_hdf5/U235.h5\n", + " Reading U238 from /home/romano/openmc/data/nndc_hdf5/U238.h5\n", + " Reading O16 from /home/romano/openmc/data/nndc_hdf5/O16.h5\n", + " Reading Zr90 from /home/romano/openmc/data/nndc_hdf5/Zr90.h5\n", + " Reading H1 from /home/romano/openmc/data/nndc_hdf5/H1.h5\n", + " Reading B10 from /home/romano/openmc/data/nndc_hdf5/B10.h5\n", + " Maximum neutron transport energy: 20.0000 MeV for U235\n", " Reading tallies XML file...\n", " Building neighboring cells lists for each surface...\n", " Initializing source particles...\n", @@ -809,20 +822,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.6600E-01 seconds\n", - " Reading cross sections = 2.1400E-01 seconds\n", - " Total time in simulation = 7.0360E+01 seconds\n", - " Time in transport only = 7.0341E+01 seconds\n", - " Time in inactive batches = 9.6400E+00 seconds\n", - " Time in active batches = 6.0720E+01 seconds\n", - " Time synchronizing fission bank = 7.0000E-03 seconds\n", - " Sampling source sites = 5.0000E-03 seconds\n", - " SEND/RECV source sites = 2.0000E-03 seconds\n", + " Total time for initialization = 4.2200E-01 seconds\n", + " Reading cross sections = 2.8800E-01 seconds\n", + " Total time in simulation = 4.1409E+01 seconds\n", + " Time in transport only = 4.1265E+01 seconds\n", + " Time in inactive batches = 4.6120E+00 seconds\n", + " Time in active batches = 3.6797E+01 seconds\n", + " Time synchronizing fission bank = 9.0000E-03 seconds\n", + " Sampling source sites = 6.0000E-03 seconds\n", + " SEND/RECV source sites = 3.0000E-03 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 7.0764E+01 seconds\n", - " Calculation Rate (inactive) = 5186.72 neutrons/second\n", - " Calculation Rate (active) = 3293.81 neutrons/second\n", + " Total time elapsed = 4.1869E+01 seconds\n", + " Calculation Rate (inactive) = 10841.3 neutrons/second\n", + " Calculation Rate (active) = 5435.23 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -960,24 +973,10 @@ "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/romano/openmc/openmc/tallies.py:1941: RuntimeWarning: invalid value encountered in true_divide\n", - " self_rel_err = data['self']['std. dev.'] / data['self']['mean']\n", - "/home/romano/openmc/openmc/tallies.py:1942: RuntimeWarning: invalid value encountered in true_divide\n", - " other_rel_err = data['other']['std. dev.'] / data['other']['mean']\n", - "/home/romano/openmc/openmc/tallies.py:1943: RuntimeWarning: invalid value encountered in true_divide\n", - " new_tally._mean = data['self']['mean'] / data['other']['mean']\n" - ] - } - ], + "outputs": [], "source": [ "# Create a MGXS File which can then be written to disk\n", - "mgxs_file = mgxs_lib.create_mg_library(xs_type='macro', xsdata_names=['fuel', 'zircaloy', 'water'],\n", - " xs_ids='2m')\n", + "mgxs_file = mgxs_lib.create_mg_library(xs_type='macro', xsdata_names=['fuel', 'zircaloy', 'water'])\n", "\n", "# Write the file to disk using the default filename of `mgxs.xml`\n", "mgxs_file.export_to_xml()" @@ -991,7 +990,7 @@ "\n", "Since this example is using material-wise macroscopic cross sections without considering that the neutron energy spectra and thus cross sections may be changing in space, we only need to modify the materials.xml and settings.xml files. If the material names and ids are not otherwise changed, then the geometry.xml file does not need to be modified from its continuous-energy form. The tallies.xml file will be left untouched as it currently contains the tally types that we will need to perform our comparison. \n", "\n", - "First we will create the new materials.xml file. Continuous-energy cross section nuclidic data sets are named with the nuclide name followed by a cross section identifier. For example, the data for hydrogen is accessed in OpenMC by the name `H-1.71c`. The cross-section identifier (in this case, `71c`) can be used to distinguish between different variants of `H-1` data, such as for different evaluations or temperatures. OpenMC multi-group libraries use the same convention of a name followed by a xs identifier. We will use a cross section identifier here of `2m`. Similar to how continuous-energy cross section libraries are named, the `openmc.Macroscopic` quantities below can either have their `xs_id` included (i.e., `'fuel.2m'`). An alternative is to leave this extension off and simply change the `default_xs` parameter to `.2m`." + "First we will create the new materials.xml file." ] }, { @@ -1023,7 +1022,6 @@ "\n", "# Finally, instantiate our Materials object\n", "materials_file = openmc.Materials((fuel, zircaloy, water))\n", - "materials_file.default_xs = '2m'\n", "\n", "# Export to \"materials.xml\"\n", "materials_file.export_to_xml()\n" @@ -1082,23 +1080,37 @@ "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", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ################## %%%%%%%%%%%%%%%%%%%%%%%\n", + " ################### %%%%%%%%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%%%%%%\n", + " ##################### %%%%%%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%\n", + " ################# %%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%\n", + " ############ %%%%%%%%%%%%%%%\n", + " ######## %%%%%%%%%%%%%%\n", + " %%%%%%%%%%%\n", "\n", - " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.io/en/latest/license.html\n", - " Version: 0.7.1\n", - " Git SHA1: 3d68c07625e33cd64188df03ee03e9c31b3d4b74\n", - " Date/Time: 2016-07-23 16:52:09\n", + " | The OpenMC Monte Carlo Code\n", + " Copyright | 2011-2016 Massachusetts Institute of Technology\n", + " License | http://openmc.readthedocs.io/en/latest/license.html\n", + " Version | 0.8.0\n", + " Git SHA1 | fbebf7bf709fe2fe1813af95bff9b29c0d59312c\n", + " Date/Time | 2016-08-31 10:48:43\n", + " OpenMP Threads | 4\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -1111,9 +1123,9 @@ " Reading tallies XML file...\n", " Building neighboring cells lists for each surface...\n", " Loading Cross Section Data...\n", - " Loading fuel.2m Data...\n", - " Loading zircaloy.2m Data...\n", - " Loading water.2m Data...\n", + " Loading fuel Data...\n", + " Loading zircaloy Data...\n", + " Loading water Data...\n", " Initializing source particles...\n", "\n", " ===========================================================================\n", @@ -1122,56 +1134,56 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 0.99367 \n", - " 2/1 1.03173 \n", - " 3/1 1.01999 \n", - " 4/1 1.01421 \n", - " 5/1 1.03980 \n", - " 6/1 1.04540 \n", - " 7/1 1.04199 \n", - " 8/1 1.02680 \n", - " 9/1 1.01267 \n", - " 10/1 1.03420 \n", - " 11/1 1.05773 \n", - " 12/1 1.03475 1.04624 +/- 0.01149\n", - " 13/1 1.03632 1.04293 +/- 0.00741\n", - " 14/1 0.99297 1.03044 +/- 0.01355\n", - " 15/1 1.02413 1.02918 +/- 0.01057\n", - " 16/1 1.02359 1.02825 +/- 0.00868\n", - " 17/1 0.99913 1.02409 +/- 0.00843\n", - " 18/1 1.01493 1.02294 +/- 0.00739\n", - " 19/1 1.03010 1.02374 +/- 0.00657\n", - " 20/1 1.04890 1.02626 +/- 0.00639\n", - " 21/1 1.01267 1.02502 +/- 0.00591\n", - " 22/1 1.02637 1.02513 +/- 0.00540\n", - " 23/1 1.01374 1.02426 +/- 0.00504\n", - " 24/1 1.06661 1.02728 +/- 0.00556\n", - " 25/1 1.03212 1.02760 +/- 0.00519\n", - " 26/1 1.05433 1.02927 +/- 0.00513\n", - " 27/1 0.99891 1.02749 +/- 0.00514\n", - " 28/1 1.00616 1.02630 +/- 0.00499\n", - " 29/1 1.04583 1.02733 +/- 0.00483\n", - " 30/1 1.01512 1.02672 +/- 0.00462\n", - " 31/1 0.98104 1.02455 +/- 0.00491\n", - " 32/1 1.04202 1.02534 +/- 0.00474\n", - " 33/1 1.00779 1.02458 +/- 0.00460\n", - " 34/1 1.02450 1.02457 +/- 0.00440\n", - " 35/1 0.98882 1.02314 +/- 0.00446\n", - " 36/1 1.01541 1.02285 +/- 0.00429\n", - " 37/1 1.02050 1.02276 +/- 0.00413\n", - " 38/1 1.03573 1.02322 +/- 0.00401\n", - " 39/1 1.03649 1.02368 +/- 0.00389\n", - " 40/1 1.01434 1.02337 +/- 0.00378\n", - " 41/1 1.02345 1.02337 +/- 0.00365\n", - " 42/1 1.01900 1.02323 +/- 0.00354\n", - " 43/1 1.01450 1.02297 +/- 0.00344\n", - " 44/1 1.03127 1.02321 +/- 0.00335\n", - " 45/1 1.01598 1.02301 +/- 0.00326\n", - " 46/1 1.00851 1.02260 +/- 0.00319\n", - " 47/1 1.03406 1.02291 +/- 0.00312\n", - " 48/1 1.02373 1.02294 +/- 0.00303\n", - " 49/1 1.04066 1.02339 +/- 0.00299\n", - " 50/1 1.02011 1.02331 +/- 0.00292\n", + " 1/1 0.99122 \n", + " 2/1 1.03963 \n", + " 3/1 1.01551 \n", + " 4/1 1.03582 \n", + " 5/1 0.99023 \n", + " 6/1 1.00419 \n", + " 7/1 1.02047 \n", + " 8/1 1.05456 \n", + " 9/1 1.01063 \n", + " 10/1 1.03370 \n", + " 11/1 1.04616 \n", + " 12/1 1.04458 1.04537 +/- 0.00079\n", + " 13/1 1.02171 1.03748 +/- 0.00790\n", + " 14/1 1.02060 1.03326 +/- 0.00700\n", + " 15/1 1.01653 1.02992 +/- 0.00637\n", + " 16/1 1.02956 1.02986 +/- 0.00520\n", + " 17/1 1.01145 1.02723 +/- 0.00512\n", + " 18/1 1.03774 1.02854 +/- 0.00463\n", + " 19/1 1.00829 1.02629 +/- 0.00466\n", + " 20/1 1.03624 1.02729 +/- 0.00429\n", + " 21/1 1.03296 1.02780 +/- 0.00391\n", + " 22/1 0.99315 1.02491 +/- 0.00459\n", + " 23/1 0.99628 1.02271 +/- 0.00476\n", + " 24/1 1.04034 1.02397 +/- 0.00459\n", + " 25/1 1.02523 1.02406 +/- 0.00427\n", + " 26/1 1.07905 1.02749 +/- 0.00527\n", + " 27/1 1.01678 1.02686 +/- 0.00499\n", + " 28/1 1.01817 1.02638 +/- 0.00473\n", + " 29/1 1.03293 1.02672 +/- 0.00449\n", + " 30/1 1.01224 1.02600 +/- 0.00432\n", + " 31/1 1.01524 1.02549 +/- 0.00414\n", + " 32/1 1.00996 1.02478 +/- 0.00401\n", + " 33/1 1.05545 1.02612 +/- 0.00406\n", + " 34/1 1.02082 1.02589 +/- 0.00389\n", + " 35/1 0.99120 1.02451 +/- 0.00398\n", + " 36/1 1.03012 1.02472 +/- 0.00383\n", + " 37/1 1.01179 1.02424 +/- 0.00372\n", + " 38/1 1.04023 1.02481 +/- 0.00363\n", + " 39/1 1.05876 1.02598 +/- 0.00369\n", + " 40/1 0.99332 1.02490 +/- 0.00373\n", + " 41/1 1.05319 1.02581 +/- 0.00372\n", + " 42/1 1.03381 1.02606 +/- 0.00361\n", + " 43/1 1.00607 1.02545 +/- 0.00355\n", + " 44/1 1.03957 1.02587 +/- 0.00347\n", + " 45/1 1.02472 1.02584 +/- 0.00337\n", + " 46/1 1.00948 1.02538 +/- 0.00331\n", + " 47/1 1.02380 1.02534 +/- 0.00322\n", + " 48/1 1.05392 1.02609 +/- 0.00322\n", + " 49/1 1.01171 1.02572 +/- 0.00316\n", + " 50/1 1.03942 1.02606 +/- 0.00310\n", " Creating state point statepoint.50.h5...\n", "\n", " ===========================================================================\n", @@ -1181,27 +1193,27 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.6000E-02 seconds\n", - " Reading cross sections = 8.0000E-03 seconds\n", - " Total time in simulation = 5.5889E+01 seconds\n", - " Time in transport only = 5.5863E+01 seconds\n", - " Time in inactive batches = 7.1040E+00 seconds\n", - " Time in active batches = 4.8785E+01 seconds\n", - " Time synchronizing fission bank = 1.6000E-02 seconds\n", - " Sampling source sites = 1.0000E-02 seconds\n", - " SEND/RECV source sites = 6.0000E-03 seconds\n", - " Time accumulating tallies = 1.0000E-03 seconds\n", + " Total time for initialization = 4.1000E-02 seconds\n", + " Reading cross sections = 4.0000E-03 seconds\n", + " Total time in simulation = 3.1713E+01 seconds\n", + " Time in transport only = 3.1522E+01 seconds\n", + " Time in inactive batches = 3.8940E+00 seconds\n", + " Time in active batches = 2.7819E+01 seconds\n", + " Time synchronizing fission bank = 2.1000E-02 seconds\n", + " Sampling source sites = 1.2000E-02 seconds\n", + " SEND/RECV source sites = 9.0000E-03 seconds\n", + " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 5.5976E+01 seconds\n", - " Calculation Rate (inactive) = 7038.29 neutrons/second\n", - " Calculation Rate (active) = 4099.62 neutrons/second\n", + " Total time elapsed = 3.1791E+01 seconds\n", + " Calculation Rate (inactive) = 12840.3 neutrons/second\n", + " Calculation Rate (active) = 7189.33 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.02638 +/- 0.00260\n", - " k-effective (Track-length) = 1.02331 +/- 0.00292\n", - " k-effective (Absorption) = 1.02579 +/- 0.00132\n", - " Combined k-effective = 1.02558 +/- 0.00136\n", + " k-effective (Collision) = 1.02474 +/- 0.00282\n", + " k-effective (Track-length) = 1.02606 +/- 0.00310\n", + " k-effective (Absorption) = 1.02589 +/- 0.00165\n", + " Combined k-effective = 1.02601 +/- 0.00170\n", " Leakage Fraction = 0.00000 +/- 0.00000\n", "\n" ] @@ -1283,8 +1295,8 @@ "output_type": "stream", "text": [ "Continuous-Energy keff = 1.024295\n", - "Multi-Group keff = 1.025577\n", - "bias [pcm]: -128.2\n" + "Multi-Group keff = 1.026013\n", + "bias [pcm]: -171.8\n" ] } ], @@ -1381,7 +1393,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 40, @@ -1390,9 +1402,9 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAADDCAYAAACS2+oqAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXmYFcW1wH9nBEEQZBEQgxu463NBRY15alxwX0HE6xY1\nxjyf0ajRxJi4xCQaTVATzYtbjNsVjbhrFOOWyIiKCKJssgoCA7Ivst7z/uieubdv37mnB2aYmc75\nfd9803X69Knq6tPnVld3VYmq4jiO4zR/Khq7AI7jOE794AHdcRwnJXhAdxzHSQke0B3HcVKCB3TH\ncZyU4AHdcRwnJTS5gC4in4nIoY1djv9kRORVETl3A47/PxG5vj7L9J+IiOREpGeZ/am9V9wH1xNV\nNf+ADPARsBT4CngFOCTJsYbdh4FfbaidxvwLz2EVsCT8Wwp80tjlSlDuG4HVBWVeAvyksctVhzIv\nAN4DDqrD8W8DF26Eck4DVgKdiuSfADlg24R21gE9C/ysTvcK0BK4ARgfXuMZ4b17dGNfyxLX032w\nHv7MFrqIXAUMAn4NdAW2Be4FTrKO/Q/id6raPvxrp6r71ncGIrJJfdsEBheUub2q/r4B8qhvBqtq\ne2BL4B3g741bnJIoMBU4q1ogInsCm4X7kiIbWI4hBPfpOUBHYAfgbuD4kpk1jI9ZuA/WJ8avSXuC\nX87Ty+hsCtxF0HKfCdwJtAz3HUbQKrgKqAp1vhfuu5jgl24lwa/dC6F8KnBEwa/hU8Ajoc4YoHdB\n3jnCFkyYjrRiwjy+AL4Gnge6h/LtwmMrSv1yAr0ILtQiYC7wZJnzr7XlVJDPecD00NbPC/YL8DNg\nEjAPGAx0KDr2wvDYd0L5eQQtwHnAL6rrC+gGLAc6FtjvHea5SS0tjUetVkS5ugivdRWwGBgN7F6X\n61BwDS8BJhK0eO4xWkePFqR3I2jFdg7THYCXwnLOD7e3Dvf9GlgLrAh96Y+hfFdgaKg/DjijwP7x\nwOeh/gzgqoStsKnAz4EPC2R3ANeF5d22VGsNOB/4d7F/k+BeKVGGo0J/6J6grNeG1+8bgm7Y3cKy\nLSS4504q5RtlyvwjYHJ4HW5Pej3dBzfcB60W+sFAq7ACauMXQB9gL2DvcPsXBfu3AtoBWwPfB+4V\nkS1U9QHgCYIL3l5VT6nF/klAFtgirJx7C/bV2toRkSOA3wL9ge7AlwQB0zwWuAV4XVU7AD2AP5XR\nTcIhwE4EN9kNIrJLKL8cOBn4b4L6WQj8uejYQwku+DEishvB+Z9FcE5bhMehqlUEN8GAgmPPIXD+\ndRtQ9pJ1ISJ9ge8AO6rqFmG+84sPTnAdAE4A9iPwnwGh7bKIyKYEwWQ+Qb1BEIz+CmxD8CS5gtBf\nVPUXwL+By0J/u1xE2hDcSI8TtLYGAn8WkV1Dew8CF2vQGtsTeMsqVwHDgXYisouIVABnhvlYre6Y\nX9bhXinkSOADVZ2dQHcgcBxBMKoAXgReA7oQ+OgTIrJTHcp8KkFjojdwiohcmKAM5XAfTOiDVkDv\nDHytqrkyOhngZlWdr6rzgZuBwpcZq4FbVHWdqv4DWAbsUsJObbynqq9r8HP1GMEPRzXlbo4M8JCq\njlbVNQSto4NFZNsEea4BthORb6nqalWtNPSvEZEFIrIw/P9wwT4FbgrtfErQitg73HcJcL2qzg7L\n+CugfxgAqo+9UVW/UdVVBA75oqq+r6prCfpHC3mUsO5DG2cR1FltnFlU7q3qUBdrCH6odxcRUdUJ\n4Y9KMUmuw62qulRVZxD8KO1jlZngRrkI6F/tn6q6QFWfU9VVqrocuJXgB7E2TgSmquqjGjCaoJvi\njHD/amAPEWmnqotVdVQZW6V4jOCGP5qg5TWrjsdvCFsCc6oTItIxvM6LROSbIt27VXVW6GMHAW1V\n9XequlZV3wZepqD7KAG3hfU1k+Dpvdyx7oP16INWQJ8PbFkQYEqxNcEvXjXTQ1mNjaIfhBXA5ka+\nhcwp2F4BtDbKU1iu6dWJsHLnA99KcOw1BHXzoYiMEZELAETkOhFZKiJLRKSwJX2HqnZS1Y7h/wuK\n7BU6WeH5bwc8FzryAmAsgZN2K9CfWXROMwrO6RuiLZIXgN1EZDugL7BIVUeUOc+niso9p4ROyboI\nb/R7CFofVSLyFxEpdV2TXIfa6qfWMhO8z/kM2L96h4hsJiL3icg0EVkEvAt0EJHafvi3Aw6qrn8R\nWUhw81fXfz+Cltt0EXlbRA4qU65SPB7a+x7Bj22DEfpltW/2IKjj7tX7VXWhqnYkaIVuWnR4rT4W\nMp1k900pe8XxoBj3wXr0QSswvk/wBcepZXS+CgtVWMCkLZG6vCAqxQqgTUG68Nd9VmG5RKQtwRPH\nTIK+RWo7VlXnquoPVPVbwA8JHoF6quqtmn95c+kGlh2CH8LjQkeuduq2RY/JhXU0m+CRs/qcNgvP\nqbrcq4CnCVrp51C+dZ6I2uoi3HePqu4P7E7w1HVNCRPlrsOGlGsBwRPOTSJS7fxXE3RtHRA+nle3\njKpvpmJ/m0HwbqKw/tur6mVhHh+r6qkEXQ8vENRtXcr4JUEf9XHAsyVUllO7/8bMGXm1K/DNmcCb\nwAEiUiqYFgeXQtuzCLoLCtmW4D5PWubC47dlA59M3AeT+2DZgK6qSwheAtwrIqeEvz4tROQ4Ebkt\nVBsM/EJEthSRLYFfkjyQVBG89KkLhc74CZARkQoROZbgJWw1TwIXiMheItKKoA9tuKrOUNWvCRz0\nnPDYCwlevAQZiPQXkepf70UEL03KdTslLW8x9wG/rX70E5EuInJymWOfAU4SkYNEpCVwUwmbjxG0\nCE+iHgJ6bXUhIvuLSB8RaUHwMm0lpeuo1uuwoWVT1YkEfb0/DUXtwrIsEZFOxOun2N9eBnYWkXNC\nv24Znteu4XZGRNpr8A5iKcHLr7pyIcGLy+JuDoBRwOnhfbUjweN7bdTpXlHVNwi6Dp4Pr1PL8Fod\nTPkfhw+AFSJybVgnhxN0CzxZhzJfIyIdRGQb4Ari/dV1wn0wuQ+aXReqOojgK5VfELy5/RK4lPyL\n0l8DI4Dq/uERwG/KmSzYfoigf2iBiDxbYr91/I8JXiouJOine66g3G8S/Lg8SxC8dyB44VDNxQRv\n978meFM9rGDfAcAHIrIkPM/LVXVamTJdGz7qLgkfe+fWUt7i9N0Ev7pDRWQxUEnwUrnksao6luAL\ngqcIWh1LCK7JqgKdSgKnHrkBDluYb2110R54gOCrgKkE9XhHzJB9HcrVTxJ+D1wcNibuImg9fk1Q\nl68W6d4NnCEi80XkLlVdRtA1NZCgPmcBt5HvkjgXmBo+Ov+A4FE4CTXnoKpTVXVkqX0EX2isIehW\nfJigi6akHdbvXjmNIGA8TnCPTCG4Twpf+BX72BqCxsDxBPV4D3Cuqn6RsMwQ+PTHwEiCDxn+apSz\nFO6DAXXyQVHd0F4Pp7EIHx0XEbzln14gfxN4QlXX50ZynPVGRHIE/jilscvyn0iTG/rvlEdETgwf\nd9sCfwA+LQrmBwD7ErTiHcf5D8IDevPjFILHspkE/f41j44i8jeCb1qvCN/kO87Gxh/5GxHvcnEc\nx0kJ3kJ3HMdJCS0awmj4CeFdBD8YD6nq70ro+KOB06Co6oZObhXDfdtpCtTm2/Xe5SLBKM6JBHNJ\nzCKYdnegqo4v0lN+WpD3c/3gtCFRY48kyPDOBDpJBi2PSaAzoqiu/tQPflRU5gvssQp35n5t6lw5\n8S9l9/9x54tNG5e/9UBceFM/uClf5h5HfhHXKWJUzUwFtfMg3zd1VtPK1LlPL4nJ5ve7jM5D7qlJ\nf/VhuWlFQg6Seg/odfHt24JxIQA81u9Vzh2Sn+DwHn5k5nWOlvoaMMofFvzE1Elye699s10J4/3g\n6ryfXDbgdtPOn178mV2ecrNChbT6/SJT58tO8Rk8Luq3goeG5Mc8bb56mWln71ajTZ3v64Omzs8q\n7zZ1bv32jyPpJ/q9xNlDopPWXj+yfEDr2x6G7ly7bzdEl0sf4AtVnR5+0zqY4EWe4zR33LedJk1D\nBPRvEZ0LYiZ1mwfCcZoq7ttOk6ZB+tAT81y//PayKhibje4vNVi6mGG2SiJeSaAzpej5VXPwflGZ\nWWCa+Tg7yc5rdrHdKCO6T7ZtfF7CRi4Hb+blK6pKzYUU5ZkEI95HMcHUWUtLU2eFvhSTaW4dK7IF\n8sklpg+ZOhamjTPtbywe65cfILisagWjsvn6WUH8HIv5XO0+wNwye12FRB2qn7UuYTwH7+X9ZMJa\ne6LJ7Md2VkmGG+Wesc/r2c3XxGTrcsqz2by89Vr77Je1tG/8UdEetZJkJ5oqjJ4WtaM5ZXS2yPa0\nEvfslLEwNfDtUcYt1BAB/SuCCXmq6UF+Yp8ohX3mY7Owe9Go1o8S5HZIAp17bBVOSKBT3IcOcHBR\nme+3+9D3y3xm6jw+sfwo8/13ftu08ehbtdg4Mi9vk6APvX9kevvSLEowI3KSPvT3tfRCWG0yefnC\nhH3oDUBi3y7sMx+VncA+mXz9vJdgsa89dLGp89qCM0ydJH3ouQ4l+tABvpP3k10G2H6d2dyeskUX\nmipc0N8+r9M7XV1anslHvM1XryqpU8hvWtk3/j4JppTPVL5u6kz/9q4x2d6ZqOzpkeXv+33CPvTa\naIgul4+AHUVkOwkmgB9IMGG+4zR33LedJk29t9BVdZ2IXEYwYrH6066m8yzsOOuJ+7bT1GmQPnRV\nfY26rUrkOM0C922nKdO4L0ULp49aRvxb8BPtDkA5fIWpo9e3MXXWYS943vrE6PexuVUrqThxaUTW\nbo3ddzvUXq6Qq3YuNwMxXDnX/gD/qiPiNsbNGc1uR0ytSR+O3Rf/CN8zdcayu6nzPgebOquleDEd\nWCstIvK9+gw37XxqajQsX7BzzfYclkTSF/GQefwosb/9n9Gph6mz1US7L/6PA+JjGkasncz+A/K+\nsZgtTDu62lRhTYJxIy9tYb9jOEfiU/3PkXd5VvJLIlyxqf1t+HGx2W3jvC7HmDodvm2/HPjZ7Gh5\nsouUzOxo3/s7vQ8va6M3XRhaZr8P/Xccx0kJHtAdx3FSggd0x3GclOAB3XEcJyV4QHccx0kJHtAd\nx3FSggd0x3GclOAB3XEcJyU07sCiOwq2/w38d9F+e24dLulafiEIgG6/tRcCkHb2gKBV10YnMcpu\n3ppM56jscCpNO1vrLFPn91xfdv8uXc8zbexJfBKwoSykL/nZHg/Wkaad4exr6lw5yL4Oz159nKlz\nO9fGZF8zly3JD4Y6UV427TT2wKKHXskvcMEnWd7ZIj/p0o9PuNU8/hi1J3vqestSU2fhdSVmUixi\nC1bGZFmyZCiYKOpmu+33xQ32QKed5EtT5w2xF4C5Ta+LyV7TxRyrr9Wk9yvh/8WcONc+L11gx4Z7\nd73Q1Lm2+82R9LgOnzKq+14R2UlSfibObdmj7H5voTuO46QED+iO4zgpwQO64zhOSvCA7jiOkxI8\noDuO46QED+iO4zgpwQO64zhOSmjc79C3L9geX5QG2Nw2cc/Ca0ydinU529D99m/bbDpF0otYzWwu\ni8i2EnsG/346xNTRt64ou//DI+3J+/vpMzHZGNaxC1V5QR97YY8D7bUN4A27jk970K7je79/aUy2\njJW0ZVlNegj9EhToDwl0Go7cwvy5ZpdDZuE5NWldYB//ecdettIv7Tp/cxO7zk8/uoQPzFZ49Nya\npCRYl3un79kLSeuVtr9tt6/9Tfd44gsuz2IG49mmJr3fg3ZePGp/Yy7/WmfqrNMfmjp/uLxosfUJ\nWV4dXrQo9FHlbfTtAnBVrfu9he44jpMSPKA7juOkBA/ojuM4KcEDuuM4TkrwgO44jpMSPKA7juOk\nBA/ojuM4KcEDuuM4Tkpo1IFFH+2Xn6z9tQmLOXa/30T2H/DVCNNGxQI1dQ7o+G9TZ8Qupgrd/7Eo\nku4wGrp3XBGRDd77AtvQW7YK8fn7I7ScucY0MYCnYrI5vMvTHFaTPmLEKaad6982Vcj91h7E8fHP\ny0/OD3A/P4jJXuQbTiZboHOJaWe0qdGwfH52z5rtmbKMzzP5UXJPkil1SIRf/9le5GH4/9gLj5z+\nD1MFZpS4hz4ADszLv7qoo2mm87KFpk6rO+37df997fu+M/NjsipW0IfZNWn5q50Xz9squXdt3z74\nsD1tQ3sXDWJaKXFZK8NGy/K7vYXuOI6TEjygO47jpAQP6I7jOCnBA7rjOE5K8IDuOI6TEjygO47j\npAQP6I7jOCnBA7rjOE5KaJCBRSIyDVgM5IA1qtqnlN5AGVyzvVRe4W9yQmT/yK33SZCZvWpLHwaZ\nOt/sZ69c0nrzopVLFmbhuKJBIh/bv5FPnm0P5jnrnOfK7l+mD5g23ph7akyWXaJk5uZXVZKcXX/6\nvH1Ow66zB7l8B3vACO/G8+o2Dnq9mx/UdeBhH9h2Goikvv2UDKjZ/kw+Z5nkB1XtoWPsjC61r8u4\nBAOUDhr+qZ3XDSVW5NksC5m8/QcSrHx0w7X2PcSt9uo/Bz1p56XL4nl1+0DZcUV+cJNW2nUog+28\nZLypQp/D7KFse1z0USS9aLPJdMhEZV/TuayNjmxWdn9DjRTNAYerqj10zHGaF+7bTpOlobpcpAFt\nO05j4r7tNFkayjEVeENEPhKRixsoD8dpDNy3nSZLQ3W5HKKqs0WkC4Hzj1PV9xooL8fZmLhvO02W\nBgnoqjo7/D9PRJ4D+gAxp5/d78p8Yl38BcY/ckvMvMZK1tSZyEhT56mV9sxsLVtH86qsrIwrTTXN\nUDl+pqmjxnlN5UPTRnZJ/JwqP4KgkRkg7e36S/Iuc8LyBabOlwmuFSVeQFV+Fk1/9NWsmM7MscuY\nOW6ZbX8DSerbf+/3bP6YIt9eoPHyx/LBrqvhTDN1Wn2aYMbBbDyvYt8ek8TMWFtJSuQV431bRUvc\nr5WTIeLbbey8JEles9avDotZxJRIekVl/IX1N7SLydaOncTacZMAeM/oVKn3gC4ibYAKVV0mIm2B\nvsDNpXS7D8l/bbE0+wrtMtGvXI7LPWzmt4/Yb/qHMcfUOXPZk6ZO683jeWUyxV+5nGPakd49TJ2z\njPN6jeWmjczcv5aQKpnT818ISFe7/mhjn9N7p3Qydb6T4Frxr9J5ZY7Kb7c+bGvTTH9JMm9s3aiL\nb58x5PSa7c+yn7NnJv+Vy25q93SeleALllW8bOpkJiX4IqjYh2vEefkX59o+kNnd/spFaskrQoWd\nV6mvXEDJHFjg2wnykiR5jU/w9U6CvG4t0TLqkDk2kl5rfOXyHTbjqYra/b8hWujdgOdEREP7T6jq\n0AbIx3E2Nu7bTpOm3gO6qk4FEnxA7jjNC/dtp6nTqCsWXcetNdsfMI0DifYpTa/Y3rTxF73b1Okq\nX5s60zbf1tQZoWdE0pX6JTmNDgA6t61phrOmvWDqjN6x/Cop++XsDyzu63puTPZR+yks7ZpfTeeH\n19irsdDXVukvQ0ydOR8kyKt9CdlmUXn/p16x7TTyl4UHFrzj+IY5HFjQRdZH7PcfI3P26k4XzBln\n6tx+w2WmznXD4n3EOlE5t0C+zs4K+djua9Y9EvhAghWyxnXdPiab1WYZ4wpWhtrtRTuvlSfZec09\ns3w3CMA2N9t53XJj9Eb6F7M4lGER2emvlu8qXLhl+Tz8e1rHcZyU4AHdcRwnJXhAdxzHSQke0B3H\ncVKCB3THcZyU4AHdcRwnJXhAdxzHSQke0B3HcVJCow4suvipx2u29f0sD24SnQ9h7R528W7d8zpT\n53niK/cU8yP5k6nTT56JpDepWEeLijUR2cu7fte0c9Rye+TE3heVH6QxhRmmjR4S1/laFrGf5Ff/\n+eKOb5l2PqZ3Ap39TB3pn2DgydklhGMJ1ggKOeG2Z0ooRXlloKnSoHRmfs12O5ZF0k/qWebxlw+x\nV6T6Yf87TZ1T5Xk7r0N+F5ONnz6KXQ/J+89Uupl2es6pMnXkrQQTXT1kq+y+W3wWvFEjYPc282rS\nH5y6l2mnF5NNnW0n2QMT5924ualzJdHrtZyXeY4To0rPG/PG7F5+t7fQHcdxUoIHdMdxnJTgAd1x\nHCcleEB3HMdJCR7QHcdxUoIHdMdxnJTgAd1xHCcleEB3HMdJCY06sOjMAX+r2Z62djjbD1gd2f+E\nno7FcD3MzuiPi02Vay6/w9Tpw+hIOqdZBmrR4rCP2L+Rfz/vRFPnjPtfLLv/tKF2Pqv7xAcpjFuu\n7L3oq5r0plusM+3sdKCdl75kL6SrM3KmDlNL5PUicHI+eYdcY5pJsqZRQ/I0A2q2xzOaRexdk96T\nz2wD/e26+qUYy9cAr+rxps6d/Cwmy5IlU7BQdRW3mXZ0TILFlA+1/Y1zbH+7rseNMdnY5WMYc8p/\n1aRvJa5TzAB5zNS5t9f/mjpdWGLqdC9aiulrFrElsyOy6dN2K2/EWDzJW+iO4zgpwQO64zhOSvCA\n7jiOkxI8oDuO46QED+iO4zgpwQO64zhOSvCA7jiOkxI8oDuO46SERh1YNFF2qtleINNYXZAG+C/Z\nxrRxVu5vps6Tp9llWUJ7U0dv3iSaHqPoF+dGZJNu7GGXB3vFmv47blJ2/+8n2YMddmFiTDa6zWw6\nbNG9Jn0IbU07r3xwhqmzgs1MnU04z9TZYYdDYrLPuszjnzt0qUnPYmvTDkxPoNNw3HVfwWCdD7O8\ntjQ/SOeWS+yBUXO0o6mzKfYgnQ/pY+pc/FwJXxuhsFnet7vtYK80JLNNFXKvlvdrgI+P38PUOUOe\njsleq1jMsRXjatKDdK5pp7duaup02XaZqaNn2Of1g0EDIunhTOegohWThvc7oryRHkB8gakavIXu\nOI6TEjygO47jpAQP6I7jOCnBA7rjOE5K8IDuOI6TEjygO47jpAQP6I7jOCnBA7rjOE5KWO+BRSLy\nEHAiUKWqe4WyjsBTwHbANGCAqta6XFAPnZlP6IJoGvjFv/5glmPttvYp3LB9fEWWYs4sMVChmJdu\nPCqSHpmdTbtM94hsrnQ17Vym95g6FdeUH8jxk9H3mjau3ftXMdkEPqWCvWrSfZe/Ydo5b/zfTZ3B\n+51s6gw8rvwqTABTXtsqJvtMvqGn5FeEuQZ7dSmwy1wb9eHbbF+wes9UiaR/Pn+QXYYfJCjoXbbK\nZdv8ydSZdFp8oFbVNyuYdFqbmvROT34V0ylGP7LLs/bP9gClqoX2PdSixKCqJSjzyA9A2xq7zAPn\n2j4pg00VJMHAq/MnRGNMy9lKZsIHEdlDl1xU1sYedGZomf0b0kJ/GDimSPYz4J+qugvwFnDdBth3\nnMbCfdtplqx3QFfV94CFReJTgEfC7UeAU9fXvuM0Fu7bTnOlvvvQu6pqFYCqzgHsZyfHaR64bztN\nnoZ+KWp3LDlO88R922ly1Pdsi1Ui0k1Vq0RkK6DsdGcf9ruzZltzudh+HW/PJpftbN9Xn3X53NTZ\nXOwZ1ao0Op3c+MpFMZ0lsty0M1Xn2Xl9WH5/rrhDoATjPv80Jvuq8stI+qlVtp2Ws2yd9yfMNHVy\nCezMzX4Tk308bHUkvbDEa6GVY6eyctw0O4P1p06+zS398ttFvp2dZmcmMxKU6Hlb5cvOS0ydVro6\nJhtZGZVtVWnnpQlmW1wXzyrGp9kqU2cT4vFi7LDoO+rlat/TObt6kDm2TsG72NrzWhmNVZWfQHG7\nYN7Hb8WOWzF2OivGBfdtFeVnh9zQgC7hXzUvAt8jmODxfOCFcgf3GXJlzfbM7DB6ZKJTp37yrzPN\nAmS2tadknbC9PR3nCWIH/cnaPSY7bD2+cump9o/QkUsnld2fO8g0wai99yop3y2Tl5+5/BnTTuvx\ndl4V+9nTBg98bKSpMyVTehrekwvkj9DXtDNavm3qGGyQb/PLIfntt7Pw3fz0uZn9z7EzL/cpQzUJ\nevFHb2NPC91WV5SUn5Qp+MpF7BaEfmGXZ439u0+nTDdTp9RXLgDfzeTvv4XawbQzcK7tk5LgvNjB\nVsktlSKJkjkxKvvLLuWnz+1DZ+6s2K/W/evd5SIiWaAS2FlEvhSRC4DbgKNFZAJwZJh2nGaF+7bT\nXFnvFrqqZmrZdVQtcsdpFrhvO82VRl2x6HLygx7eZB5HEn38ea7qbNOGHGr3s9/8hP0gcvXZvzF1\nBhV9eryMLCcTvffnYK80s5JWpo5eEu8jLKTiv+1zuv2SG2OybKWSyeW7A+Sc8vkAyFQ7rzPHvWTq\n8A87r55z43l1XQw95+b7R//Q9WrTTqNH3uMKthW4PZ98e+3B5uFHPDPMzuOlBA/Ydk8YOxLvsO9G\nlh0LfHvNpXZeLc4o7lKI0/J1+37dLcGKVI9pvKt1ko5lM929Jn1jgoeoV7oeaep83sXusr1W/mjq\nrF0crcPcFrB2q2j36zHyelkbPdm57H4f+u84jpMSPKA7juOkBA/ojuM4KcEDuuM4TkrwgO44jpMS\nPKA7juOkBA/ojuM4KcEDuuM4Tkpo1IFFR7/6Xs22jspyW4foIJ1rz4ivuFPMb+/exNR57IozTJ1e\nMtnUma7ROSa+ZiXTuTIia4Fdnkmyk6nzrg4su//of9sDmLosjs+/kVsJa0/KD2aYyI6mna372wOh\nOp5tz/KVO96um9Vt47I1rWFlgfwmbjLtxNen2MgUTq72GnBsPvlexXfMw7fO2ZOD7JZgAq+9J9gT\nkZy1899isuk6nJcKJu16cI7d9ntm0xNNnTOvsn3grUG1DdTNc8PC22Oy7HLILHy5Jr2kvb2kU58W\n5Se7AnhT7GFq/84dYOocNr5oYN2sLOePLzrX8uOK6NsL4JJa93sL3XEcJyV4QHccx0kJHtAdx3FS\nggd0x3GclOAB3XEcJyV4QHccx0kJHtAdx3FSggd0x3GclNCoA4v0vYIVTiYI2iK64smwE+yFfk+9\n/ElT5wUGmDoXc4+pU1W0APRn8jlfS3Q1kx/qfaado6YmWI3m4/K7F/RvbZoY0ykum6EwpmBcQu8d\npph2dLC9Eg1P2KsRPY696PfejIrJZm+6hAlt2pfVKeY9U6OBWVZQZyslkr7p0t+Zhz9070WmzvRL\ny69eA9B5qAcbAAAJ2klEQVSTcabOjXJzTPZ+xXQOrlhUk/5lq1tMO2eJfS8+P8ge8HUI9v2xWS4+\naG6d/p2LcvlBhCuH2YPvtNUaU2fQgdeZOheInRcTitKz47Itbyg/Wqw9reHc2vd7C91xHCcleEB3\nHMdJCR7QHcdxUoIHdMdxnJTgAd1xHCcleEB3HMdJCR7QHcdxUoIHdMdxnJTQqAOLOLBg8MUqiaaB\n924+2jQhp6ipoy/Yq6T87w32KkL7MD6SzmqWjEZXHPkfooOPSvF/4642dei/ruzuTsfav8Udu8QH\nBI1bqezbukA+qXw+APKGndcmo+3rcPne+5o6F4wdHJPpV1muH5uv5x/ucadpp7G5+7CLa7ZHfDWJ\n/Q97uyZ9RYv7zeMflO+bOuN0pqkzgPNNnfM1Xucti317ku0D7+7Yx9Q5jVdNnSmytakzqNOVMdlH\nbadwQKfKvOBQe7Dbi4VLSdXC6cUDgkqgLX9g6vz1vLMi6eEtpnNQ5qWI7MLK8oOzlnQon4e30B3H\ncVKCB3THcZyU4AHdcRwnJXhAdxzHSQke0B3HcVKCB3THcZyU4AHdcRwnJXhAdxzHSQnrPbBIRB4C\nTgSqVHWvUHYjcDEwN1T7uaq+VquR+wsGo8xSGB8dnHLeK38xy/Hs8n6mzo03/NTUGSP/ZeockYsO\nHhihk5iv70Rk939ir1jU7/ghps4elFhuqIBHXrvCtHEaz8Vkc7LLmZhpW5Pedrk96Oquo39s6uhQ\ne1Wjd+RwU+fw3eMDT6pGjaLb7vkRFU+ts1c+gp8k0ClNffj2FdPvzSe+Hsxj0wfm03PsujrmiH+Z\nOl3e/NLUmTdlG1Pn/Z5DY7K5jOE+8vKrduxr2vk/+R9TZ5KeY+pcz/umTt+KeJmnVmzCuor84Kbx\nudtNO/ec/w9Th8eftnW2tFdFu3D+eVGBvsP95x4elXU2fOPw8rs3pIX+MFBqPalBqto7/Ks9mDtO\n08V922mWrHdAV9X3gPjCfpBgAUrHabq4bzvNlYboQ79MREaJyIMiskUD2HecxsJ922nS1PfkXH8G\nfqWqKiK/BgYBtS9fPrKg/1vjE+lMyX5kZrhmlV2oz1p9burMlCWmzojcpEh6amVVTEenZ007b42f\nZ+pMZHXZ/aOKJgorRUuWx2SfVEYrrPMqe1Kt0a3svBhjn/fC+ZNMnTW6NCZbXBlduX6VTo3prBv3\nBevGfWHa3wDq5ts/LOjnzxVNgDYlwW1XZV+Xldn5tp255d/FAMzt+llMtqRybCT9L2abdmaL3e//\ngU4zdVbKC6bOVMbEZPOGTY6k2+Ti/h83ZPstfGCrrFxr6+joIsFYKL7MKxfFj1s7FtYF98Coyvju\nQuo1oKtqYaR6AHipNl0Aehe8HJyVha2jMxf2zNhBdlSCl6J7trVfHmmCl6L75+JBdv/MjpH0459k\nYjrFHNHbftm7R827t9IsYVfTxomMKy2PvBRdYNqZ3dbO6+mh9nl3PGa4qdNJSwepbpnDa7bn5PYx\n7SxoYb8MrAt19u2/PJXffmEwnFLwUnTEpnaGY+yA3jpj+/XSBC9Fu/Z8o7Q8892a7UP5xLTzuRxq\n6hyo8UZQMS/KKabODmxWWp7JvxTtkCvVaxbljddtv2VYS1untf1SlOUdo2kFij8UaH18WRP7fBuG\nPlN7z9+GdrkIBf2KIrJVwb7TgfhPv+M0D9y3nWbHhny2mCX4iKaziHwJ3Ah8V0T2AXLANOCSeiij\n42xU3Led5sp6B3RVLfWs8vAGlMVxmgTu205zRVTtvroGyVhEr8j9tiY9PjuKXTPRvtFj5HXTzsN6\ngakzmZ6mzsjbv2PqxN5DTslCz6J7f22CL9sSrLLEEEPnqV+ZJvbLHRGTLci+QadMfiWoP+nlpp1v\n32D3n7LGVuH2BOfdq0T9Lc1Cu8LVc/6ZILO+qGqjfGYoIgqFL8BeBQr6RrvvZRv5eYKMktTnkQns\nLC4hm5GFbfJ13vIB+33WPp1HmToz6GHqbKq2M305bJe48I0sHF3gJw+ZZuBv9jsk6GircIut0vmG\naHpVFloVxY/W5V2272EwNCu1+rYP/Xccx0kJHtAdx3FSggd0x3GclOAB3XEcJyU0mYC+YGz5gTRN\nkkVjbZ0mxjdjpzV2EerO6uZXz1GmNHYB6s6SZljn05pZmdfWf3mbTkAf1xwDeumRmE2ZleOmN3YR\n6s7q5lfPUZphQF/aDOt8WjMr87r6L2+TCeiO4zjOhlHfk3PViR7kR1NvRutIGqA9O5s2djAWggBo\nyeZ2YbrZKnwTTU5uA722K9IpmoepJB1sFXYw9vfubprYtcR5V9EiIm/Lbqad3lubKpBgbiJ6J9Ap\n8Zny5OXQa48CQft2ppmRIxPk1YD07p2fa2Ty5E3o1atg7pEtExjokkBnzwQ6xf5ZimVx0eQx0Ktg\n+EaLTey23y4J7rMO2PPYtEzQztyybVw2uQX0KpQnOffe9gIvybDvR4rm55w8BnoVTyHVqryJHbeH\n+NIeeRp1YFGjZOz8x9C4A4scp+GozbcbLaA7juM49Yv3oTuO46QED+iO4zgpoUkEdBE5VkTGi8hE\nEflpY5cnCSIyTURGi8gnIvJhY5enFCLykIhUicinBbKOIjJURCaIyOtNaSm1Wsp7o4jMFJGR4d+x\njVnGuuB+3TA0N7+GjefbjR7QRaQCuIdglfU9gLNExF4ip/HJAYer6r6q2sfUbhxKrV7/M+CfqroL\n8BZw3UYvVe2UKi/AIFXtHf69trELtT64Xzcozc2vYSP5dqMHdKAP8IWqTlfVNcBgwF6DqvERmkb9\n1Uotq9efAjwSbj8CnLpRC1WGWsoLBSsHNSPcrxuI5ubXsPF8uylcuG8BMwrSM0NZU0eBN0TkIxG5\nuLELUwe6qgYLO6rqHKBrI5cnCZeJyCgRebCpPUqXwf1649Ic/Rrq2bebQkBvrhyiqr0JVi74XxFJ\nsEJGk6Spf7f6Z6Cnqu4DzAEGNXJ50o779caj3n27KQT0r4BtC9I9QlmTRlVnh//nAc8RPGI3B6pE\npBvULHzcpCfRUdV5mh8s8QBwQGOWpw64X29cmpVfQ8P4dlMI6B8BO4rIdiKyKTAQeLGRy1QWEWkj\nIpuH222BvjTdVeAjq9cT1O33wu3zgRc2doEMIuUNb85qTqfp1nMx7tcNS3Pza9gIvt2oc7kAqOo6\nEbmMYIqCCuAhVW3q06Z1A54Lh3i3AJ5Q1XJTLDQKtaxefxvwdxG5EJgODGi8EkappbzfFZF9CL6+\nmAZc0mgFrAPu1w1Hc/Nr2Hi+7UP/HcdxUkJT6HJxHMdx6gEP6I7jOCnBA7rjOE5K8IDuOI6TEjyg\nO47jpAQP6I7jOCnBA7rjOE5K8IDuOI6TEv4f7/6TlX7hPeYAAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1437,21 +1449,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 2", + "display_name": "Python 3", "language": "python", - "name": "python2" + "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.11" + "pygments_lexer": "ipython3", + "version": "3.5.2" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/pandas-dataframes.ipynb b/docs/source/pythonapi/examples/pandas-dataframes.ipynb index 412013f2f4..f913e941af 100644 --- a/docs/source/pythonapi/examples/pandas-dataframes.ipynb +++ b/docs/source/pythonapi/examples/pandas-dataframes.ipynb @@ -111,7 +111,6 @@ "source": [ "# Instantiate a Materials collection\n", "materials_file = openmc.Materials((fuel, water, zircaloy))\n", - "materials_file.default_xs = '71c'\n", "\n", "# Export to \"materials.xml\"\n", "materials_file.export_to_xml()" @@ -370,7 +369,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AHFxUkA9dy05MAAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA3LTIzVDE2OjM2OjAzLTA1OjAwxjuLbgAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wNy0yM1QxNjozNjowMy0wNTowMLdmM9IAAAAASUVORK5C\nYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AIHw8nG7lmgZ4AAAPZSURBVGje7Zs7buMwEIZ9iey5\n0gyNjQpXKTYudIScgkdQYTfut1idwkdQkQNsYQO2Qj0sPiVK+mlQDmwgwIcgg8Cc4fCTSK5W4OeF\nkM8rHv+2I/rgxPZEPZgR7XtQxKdXYuUXJSUnBQ/9WCgo4vOSJ+WFUvF7E08mlia+rn7VcKXP8sRs\nzFX8b2MdX2y6v1Tw6MZUw4H4ojfIjD8mvn/qRL5p4+vvlMqvp2EhR8WBzfiz20hXORmP9fi/bM9E\neUFvV5H/0yRkeSbiGRfFJErxD9ENdz7Mbhig/h89fvtFdMiI/ePUIXV4lXju8K3DKv9NThOZ3q2K\nmUy6grxFES8rjeyic+FFQav+ncg3fXjH+Ts+/iibztFqOiZuZP/Z3OafPX40NGgST2r+uvQkXXp6\ncKvmr+r0e1Eef5um3+JHP3IFF1D/seNZJgaDmvY0Gav1s+2f1fqpIcublfKGt6apotG/NVx3SInW\ntLX+7Vg/Pv1YqOsnun6JSVdOXT/X7vk75f938QP+8OmSBs0fXtymMhJbf8qlPynYmpKCh7OB1fzN\nalOj1sl0ZAruHLiA+RM73pDe/VjMVP89+aTXwjyc/x5n+u991895/utrJTy8/06TXh0r/5JOa2Jm\nYmqi4r/vUm/H4wLmT+z4anhr05X+q6KUXhtzr/9qSff5L5uMT//V/NdU4YuBTPa/8P67l/6r44ds\n+hYuoP5jx9ciy6XTWlibBrmx8V/TdMfjkP+6pOsu/lvM9N90sf7r+f6m/65n+S8p/itN15v0UkW3\n/+48+PRfJX6S9Joo4g+G/1qYG9KroqP/WypcuvyXPf13wH89/hHef7MB6R3Cqn55U4rv4kfH3zaS\ngQuYP7HjVf89tXrbO+hfLdr+Ozv/SP1dgtQ/Ov8C+i/3+q/Zf2D/HWi6bjT6rym9I/v/03/b+LHS\n4cTg/utTsV7/net/Afzz4f0XGX84/2j9xZ4/sePR/of2X7D/o+vPo/sv6h9B/Bfxr9j1Hz2eN/hO\n8/wfff4A848+f/1A/530/I0+/8PvH9D3H9HnT+R49P0b+v4PfP/4E/wXfP8Mvf9G37/D/ovuP8Se\nP7Hj0f0vdP8tqP9O339cyv7p3P1fdP8Z3v9G999j13/seMax8x/o+ZN7+O+E8zdP/8XOf8Hnz9Dz\nb7HnT+x49PxlCp7/BM+fOv13wvnXBfivt2lMvD8TyH/Hnb+Gz3+j589jz5/Y8ej9h4D+W7qQmf57\nefqv239n3T+C7z+h969i13/seMax+3/o/cMcu/8Y2H9n3p+J6r98pv8m4fwXuH+M3n+OO3++AX9c\nlR+4PhbRAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTA4LTMxVDEwOjM5OjI3LTA1OjAwYiZUvgAA\nACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wOC0zMVQxMDozOToyNy0wNTowMBN77AIAAAAASUVORK5C\nYII=\n", "text/plain": [ "" ] @@ -539,23 +538,37 @@ "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", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ################## %%%%%%%%%%%%%%%%%%%%%%%\n", + " ################### %%%%%%%%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%%%%%%\n", + " ##################### %%%%%%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%\n", + " ################# %%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%\n", + " ############ %%%%%%%%%%%%%%%\n", + " ######## %%%%%%%%%%%%%%\n", + " %%%%%%%%%%%\n", "\n", - " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.io/en/latest/license.html\n", - " Version: 0.7.1\n", - " Git SHA1: 3d68c07625e33cd64188df03ee03e9c31b3d4b74\n", - " Date/Time: 2016-07-23 16:36:04\n", + " | The OpenMC Monte Carlo Code\n", + " Copyright | 2011-2016 Massachusetts Institute of Technology\n", + " License | http://openmc.readthedocs.io/en/latest/license.html\n", + " Version | 0.8.0\n", + " Git SHA1 | fbebf7bf709fe2fe1813af95bff9b29c0d59312c\n", + " Date/Time | 2016-08-31 10:39:27\n", + " OpenMP Threads | 4\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -565,13 +578,13 @@ " Reading geometry XML file...\n", " Reading cross sections XML file...\n", " Reading materials XML file...\n", - " Reading U235.71c from /home/romano/openmc/data/nndc_hdf5/U235_71c.h5\n", - " Reading U238.71c from /home/romano/openmc/data/nndc_hdf5/U238_71c.h5\n", - " Reading O16.71c from /home/romano/openmc/data/nndc_hdf5/O16_71c.h5\n", - " Reading H1.71c from /home/romano/openmc/data/nndc_hdf5/H1_71c.h5\n", - " Reading B10.71c from /home/romano/openmc/data/nndc_hdf5/B10_71c.h5\n", - " Reading Zr90.71c from /home/romano/openmc/data/nndc_hdf5/Zr90_71c.h5\n", - " Maximum neutron transport energy: 20.0000 MeV for U235.71c\n", + " Reading U235 from /home/romano/openmc/data/nndc_hdf5/U235.h5\n", + " Reading U238 from /home/romano/openmc/data/nndc_hdf5/U238.h5\n", + " Reading O16 from /home/romano/openmc/data/nndc_hdf5/O16.h5\n", + " Reading H1 from /home/romano/openmc/data/nndc_hdf5/H1.h5\n", + " Reading B10 from /home/romano/openmc/data/nndc_hdf5/B10.h5\n", + " Reading Zr90 from /home/romano/openmc/data/nndc_hdf5/Zr90.h5\n", + " Maximum neutron transport energy: 20.0000 MeV for U235\n", " Reading tallies XML file...\n", " Building neighboring cells lists for each surface...\n", " Initializing source particles...\n", @@ -618,20 +631,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.2600E-01 seconds\n", - " Reading cross sections = 2.9500E-01 seconds\n", - " Total time in simulation = 1.1986E+01 seconds\n", - " Time in transport only = 1.1977E+01 seconds\n", - " Time in inactive batches = 1.8370E+00 seconds\n", - " Time in active batches = 1.0149E+01 seconds\n", - " Time synchronizing fission bank = 2.0000E-03 seconds\n", + " Total time for initialization = 4.4100E-01 seconds\n", + " Reading cross sections = 3.1500E-01 seconds\n", + " Total time in simulation = 5.7690E+00 seconds\n", + " Time in transport only = 5.7370E+00 seconds\n", + " Time in inactive batches = 7.9400E-01 seconds\n", + " Time in active batches = 4.9750E+00 seconds\n", + " Time synchronizing fission bank = 1.0000E-03 seconds\n", " Sampling source sites = 1.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", - " Time accumulating tallies = 0.0000E+00 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", + " Time accumulating tallies = 1.0000E-03 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 1.2431E+01 seconds\n", - " Calculation Rate (inactive) = 6804.57 neutrons/second\n", - " Calculation Rate (active) = 3694.95 neutrons/second\n", + " Total time elapsed = 6.2280E+00 seconds\n", + " Calculation Rate (inactive) = 15743.1 neutrons/second\n", + " Calculation Rate (active) = 7537.69 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -744,10 +757,10 @@ "text": [ "[[[ 0.1501735 ]]\n", "\n", - " [[ 0.05936257]]\n", - "\n", " [[ 0.21402727]]\n", "\n", + " [[ 0.05936257]]\n", + "\n", " [[ 0.13436703]]]\n" ] } @@ -848,8 +861,8 @@ " 0.00e+00\n", " 6.25e-07\n", " fission\n", - " 3.52e-04\n", - " 3.39e-05\n", + " 2.32e-04\n", + " 4.97e-05\n", " \n", " \n", " 5\n", @@ -859,8 +872,8 @@ " 0.00e+00\n", " 6.25e-07\n", " nu-fission\n", - " 8.57e-04\n", - " 8.26e-05\n", + " 5.65e-04\n", + " 1.21e-04\n", " \n", " \n", " 6\n", @@ -870,8 +883,8 @@ " 6.25e-07\n", " 2.00e+01\n", " fission\n", - " 1.02e-04\n", - " 6.16e-06\n", + " 6.96e-05\n", + " 6.90e-06\n", " \n", " \n", " 7\n", @@ -881,8 +894,8 @@ " 6.25e-07\n", " 2.00e+01\n", " nu-fission\n", - " 2.70e-04\n", - " 1.61e-05\n", + " 1.86e-04\n", + " 1.90e-05\n", " \n", " \n", " 8\n", @@ -892,8 +905,8 @@ " 0.00e+00\n", " 6.25e-07\n", " fission\n", - " 6.09e-04\n", - " 6.55e-05\n", + " 2.43e-04\n", + " 3.24e-05\n", " \n", " \n", " 9\n", @@ -903,8 +916,8 @@ " 0.00e+00\n", " 6.25e-07\n", " nu-fission\n", - " 1.48e-03\n", - " 1.60e-04\n", + " 5.91e-04\n", + " 7.90e-05\n", " \n", " \n", " 10\n", @@ -914,8 +927,8 @@ " 6.25e-07\n", " 2.00e+01\n", " fission\n", - " 1.38e-04\n", - " 6.74e-06\n", + " 7.27e-05\n", + " 4.76e-06\n", " \n", " \n", " 11\n", @@ -925,8 +938,8 @@ " 6.25e-07\n", " 2.00e+01\n", " nu-fission\n", - " 3.65e-04\n", - " 1.88e-05\n", + " 1.93e-04\n", + " 1.14e-05\n", " \n", " \n", " 12\n", @@ -936,8 +949,8 @@ " 0.00e+00\n", " 6.25e-07\n", " fission\n", - " 6.23e-04\n", - " 5.16e-05\n", + " 2.61e-04\n", + " 4.48e-05\n", " \n", " \n", " 13\n", @@ -947,8 +960,8 @@ " 0.00e+00\n", " 6.25e-07\n", " nu-fission\n", - " 1.52e-03\n", - " 1.26e-04\n", + " 6.35e-04\n", + " 1.09e-04\n", " \n", " \n", " 14\n", @@ -958,8 +971,8 @@ " 6.25e-07\n", " 2.00e+01\n", " fission\n", - " 1.74e-04\n", - " 9.99e-06\n", + " 6.00e-05\n", + " 4.53e-06\n", " \n", " \n", " 15\n", @@ -969,8 +982,8 @@ " 6.25e-07\n", " 2.00e+01\n", " nu-fission\n", - " 4.58e-04\n", - " 2.68e-05\n", + " 1.59e-04\n", + " 1.17e-05\n", " \n", " \n", " 16\n", @@ -980,8 +993,8 @@ " 0.00e+00\n", " 6.25e-07\n", " fission\n", - " 6.94e-04\n", - " 8.68e-05\n", + " 2.23e-04\n", + " 2.89e-05\n", " \n", " \n", " 17\n", @@ -991,8 +1004,8 @@ " 0.00e+00\n", " 6.25e-07\n", " nu-fission\n", - " 1.69e-03\n", - " 2.12e-04\n", + " 5.43e-04\n", + " 7.04e-05\n", " \n", " \n", " 18\n", @@ -1002,8 +1015,8 @@ " 6.25e-07\n", " 2.00e+01\n", " fission\n", - " 1.75e-04\n", - " 1.10e-05\n", + " 7.93e-05\n", + " 7.77e-06\n", " \n", " \n", " 19\n", @@ -1013,8 +1026,8 @@ " 6.25e-07\n", " 2.00e+01\n", " nu-fission\n", - " 4.55e-04\n", - " 2.80e-05\n", + " 2.07e-04\n", + " 1.94e-05\n", " \n", " \n", "\n", @@ -1027,22 +1040,22 @@ "1 1 1 1 0.00e+00 6.25e-07 nu-fission 5.37e-04 \n", "2 1 1 1 6.25e-07 2.00e+01 fission 7.43e-05 \n", "3 1 1 1 6.25e-07 2.00e+01 nu-fission 1.97e-04 \n", - "4 1 2 1 0.00e+00 6.25e-07 fission 3.52e-04 \n", - "5 1 2 1 0.00e+00 6.25e-07 nu-fission 8.57e-04 \n", - "6 1 2 1 6.25e-07 2.00e+01 fission 1.02e-04 \n", - "7 1 2 1 6.25e-07 2.00e+01 nu-fission 2.70e-04 \n", - "8 1 3 1 0.00e+00 6.25e-07 fission 6.09e-04 \n", - "9 1 3 1 0.00e+00 6.25e-07 nu-fission 1.48e-03 \n", - "10 1 3 1 6.25e-07 2.00e+01 fission 1.38e-04 \n", - "11 1 3 1 6.25e-07 2.00e+01 nu-fission 3.65e-04 \n", - "12 1 4 1 0.00e+00 6.25e-07 fission 6.23e-04 \n", - "13 1 4 1 0.00e+00 6.25e-07 nu-fission 1.52e-03 \n", - "14 1 4 1 6.25e-07 2.00e+01 fission 1.74e-04 \n", - "15 1 4 1 6.25e-07 2.00e+01 nu-fission 4.58e-04 \n", - "16 1 5 1 0.00e+00 6.25e-07 fission 6.94e-04 \n", - "17 1 5 1 0.00e+00 6.25e-07 nu-fission 1.69e-03 \n", - "18 1 5 1 6.25e-07 2.00e+01 fission 1.75e-04 \n", - "19 1 5 1 6.25e-07 2.00e+01 nu-fission 4.55e-04 \n", + "4 1 2 1 0.00e+00 6.25e-07 fission 2.32e-04 \n", + "5 1 2 1 0.00e+00 6.25e-07 nu-fission 5.65e-04 \n", + "6 1 2 1 6.25e-07 2.00e+01 fission 6.96e-05 \n", + "7 1 2 1 6.25e-07 2.00e+01 nu-fission 1.86e-04 \n", + "8 1 3 1 0.00e+00 6.25e-07 fission 2.43e-04 \n", + "9 1 3 1 0.00e+00 6.25e-07 nu-fission 5.91e-04 \n", + "10 1 3 1 6.25e-07 2.00e+01 fission 7.27e-05 \n", + "11 1 3 1 6.25e-07 2.00e+01 nu-fission 1.93e-04 \n", + "12 1 4 1 0.00e+00 6.25e-07 fission 2.61e-04 \n", + "13 1 4 1 0.00e+00 6.25e-07 nu-fission 6.35e-04 \n", + "14 1 4 1 6.25e-07 2.00e+01 fission 6.00e-05 \n", + "15 1 4 1 6.25e-07 2.00e+01 nu-fission 1.59e-04 \n", + "16 1 5 1 0.00e+00 6.25e-07 fission 2.23e-04 \n", + "17 1 5 1 0.00e+00 6.25e-07 nu-fission 5.43e-04 \n", + "18 1 5 1 6.25e-07 2.00e+01 fission 7.93e-05 \n", + "19 1 5 1 6.25e-07 2.00e+01 nu-fission 2.07e-04 \n", "\n", " std. dev. \n", " \n", @@ -1050,22 +1063,22 @@ "1 8.06e-05 \n", "2 7.91e-06 \n", "3 1.96e-05 \n", - "4 3.39e-05 \n", - "5 8.26e-05 \n", - "6 6.16e-06 \n", - "7 1.61e-05 \n", - "8 6.55e-05 \n", - "9 1.60e-04 \n", - "10 6.74e-06 \n", - "11 1.88e-05 \n", - "12 5.16e-05 \n", - "13 1.26e-04 \n", - "14 9.99e-06 \n", - "15 2.68e-05 \n", - "16 8.68e-05 \n", - "17 2.12e-04 \n", - "18 1.10e-05 \n", - "19 2.80e-05 " + "4 4.97e-05 \n", + "5 1.21e-04 \n", + "6 6.90e-06 \n", + "7 1.90e-05 \n", + "8 3.24e-05 \n", + "9 7.90e-05 \n", + "10 4.76e-06 \n", + "11 1.14e-05 \n", + "12 4.48e-05 \n", + "13 1.09e-04 \n", + "14 4.53e-06 \n", + "15 1.17e-05 \n", + "16 2.89e-05 \n", + "17 7.04e-05 \n", + "18 7.77e-06 \n", + "19 1.94e-05 " ] }, "execution_count": 24, @@ -1095,7 +1108,7 @@ "data": { "image/png": "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\n/wf1F+RhutXrZwAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1118,7 +1131,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 26, @@ -1127,9 +1140,9 @@ }, { "data": { - "image/png": "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\nJ/KLgSwAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVAAAAEZCAYAAADBv319AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XuwHOV55/Hvj4sE5iJuRgoCJITE1cQCE6yKHQdsAkI4\niBiHAJXF4GxWKSzvbsV2MIl3SShvwN6Us4sJC8SUbRJjGYebbBOCudgbtEHGAWGwJDgCJCSBxFUy\n4qLL0bN/TAtGo+6Z6XfUp88Z/T5VU5p5+3263z5n9Jy+vP2+igjMzKy8nepugJnZSOUEamaWyAnU\nzCyRE6iZWSInUDOzRE6gZmaJnED7lKQjJD0qaa2k2ZL+j6S/6GF9l0m6YXu20Wykk/uB9idJ3wDW\nRsTn6m7L9ibpWeCPIuL+uttiOzYfgfavCcAv625EWZJ2rrsNZt1yAu1Dku4DTgH+TtKvJE2W9E1J\nV2TL95f0A0mvSXpF0k+bYi+VtCKLWyTplKz8ckn/0FTvLElPSHpV0v2Sjmpa9qykz0l6LNvGdyWN\nKmjrpyQ9KOlrkl4GLpc0SdJ9kl6W9KKkf5S0d1b/JuBQ4AdZGz+flU+TNC/b3qOSfnu7/2DNWjiB\n9qGI+Bjwr8BnImLviFjSUuVzwHJgf+BA4M+hcd0U+AzwgYjYGzgdWNq86qZ6NwP/GXgv8M80Etou\nTXV/HzgNOAx4P3BRmyZ/EFiSteV/AAL+GhgHHA0cDPxltm8XAs8BH8/27W8kHQT8ELgiIvYFPg/c\nKmn/Dj8qs544ge6YNgK/BhwWEYMRMS8rHwRGAe+TtEtEPBcRz+bEnwv8MCLuj4hB4G+A3YHfbKrz\nvyNidUSsAX4ATG3TnpURcW1EbI6I9RHxdETcFxGbIuIV4G+B1iNKNb3/Q+BHEfEvABFxH/BzYEYX\nPwuzZE6gO6b/CTwN3CNpiaRLASLiaeC/0jjaWy3pZknjcuIPApZt+RCNO5HLgfFNdVY3vX8T2LNN\ne5Y3f5B0YHbav0LSGuAfgQPaxE8Azs0uJ7wq6TXgQzT+SJhVxgl0BxQR6yLi8xFxOHAW8KdbrnVG\nxJyI+C0aSQngKzmreL5p+RaHACtSm9Ty+a+BzcCxEbEPjSNMtam/HLgpIvbLXvtGxF4R8dXE9ph1\nxQl0ByTpTEmHZx9fBzYBm7O+o6dkN3w2AG/RSGStbgHOzOrukt3IeRv4t+3UxL2AdcDrksYDX2hZ\nvgqY1PT5H4HflXSapJ0k7Sbpt7Nro2aVcQLtX+06+E4B7pX0OjAP+LuI+CkwGrgKeInGUeZ7gcu2\nWXHEUzSOCq/J6p4J/G5EbOpi2934K+ADwJbrp7e2LL8K+G/Z6fqfRsQKYCaNm2Ev0bi88Hn8/baK\nuSO9mVki/4U2M0vkBGpmlsgJ1MwskROomVmiXTpXqY8k3+Eyq0lEqHOtYvtIsbb76ssiYmIv26vD\nsL4L30igGwqWnkujO2KrlL8JPX1PStqYEPNWQfkf0ugCmWf3hO0sTYj5VUIMFO9TO0X79AUaD1fl\nWZmwnVeHKCbldwT5P7tv0X64gbK/p7/qOYFKii93WfdL9J6w61DbKbyk6ZIWS3pqy6OEZtZfdu3y\nNVLVcgovaScanbA/RqPD9sOS7oyIxXW0x8yqMayvEW4Hde3fScBARCwDkDSHxpMkJRLoUZ2r9L0j\n627AMHFY3Q0YBsbW3YBcqRcpRoq6Euh4th6BZwWNpFrC0duxOSOV/4g0TOpcpe8NzwQ6kk/PuzEC\njrDPbXp/FO8mzqJxK1JmhBjKa9ebOlfZRtGNp/ltYlK+ui8nxKTcDILim4Pt5A5qDzzWJibl5s66\nhJg3EmKK9qeTvJ9d3rCtzTr9nl7KXtvXCEgwPalr/1bSmJZhi4MpvF2ad6d9i/Nzynaku/DQGPg9\nz450Fx5gekH5jnIXHuCENjHl78JvDz4CrcbDwGRJE4AXgPPIz4ZmNoL5CLQCETEoaTZwD42uVDdG\nxKI62mJm1fERaEUi4m58G9msrzmBmpklcjemup1Y8DfslV1g/5xluyVsI+Wma7sp0tp5OeFv8j4F\nMS/vDgfsXbCs/GYaA9WX1DphctdeSYgpmqX4SRoD2OfYpaC8nU2d7mjn+VlCzOSEGMi/Mbayw/pS\nbqb1bvgnmN70+/6ZWY18Cm9mlqjfE0y/75+Z1chHoGZmifo9wXhEejOrTK/D2XUz7KWkqyUNSFog\naWq3sZI+J2mzpP2ayi7L1rVI0mmd9q/f/0CYWY166cbUzbCXks4ADo+IKZI+CFwHTOsUK+lg4HeA\nZU3rOprG4BtH03i8/F5JU6LNqPM+AjWzyvR4BPrOsJcRsRHYMuxls5nATQARMR8YI2lsF7F/S2Mq\ng9Z1zYmITRGxFBigwyhxTqBmVpldunwVyBv2cnyXdQpjJZ0FLI+Ixzusa2XO9rbiU3gzq8yu3WaY\nlFEe87UdWk3S7sCf0zh975kTqJlVZpfeEmg3w16uBA7JqTOqIPZwYCLwmCRl5Y9IOqnL7W3Fp/Bm\nVpldd+7uVeCdYS8ljaIx7OXcljpzgQsBJE0D1kTE6qLYiHgiIsZFxKSIOIzGqf3xEfFitq4/kDRK\n0mE0no1t+4yuj0DNrDJdH4HmKBr2UtKsxuK4ISLukjRD0hIa0wJc3C42bzNkp/0RsVDSLcBCGiOf\nX9LuDjyMhAR6TUH5vwCn55SnzOuZMqbDgoQYgLcTYooG7BigePyP/5iwnR8mxKTsD8C3igYGaaNo\noJh1FA/usjRhBoDdEiapezvlmZvU0fxT1PNffdfRvcXnDXsZEde3fJ7dbWxOnUktn68Eruy2fcM/\ngZrZyNXnGabPd8/MatXnGabPd8/MatXnGabPd8/MapUyy/gI4gRqZtXp8wzT57tnZrXq8S78cOcE\nambV6fMM0+e7Z2a16vMM0+e7Z2a18k0kM7NEfZ5h+nz3zKxWfZ5h+nz3zKxWfZ5h+nz3zKxW7sZU\ns6IReHYtWHZq+eGBfnv8T0rH/HS36aVjkp1XsE+3b4Dfy1+25z6vl97MurvfWzqGl8uHAHBqQsyq\nNuXjCpZNTRgl6cHyIWmjUk1MCSJ/qrZngOPaxLyauK0eDf8M05M+3z0zq5XvwpuZJerzDNPnu2dm\nterzDOM5kcysOjt3+SogabqkxZKeknRpQZ2rJQ1IWiBpaqdYSVdIekzSo5LuljQuK58g6U1Jj2Sv\nazvtnhOomVWnh4nhJe1EY1Kf04FjgfMlHdVS5wzg8IiYAswCrusi9qsR8f6IOB74EXB50yqXRMQJ\n2euSbnbPzKwaRb1ounMSMBARywAkzQFmsvXMZzOBmwAiYr6kMZLGAocVxUbEuqb4PYDNTZ/bzivf\nykegZlad3k7hxwPLmz6vyMq6qdM2VtKXJT0HXAD896Z6E7PT9wckfbjT7jmBmll1ejiFT9TVEWRE\nfCkiDgW+A3w2K34BODQiTgA+B9wsqWi+V8AJ1Myq1FsCXQkc2vT54Kystc4hOXW6iQW4GTgHICI2\nRMRr2ftHgKeBI9rsnROomVWot1P4h4HJ2d3xUcB5wNyWOnOBCwEkTQPWRMTqdrGSJjfFnw0sysoP\nyG4+IWkSMJnGI16FfBPJzKrTQ4aJiEFJs4F7aBzs3RgRiyTNaiyOGyLiLkkzJC0B3gAubhebrfoq\nSUfQuHm0DPiTrPwjwBWSNmTLZkXEmop2z8ysgx4zTETcDRzZUnZ9y+fZ3cZm5Z8sqH8bcFuZ9g37\nBDrmqPwRJDYsWMOonGUTRy8tvY3BhAd2j/7AI6VjAH6N50vHvMBBueVr91vJmPELc5ctf+OQ3PK2\njupcZRuTO1fZbnH/VFD+Sxo9/fI8kbCdlHFifn5w+ZjUgVhe3j+ncC8gr3yLiYkb65FHYzIzS9Tn\nGabPd8/MatXnGabPd8/MauXh7MzMEvV5hunz3TOzWvV5hunz3TOzWvkU3swsUW+jMQ17TqBmVp0+\nzzB9vntmViufwpuZJerzDNPnu2dmterzDNPnu2dmtfIpfL3OHn17bvkzu/6cSaO3HXz6Ld5TehtH\n8GTpmPs4tXQMpLVvH/JH1NrIm4XLjtkjf5CRdh495/jSMc88VjSKR3vj3t92mMVcq1ZNyl+wCSia\nfOG80pspHrSknZT/ST9MiAGYvPe2Za/vDnvllG+xpHUmjCHiu/BmZol8BFoNSUuBtTQGLt0YESfV\n1RYzq0ifH6LVuXubgZO3zEFiZn2ozxNonXMiqebtm1nVepyVU9J0SYslPSXp0oI6V0sakLRA0tRO\nsZKukPSYpEcl3S1pXNOyy7J1LZJ0WqfdqzOBBfBjSQ9L+uMa22FmVelhUrlsgrdrgNNpzDlwvqSj\nWuqcARweEVOAWcB1XcR+NSLeHxHHAz8CLs9ijgHOBY4GzgCuldR2muQ6E+iHsvmXZwCf6WYSezMb\nYXo7Aj0JGIiIZRGxEZgDzGypMxO4CSAi5gNjJI1tFxsR65ri96BxORHgLGBORGyKiKXAQLaetrtX\ni4h4Ifv3JUm302jog631Hjjnhnfejzl6HPsc82sAvDjv6dz1bmBU6bZs4IXSMS/R9g/TkHh93i8L\nl22i/KXldQnzNbHssfIxwFu/fLF80KMH5pcvmlccs1/5zSTNo/RqQszbCTEAr+eUvdXmZwBA/txi\n71pCYxr07ay3OZHGA8ubPq9g24SWV2d8p1hJX6YxHfIa4JSmdf1bU8zKrKxQLQlU0nuAnSJinaQ9\ngNOAv8qre8qt/6lwPZMu+I1tyoaqH+hqPlY6pgrvvSC/HQclJMNXKN8P9MXEfqC7J/QDXTumoB8o\nwMkX5JcnzPXGmwkxKxJiynfVbdirqLzgZwCweqDkRo4oWb/A0GeYro5sIuJLwJeya6OfBf4yZWN1\nHYGOBW6XFFkbvhMR99TUFjOrSm8ZZiVwaNPng7Oy1jqH5NQZ1UUswM00roP+ZZt1FarlGmhEPBsR\nUyPi+Ig4LiKuqqMdZlax3q6BPgxMljRB0igaz5XNbakzl8apOJKmAWsiYnW7WEnNk2qfDSxuWtd5\nkkZJOozG5Ns/67R7ZmaViB6eRIqIQUmzgXtoHOzdGBGLJM1qLI4bIuIuSTMkLQHeAC5uF5ut+ipJ\nR9C4ebQM+JMsZqGkW2hcXNkIXBIR0a6NTqBmVpnBHjNMRNwNHNlSdn3L59ndxmbln2yzvSuBK7tt\n37BPoB9kfm75TjzDb7zT++Bdx7Og9Dbm88HSMSfzk9IxkHZzZzX5d5+f4Je8j/w/kIMJv9rXC+9O\nFPut9//f0jEAr3BA6Zgnz8y7/Qy/WruMvc/M7w0wcOf7S2+Hl8uHJPl4YtzPc8repsPAHSndEXrX\nawId7vp898ysTutHd9utcEOl7aiKE6iZVWZw5/4ejskJ1MwqM9jn49k5gZpZZTY5gZqZpUm5mTmS\n9PfemVmtfApvZpbICdTMLNH6hNHRRhInUDOrjK+Bmpkl8im8mVkiJ1Azs0TuB1qzyQXTDDzHi0zO\nGUhj2vLyU0xMo3zMqkPGlI4BuJ2zS8fslTuHA+zGW4XLUszgrtIxS5mYtK2UmQOKBjt5m91R0UAo\nUzeW3g5TO1fZxkO7lo/5m4TtwLujVzbbTIdZO5Ymbqw3vgZqZpbIp/BmZolSJnkcSeqc1tjM+twm\ndu7qVUTSdEmLJT2VTQCXV+dqSQOSFkia2ilW0lclLcrq3ypp76x8gqQ3JT2Sva7ttH9OoGZWmUF2\n6eqVR9JOwDXA6cCxwPmSjmqpcwZweERMAWYB13URew9wbERMpTH3+2VNq1wSESdkr0s67Z8TqJlV\nZpCdu3oVOAkYiIhlEbERmAPMbKkzE7gJICLmA2MkjW0XGxH3RsSW6SweYuvJr7uaFnkLJ1Azq0yP\nCXQ8sLzp84qsrJs63cQCfBr456bPE7PT9wckfbjT/vkmkplVpoZ+oF0fQUr6C2BjRNycFT0PHBoR\nr0k6AbhD0jERsa5oHU6gZlaZDYzuJXwlcGjT54OzstY6h+TUGdUuVtJFwAzgo1vKslP917L3j0h6\nGjgCeKSogT6FN7PK9HgK/zAwObs7Pgo4D5jbUmcucCGApGnAmohY3S5W0nTgC8BZEbF+y4okHZDd\nfELSJGAy8Ey7/fMRqJlVppdT+IgYlDSbxl3znYAbI2KRpFmNxXFDRNwlaYakJcAbwMXtYrNVf53G\nEeqPJQE8lN1x/whwhaQNNJ7tmhURa9q10QnUzCrT66OcEXE3cGRL2fUtn2d3G5uVTymofxtwW5n2\nOYGaWWX8KGfNigfSeDt32RsHlr+su350+cfN9lqfNojHR0b/a+mYieuX5pbfsjE4d/19ucseGH1y\n6e38Pz5UOuZ3+UHpGICvkPtQSVvHsyC3/HmWcVDBsp9PKP8Vf2neoZ0rtTpx24FtOppWqsvhu/bJ\nKVsFjGsTc+/BbRZWxwnUzCyRE6iZWaL1vXVjGvacQM2sMj4CNTNL5ARqZpao36f06HjLWtJnJe07\nFI0xs/7Sy3B2I0E3fX7GAg9LuiUboDSx74WZ7Wh6fJRz2OuYQCPiS8AU4EbgImBA0l9LOrzitpnZ\nCNfvCbSrY+eICEmraHTX3QTsC/yTpB9HxJ9V2UAzG7nW9/mcSB0TqKT/QmO0k5eBbwBfiIiN2agl\nA4ATqJnlGsnXN7vRzd7tB3wiIpY1F0bEZkkfr6ZZZtYPRvLpeTc6JtCIuLzNskVFy8zMdvgEamaW\nqt/7gQ77BHoET+aW/4JBjuDFbcr3+O7mnNrt7THm7dIxb59WOgSA/Ue/Ujpmzei84XfgjV3Xs2Z0\n/rPGp6+9v/R2lo85pHOlFsfxeOkYgD/ge6Vj5vPB3PL1vMIhW80f1pulH3q5dMyiJ08ov6EDyocA\nsCSnbF32GmZ8DdTMLFG/n8J7TiQzq8wGRnX1KpI9vLNY0lOScgeRlXS1pAFJCyRN7RQr6auSFmX1\nb5W0d9Oyy7J1LZLU8TzTCdTMKrOJnbt65cm6Sl4DnA4cC5wv6aiWOmcAh2fTdMwCrusi9h7g2IiY\nSqMr5mVZzDHAucDRwBnAtZ2evHQCNbPK9Pgs/EnAQEQsy6YcngPMbKkzE7gJICLmA2MkjW0XGxH3\nRsSWmyUP0ZjyGOAsYE5EbIqIpTSS60nt9s8J1Mwq0+OjnONhq7uDK7Kybup0EwvwaeCugnWtLIh5\nh28imVllariJ1PVgR5L+AtgYEd9N3ZgTqJlVpsd+oCuB5hn+Ds7KWuscklNnVLtYSRcBM4CPdrGu\nQj6FN7PK9HgN9GFgsqQJkkYB5wFzW+rMpTFWB5KmAWsiYnW7WEnTgS8AZ0XE+pZ1nSdplKTDgMnA\nz9rtn49Azawy7boodRIRg5Jm07hrvhNwY0QskjSrsThuiIi7JM2QtAR4A7i4XWy26q/TOEL9cXaT\n/aGIuCQiFkq6BVgIbAQuiYi281U7gZpZZXp9lDMi7gaObCm7vuXz7G5js/IpbbZ3JXBlt+1zAjWz\nyvhRTjOzRP3+KOewT6D7zc8f6GPPJbDf/I3bLig8OG8joRPDzh/tXCfPuG+sLR/04fzi/Z6H8Yvf\nyF+Y8L2dPObp0jH/xDnlNwQ8zeTSMQeyOrf8RdYWLlvKxNLbOZzyP4dFqxIGE0kd/CNvbJkoKH/H\nm4kb640TqJlZIifQHki6Efg4sDoifj0r2xf4HjABWAqcGxEJh2VmNtytJ3+4xX5RdT/Qb9J4mL/Z\nF4F7I+JI4H6yB/nNrP/0+6yclSbQiHgQeK2leCbw7ez9t4Gzq2yDmdWn3xNoHddAD8yeFCAiVkk6\nsIY2mNkQ8JQe1Wvb0/+cL777/uiJcMxhjffzflEQMJjQgqfKh2z6fsJ2gF3mJwStyS+e92ibmIRz\ni8fHbTtFSierux+7oSWuoPdAG6PYkFu+fN6KwpgXKD9dyy4pX6JFOT1COsaUDwG2PacDeGNeh6BO\nv9sl5M8V0hv3A93+VksaGxGrJY2jw2/21quKl13QenUVYFNCi8pPU8TG30/YDrBrSlBBNyaAC4om\nlk74w//jKeVPBpYwqfyGSOvGtHubrjjvu+DY3PI3C+ZRaqcoUbfz6E8TvhDlc3tD0fAW+15QHLPs\n2ZIbSfu9thrJp+fdGIrBRMTWQ0zNBS7K3n8KuHMI2mBmNfA10B5Iuhk4Gdhf0nPA5cBVwPclfRpY\nRmMIfTPrQ+s3pA8mMhJUmkAjouic4tQqt2tmw8PgJl8DNTNLMrhp5J6ed8MJ1Mwq4wRat/9eUP4C\nkNdzY//ymxhIGEwk4YZ1uqKeBYNtliUMVPE7zz9YOmb3g9IGqRidcKf7O+RfEVrFBn7Fb+Yuew9v\nld7OkxxROmbX9/2qdMzGe/fuXCnPbnkNKCh/R0r3lN5t2tjfCdRTephZZTYP7tLVq4ik6ZIWS3pK\n0qUFda6WNCBpgaSpnWIlfVLSE5IGJZ3QVD5B0puSHsle13bav+F/BGpmI1cPp/CSdgKuAT4GPA88\nLOnOiFjcVOcM4PCImCLpg8B1wLQOsY8Dvwdcz7aWRETXYxM6gZpZdd7uKcWcBAxExDIASXNojKWx\nuKnOTOAmgIiYL2mMpLHAYUWxEfFkVpb3GF2pR+t8Cm9m1dnU5SvfeGB50+cVWVk3dbqJzTMxO31/\nQFKbZwAbfARqZtUZ+ntXaYMzNDwPHBoRr2XXRu+QdExEFN6SdQI1s+r0lkBXAoc2fT6YbUcCWAkc\nklNnVBexW4mIjWRDtUTEI5KeBo4AHimK8Sm8mVVnY5evfA8Dk7O746OA82iMpdFsLnAhgKRpwJps\nuMxuYqHpiFXSAdnNJyRNAiYDz7TbPR+Bmll1UoaXzETEoKTZwD00DvZujIhFkmY1FscNEXGXpBmS\nlgBvABe3iwWQdDbwdeAA4IeSFkTEGcBHgCskbQA2A7MiomAwyQYnUDOrTo/XQCPibuDIlrLrWz7P\n7jY2K78DuCOn/DbgtjLtcwI1s+qkjnk6QjiBmll16nmCdMg4gZpZdZxAazajoPzfgQ/klN9XfhNT\nvlk+hnsSYgA+mhDzXEH5K8XLXpqxZ+nN7JzwbT/xjcIeHm09vsdxpWM+wr/mlv+CJ/n1glHNn9z2\nElhHKQOdHLT/86Vjlp2aOJjIEzllG4Fx7YLGpm2rV06gZmaJEubaG0mcQM2sOj10YxoJnEDNrDo+\nhTczS+RuTGZmiXwEamaWyAnUzCyRE6iZWSJ3YzIzS+RuTGZmiXwX3swska+Bmpkl8jXQmh1YUL53\nwbL9E7bx/YSYoxNiAH6aEDO1oHwlsCh/0XunFM6DVWhgysGlY9jj5fIxiZZvNfXNu15ldeGy/Snf\nvuN4vHTMd+d/unQM+5QPSbfXUG7sXX1+DdRzIplZdXqb1hhJ0yUtlvSUpEsL6lwtaUDSAklTO8VK\n+qSkJyQNZrNvNq/rsmxdiySd1mn3nEDNrDo9JNBsgrdrgNOBY4HzJR3VUucM4PCImALMAq7rIvZx\n4PdoOR+UdDRwLo3zyzOAayW1nSbZCdTMqtPbrJwnAQMRsSybcngOMLOlzkzgJoCImA+MkTS2XWxE\nPBkRA2w7h/xMYE5EbIqIpcBAtp5CTqBmVp31Xb7yjQeWN31ekZV1U6eb2E7bW9kpZvjfRDKzkWvo\nuzG1PeXe3pxAzaw6vXVjWgkc2vT54Kystc4hOXVGdRGbt728dRXyKbyZVWewy1e+h4HJkiZIGgWc\nB8xtqTMXuBBA0jRgTUSs7jIWtj5inQucJ2mUpMOAycDP2u2ej0DNrDo9nMJHxKCk2TSmcNwJuDEi\nFkma1VgcN0TEXZJmSFoCvAFc3C4WQNLZwNeBA4AfSloQEWdExEJJtwALaRw7XxIR0a6NTqBmVp0e\nr4FGxN2w9dSqEXF9y+fZ3cZm5XcAdxTEXAlc2W37nEDNrDp+lNPMLFFxF6W+4ARqZtXxaEw1+1ZB\n+Qs0nhNotSBhG3+SEJN3P68bKYOQnF5QvqnNsivKb2bKcStKxwz8WcIAJMCF6/+hdMzg6Pyv6yaW\nMbXgq/x6wiAad3Fm6Rj2LB/CQwkxkD8IyasF5e8Y0u6R7/IpvJlZoj4fjckJ1Myq41N4M7NETqBm\nZol8DdTMLJG7MZmZJfIpvJlZIp/Cm5klcjcmM7NEPoU3M0vkBGpmlsjXQM3MEvX5Eain9DAzSzT8\nj0CfKyhfS/7pwX4J27guIeZ9CTEAP0+IWVRQ/nybZZ9L2M63yodMebH8CE4AkfDNO2X0A7nlb7KO\nUwq+KD9iRuntTOTZ0jGvTN6/dAyTy4cArH1o3LaFO9Hhf3PbmSmGLUnTgf/Fu9NyfCWnztXAGTSm\n9LgoIha0i5W0L/A9YAKwFDg3ItZKmkDjf9TibNUPRcQl7drnI1AzG5Yk7QRcQ2PQxmOB8yUd1VLn\nDODwiJgCzCI7HOoQ+0Xg3og4ErgfuKxplUsi4oTs1TZ5QsUJVNKNklZL+kVT2eWSVkh6JHtNr7IN\nZlanjV2+cp0EDETEsojYCMwBZrbUmQncBBAR84ExksZ2iJ0JfDt7/23g7Kb1lRo4teoj0G+SP+Tv\n15qy/N0Vt8HMarOpy1eu8cDyps8rsrJu6rSLHZtNfUxErAIObKo3MTuwe0DShzvtXaXXQCPiwey6\nQquahsc2s6E15P2YUnLLlgvELwCHRsRrkk4A7pB0TESsKwqs6xrobEkLJH1D0pia2mBmlXury1eu\nlcChTZ8Pzspa6xySU6dd7KrsNB9J44AXASJiQ0S8lr1/BHgaOKLd3tVxF/5a4IqICElfBr4G/FFR\n5XOabvIePQqOGd14P6/wZ57g7YSYVYnb+lVCzIP5xfOebBOzJGE7iztX2catCTFA7Fw+ZuWe+QcC\nj84r/gU+SrsfUr5VjC4ds2FjUXeRCizJmfxo9bwOQZ3uwi+kuEtHL3o6An0YmJydxb4AnAec31Jn\nLvAZ4HuSpgFrImK1pJfbxM4FLgK+AnwKuBNA0gHAqxGxWdIkGv0knmnXwCFPoBHxUtPHvwd+0K7+\nrW3mLLtgex27pgx4kNOTpCsp36c2V2IuKFo2JWE7qxNizkmIIa0b08L9imduO/OComVHlt7Oi5xc\nOmbl+hPdTkbhAAAEmElEQVRLx6R668GCL9/kC4qDflK2G9P2OjlN70kfEYOSZgP38G5XpEWSZjUW\nxw0RcZekGZKW0OjGdHG72GzVXwFukfRpYBlwblb+EeAKSRuAzcCsiFjTro1DkUBF03UJSeOyC7cA\nnwCeGII2mFktersGmt1kPrKl7PqWz7O7jc3KXwVOzSm/DbitTPsqTaCSbgZOBvaX9BxwOXCKpKk0\nMvxSGn23zKwv9feznFXfhc87p/hmlds0s+Gkv0cTGf6PcprZCLY97/YOP06gZlYhn8LX67iC8ufY\nupdX5pVSl4Abvp5wF/7U+8vHAHz4QwlBtxeULwVeKliWckf9Ewkxib13Xjtxt9Ixr7NXbvlbbCpc\n9goHlN7Oifx76Zj77/146Rh+Uj4EaDxT0+rVgvJ31PXsik/hzcwS+QjUzCyRj0DNzBL5CNTMLJGP\nQM3MErkbk5lZIh+Bmpkl8jVQM7NEPgIdlhamjKvZZxaurbsFw8OzC1MGdO0z6xbW3YICPgIdlhY5\ngfpnkFm6yAmUdVUMhrw9+AjUzCyRj0DNzBL1dzcmRZQd6n/oSBq+jTPrcxHR0wgkkpYCebPy5lkW\nERN72V4dhnUCNTMbzuqa1tjMbMRzAjUzSzTiEqik6ZIWS3pK0qV1t6cukpZKekzSo5J+Vnd7hoqk\nGyWtlvSLprJ9Jd0j6UlJ/yJpe014PSwV/Awul7RC0iPZa3qdbdxRjKgEKmkn4BrgdOBY4HxJR9Xb\nqtpsBk6OiOMj4qS6GzOEvknj99/si8C9EXEkcD9w2ZC3amjl/QwAvhYRJ2Svu4e6UTuiEZVAgZOA\ngYhYFhEbgTnAzJrbVBcx8n5/PYuIB4HXWopnAt/O3n8bOHtIGzXECn4GUN+8HTuskfYfcDywvOnz\niqxsRxTAjyU9LOmP625MzQ6MiNUAEbEKOLDm9tRltqQFkr7R75cxhouRlkDtXR+KiBOAGcBnJH24\n7gYNIzti37xrgUkRMRVYBXyt5vbsEEZaAl3J1nNxHpyV7XAi4oXs35dozNu5I10HbbVa0lgASeOA\nF2tuz5CLiJfi3U7dfw/8Rp3t2VGMtAT6MDBZ0gRJo4DzgLk1t2nISXqPpD2z93sApwFP1NuqISW2\nvt43F7goe/8p4M6hblANtvoZZH84tvgEO9b3oTYj6ln4iBiUNBu4h0byvzEihuswNFUaC9yePeq6\nC/CdiLin5jYNCUk3AycD+0t6DrgcuAr4vqRPA8uAc+trYfUKfganSJpKo3fGUmBWbQ3cgfhRTjOz\nRCPtFN7MbNhwAjUzS+QEamaWyAnUzCyRE6iZWSInUDOzRE6gZmaJnEDNzBI5gdp2JenEbKDnUZL2\nkPSEpGPqbpdZFfwkkm13kq4Ads9eyyPiKzU3yawSTqC23UnalcbAL28Bvxn+klmf8im8VeEAYE9g\nL2C3mttiVhkfgdp2J+lO4LvAYcBBEfHZmptkVokRNZydDX+S/gOwISLmZJMAzpN0ckT8pOammW13\nPgI1M0vka6BmZomcQM3MEjmBmpklcgI1M0vkBGpmlsgJ1MwskROomVkiJ1Azs0T/H/ijYMyptGQL\nAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2124,7 +2137,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 36, @@ -2135,7 +2148,7 @@ "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -2162,7 +2175,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 37, @@ -2173,7 +2186,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/pythonapi/examples/post-processing.ipynb b/docs/source/pythonapi/examples/post-processing.ipynb index 19182aa7aa..a68ebb6046 100644 --- a/docs/source/pythonapi/examples/post-processing.ipynb +++ b/docs/source/pythonapi/examples/post-processing.ipynb @@ -106,7 +106,6 @@ "source": [ "# Instantiate a Materials collection\n", "materials_file = openmc.Materials((fuel, water, zircaloy))\n", - "materials_file.default_xs = '71c'\n", "\n", "# Export to \"materials.xml\"\n", "materials_file.export_to_xml()" @@ -339,7 +338,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AHFwIoGZ/M0BAAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDctMjJUMjE6NDA6\nMjUtMDU6MDBskW7/AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA3LTIyVDIxOjQwOjI1LTA1OjAw\nHczWQwAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AIHw8eOWKCTcAAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDgtMzFUMTA6MzA6\nNTctMDU6MDCU9nZtAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA4LTMxVDEwOjMwOjU3LTA1OjAw\n5avO0QAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -433,23 +432,37 @@ "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", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ################## %%%%%%%%%%%%%%%%%%%%%%%\n", + " ################### %%%%%%%%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%%%%%%\n", + " ##################### %%%%%%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%\n", + " ################# %%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%\n", + " ############ %%%%%%%%%%%%%%%\n", + " ######## %%%%%%%%%%%%%%\n", + " %%%%%%%%%%%\n", "\n", - " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.io/en/latest/license.html\n", - " Version: 0.7.1\n", - " Git SHA1: 3d68c07625e33cd64188df03ee03e9c31b3d4b74\n", - " Date/Time: 2016-07-22 21:40:25\n", + " | The OpenMC Monte Carlo Code\n", + " Copyright | 2011-2016 Massachusetts Institute of Technology\n", + " License | http://openmc.readthedocs.io/en/latest/license.html\n", + " Version | 0.8.0\n", + " Git SHA1 | fbebf7bf709fe2fe1813af95bff9b29c0d59312c\n", + " Date/Time | 2016-08-31 10:30:57\n", + " OpenMP Threads | 4\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -459,13 +472,13 @@ " Reading geometry XML file...\n", " Reading cross sections XML file...\n", " Reading materials XML file...\n", - " Reading U235.71c from /home/romano/openmc/data/nndc_hdf5/U235_71c.h5\n", - " Reading U238.71c from /home/romano/openmc/data/nndc_hdf5/U238_71c.h5\n", - " Reading O16.71c from /home/romano/openmc/data/nndc_hdf5/O16_71c.h5\n", - " Reading H1.71c from /home/romano/openmc/data/nndc_hdf5/H1_71c.h5\n", - " Reading B10.71c from /home/romano/openmc/data/nndc_hdf5/B10_71c.h5\n", - " Reading Zr90.71c from /home/romano/openmc/data/nndc_hdf5/Zr90_71c.h5\n", - " Maximum neutron transport energy: 20.0000 MeV for U235.71c\n", + " Reading U235 from /home/romano/openmc/data/nndc_hdf5/U235.h5\n", + " Reading U238 from /home/romano/openmc/data/nndc_hdf5/U238.h5\n", + " Reading O16 from /home/romano/openmc/data/nndc_hdf5/O16.h5\n", + " Reading H1 from /home/romano/openmc/data/nndc_hdf5/H1.h5\n", + " Reading B10 from /home/romano/openmc/data/nndc_hdf5/B10.h5\n", + " Reading Zr90 from /home/romano/openmc/data/nndc_hdf5/Zr90.h5\n", + " Maximum neutron transport energy: 20.0000 MeV for U235\n", " Reading tallies XML file...\n", " Building neighboring cells lists for each surface...\n", " Initializing source particles...\n", @@ -585,20 +598,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.5100E-01 seconds\n", - " Reading cross sections = 1.8600E-01 seconds\n", - " Total time in simulation = 3.1672E+02 seconds\n", - " Time in transport only = 3.1667E+02 seconds\n", - " Time in inactive batches = 1.0782E+01 seconds\n", - " Time in active batches = 3.0594E+02 seconds\n", - " Time synchronizing fission bank = 2.1000E-02 seconds\n", - " Sampling source sites = 1.2000E-02 seconds\n", - " SEND/RECV source sites = 9.0000E-03 seconds\n", - " Time accumulating tallies = 1.7000E-02 seconds\n", - " Total time for finalization = 1.8100E-01 seconds\n", - " Total time elapsed = 3.1729E+02 seconds\n", - " Calculation Rate (inactive) = 4637.36 neutrons/second\n", - " Calculation Rate (active) = 1470.89 neutrons/second\n", + " Total time for initialization = 4.4800E-01 seconds\n", + " Reading cross sections = 3.1000E-01 seconds\n", + " Total time in simulation = 3.4103E+02 seconds\n", + " Time in transport only = 3.4086E+02 seconds\n", + " Time in inactive batches = 4.8890E+00 seconds\n", + " Time in active batches = 3.3614E+02 seconds\n", + " Time synchronizing fission bank = 1.5000E-02 seconds\n", + " Sampling source sites = 1.1000E-02 seconds\n", + " SEND/RECV source sites = 4.0000E-03 seconds\n", + " Time accumulating tallies = 1.9000E-02 seconds\n", + " Total time for finalization = 1.8200E-01 seconds\n", + " Total time elapsed = 3.4170E+02 seconds\n", + " Calculation Rate (inactive) = 10227.0 neutrons/second\n", + " Calculation Rate (active) = 1338.71 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -707,14 +720,14 @@ "text/plain": [ "array([[[ 0.40945685, 0. ]],\n", "\n", - " [[ 0.40939021, 0. ]],\n", + " [[ 0.41078582, 0. ]],\n", "\n", - " [[ 0.410625 , 0. ]],\n", + " [[ 0.40926432, 0. ]],\n", "\n", " ..., \n", - " [[ 0.41130501, 0. ]],\n", + " [[ 0.41362317, 0. ]],\n", "\n", - " [[ 0.41228849, 0. ]],\n", + " [[ 0.41335428, 0. ]],\n", "\n", " [[ 0.41420317, 0. ]]])" ] @@ -754,26 +767,26 @@ "text/plain": [ "(array([[[ 0.00454952, 0. ]],\n", " \n", - " [[ 0.00454878, 0. ]],\n", + " [[ 0.00456429, 0. ]],\n", " \n", - " [[ 0.0045625 , 0. ]],\n", + " [[ 0.00454738, 0. ]],\n", " \n", " ..., \n", - " [[ 0.00457006, 0. ]],\n", + " [[ 0.00459581, 0. ]],\n", " \n", - " [[ 0.00458098, 0. ]],\n", + " [[ 0.00459283, 0. ]],\n", " \n", " [[ 0.00460226, 0. ]]]),\n", " array([[[ 1.64748193e-05, 0.00000000e+00]],\n", " \n", - " [[ 1.70922989e-05, 0.00000000e+00]],\n", + " [[ 1.74996463e-05, 0.00000000e+00]],\n", " \n", - " [[ 1.67622385e-05, 0.00000000e+00]],\n", + " [[ 1.74392771e-05, 0.00000000e+00]],\n", " \n", " ..., \n", - " [[ 1.69274948e-05, 0.00000000e+00]],\n", + " [[ 1.73541566e-05, 0.00000000e+00]],\n", " \n", - " [[ 1.57842763e-05, 0.00000000e+00]],\n", + " [[ 1.67854889e-05, 0.00000000e+00]],\n", " \n", " [[ 2.06590062e-05, 0.00000000e+00]]]))" ] @@ -855,7 +868,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 24, @@ -864,9 +877,9 @@ }, { "data": { - "image/png": "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\nAElFTkSuQmCC\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -898,7 +911,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1012,7 +1025,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 28, @@ -1023,7 +1036,7 @@ "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1074,7 +1087,7 @@ "data": { "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index dfd493f168..cd1098c062 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -105,7 +105,6 @@ "source": [ "# Instantiate a Materials collection\n", "materials_file = openmc.Materials((fuel, water, zircaloy))\n", - "materials_file.default_xs = '71c'\n", "\n", "# Export to \"materials.xml\"\n", "materials_file.export_to_xml()" @@ -136,8 +135,8 @@ "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')" + "min_z = openmc.ZPlane(z0=-100., boundary_type='vacuum')\n", + "max_z = openmc.ZPlane(z0=+100., boundary_type='vacuum')" ] }, { @@ -264,7 +263,7 @@ "settings_file.output = {'tallies': True}\n", "\n", "# Create an initial uniform spatial source distribution over fissionable zones\n", - "bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n", + "bounds = [-0.63, -0.63, -100., 0.63, 0.63, 100.]\n", "uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True)\n", "settings_file.source = openmc.source.Source(space=uniform_dist)\n", "\n", @@ -339,7 +338,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AHFwInLqDpadAAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDctMjJUMjE6Mzk6\nNDYtMDU6MDBOOEOsAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA3LTIyVDIxOjM5OjQ2LTA1OjAw\nP2X7EAAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AJAwQmKDRX/78AAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDktMDNUMDQ6Mzg6\nNDAtMDQ6MDBo/hqzAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA5LTAzVDA0OjM4OjQwLTA0OjAw\nGaOiDwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] @@ -410,7 +409,32 @@ "tally.filters.append(energy_filter)\n", "tally.scores = ['absorption', 'total']\n", "tally.nuclides = [o16, h1]\n", - "tallies_file.append(tally)" + "tallies_file.append(tally)\n", + "\n", + "# Instantiate a tally mesh \n", + "mesh = openmc.Mesh(mesh_id=1)\n", + "mesh.type = 'regular'\n", + "mesh.dimension = [1, 1, 1]\n", + "mesh.lower_left = [-0.63, -0.63, -100.]\n", + "mesh.width = [1.26, 1.26, 200.]\n", + "mesh_filter = openmc.Filter(type='mesh', bins=[mesh.id])\n", + "mesh_filter.mesh = mesh\n", + "\n", + "# Instantiate thermal, fast, and total leakage tallies\n", + "leak = openmc.Tally(name='leakage')\n", + "leak.filters = [mesh_filter]\n", + "leak.scores = ['current']\n", + "tallies_file.append(leak)\n", + "\n", + "thermal_leak = openmc.Tally(name='thermal leakage')\n", + "thermal_leak.filters = [mesh_filter, openmc.Filter(type='energy', bins=[0., 0.625e-6])]\n", + "thermal_leak.scores = ['current']\n", + "tallies_file.append(thermal_leak)\n", + "\n", + "fast_leak = openmc.Tally(name='fast leakage')\n", + "fast_leak.filters = [mesh_filter, openmc.Filter(type='energy', bins=[0.625e-6, 20.])]\n", + "fast_leak.scores = ['current']\n", + "tallies_file.append(fast_leak)" ] }, { @@ -484,12 +508,12 @@ "outputs": [], "source": [ "# Instantiate energy filter to illustrate Tally slicing\n", - "energy_filter = openmc.Filter(type='energy', bins=np.logspace(np.log10(1e-8), np.log10(20), 10))\n", + "fine_energy_filter = openmc.Filter(type='energy', bins=np.logspace(np.log10(1e-8), np.log10(20), 10))\n", "\n", "# Instantiate flux Tally in moderator and fuel\n", "tally = openmc.Tally(name='need-to-slice')\n", "tally.filters = [openmc.Filter(type='cell', bins=[fuel_cell.id, moderator_cell.id])]\n", - "tally.filters.append(energy_filter)\n", + "tally.filters.append(fine_energy_filter)\n", "tally.scores = ['nu-fission', 'scatter']\n", "tally.nuclides = [h1, u238]\n", "tallies_file.append(tally)" @@ -526,24 +550,39 @@ "name": "stdout", "output_type": "stream", "text": [ + "rm: cannot remove 'statepoint.*': No such file or directory\n", "\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", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%%%%%%%%%\n", + " ################## %%%%%%%%%%%%%%%%%%%%%%%\n", + " ################### %%%%%%%%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%%%%%%\n", + " ##################### %%%%%%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%%\n", + " ####################### %%%%%%%%%%%%%%%%%\n", + " ###################### %%%%%%%%%%%%%%%%%\n", + " #################### %%%%%%%%%%%%%%%%%\n", + " ################# %%%%%%%%%%%%%%%%%\n", + " ############### %%%%%%%%%%%%%%%%\n", + " ############ %%%%%%%%%%%%%%%\n", + " ######## %%%%%%%%%%%%%%\n", + " %%%%%%%%%%%\n", "\n", - " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.io/en/latest/license.html\n", - " Version: 0.7.1\n", - " Git SHA1: 3d68c07625e33cd64188df03ee03e9c31b3d4b74\n", - " Date/Time: 2016-07-22 21:39:46\n", + " | The OpenMC Monte Carlo Code\n", + " Copyright | 2011-2016 Massachusetts Institute of Technology\n", + " License | http://openmc.readthedocs.io/en/latest/license.html\n", + " Version | 0.8.0\n", + " Git SHA1 | 623b705a399f16c8e5063732bc6e6a357611542d\n", + " Date/Time | 2016-09-03 04:38:41\n", + " OpenMP Threads | 4\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -553,13 +592,13 @@ " Reading geometry XML file...\n", " Reading cross sections XML file...\n", " Reading materials XML file...\n", - " Reading U235.71c from /home/romano/openmc/data/nndc_hdf5/U235_71c.h5\n", - " Reading U238.71c from /home/romano/openmc/data/nndc_hdf5/U238_71c.h5\n", - " Reading O16.71c from /home/romano/openmc/data/nndc_hdf5/O16_71c.h5\n", - " Reading H1.71c from /home/romano/openmc/data/nndc_hdf5/H1_71c.h5\n", - " Reading B10.71c from /home/romano/openmc/data/nndc_hdf5/B10_71c.h5\n", - " Reading Zr90.71c from /home/romano/openmc/data/nndc_hdf5/Zr90_71c.h5\n", - " Maximum neutron transport energy: 20.0000 MeV for U235.71c\n", + " Reading U235 from /opt/xsdata/nndc_new/U235.h5\n", + " Reading U238 from /opt/xsdata/nndc_new/U238.h5\n", + " Reading O16 from /opt/xsdata/nndc_new/O16.h5\n", + " Reading H1 from /opt/xsdata/nndc_new/H1.h5\n", + " Reading B10 from /opt/xsdata/nndc_new/B10.h5\n", + " Reading Zr90 from /opt/xsdata/nndc_new/Zr90.h5\n", + " Maximum neutron transport energy: 20.0000 MeV for U235\n", " Reading tallies XML file...\n", " Building neighboring cells lists for each surface...\n", " Initializing source particles...\n", @@ -570,26 +609,26 @@ "\n", " Bat./Gen. k Average k \n", " ========= ======== ==================== \n", - " 1/1 1.03471 \n", - " 2/1 1.03257 \n", - " 3/1 1.00600 \n", - " 4/1 1.04547 \n", - " 5/1 1.02287 \n", - " 6/1 1.05752 \n", - " 7/1 1.04283 1.05017 +/- 0.00734\n", - " 8/1 1.05189 1.05074 +/- 0.00428\n", - " 9/1 1.01645 1.04217 +/- 0.00909\n", - " 10/1 1.04978 1.04369 +/- 0.00721\n", - " 11/1 1.03459 1.04218 +/- 0.00608\n", - " 12/1 1.04019 1.04189 +/- 0.00514\n", - " 13/1 1.05985 1.04414 +/- 0.00499\n", - " 14/1 1.02111 1.04158 +/- 0.00509\n", - " 15/1 1.04774 1.04219 +/- 0.00459\n", - " 16/1 1.00733 1.03902 +/- 0.00523\n", - " 17/1 1.02224 1.03763 +/- 0.00497\n", - " 18/1 1.03263 1.03724 +/- 0.00459\n", - " 19/1 1.01611 1.03573 +/- 0.00451\n", - " 20/1 1.04692 1.03648 +/- 0.00426\n", + " 1/1 0.96168 \n", + " 2/1 0.96651 \n", + " 3/1 1.00678 \n", + " 4/1 0.98773 \n", + " 5/1 1.01883 \n", + " 6/1 1.02959 \n", + " 7/1 0.99859 1.01409 +/- 0.01550\n", + " 8/1 1.03441 1.02086 +/- 0.01123\n", + " 9/1 1.06097 1.03089 +/- 0.01279\n", + " 10/1 1.06094 1.03690 +/- 0.01159\n", + " 11/1 1.04687 1.03856 +/- 0.00961\n", + " 12/1 1.02982 1.03731 +/- 0.00821\n", + " 13/1 1.03520 1.03705 +/- 0.00712\n", + " 14/1 0.99508 1.03239 +/- 0.00782\n", + " 15/1 1.03973 1.03312 +/- 0.00703\n", + " 16/1 1.03807 1.03357 +/- 0.00638\n", + " 17/1 1.03091 1.03335 +/- 0.00583\n", + " 18/1 1.01421 1.03188 +/- 0.00556\n", + " 19/1 0.99339 1.02913 +/- 0.00583\n", + " 20/1 1.04827 1.03040 +/- 0.00558\n", " Creating state point statepoint.20.h5...\n", "\n", " ===========================================================================\n", @@ -599,28 +638,28 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.5600E-01 seconds\n", - " Reading cross sections = 2.3400E-01 seconds\n", - " Total time in simulation = 1.8333E+01 seconds\n", - " Time in transport only = 1.8325E+01 seconds\n", - " Time in inactive batches = 2.6950E+00 seconds\n", - " Time in active batches = 1.5638E+01 seconds\n", + " Total time for initialization = 3.8900E-01 seconds\n", + " Reading cross sections = 2.7000E-01 seconds\n", + " Total time in simulation = 4.6960E+00 seconds\n", + " Time in transport only = 4.6760E+00 seconds\n", + " Time in inactive batches = 6.6400E-01 seconds\n", + " Time in active batches = 4.0320E+00 seconds\n", " Time synchronizing fission bank = 1.0000E-03 seconds\n", - " Sampling source sites = 0.0000E+00 seconds\n", - " SEND/RECV source sites = 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 = 1.0000E-03 seconds\n", - " Total time elapsed = 1.8711E+01 seconds\n", - " Calculation Rate (inactive) = 4638.22 neutrons/second\n", - " Calculation Rate (active) = 2398.00 neutrons/second\n", + " Total time elapsed = 5.0960E+00 seconds\n", + " Calculation Rate (inactive) = 18825.3 neutrons/second\n", + " Calculation Rate (active) = 9300.60 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", - " k-effective (Collision) = 1.03296 +/- 0.00669\n", - " k-effective (Track-length) = 1.03648 +/- 0.00426\n", - " k-effective (Absorption) = 1.03431 +/- 0.00702\n", - " Combined k-effective = 1.03621 +/- 0.00456\n", - " Leakage Fraction = 0.00000 +/- 0.00000\n", + " k-effective (Collision) = 1.02791 +/- 0.00553\n", + " k-effective (Track-length) = 1.03040 +/- 0.00558\n", + " k-effective (Absorption) = 1.02011 +/- 0.00491\n", + " Combined k-effective = 1.02461 +/- 0.00398\n", + " Leakage Fraction = 0.01677 +/- 0.00109\n", "\n" ] }, @@ -674,8 +713,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We have a tally of the total fission rate and the total absorption rate, so we can calculate k-infinity as:\n", - "$$k_\\infty = \\frac{\\langle \\nu \\Sigma_f \\phi \\rangle}{\\langle \\Sigma_a \\phi \\rangle}$$\n", + "We have a tally of the total fission rate and the total absorption rate, so we can calculate k-eff as:\n", + "$$k_{eff} = \\frac{\\langle \\nu \\Sigma_f \\phi \\rangle}{\\langle \\Sigma_a \\phi \\rangle + \\langle L \\rangle}$$\n", "In this notation, $\\langle \\cdot \\rangle^a_b$ represents an OpenMC that is integrated over region $a$ and energy range $b$. If $a$ or $b$ is not reported, it means the value represents an integral over all space or all energy, respectively." ] }, @@ -704,17 +743,17 @@ " \n", " 0\n", " total\n", - " (nu-fission / absorption)\n", - " 1.038387\n", - " 0.006141\n", + " (nu-fission / (absorption + current))\n", + " 1.02431\n", + " 0.00704\n", " \n", " \n", "\n", "" ], "text/plain": [ - " nuclide score mean std. dev.\n", - "0 total (nu-fission / absorption) 1.04e+00 6.14e-03" + " nuclide score mean std. dev.\n", + "0 total (nu-fission / (absorption + current)) 1.02e+00 7.04e-03" ] }, "execution_count": 24, @@ -723,10 +762,17 @@ } ], "source": [ - "# Compute k-infinity using tally arithmetic\n", + "# Get the fission and absorption rate tallies\n", "fiss_rate = sp.get_tally(name='fiss. rate')\n", "abs_rate = sp.get_tally(name='abs. rate')\n", - "keff = fiss_rate / abs_rate\n", + "\n", + "# Get the leakage tally\n", + "leak = sp.get_tally(name='leakage')\n", + "leak = leak.summation(filter_type='surface', remove_filter=True)\n", + "leak = leak.summation(filter_type='mesh', remove_filter=True)\n", + "\n", + "# Compute k-infinity using tally arithmetic\n", + "keff = fiss_rate / (abs_rate + leak)\n", "keff.get_pandas_dataframe()" ] }, @@ -734,9 +780,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Notice that even though the neutron production rate and absorption rate are separate tallies, we still get a first-order estimate of the uncertainty on the quotient of them automatically!\n", + "Notice that even though the neutron production rate, absorption rate, and current are separate tallies, we still get a first-order estimate of the uncertainty on the quotient of them automatically!\n", "\n", - "Often in textbooks you'll see k-infinity represented using the four-factor formula $$k_\\infty = p \\epsilon f \\eta.$$ Let's analyze each of these factors, starting with the resonance escape probability which is defined as $$p=\\frac{\\langle\\Sigma_a\\phi\\rangle_T}{\\langle\\Sigma_a\\phi\\rangle}$$ where the subscript $T$ means thermal energies." + "Often in textbooks you'll see k-eff represented using the six-factor formula $$k_{eff} = p \\epsilon f \\eta P_{FNL} P_{TNL}.$$ Let's analyze each of these factors, starting with the resonance escape probability which is defined as $$p=\\frac{\\langle\\Sigma_a\\phi\\rangle_T + \\langle L \\rangle_T}{\\langle\\Sigma_a\\phi\\rangle + \\langle L \\rangle_T}$$ where the subscript $T$ means thermal energies." ] }, { @@ -768,17 +814,20 @@ " 0.0\n", " 6.250000e-07\n", " total\n", - " absorption\n", - " 0.693337\n", - " 0.004109\n", + " (absorption + current)\n", + " 0.695303\n", + " 0.005091\n", " \n", " \n", "\n", "" ], "text/plain": [ - " energy low [MeV] energy high [MeV] nuclide score mean std. dev.\n", - "0 0.00e+00 6.25e-07 total absorption 6.93e-01 4.11e-03" + " energy low [MeV] energy high [MeV] nuclide score \\\n", + "0 0.00e+00 6.25e-07 total (absorption + current) \n", + "\n", + " mean std. dev. \n", + "0 6.95e-01 5.09e-03 " ] }, "execution_count": 25, @@ -789,7 +838,10 @@ "source": [ "# Compute resonance escape probability using tally arithmetic\n", "therm_abs_rate = sp.get_tally(name='therm. abs. rate')\n", - "res_esc = therm_abs_rate / abs_rate\n", + "thermal_leak = sp.get_tally(name='thermal leakage')\n", + "thermal_leak = thermal_leak.summation(filter_type='surface', remove_filter=True)\n", + "thermal_leak = thermal_leak.summation(filter_type='mesh', remove_filter=True)\n", + "res_esc = (therm_abs_rate + thermal_leak) / (abs_rate + thermal_leak)\n", "res_esc.get_pandas_dataframe()" ] }, @@ -831,8 +883,8 @@ " 6.250000e-07\n", " total\n", " nu-fission\n", - " 1.203042\n", - " 0.0076\n", + " 1.202639\n", + " 0.010348\n", " \n", " \n", "\n", @@ -840,7 +892,7 @@ ], "text/plain": [ " energy low [MeV] energy high [MeV] nuclide score mean std. dev.\n", - "0 0.00e+00 6.25e-07 total nu-fission 1.20e+00 7.60e-03" + "0 0.00e+00 6.25e-07 total nu-fission 1.20e+00 1.03e-02" ] }, "execution_count": 26, @@ -896,8 +948,8 @@ " 10000\n", " total\n", " absorption\n", - " 0.748413\n", - " 0.004723\n", + " 0.749349\n", + " 0.006731\n", " \n", " \n", "\n", @@ -905,10 +957,10 @@ ], "text/plain": [ " energy low [MeV] energy high [MeV] cell nuclide score mean \\\n", - "0 0.00e+00 6.25e-07 10000 total absorption 7.48e-01 \n", + "0 0.00e+00 6.25e-07 10000 total absorption 7.49e-01 \n", "\n", " std. dev. \n", - "0 4.72e-03 " + "0 6.73e-03 " ] }, "execution_count": 27, @@ -927,7 +979,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The final factor is the number of fission neutrons produced per absorption in fuel, calculated as $$\\eta = \\frac{\\langle \\nu\\Sigma_f\\phi \\rangle_T}{\\langle \\Sigma_a \\phi \\rangle^F_T}$$" + "The next factor is the number of fission neutrons produced per absorption in fuel, calculated as $$\\eta = \\frac{\\langle \\nu\\Sigma_f\\phi \\rangle_T}{\\langle \\Sigma_a \\phi \\rangle^F_T}$$" ] }, { @@ -962,8 +1014,8 @@ " 10000\n", " total\n", " (nu-fission / absorption)\n", - " 1.663385\n", - " 0.011253\n", + " 1.663736\n", + " 0.015707\n", " \n", " \n", "\n", @@ -974,7 +1026,7 @@ "0 0.00e+00 6.25e-07 10000 total \n", "\n", " score mean std. dev. \n", - "0 (nu-fission / absorption) 1.66e+00 1.13e-02 " + "0 (nu-fission / absorption) 1.66e+00 1.57e-02 " ] }, "execution_count": 28, @@ -992,7 +1044,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now we can calculate $k_\\infty$ using the product of the factors form the four-factor formula." + "There are two leakage factors to account for fast and thermal leakage. The fast non-leakage probability is computed as $$P_{FNL} = \\frac{\\langle \\Sigma_a\\phi \\rangle + \\langle L \\rangle_T}{\\langle \\Sigma_a \\phi \\rangle + \\langle L \\rangle}$$" ] }, { @@ -1001,6 +1053,130 @@ "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", + "
energy low [MeV]energy high [MeV]nuclidescoremeanstd. dev.
00.06.250000e-07total(absorption + current)0.9851020.005855
\n", + "
" + ], + "text/plain": [ + " energy low [MeV] energy high [MeV] nuclide score \\\n", + "0 0.00e+00 6.25e-07 total (absorption + current) \n", + "\n", + " mean std. dev. \n", + "0 9.85e-01 5.86e-03 " + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p_fnl = (abs_rate + thermal_leak) / (abs_rate + leak)\n", + "p_fnl.get_pandas_dataframe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The final factor is the thermal non-leakage probability and is computed as $$P_{TNL} = \\frac{\\langle \\Sigma_a\\phi \\rangle_T}{\\langle \\Sigma_a \\phi \\rangle_T + \\langle L \\rangle_T}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "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", + "
energy low [MeV]energy high [MeV]nuclidescoremeanstd. dev.
00.06.250000e-07total(absorption / (absorption + current))0.9974070.008492
\n", + "
" + ], + "text/plain": [ + " energy low [MeV] energy high [MeV] nuclide \\\n", + "0 0.00e+00 6.25e-07 total \n", + "\n", + " score mean std. dev. \n", + "0 (absorption / (absorption + current)) 9.97e-01 8.49e-03 " + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p_tnl = therm_abs_rate / (therm_abs_rate + thermal_leak)\n", + "p_tnl.get_pandas_dataframe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can calculate $k_{eff}$ using the product of the factors form the four-factor formula." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -1026,9 +1202,9 @@ " 6.250000e-07\n", " 10000\n", " total\n", - " (((absorption * nu-fission) * absorption) * (n...\n", - " 1.038387\n", - " 0.01316\n", + " ((((((absorption + current) * nu-fission) * ab...\n", + " 1.02431\n", + " 0.02062\n", " \n", " \n", "\n", @@ -1039,16 +1215,16 @@ "0 0.00e+00 6.25e-07 10000 total \n", "\n", " score mean std. dev. \n", - "0 (((absorption * nu-fission) * absorption) * (n... 1.04e+00 1.32e-02 " + "0 ((((((absorption + current) * nu-fission) * ab... 1.02e+00 2.06e-02 " ] }, - "execution_count": 29, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "keff = res_esc * fast_fiss * therm_util * eta\n", + "keff = res_esc * fast_fiss * therm_util * eta * p_fnl * p_tnl\n", "keff.get_pandas_dataframe()" ] }, @@ -1063,7 +1239,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 32, "metadata": { "collapsed": false, "scrolled": true @@ -1079,7 +1255,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 33, "metadata": { "collapsed": false }, @@ -1109,8 +1285,8 @@ " 6.250000e-07\n", " (U238 / total)\n", " (nu-fission / flux)\n", - " 6.636968e-07\n", - " 4.132875e-09\n", + " 6.662479e-07\n", + " 6.039323e-09\n", " \n", " \n", " 1\n", @@ -1119,8 +1295,8 @@ " 6.250000e-07\n", " (U238 / total)\n", " (scatter / flux)\n", - " 2.099856e-01\n", - " 1.232455e-03\n", + " 2.099897e-01\n", + " 1.843251e-03\n", " \n", " \n", " 2\n", @@ -1129,8 +1305,8 @@ " 6.250000e-07\n", " (U235 / total)\n", " (nu-fission / flux)\n", - " 3.552458e-01\n", - " 2.252681e-03\n", + " 3.568130e-01\n", + " 3.255144e-03\n", " \n", " \n", " 3\n", @@ -1139,8 +1315,8 @@ " 6.250000e-07\n", " (U235 / total)\n", " (scatter / flux)\n", - " 5.554345e-03\n", - " 3.265385e-05\n", + " 5.555326e-03\n", + " 4.893022e-05\n", " \n", " \n", " 4\n", @@ -1149,8 +1325,8 @@ " 2.000000e+01\n", " (U238 / total)\n", " (nu-fission / flux)\n", - " 7.126668e-03\n", - " 5.296883e-05\n", + " 7.215044e-03\n", + " 4.968448e-05\n", " \n", " \n", " 5\n", @@ -1159,8 +1335,8 @@ " 2.000000e+01\n", " (U238 / total)\n", " (scatter / flux)\n", - " 2.277460e-01\n", - " 1.003558e-03\n", + " 2.273966e-01\n", + " 8.969811e-04\n", " \n", " \n", " 6\n", @@ -1169,8 +1345,8 @@ " 2.000000e+01\n", " (U235 / total)\n", " (nu-fission / flux)\n", - " 8.010911e-03\n", - " 6.802256e-05\n", + " 7.969615e-03\n", + " 5.374119e-05\n", " \n", " \n", " 7\n", @@ -1179,8 +1355,8 @@ " 2.000000e+01\n", " (U235 / total)\n", " (scatter / flux)\n", - " 3.367794e-03\n", - " 1.443644e-05\n", + " 3.362798e-03\n", + " 1.286767e-05\n", " \n", " \n", "\n", @@ -1198,17 +1374,17 @@ "7 10000 6.25e-07 2.00e+01 (U235 / total) \n", "\n", " score mean std. dev. \n", - "0 (nu-fission / flux) 6.64e-07 4.13e-09 \n", - "1 (scatter / flux) 2.10e-01 1.23e-03 \n", - "2 (nu-fission / flux) 3.55e-01 2.25e-03 \n", - "3 (scatter / flux) 5.55e-03 3.27e-05 \n", - "4 (nu-fission / flux) 7.13e-03 5.30e-05 \n", - "5 (scatter / flux) 2.28e-01 1.00e-03 \n", - "6 (nu-fission / flux) 8.01e-03 6.80e-05 \n", - "7 (scatter / flux) 3.37e-03 1.44e-05 " + "0 (nu-fission / flux) 6.66e-07 6.04e-09 \n", + "1 (scatter / flux) 2.10e-01 1.84e-03 \n", + "2 (nu-fission / flux) 3.57e-01 3.26e-03 \n", + "3 (scatter / flux) 5.56e-03 4.89e-05 \n", + "4 (nu-fission / flux) 7.22e-03 4.97e-05 \n", + "5 (scatter / flux) 2.27e-01 8.97e-04 \n", + "6 (nu-fission / flux) 7.97e-03 5.37e-05 \n", + "7 (scatter / flux) 3.36e-03 1.29e-05 " ] }, - "execution_count": 31, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -1227,7 +1403,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 34, "metadata": { "collapsed": false }, @@ -1236,11 +1412,11 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 6.63696783e-07]\n", - " [ 3.55245846e-01]]\n", + "[[[ 6.66247898e-07]\n", + " [ 3.56812954e-01]]\n", "\n", - " [[ 7.12666800e-03]\n", - " [ 8.01091088e-03]]]\n" + " [[ 7.21504433e-03]\n", + " [ 7.96961502e-03]]]\n" ] } ], @@ -1259,7 +1435,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 35, "metadata": { "collapsed": false }, @@ -1268,9 +1444,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.00555435]]\n", + "[[[ 0.00555533]]\n", "\n", - " [[ 0.00336779]]]\n" + " [[ 0.0033628 ]]]\n" ] } ], @@ -1283,7 +1459,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 36, "metadata": { "collapsed": false }, @@ -1292,8 +1468,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "[[[ 0.22774598]\n", - " [ 0.00336779]]]\n" + "[[[ 0.22739657]\n", + " [ 0.0033628 ]]]\n" ] } ], @@ -1314,7 +1490,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 37, "metadata": { "collapsed": false }, @@ -1345,7 +1521,7 @@ " U238\n", " nu-fission\n", " 0.000002\n", - " 7.473789e-09\n", + " 1.057199e-08\n", " \n", " \n", " 1\n", @@ -1354,8 +1530,8 @@ " 6.250000e-07\n", " U235\n", " nu-fission\n", - " 0.861547\n", - " 4.131310e-03\n", + " 0.856784\n", + " 5.730044e-03\n", " \n", " \n", " 2\n", @@ -1364,8 +1540,8 @@ " 2.000000e+01\n", " U238\n", " nu-fission\n", - " 0.082356\n", - " 5.560461e-04\n", + " 0.082495\n", + " 5.176027e-04\n", " \n", " \n", " 3\n", @@ -1374,8 +1550,8 @@ " 2.000000e+01\n", " U235\n", " nu-fission\n", - " 0.092574\n", - " 7.315442e-04\n", + " 0.091123\n", + " 5.574052e-04\n", " \n", " \n", "\n", @@ -1383,19 +1559,19 @@ ], "text/plain": [ " cell energy low [MeV] energy high [MeV] nuclide score mean \\\n", - "0 10000 0.00e+00 6.25e-07 U238 nu-fission 1.61e-06 \n", - "1 10000 0.00e+00 6.25e-07 U235 nu-fission 8.62e-01 \n", - "2 10000 6.25e-07 2.00e+01 U238 nu-fission 8.24e-02 \n", - "3 10000 6.25e-07 2.00e+01 U235 nu-fission 9.26e-02 \n", + "0 10000 0.00e+00 6.25e-07 U238 nu-fission 1.60e-06 \n", + "1 10000 0.00e+00 6.25e-07 U235 nu-fission 8.57e-01 \n", + "2 10000 6.25e-07 2.00e+01 U238 nu-fission 8.25e-02 \n", + "3 10000 6.25e-07 2.00e+01 U235 nu-fission 9.11e-02 \n", "\n", " std. dev. \n", - "0 7.47e-09 \n", - "1 4.13e-03 \n", - "2 5.56e-04 \n", - "3 7.32e-04 " + "0 1.06e-08 \n", + "1 5.73e-03 \n", + "2 5.18e-04 \n", + "3 5.57e-04 " ] }, - "execution_count": 35, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -1408,7 +1584,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 38, "metadata": { "collapsed": false }, @@ -1438,8 +1614,8 @@ " 1.080060e-07\n", " H1\n", " scatter\n", - " 4.599225\n", - " 0.015973\n", + " 4.547947\n", + " 0.028000\n", " \n", " \n", " 1\n", @@ -1448,8 +1624,8 @@ " 1.166529e-06\n", " H1\n", " scatter\n", - " 2.037260\n", - " 0.011236\n", + " 2.003068\n", + " 0.008587\n", " \n", " \n", " 2\n", @@ -1458,8 +1634,8 @@ " 1.259921e-05\n", " H1\n", " scatter\n", - " 1.662552\n", - " 0.010280\n", + " 1.647225\n", + " 0.011136\n", " \n", " \n", " 3\n", @@ -1468,8 +1644,8 @@ " 1.360790e-04\n", " H1\n", " scatter\n", - " 1.872201\n", - " 0.012136\n", + " 1.831367\n", + " 0.010196\n", " \n", " \n", " 4\n", @@ -1478,8 +1654,8 @@ " 1.469734e-03\n", " H1\n", " scatter\n", - " 2.080459\n", - " 0.013155\n", + " 2.039613\n", + " 0.008059\n", " \n", " \n", " 5\n", @@ -1488,8 +1664,8 @@ " 1.587401e-02\n", " H1\n", " scatter\n", - " 2.154996\n", - " 0.011975\n", + " 2.137523\n", + " 0.012885\n", " \n", " \n", " 6\n", @@ -1498,8 +1674,8 @@ " 1.714488e-01\n", " H1\n", " scatter\n", - " 2.218740\n", - " 0.008528\n", + " 2.170725\n", + " 0.012669\n", " \n", " \n", " 7\n", @@ -1508,8 +1684,8 @@ " 1.851749e+00\n", " H1\n", " scatter\n", - " 2.010517\n", - " 0.009187\n", + " 2.002724\n", + " 0.010768\n", " \n", " \n", " 8\n", @@ -1518,8 +1694,8 @@ " 2.000000e+01\n", " H1\n", " scatter\n", - " 0.372022\n", - " 0.003196\n", + " 0.371624\n", + " 0.002959\n", " \n", " \n", "\n", @@ -1527,29 +1703,29 @@ ], "text/plain": [ " cell energy low [MeV] energy high [MeV] nuclide score mean \\\n", - "0 10002 1.00e-08 1.08e-07 H1 scatter 4.60e+00 \n", - "1 10002 1.08e-07 1.17e-06 H1 scatter 2.04e+00 \n", - "2 10002 1.17e-06 1.26e-05 H1 scatter 1.66e+00 \n", - "3 10002 1.26e-05 1.36e-04 H1 scatter 1.87e+00 \n", - "4 10002 1.36e-04 1.47e-03 H1 scatter 2.08e+00 \n", - "5 10002 1.47e-03 1.59e-02 H1 scatter 2.15e+00 \n", - "6 10002 1.59e-02 1.71e-01 H1 scatter 2.22e+00 \n", - "7 10002 1.71e-01 1.85e+00 H1 scatter 2.01e+00 \n", + "0 10002 1.00e-08 1.08e-07 H1 scatter 4.55e+00 \n", + "1 10002 1.08e-07 1.17e-06 H1 scatter 2.00e+00 \n", + "2 10002 1.17e-06 1.26e-05 H1 scatter 1.65e+00 \n", + "3 10002 1.26e-05 1.36e-04 H1 scatter 1.83e+00 \n", + "4 10002 1.36e-04 1.47e-03 H1 scatter 2.04e+00 \n", + "5 10002 1.47e-03 1.59e-02 H1 scatter 2.14e+00 \n", + "6 10002 1.59e-02 1.71e-01 H1 scatter 2.17e+00 \n", + "7 10002 1.71e-01 1.85e+00 H1 scatter 2.00e+00 \n", "8 10002 1.85e+00 2.00e+01 H1 scatter 3.72e-01 \n", "\n", " std. dev. \n", - "0 1.60e-02 \n", - "1 1.12e-02 \n", - "2 1.03e-02 \n", - "3 1.21e-02 \n", - "4 1.32e-02 \n", - "5 1.20e-02 \n", - "6 8.53e-03 \n", - "7 9.19e-03 \n", - "8 3.20e-03 " + "0 2.80e-02 \n", + "1 8.59e-03 \n", + "2 1.11e-02 \n", + "3 1.02e-02 \n", + "4 8.06e-03 \n", + "5 1.29e-02 \n", + "6 1.27e-02 \n", + "7 1.08e-02 \n", + "8 2.96e-03 " ] }, - "execution_count": 36, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } diff --git a/docs/source/pythonapi/index.rst b/docs/source/pythonapi/index.rst index f6a7ae939c..14f4a2128d 100644 --- a/docs/source/pythonapi/index.rst +++ b/docs/source/pythonapi/index.rst @@ -27,6 +27,8 @@ Example Jupyter Notebooks examples/mgxs-part-ii examples/mgxs-part-iii examples/mgxs-part-iv + examples/mdgxs-part-i + examples/mdgxs-part-ii examples/nuclear-data ------------------------------------ @@ -284,6 +286,19 @@ Multi-group Cross Sections openmc.mgxs.TotalXS openmc.mgxs.TransportXS +Multi-delayed-group Cross Sections +---------------------------------- + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myclassinherit.rst + + openmc.mgxs.MDGXS + openmc.mgxs.ChiDelayed + openmc.mgxs.DelayedNuFissionXS + openmc.mgxs.Beta + Multi-group Cross Section Libraries ----------------------------------- @@ -319,6 +334,7 @@ Functions :nosignatures: openmc.model.create_triso_lattice + openmc.model.pack_trisos -------------------------------------------- :mod:`openmc.data` -- Nuclear Data Interface @@ -348,6 +364,7 @@ Core Classes openmc.data.Tabulated1D openmc.data.ThermalScattering openmc.data.CoherentElastic + openmc.data.FissionEnergyRelease Angle-Energy Distributions -------------------------- @@ -381,21 +398,22 @@ Classes +++++++ .. autosummary:: - :toctree: generated - :nosignatures: - :template: myclass.rst + :toctree: generated + :nosignatures: + :template: myclass.rst - openmc.data.ace.Library - openmc.data.ace.Table + openmc.data.ace.Library + openmc.data.ace.Table Functions +++++++++ .. autosummary:: - :toctree: generated - :nosignatures: + :toctree: generated + :nosignatures: - openmc.data.ace.ascii_to_binary + openmc.data.ace.ascii_to_binary + openmc.data.write_compact_458_library .. _Jupyter: https://jupyter.org/ .. _NumPy: http://www.numpy.org/ diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index e530097ded..dae3e74b25 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -281,6 +281,8 @@ based on the recommended value in LA-UR-14-24530_. .. note:: This element is not used in the multi-group :ref:`energy_mode`. +.. _multipole_library: + ```` Element ------------------------------- @@ -290,8 +292,8 @@ OpenMC can use it for on-the-fly Doppler-broadening of resolved resonance range cross sections. If this element is absent from the settings.xml file, the :envvar:`OPENMC_MULTIPOLE_LIBRARY` environment variable will be used. - .. note:: The element must also be set to "true" - for windowed multipole functionality. + .. note:: The :ref:`temperature_method` must also be set to "multipole" for + windowed multipole functionality. ```` Element --------------------------- @@ -395,19 +397,16 @@ attributes or sub-elements: :scatterer: An element with attributes/sub-elements called ``nuclide``, ``method``, - ``xs_label``, ``xs_label_0K``, ``E_min``, and ``E_max``. The ``nuclide`` - attribute is the name, as given by the ``name`` attribute within the - ``nuclide`` sub-element of the ``material`` element in ``materials.xml``, - of the nuclide to which a resonance scattering treatment is to be applied. + ``E_min``, and ``E_max``. The ``nuclide`` attribute is the name, as given + by the ``name`` attribute within the ``nuclide`` sub-element of the + ``material`` element in ``materials.xml``, of the nuclide to which a + resonance scattering treatment is to be applied. The ``method`` attribute gives the type of resonance scattering treatment that is to be applied to the ``nuclide``. Acceptable inputs - none of which are case-sensitive - for the ``method`` attribute are ``ARES``, ``CXS``, ``WCM``, and ``DBRC``. Descriptions of each of these methods - are documented here_. The ``xs_label`` attribute gives the label for the - cross section data of the ``nuclide`` at a given temperature. The - ``xs_label_0K`` gives the label for the 0 K cross section data for the - ``nuclide``. The ``E_min`` attribute gives the minimum energy above - which the ``method`` is applied. The ``E_max`` attribute gives the + are documented here_. The ``E_min`` attribute gives the minimum energy + above which the ``method`` is applied. The ``E_max`` attribute gives the maximum energy below which the ``method`` is applied. One example would be as follows: @@ -419,16 +418,12 @@ attributes or sub-elements: U-238 ARES - 92238.72c - 92238.00c 5.0e-6 40.0e-6 Pu-239 dbrc - 94239.72c - 94239.00c 0.01e-6 210.0e-6 @@ -714,6 +709,45 @@ survival biasing, otherwise known as implicit capture or absorption. *Default*: false +.. _temperature_default: + +```` Element +--------------------------------- + +The ```` element specifies a default temperature in Kelvin +that is to be applied to cells in the absence of an explicit cell temperature or +a material default temperature. + + *Default*: 293.6 K + +.. _temperature_method: + +```` Element +-------------------------------- + +The ```` element has an accepted value of "nearest" or +"interpolation". A value of "nearest" indicates that for each cell, the nearest +temperature at which cross sections are given is to be applied, within a given +tolerance (see :ref:`temperature_tolerance`). A value of "multipole" indicates +that the windowed multipole method should be used to evaluate +temperature-dependent cross sections in the resolved resonance range (a +:ref:`windowed multipole library ` must also be available). + + *Default*: "nearest" + +.. _temperature_tolerance: + +```` Element +----------------------------------- + +The ```` element specifies a tolerance in Kelvin that is +to be applied when the "nearest" temperature method is used. For example, if a +cell temperature is 340 K and the tolerance is 15 K, then the closest +temperature in the range of 325 K to 355 K will be used to evaluate cross +sections. + + *Default*: 10 K + ```` Element --------------------- @@ -836,6 +870,35 @@ displayed. This element takes the following attributes: *Default*: 5 +```` Element +------------------------- + +The ```` element indicates that a stochastic volume calculation +should be run at the beginning of the simulation. This element has the following +sub-elements/attributes: + + :cells: + The unique IDs of cells for which the volume should be estimated. + + *Default*: None + + :samples: + The number of samples used to estimate volumes. + + *Default*: None + + :lower_left: + The lower-left Cartesian coordinates of a bounding box that is used to + sample points within. + + *Default*: None + + :upper_right: + The upper-right Cartesian coordinates of a bounding box that is used to + sample points within. + + *Default*: None + -------------------------------------- Geometry Specification -- geometry.xml -------------------------------------- @@ -1061,7 +1124,9 @@ Each ```` element can have the following attributes or sub-elements: specified for the "distributed temperature" feature. This will give each unique instance of the cell its own temperature. - *Default*: The temperature of the coldest nuclide in the cell's material(s) + *Default*: If a material default temperature is supplied, it is used. In the + absence of a material default temperature, the :ref:`global default + temperature ` is used. :rotation: If the cell is filled with a universe, this element specifies the angles in @@ -1266,6 +1331,14 @@ Each ``material`` element can have the following attributes or sub-elements: *Default*: "" + :temperature: + An element with no attributes which is used to set the default temperature + of the material in Kelvin. + + *Default*: If a material default temperature is not given and a cell + temperature is not specified, the :ref:`global default temperature + ` is used. + :density: An element with attributes/sub-elements called ``value`` and ``units``. The ``value`` attribute is the numeric value of the density while the ``units`` @@ -1286,17 +1359,16 @@ Each ``material`` element can have the following attributes or sub-elements: ``nuclide``, ``element``, or ``sab`` quantity. :nuclide: - An element with attributes/sub-elements called ``name``, ``xs``, and ``ao`` + An element with attributes/sub-elements called ``name``, and ``ao`` or ``wo``. The ``name`` attribute is the name of the cross-section for a - desired nuclide while the ``xs`` attribute is the cross-section - identifier. Finally, the ``ao`` and ``wo`` attributes specify the atom or + desired nuclide. Finally, the ``ao`` and ``wo`` attributes specify the atom or weight percent of that nuclide within the material, respectively. One example would be as follows: .. code-block:: xml - - + + .. note:: If one nuclide is specified in atom percent, all others must also be given in atom percent. The same applies for weight percentages. @@ -1320,11 +1392,10 @@ Each ``material`` element can have the following attributes or sub-elements: Specifies that a natural element is present in the material. The natural element is split up into individual isotopes based on `IUPAC Isotopic Compositions of the Elements 2009`_. This element has - attributes/sub-elements called ``name``, ``xs``, and ``ao``. The ``name`` - attribute is the atomic symbol of the element while the ``xs`` attribute is - the cross-section identifier. Finally, the ``ao`` attribute specifies the - atom percent of the element within the material, respectively. One example - would be as follows: + attributes/sub-elements called ``name``, and ``ao``. The ``name`` + attribute is the atomic symbol of the element. Finally, the ``ao`` + attribute specifies the atom percent of the element within the material, + respectively. One example would be as follows: .. code-block:: xml @@ -1354,10 +1425,9 @@ Each ``material`` element can have the following attributes or sub-elements: multi-group :ref:`energy_mode`. :sab: - Associates an S(a,b) table with the material. This element has - attributes/sub-elements called ``name`` and ``xs``. The ``name`` attribute - is the name of the S(a,b) table that should be associated with the material, - and ``xs`` is the cross-section identifier for the table. + Associates an S(a,b) table with the material. This element has one + attribute/sub-element called ``name``. The ``name`` attribute + is the name of the S(a,b) table that should be associated with the material. *Default*: None @@ -1368,14 +1438,13 @@ Each ``material`` element can have the following attributes or sub-elements: recognizes that some multi-group libraries may be providing material specific macroscopic cross sections instead of always providing nuclide specific data like in the continuous-energy case. To that end, the - macroscopic element has attributes/sub-elements called ``name``, and ``xs``. + macroscopic element has one attribute/sub-element called ``name``. The ``name`` attribute is the name of the cross-section for a - desired nuclide while the ``xs`` attribute is the cross-section - identifier. One example would be as follows: + desired nuclide. One example would be as follows: .. code-block:: xml - + .. note:: This element is only used in the multi-group :ref:`energy_mode`. @@ -1384,18 +1453,6 @@ Each ``material`` element can have the following attributes or sub-elements: .. _IUPAC Isotopic Compositions of the Elements 2009: http://pac.iupac.org/publications/pac/pdf/2011/pdf/8302x0397.pdf -```` Element ------------------------- - -In some circumstances, the cross-section identifier may be the same for many or -all nuclides in a given problem. In this case, rather than specifying the -``xs=...`` attribute on every nuclide, a ```` element can be used to -set the default cross-section identifier for any nuclide without an identifier -explicitly listed. This element has no attributes and accepts a 3-letter string -that indicates the default cross-section identifier, e.g. "70c". - - *Default*: None - ------------------------------------ Tallies Specification -- tallies.xml ------------------------------------ @@ -1809,6 +1866,27 @@ The ```` element accepts the following sub-elements: | |:math:`\gamma`-rays are assumed to deposit their | | |energy locally. Units are MeV per source particle. | +----------------------+---------------------------------------------------+ + |fission-q-prompt |The prompt fission energy production rate. This | + | |energy comes in the form of fission fragment | + | |nuclei, prompt neutrons, and prompt | + | |:math:`\gamma`-rays. This value depends on the | + | |incident energy and it requires that the nuclear | + | |data library contains the optional fission energy | + | |release data. Energy is assumed to be deposited | + | |locally. Units are MeV per source particle. | + +----------------------+---------------------------------------------------+ + |fission-q-recoverable |The recoverable fission energy production rate. | + | |This energy comes in the form of fission fragment | + | |nuclei, prompt and delayed neutrons, prompt and | + | |delayed :math:`\gamma`-rays, and delayed | + | |:math:`\beta`-rays. This tally differs from the | + | |kappa-fission tally in that it is dependent on | + | |incident neutron energy and it requires that the | + | |nuclear data library contains the optional fission | + | |energy release data. Energy is assumed to be | + | |deposited locally. Units are MeV per source | + | |paticle. | + +----------------------+---------------------------------------------------+ .. note:: The ``analog`` estimator is actually identical to the ``collision`` @@ -2055,8 +2133,8 @@ attributes or sub-elements. These are not used in "voxel" plots: *Default*: None :meshlines: - The ``meshlines`` sub-element allows for plotting the boundaries of - a tally mesh on top of a plot. Only one ``meshlines`` element is allowed per + The ``meshlines`` sub-element allows for plotting the boundaries of a + regular mesh on top of a plot. Only one ``meshlines`` element is allowed per ``plot`` element, and it must contain as attributes or sub-elements a mesh type and a linewidth. Optionally, a color may be specified for the overlay: diff --git a/docs/source/usersguide/install.rst b/docs/source/usersguide/install.rst index 1a0569148b..457c5efd8f 100644 --- a/docs/source/usersguide/install.rst +++ b/docs/source/usersguide/install.rst @@ -204,20 +204,22 @@ should be used: Compiling with MPI ++++++++++++++++++ -To compile with MPI, set the :envvar:`FC` environment variable to the path to -the MPI Fortran wrapper. For example, in a bash shell: +To compile with MPI, set the :envvar:`FC` and :envvar:`CC` environment variables +to the path to the MPI Fortran and C wrappers, respectively. For example, in a +bash shell: .. code-block:: sh export FC=mpif90 + export CC=mpicc cmake /path/to/openmc -Note that in many shells, an environment variable can be set for a single -command, i.e. +Note that in many shells, environment variables can be set for a single command, +i.e. .. code-block:: sh - FC=mpif90 cmake /path/to/openmc + FC=mpif90 CC=mpicc cmake /path/to/openmc Selecting HDF5 Installation +++++++++++++++++++++++++++ @@ -343,7 +345,7 @@ compiler, it is necessary to specify that all objects be compiled with the .. code-block:: sh mkdir build && cd build - FC=ifort FFLAGS=-mmic cmake -Dopenmp=on .. + FC=ifort CC=icc FFLAGS=-mmic cmake -Dopenmp=on .. make Note that unless an HDF5 build for the Intel Xeon Phi is already on your target diff --git a/examples/python/basic/build-xml.py b/examples/python/basic/build-xml.py index 1bfe50b2e3..022737fdb0 100644 --- a/examples/python/basic/build-xml.py +++ b/examples/python/basic/build-xml.py @@ -25,7 +25,7 @@ moderator = openmc.Material(material_id=41, name='moderator') moderator.set_density('g/cc', 1.0) moderator.add_nuclide(h1, 2.) moderator.add_nuclide(o16, 1.) -moderator.add_s_alpha_beta('c_H_in_H2O', '71t') +moderator.add_s_alpha_beta('c_H_in_H2O') fuel = openmc.Material(material_id=40, name='fuel') fuel.set_density('g/cc', 4.5) @@ -33,7 +33,6 @@ fuel.add_nuclide(u235, 1.) # Instantiate a Materials collection and export to XML materials_file = openmc.Materials([moderator, fuel]) -materials_file.default_xs = '71c' materials_file.export_to_xml() diff --git a/examples/python/boxes/build-xml.py b/examples/python/boxes/build-xml.py index 3eed4059c1..308019e7dc 100644 --- a/examples/python/boxes/build-xml.py +++ b/examples/python/boxes/build-xml.py @@ -34,11 +34,10 @@ moderator = openmc.Material(material_id=3, name='moderator') moderator.set_density('g/cc', 1.0) moderator.add_nuclide(h1, 2.) moderator.add_nuclide(o16, 1.) -moderator.add_s_alpha_beta('c_H_in_H2O', '71t') +moderator.add_s_alpha_beta('c_H_in_H2O') # Instantiate a Materials collection and export to XML materials_file = openmc.Materials([fuel1, fuel2, moderator]) -materials_file.default_xs = '71c' materials_file.export_to_xml() diff --git a/examples/python/lattice/hexagonal/build-xml.py b/examples/python/lattice/hexagonal/build-xml.py index ba2cac3670..cca072ba72 100644 --- a/examples/python/lattice/hexagonal/build-xml.py +++ b/examples/python/lattice/hexagonal/build-xml.py @@ -29,7 +29,7 @@ moderator = openmc.Material(material_id=2, name='moderator') moderator.set_density('g/cc', 1.0) moderator.add_nuclide(h1, 2.) moderator.add_nuclide(o16, 1.) -moderator.add_s_alpha_beta('c_H_in_H2O', '71t') +moderator.add_s_alpha_beta('c_H_in_H2O') iron = openmc.Material(material_id=3, name='iron') iron.set_density('g/cc', 7.9) @@ -37,7 +37,6 @@ iron.add_nuclide(fe56, 1.) # Instantiate a Materials collection and export to XML materials_file = openmc.Materials([moderator, fuel, iron]) -materials_file.default_xs = '71c' materials_file.export_to_xml() diff --git a/examples/python/lattice/nested/build-xml.py b/examples/python/lattice/nested/build-xml.py index edf3ad7b19..3189641e77 100644 --- a/examples/python/lattice/nested/build-xml.py +++ b/examples/python/lattice/nested/build-xml.py @@ -28,11 +28,10 @@ moderator = openmc.Material(material_id=2, name='moderator') moderator.set_density('g/cc', 1.0) moderator.add_nuclide(h1, 2.) moderator.add_nuclide(o16, 1.) -moderator.add_s_alpha_beta('c_H_in_H2O', '71t') +moderator.add_s_alpha_beta('c_H_in_H2O') # Instantiate a Materials collection and export to XML materials_file = openmc.Materials((moderator, fuel)) -materials_file.default_xs = '71c' materials_file.export_to_xml() diff --git a/examples/python/lattice/simple/build-xml.py b/examples/python/lattice/simple/build-xml.py index 5ec1b7ee9f..2f1f8e76e3 100644 --- a/examples/python/lattice/simple/build-xml.py +++ b/examples/python/lattice/simple/build-xml.py @@ -28,11 +28,10 @@ moderator = openmc.Material(material_id=2, name='moderator') moderator.set_density('g/cc', 1.0) moderator.add_nuclide(h1, 2.) moderator.add_nuclide(o16, 1.) -moderator.add_s_alpha_beta('c_H_in_H2O', '71t') +moderator.add_s_alpha_beta('c_H_in_H2O') # Instantiate a Materials collection and export to XML materials_file = openmc.Materials([moderator, fuel]) -materials_file.default_xs = '71c' materials_file.export_to_xml() diff --git a/examples/python/pincell/build-xml.py b/examples/python/pincell/build-xml.py index 3bda050276..fc91ae6931 100644 --- a/examples/python/pincell/build-xml.py +++ b/examples/python/pincell/build-xml.py @@ -98,11 +98,10 @@ borated_water.add_nuclide(h1, 4.9457e-2) borated_water.add_nuclide(h2, 7.4196e-6) borated_water.add_nuclide(o16, 2.4672e-2) borated_water.add_nuclide(o17, 6.0099e-5) -borated_water.add_s_alpha_beta('c_H_in_H2O', '71t') +borated_water.add_s_alpha_beta('c_H_in_H2O') # Instantiate a Materials collection and export to XML materials_file = openmc.Materials([uo2, helium, zircaloy, borated_water]) -materials_file.default_xs = '71c' materials_file.export_to_xml() diff --git a/examples/python/pincell_multigroup/build-xml.py b/examples/python/pincell_multigroup/build-xml.py index 6dbfa336bb..2b08e82748 100644 --- a/examples/python/pincell_multigroup/build-xml.py +++ b/examples/python/pincell_multigroup/build-xml.py @@ -19,7 +19,7 @@ groups = openmc.mgxs.EnergyGroups(group_edges=[1E-11, 0.0635E-6, 10.0E-6, 1.0E-4, 1.0E-3, 0.5, 1.0, 20.0]) # Instantiate the 7-group (C5G7) cross section data -uo2_xsdata = openmc.XSdata('UO2.300K', groups) +uo2_xsdata = openmc.XSdata('UO2', groups) uo2_xsdata.order = 0 uo2_xsdata.total = [0.1779492, 0.3298048, 0.4803882, 0.5543674, 0.3118013, 0.3951678, 0.5644058] @@ -41,7 +41,7 @@ uo2_xsdata.nu_fission = [2.005998E-02, 2.027303E-03, 1.570599E-02, uo2_xsdata.chi = [5.8791E-01, 4.1176E-01, 3.3906E-04, 1.1761E-07, 0.0000E+00, 0.0000E+00, 0.0000E+00] -h2o_xsdata = openmc.XSdata('LWTR.300K', groups) +h2o_xsdata = openmc.XSdata('LWTR', groups) h2o_xsdata.order = 0 h2o_xsdata.total = [0.15920605, 0.412969593, 0.59030986, 0.58435, 0.718, 1.2544497, 2.650379] @@ -66,8 +66,8 @@ mg_cross_sections_file.export_to_xml() ############################################################################### # Instantiate some Macroscopic Data -uo2_data = openmc.Macroscopic('UO2', '300K') -h2o_data = openmc.Macroscopic('LWTR', '300K') +uo2_data = openmc.Macroscopic('UO2') +h2o_data = openmc.Macroscopic('LWTR') # Instantiate some Materials and register the appropriate Macroscopic objects uo2 = openmc.Material(material_id=1, name='UO2 fuel') @@ -80,7 +80,6 @@ water.add_macroscopic(h2o_data) # Instantiate a Materials collection and export to XML materials_file = openmc.Materials([uo2, water]) -materials_file.default_xs = '300K' materials_file.export_to_xml() diff --git a/examples/python/reflective/build-xml.py b/examples/python/reflective/build-xml.py index 0e064ab610..af86e446ab 100644 --- a/examples/python/reflective/build-xml.py +++ b/examples/python/reflective/build-xml.py @@ -25,7 +25,6 @@ fuel.add_nuclide(u235, 1.) # Instantiate a Materials collection and export to XML materials_file = openmc.Materials([fuel]) -materials_file.default_xs = '71c' materials_file.export_to_xml() diff --git a/examples/xml/basic/materials.xml b/examples/xml/basic/materials.xml index 2f88731ffc..606c676df8 100644 --- a/examples/xml/basic/materials.xml +++ b/examples/xml/basic/materials.xml @@ -1,8 +1,6 @@ - 71c - @@ -12,7 +10,7 @@ - + diff --git a/examples/xml/boxes/materials.xml b/examples/xml/boxes/materials.xml index c74714a085..1d0ab4a1ca 100644 --- a/examples/xml/boxes/materials.xml +++ b/examples/xml/boxes/materials.xml @@ -1,8 +1,6 @@ - 71c - @@ -17,7 +15,7 @@ - + diff --git a/examples/xml/lattice/nested/materials.xml b/examples/xml/lattice/nested/materials.xml index 7f8b06bb10..2222721959 100644 --- a/examples/xml/lattice/nested/materials.xml +++ b/examples/xml/lattice/nested/materials.xml @@ -1,8 +1,6 @@ - 71c - @@ -13,7 +11,7 @@ - + diff --git a/examples/xml/lattice/simple/materials.xml b/examples/xml/lattice/simple/materials.xml index 7f8b06bb10..2222721959 100644 --- a/examples/xml/lattice/simple/materials.xml +++ b/examples/xml/lattice/simple/materials.xml @@ -1,8 +1,6 @@ - 71c - @@ -13,7 +11,7 @@ - + diff --git a/examples/xml/pincell/materials.xml b/examples/xml/pincell/materials.xml index b6af486d14..9f9afa3843 100644 --- a/examples/xml/pincell/materials.xml +++ b/examples/xml/pincell/materials.xml @@ -1,9 +1,6 @@ - - 71c - - 300K - diff --git a/examples/xml/pincell_multigroup/mg_cross_sections.xml b/examples/xml/pincell_multigroup/mg_cross_sections.xml index 3c671a1922..af1f0072b4 100644 --- a/examples/xml/pincell_multigroup/mg_cross_sections.xml +++ b/examples/xml/pincell_multigroup/mg_cross_sections.xml @@ -11,8 +11,8 @@ --> - UO2.300K - UO2.300K + UO2 + UO2 2.53E-8 0 true @@ -67,8 +67,8 @@ - MOX1.300K - MOX1.300K + MOX1 + MOX1 2.53E-8 0 true @@ -124,8 +124,8 @@ - MOX2.300K - MOX2.300K + MOX2 + MOX2 2.53E-8 0 true @@ -180,8 +180,8 @@ - MOX3.300K - MOX3.300K + MOX3 + MOX3 2.53E-8 0 true @@ -236,8 +236,8 @@ - FC.300K - FC.300K + FC + FC 2.53E-8 0 true @@ -286,8 +286,8 @@ - GT.300K - GT.300K + GT + GT 2.53E-8 0 false @@ -318,8 +318,8 @@ - LWTR.300K - LWTR.300K + LWTR + LWTR 2.53E-8 0 false @@ -351,8 +351,8 @@ - CR.300K - CR.300K + CR + CR 2.53E-8 0 false diff --git a/examples/xml/reflective/materials.xml b/examples/xml/reflective/materials.xml index 13cbf070ea..2472a74717 100644 --- a/examples/xml/reflective/materials.xml +++ b/examples/xml/reflective/materials.xml @@ -1,8 +1,6 @@ - 71c - diff --git a/man/man1/openmc.1 b/man/man1/openmc.1 index e69360a7c1..7f18ab28a2 100644 --- a/man/man1/openmc.1 +++ b/man/man1/openmc.1 @@ -3,7 +3,7 @@ openmc \- Executes the OpenMC Monte Carlo code .SH DESCRIPTION This command is used to execute the OpenMC Monte Carlo code. It is assumed that -a set of XML input files has already been created and that ACE format cross +a set of XML input files has already been created and that HDF5 format cross sections are available. .SH SYNOPSIS \fBopenmc\fR [\fIoptions\fR] [\fIpath\fR] @@ -40,11 +40,21 @@ The behavior of .B openmc is affected by the following environment variables. .TP -.B CROSS_SECTIONS +.B OPENMC_CROSS_SECTIONS Indicates the default path to the cross_sections.xml summary file that is used -to locate ACE format cross section libraries if the user has not specified the +to locate HDF5 format cross section libraries if the user has not specified the tag in .I settings.xml\fP. +.TP +.B OPENMC_MG_CROSS_SECTIONS +Indicates the default path to the mgxs.xml file that contains multi-group cross +section libraries if the user has not specified the tag in +.I settings.xml\fP. +.TP +.B OPENMC_MULTIPOLE_LIBRARY +Indicates the default path to a directory containing windowed multipole data if +the user has not specified the tag in +.I settings.xml\fP. .SH LICENSE Copyright \(co 2011-2016 Massachusetts Institute of Technology. .PP diff --git a/openmc/__init__.py b/openmc/__init__.py index 557e13039f..2aeacd689b 100644 --- a/openmc/__init__.py +++ b/openmc/__init__.py @@ -6,21 +6,23 @@ from openmc.nuclide import * from openmc.macroscopic import * from openmc.material import * from openmc.plots import * +from openmc.region import * +from openmc.volume import * +from openmc.source import * from openmc.settings import * from openmc.surface import * from openmc.universe import * from openmc.mesh import * -from openmc.mgxs_library import * from openmc.filter import * from openmc.trigger import * from openmc.tallies import * +from openmc.mgxs_library import * from openmc.cmfd import * from openmc.executor import * from openmc.statepoint import * from openmc.summary import * -from openmc.region import * -from openmc.source import * from openmc.particle_restart import * +from openmc.mixin import * try: from openmc.opencg_compatible import * diff --git a/openmc/cell.py b/openmc/cell.py index 9055f10e59..fe8b4a52cd 100644 --- a/openmc/cell.py +++ b/openmc/cell.py @@ -85,6 +85,10 @@ class Cell(object): Array of offsets used for distributed cell searches distribcell_index : int Index of this cell in distribcell arrays + volume_information : dict + Estimate of the volume and total number of atoms of each nuclide from a + stochastic volume calculation. This information is set with the + :meth:`Cell.add_volume_information` method. """ @@ -100,6 +104,7 @@ class Cell(object): self._translation = None self._offsets = None self._distribcell_index = None + self._volume_information = None def __contains__(self, point): if self.region is None: @@ -212,6 +217,10 @@ class Cell(object): def distribcell_index(self): return self._distribcell_index + @property + def volume_information(self): + return self._volume_information + @id.setter def id(self, cell_id): if cell_id is None: @@ -351,6 +360,25 @@ class Cell(object): else: self.region = Intersection(self.region, region) + def add_volume_information(self, volume_calc): + """Add volume information to a cell. + + Parameters + ---------- + volume_calc : openmc.VolumeCalculation + Results from a stochastic volume calculation + + """ + if volume_calc.domain_type == 'cell': + for cell_id in volume_calc.results: + if cell_id == self.id: + self._volume_information = volume_calc.results[cell_id] + break + else: + raise ValueError('No volume information found for this cell.') + else: + raise ValueError('No volume information found for this cell.') + def get_cell_instance(self, path, distribcell_index): # If the Cell is filled by a Material @@ -368,8 +396,19 @@ class Cell(object): return offset - def get_all_nuclides(self): - """Return all nuclides contained in the cell + def get_nuclides(self): + """Returns all nuclides in the cell + + Returns + ------- + nuclides : list of str + List of nuclide names + + """ + return self.fill.get_nuclides() if self.fill_type != 'void' else [] + + def get_nuclide_densities(self): + """Return all nuclides contained in the cell and their densities Returns ------- @@ -381,8 +420,24 @@ class Cell(object): nuclides = OrderedDict() - if self.fill_type != 'void': - nuclides.update(self.fill.get_all_nuclides()) + if self.fill_type == 'material': + nuclides.update(self.fill.get_nuclide_densities()) + elif self.fill_type == 'void': + pass + else: + if self.volume_information is not None: + volume = self.volume_information['volume'][0] + for full_name, atoms in self.volume_information['atoms']: + name, xs = full_name.split('.') + nuclide = openmc.Nuclide(name, xs) + density = 1.0e-24 * atoms[0]/volume # density in atoms/b-cm + nuclides[name] = (nuclide, density) + else: + raise RuntimeError( + 'Volume information is needed to calculate microscopic cross ' + 'sections for cell {}. This can be done by running a ' + 'stochastic volume calculation via the ' + 'openmc.VolumeCalculation object'.format(self.id)) return nuclides diff --git a/openmc/data/__init__.py b/openmc/data/__init__.py index ae8ea8191f..e60878d601 100644 --- a/openmc/data/__init__.py +++ b/openmc/data/__init__.py @@ -14,3 +14,4 @@ from .nbody import * from .thermal import * from .urr import * from .library import * +from .fission_energy import * diff --git a/openmc/data/ace.py b/openmc/data/ace.py index 4085b4222f..831e40fc81 100644 --- a/openmc/data/ace.py +++ b/openmc/data/ace.py @@ -22,6 +22,8 @@ import sys import numpy as np +from openmc.mixin import EqualityMixin + if sys.version_info[0] >= 3: basestring = str @@ -131,7 +133,7 @@ def get_table(filename, name=None): .format(name)) -class Library(object): +class Library(EqualityMixin): """A Library objects represents an ACE-formatted file which may contain multiple tables with data. @@ -353,7 +355,7 @@ class Library(object): lines = [ace_file.readline() for i in range(13)] -class Table(object): +class Table(EqualityMixin): """ACE cross section table Parameters diff --git a/openmc/data/angle_distribution.py b/openmc/data/angle_distribution.py index 316559c50d..80b6cdbdb1 100644 --- a/openmc/data/angle_distribution.py +++ b/openmc/data/angle_distribution.py @@ -4,11 +4,12 @@ from numbers import Real import numpy as np import openmc.checkvalue as cv +from openmc.mixin import EqualityMixin from openmc.stats import Univariate, Tabular, Uniform from .function import INTERPOLATION_SCHEME -class AngleDistribution(object): +class AngleDistribution(EqualityMixin): """Angle distribution as a function of incoming energy Parameters diff --git a/openmc/data/angle_energy.py b/openmc/data/angle_energy.py index 00e049ebcd..4a5e391e3f 100644 --- a/openmc/data/angle_energy.py +++ b/openmc/data/angle_energy.py @@ -1,9 +1,10 @@ from abc import ABCMeta, abstractmethod import openmc.data +from openmc.mixin import EqualityMixin -class AngleEnergy(object): +class AngleEnergy(EqualityMixin): """Distribution in angle and energy of a secondary particle.""" __metaclass = ABCMeta diff --git a/openmc/data/correlated.py b/openmc/data/correlated.py index 97a96c17c1..d6ce8ab470 100644 --- a/openmc/data/correlated.py +++ b/openmc/data/correlated.py @@ -56,6 +56,7 @@ class CorrelatedAngleEnergy(AngleEnergy): @property def interpolation(self): return self._interpolation + @property def energy(self): return self._energy diff --git a/openmc/data/data.py b/openmc/data/data.py index ebc2cba432..574ae541aa 100644 --- a/openmc/data/data.py +++ b/openmc/data/data.py @@ -218,3 +218,8 @@ def atomic_mass(isotope): isotope = isotope[:isotope.find('_')] return _ATOMIC_MASS.get(isotope.lower()) + +# The value of the Boltzman constant in units of MeV / K +# Values here are from the Committee on Data for Science and Technology +# (CODATA) 2010 recommendation (doi:10.1103/RevModPhys.84.1527). +K_BOLTZMANN = 8.6173324E-11 diff --git a/openmc/data/endf_utils.py b/openmc/data/endf_utils.py new file mode 100644 index 0000000000..1a77c60a5e --- /dev/null +++ b/openmc/data/endf_utils.py @@ -0,0 +1,44 @@ +"""This module contains a few utility functions for reading ENDF_ data. It is by +no means enough to read an entire ENDF file. For a more complete ENDF reader, +see Pyne_. + +.. _ENDF: http://www.nndc.bnl.gov/endf +.. _Pyne: http://www.pyne.io + +""" + +import re + +def read_float(float_string): + """Parse ENDF 6E11.0 formatted string into a float.""" + assert len(float_string) == 11 + pattern = r'([\s\-]\d+\.\d+)([\+\-]\d+)' + return float(re.sub(pattern, r'\1e\2', float_string)) + + +def read_CONT_line(line): + """Parse 80-column line from ENDF CONT record into floats and ints.""" + return (read_float(line[0:11]), read_float(line[11:22]), int(line[22:33]), + int(line[33:44]), int(line[44:55]), int(line[55:66]), + int(line[66:70]), int(line[70:72]), int(line[72:75]), + int(line[75:80])) + + +def identify_nuclide(fname): + """Read the header of an ENDF file and extract identifying information.""" + with open(fname, 'r') as fh: + # Skip the tape id (TPID). + line = fh.readline() + + # Read the first HEAD and CONT info. + line = fh.readline() + ZA, AW, LRP, LFI, NLIB, NMOD, MAT, MF, MT, NS = read_CONT_line(line) + line = fh.readline() + ELIS, STA, LIS, LISO, junk, NFOR, MAT, MF, MT, NS = read_CONT_line(line) + + # Return dictionary of the most important identifying information. + return {'Z': int(ZA) // 1000, + 'A': int(ZA) % 1000, + 'LFI': bool(LFI), + 'LIS': LIS, + 'LISO': LISO} diff --git a/openmc/data/energy_distribution.py b/openmc/data/energy_distribution.py index 2300081c13..a160906353 100644 --- a/openmc/data/energy_distribution.py +++ b/openmc/data/energy_distribution.py @@ -8,9 +8,10 @@ import numpy as np from .function import Tabulated1D, INTERPOLATION_SCHEME from openmc.stats.univariate import Univariate, Tabular, Discrete, Mixture import openmc.checkvalue as cv +from openmc.mixin import EqualityMixin -class EnergyDistribution(object): +class EnergyDistribution(EqualityMixin): """Abstract superclass for all energy distributions.""" __metaclass__ = ABCMeta diff --git a/openmc/data/fission_energy.py b/openmc/data/fission_energy.py new file mode 100644 index 0000000000..6352915cc6 --- /dev/null +++ b/openmc/data/fission_energy.py @@ -0,0 +1,593 @@ +from collections import Callable +from copy import deepcopy +import sys + +import h5py +import numpy as np + +from .data import ATOMIC_SYMBOL +from .endf_utils import read_float, read_CONT_line, identify_nuclide +from .function import Function1D, Tabulated1D, Polynomial, Sum +import openmc.checkvalue as cv +from openmc.mixin import EqualityMixin + +if sys.version_info[0] >= 3: + basestring = str + + +def _extract_458_data(filename): + """Read an ENDF file and extract the MF=1, MT=458 values. + + Parameters + ---------- + filename : str + Path to and ENDF file + + Returns + ------- + value : dict of str to list of float + Dictionary that gives lists of coefficients for each energy component. + The keys are the 2-3 letter strings used in ENDF-102, e.g. 'EFR' and + 'ET'. The list will have a length of 1 for Sher-Beck data, more for + polynomial data. + uncertainty : dict of str to list of float + A dictionary with the same format as above. This is probably a + one-standard deviation value, but that is not specified explicitly in + ENDF-102. Also, some evaluations will give zero uncertainty. Use with + caution. + + """ + ident = identify_nuclide(filename) + + if not ident['LFI']: + # This nuclide isn't fissionable. + return None + + # Extract the MF=1, MT=458 section. + lines = [] + with open(filename, 'r') as fh: + line = fh.readline() + while line != '': + if line[70:75] == ' 1458': + lines.append(line) + line = fh.readline() + + if len(lines) == 0: + # No 458 data here. + return None + + # Read the number of coefficients in this LIST record. + NPL = read_CONT_line(lines[1])[4] + + # Parse the ENDF LIST into an array. + data = [] + for i in range(NPL): + row, column = divmod(i, 6) + data.append(read_float(lines[2 + row][11*column:11*(column+1)])) + + # Declare the coefficient names and the order they are given in. The LIST + # contains a value followed immediately by an uncertainty for each of these + # components, times the polynomial order + 1. + labels = ('EFR', 'ENP', 'END', 'EGP', 'EGD', 'EB', 'ENU', 'ER', 'ET') + + # Associate each set of values and uncertainties with its label. + value = {} + uncertainty = {} + for i, label in enumerate(labels): + value[label] = data[2*i::18] + uncertainty[label] = data[2*i + 1::18] + + # In ENDF/B-7.1, data for 2nd-order coefficients were mistakenly not + # converted from MeV to eV. Check for this error and fix it if present. + n_coeffs = len(value['EFR']) + if n_coeffs == 3: # Only check 2nd-order data. + # Check each energy component for the error. If a 1 MeV neutron + # causes a change of more than 100 MeV, we know something is wrong. + error_present = False + for coeffs in value.values(): + second_order = coeffs[2] + if abs(second_order) * 1e12 > 1e8: + error_present = True + break + + # If we found the error, reduce all 2nd-order coeffs by 10**6. + if error_present: + for coeffs in value.values(): coeffs[2] *= 1e-6 + for coeffs in uncertainty.values(): coeffs[2] *= 1e-6 + + # Convert eV to MeV. + for coeffs in value.values(): + for i in range(len(coeffs)): + coeffs[i] *= 10**(-6 + 6*i) + for coeffs in uncertainty.values(): + for i in range(len(coeffs)): + coeffs[i] *= 10**(-6 + 6*i) + + return value, uncertainty + + +def write_compact_458_library(endf_files, output_name='fission_Q_data.h5', + comment=None, verbose=False): + """Read ENDF files, strip the MF=1 MT=458 data and write to small HDF5. + + Parameters + ---------- + endf_files : Collection of str + Strings giving the paths to the ENDF files that will be parsed for data. + output_name : str + Name of the output HDF5 file. Default is 'fission_Q_data.h5'. + comment : str + Comment to write in the output HDF5 file. Defaults to no comment. + verbose : bool + If True, print the name of each isomer as it is read. Defaults to + False. + + """ + # Open the output file. + out = h5py.File(output_name, 'w', libver='latest') + + # Write comments, if given. This commented out comment is the one used for + # the library distributed with OpenMC. + #comment = ('This data is extracted from ENDF/B-VII.1 library. Thanks ' + # 'evaluators, for all your hard work :) Citation: ' + # 'M. B. Chadwick, M. Herman, P. Oblozinsky, ' + # 'M. E. Dunn, Y. Danon, A. C. Kahler, D. L. Smith, ' + # 'B. Pritychenko, G. Arbanas, R. Arcilla, R. Brewer, ' + # 'D. A. Brown, R. Capote, A. D. Carlson, Y. S. Cho, H. Derrien, ' + # 'K. Guber, G. M. Hale, S. Hoblit, S. Holloway, T. D. Johnson, ' + # 'T. Kawano, B. C. Kiedrowski, H. Kim, S. Kunieda, ' + # 'N. M. Larson, L. Leal, J. P. Lestone, R. C. Little, ' + # 'E. A. McCutchan, R. E. MacFarlane, M. MacInnes, ' + # 'C. M. Mattoon, R. D. McKnight, S. F. Mughabghab, ' + # 'G. P. A. Nobre, G. Palmiotti, A. Palumbo, M. T. Pigni, ' + # 'V. G. Pronyaev, R. O. Sayer, A. A. Sonzogni, N. C. Summers, ' + # 'P. Talou, I. J. Thompson, A. Trkov, R. L. Vogt, ' + # 'S. C. van der Marck, A. Wallner, M. C. White, D. Wiarda, ' + # 'and P. G. Young. ENDF/B-VII.1 nuclear data for science and ' + # 'technology: Cross sections, covariances, fission product ' + # 'yields and decay data", Nuclear Data Sheets, ' + # '112(12):2887-2996 (2011).') + if comment is not None: + out.attrs['comment'] = np.string_(comment) + + # Declare the order of the components. Use fixed-length numpy strings + # because they work well with h5py. + labels = np.array(('EFR', 'ENP', 'END', 'EGP', 'EGD', 'EB', 'ENU', 'ER', + 'ET'), dtype='S3') + out.attrs['component order'] = labels + + # Iterate over the given files. + if verbose: print('Reading ENDF files:') + for fname in endf_files: + if verbose: print(fname) + + ident = identify_nuclide(fname) + + # Skip non-fissionable nuclides. + if not ident['LFI']: continue + + # Get the important bits. + data = _extract_458_data(fname) + if data is None: continue + value, uncertainty = data + + # Make a group for this isomer. + name = ATOMIC_SYMBOL[ident['Z']] + str(ident['A']) + if ident['LISO'] != 0: + name += '_m' + str(ident['LISO']) + nuclide_group = out.create_group(name) + + # Write all the coefficients into one array. The first dimension gives + # the component (e.g. fragments or prompt neutrons); the second switches + # between value and uncertainty; the third gives the polynomial order. + n_coeffs = len(value['EFR']) + data_out = np.zeros((len(labels), 2, n_coeffs)) + for i, label in enumerate(labels): + data_out[i, 0, :] = value[label.decode()] + data_out[i, 1, :] = uncertainty[label.decode()] + nuclide_group.create_dataset('data', data=data_out) + + out.close() + + +class FissionEnergyRelease(EqualityMixin): + """Energy relased by fission reactions. + + Energy is carried away from fission reactions by many different particles. + The attributes of this class specify how much energy is released in the form + of fission fragments, neutrons, photons, etc. Each component is also (in + general) a function of the incident neutron energy. + + Following a fission reaction, most of the energy release is carried by the + daughter nuclei fragments. These fragments accelerate apart from the + Coulomb force on the time scale of ~10^-20 s [1]. Those fragments emit + prompt neutrons between ~10^-18 and ~10^-13 s after scission (although some + prompt neutrons may come directly from the scission point) [1]. Prompt + photons follow with a time scale of ~10^-14 to ~10^-7 s [1]. The fission + products then emit delayed neutrons with half lives between 0.1 and 100 s. + The remaining fission energy comes from beta decays of the fission products + which release beta particles, photons, and neutrinos (that escape the + reactor and do not produce usable heat). + + Use the class methods to instantiate this class from an HDF5 or ENDF + dataset. The :meth:`FissionEnergyRelease.from_hdf5` method builds this + class from the usual OpenMC HDF5 data files. + :meth:`FissionEnergyRelease.from_endf` uses ENDF-formatted data. + :meth:`FissionEnergyRelease.from_compact_hdf5` uses a different HDF5 format + that is meant to be compact and store the exact same data as the ENDF + format. Files with this format can be generated with the + :func:`openmc.data.write_compact_458_library` function. + + References + ---------- + [1] D. G. Madland, "Total prompt energy release in the neutron-induced + fission of ^235U, ^238U, and ^239Pu", Nuclear Physics A 772:113--137 (2006). + + + Attributes + ---------- + fragments : Callable + Function that accepts incident neutron energy value(s) and returns the + kinetic energy of the fission daughter nuclides (after prompt neutron + emission). + prompt_neutrons : Callable + Function of energy that returns the kinetic energy of prompt fission + neutrons. + delayed_neutrons : Callable + Function of energy that returns the kinetic energy of delayed neutrons + emitted from fission products. + prompt_photons : Callable + Function of energy that returns the kinetic energy of prompt fission + photons. + delayed_photons : Callable + Function of energy that returns the kinetic energy of delayed photons. + betas : Callable + Function of energy that returns the kinetic energy of delayed beta + particles. + neutrinos : Callable + Function of energy that returns the kinetic energy of neutrinos. + recoverable : Callable + Function of energy that returns the kinetic energy of all products that + can be absorbed in the reactor (all of the energy except for the + neutrinos). + total : Callable + Function of energy that returns the kinetic energy of all products. + q_prompt : Callable + Function of energy that returns the prompt fission Q-value (fragments + + prompt neutrons + prompt photons - incident neutron energy). + q_recoverable : Callable + Function of energy that returns the recoverable fission Q-value + (total release - neutrinos - incident neutron energy). This value is + sometimes referred to as the pseudo-Q-value. + q_total : Callable + Function of energy that returns the total fission Q-value (total release + - incident neutron energy). + + """ + def __init__(self): + self._fragments = None + self._prompt_neutrons = None + self._delayed_neutrons = None + self._prompt_photons = None + self._delayed_photons = None + self._betas = None + self._neutrinos = None + + @property + def fragments(self): + return self._fragments + + @property + def prompt_neutrons(self): + return self._prompt_neutrons + + @property + def delayed_neutrons(self): + return self._delayed_neutrons + + @property + def prompt_photons(self): + return self._prompt_photons + + @property + def delayed_photons(self): + return self._delayed_photons + + @property + def betas(self): + return self._betas + + @property + def neutrinos(self): + return self._neutrinos + + @property + def recoverable(self): + return Sum([self.fragments, self.prompt_neutrons, self.delayed_neutrons, + self.prompt_photons, self.delayed_photons, self.betas]) + + @property + def total(self): + return Sum([self.fragments, self.prompt_neutrons, self.delayed_neutrons, + self.prompt_photons, self.delayed_photons, self.betas, + self.neutrinos]) + + @property + def q_prompt(self): + return Sum([self.fragments, self.prompt_neutrons, self.prompt_photons, + lambda E: -E]) + + @property + def q_recoverable(self): + return Sum([self.recoverable, lambda E: -E]) + + @property + def q_total(self): + return Sum([self.total, lambda E: -E]) + + @fragments.setter + def fragments(self, energy_release): + cv.check_type('fragments', energy_release, Callable) + self._fragments = energy_release + + @prompt_neutrons.setter + def prompt_neutrons(self, energy_release): + cv.check_type('prompt_neutrons', energy_release, Callable) + self._prompt_neutrons = energy_release + + @delayed_neutrons.setter + def delayed_neutrons(self, energy_release): + cv.check_type('delayed_neutrons', energy_release, Callable) + self._delayed_neutrons = energy_release + + @prompt_photons.setter + def prompt_photons(self, energy_release): + cv.check_type('prompt_photons', energy_release, Callable) + self._prompt_photons = energy_release + + @delayed_photons.setter + def delayed_photons(self, energy_release): + cv.check_type('delayed_photons', energy_release, Callable) + self._delayed_photons = energy_release + + @betas.setter + def betas(self, energy_release): + cv.check_type('betas', energy_release, Callable) + self._betas = energy_release + + @neutrinos.setter + def neutrinos(self, energy_release): + cv.check_type('neutrinos', energy_release, Callable) + self._neutrinos = energy_release + + @classmethod + def _from_dictionary(cls, energy_release, incident_neutron): + """Generate fission energy release data from a dictionary. + + Parameters + ---------- + energy_release : dict of str to list of float + Dictionary that gives lists of coefficients for each energy + component. The keys are the 2-3 letter strings used in ENDF-102, + e.g. 'EFR' and 'ET'. The list will have a length of 1 for Sher-Beck + data, more for polynomial data. + + incident_neutron : openmc.data.IncidentNeutron + Corresponding incident neutron dataset + + Returns + ------- + openmc.data.FissionEnergyRelease + Fission energy release data + + """ + out = cls() + + # How many coefficients are given for each component? If we only find + # one value for each, then we need to use the Sher-Beck formula for + # energy dependence. Otherwise, it is a polynomial. + n_coeffs = len(energy_release['EFR']) + if n_coeffs > 1: + out.fragments = Polynomial(energy_release['EFR']) + out.prompt_neutrons = Polynomial(energy_release['ENP']) + out.delayed_neutrons = Polynomial(energy_release['END']) + out.prompt_photons = Polynomial(energy_release['EGP']) + out.delayed_photons = Polynomial(energy_release['EGD']) + out.betas = Polynomial(energy_release['EB']) + out.neutrinos = Polynomial(energy_release['ENU']) + else: + # EFR and ENP are energy independent. Use 0-order polynomials to + # make a constant function. The energy-dependence of END is + # unspecified in ENDF-102 so assume it is independent. + out.fragments = Polynomial((energy_release['EFR'][0])) + out.prompt_photons = Polynomial((energy_release['EGP'][0])) + out.delayed_neutrons = Polynomial((energy_release['END'][0])) + + # EDP, EB, and ENU are linear. + out.delayed_photons = Polynomial((energy_release['EGD'][0], -0.075)) + out.betas = Polynomial((energy_release['EB'][0], -0.075)) + out.neutrinos = Polynomial((energy_release['ENU'][0], -0.105)) + + # Prompt neutrons require nu-data. It is not clear from ENDF-102 + # whether prompt or total nu value should be used, but the delayed + # neutron fraction is so small that the difference is negligible. + # MT=18 (n, fission) might not be available so try MT=19 (n, f) as + # well. + if 18 in incident_neutron.reactions: + nu_prompt = [p for p in incident_neutron[18].products + if p.particle == 'neutron' + and p.emission_mode == 'prompt'] + elif 19 in incident_neutron.reactions: + nu_prompt = [p for p in incident_neutron[19].products + if p.particle == 'neutron' + and p.emission_mode == 'prompt'] + else: + raise ValueError('IncidentNeutron data has no fission ' + 'reaction.') + if len(nu_prompt) == 0: + raise ValueError('Nu data is needed to compute fission energy ' + 'release with the Sher-Beck format.') + if len(nu_prompt) > 1: + raise ValueError('Ambiguous prompt value.') + if not isinstance(nu_prompt[0].yield_, Tabulated1D): + raise TypeError('Sher-Beck fission energy release currently ' + 'only supports Tabulated1D nu data.') + ENP = deepcopy(nu_prompt[0].yield_) + ENP.y = (energy_release['ENP'] + 1.307 * ENP.x + - 8.07 * (ENP.y - ENP.y[0])) + out.prompt_neutrons = ENP + + return out + + @classmethod + def from_endf(cls, filename, incident_neutron): + """Generate fission energy release data from an ENDF file. + + Parameters + ---------- + filename : str + Name of the ENDF file containing fission energy release data + + incident_neutron : openmc.data.IncidentNeutron + Corresponding incident neutron dataset + + Returns + ------- + openmc.data.FissionEnergyRelease + Fission energy release data + + """ + + # Check to make sure this ENDF file matches the expected isomer. + ident = identify_nuclide(filename) + if ident['Z'] != incident_neutron.atomic_number: + raise ValueError('The atomic number of the ENDF evaluation does ' + 'not match the given IncidentNeutron.') + if ident['A'] != incident_neutron.mass_number: + raise ValueError('The atomic mass of the ENDF evaluation does ' + 'not match the given IncidentNeutron.') + if ident['LISO'] != incident_neutron.metastable: + raise ValueError('The metastable state of the ENDF evaluation does ' + 'not match the given IncidentNeutron.') + if not ident['LFI']: + raise ValueError('The ENDF evaluation is not fissionable.') + + # Read the 458 data from the ENDF file. + value, uncertainty = _extract_458_data(filename) + + # Build the object. + return cls._from_dictionary(value, incident_neutron) + + @classmethod + def from_hdf5(cls, group): + """Generate fission energy release data from an HDF5 group. + + Parameters + ---------- + group : h5py.Group + HDF5 group to read from + + Returns + ------- + openmc.data.FissionEnergyRelease + Fission energy release data + + """ + + obj = cls() + + obj.fragments = Function1D.from_hdf5(group['fragments']) + obj.prompt_neutrons = Function1D.from_hdf5(group['prompt_neutrons']) + obj.delayed_neutrons = Function1D.from_hdf5(group['delayed_neutrons']) + obj.prompt_photons = Function1D.from_hdf5(group['prompt_photons']) + obj.delayed_photons = Function1D.from_hdf5(group['delayed_photons']) + obj.betas = Function1D.from_hdf5(group['betas']) + obj.neutrinos = Function1D.from_hdf5(group['neutrinos']) + + return obj + + @classmethod + def from_compact_hdf5(cls, fname, incident_neutron): + """Generate fission energy release data from a small HDF5 library. + + Parameters + ---------- + fname : str + Path to an HDF5 file containing fission energy release data. This + file should have been generated form the + :func:`openmc.data.write_compact_458_library` function. + + incident_neutron : openmc.data.IncidentNeutron + Corresponding incident neutron dataset + + Returns + ------- + openmc.data.FissionEnergyRelease or None + Fission energy release data for the given nuclide if it is present + in the data file + + """ + + fin = h5py.File(fname, 'r') + + components = [s.decode() for s in fin.attrs['component order']] + + nuclide_name = ATOMIC_SYMBOL[incident_neutron.atomic_number] + nuclide_name += str(incident_neutron.mass_number) + if incident_neutron.metastable != 0: + nuclide_name += '_m' + str(incident_neutron.metastable) + + if nuclide_name not in fin: return None + + data = {c: fin[nuclide_name + '/data'][i, 0, :] + for i, c in enumerate(components)} + + return cls._from_dictionary(data, incident_neutron) + + def to_hdf5(self, group): + """Write energy release data to an HDF5 group + + Parameters + ---------- + group : h5py.Group + HDF5 group to write to + + """ + + self.fragments.to_hdf5(group, 'fragments') + self.prompt_neutrons.to_hdf5(group, 'prompt_neutrons') + self.delayed_neutrons.to_hdf5(group, 'delayed_neutrons') + self.prompt_photons.to_hdf5(group, 'prompt_photons') + self.delayed_photons.to_hdf5(group, 'delayed_photons') + self.betas.to_hdf5(group, 'betas') + self.neutrinos.to_hdf5(group, 'neutrinos') + + if isinstance(self.prompt_neutrons, Polynomial): + # Add the polynomials for the relevant components together. Use a + # Polynomial((0.0, -1.0)) to subtract incident energy. + q_prompt = (self.fragments + self.prompt_neutrons + + self.prompt_photons + Polynomial((0.0, -1.0))) + q_prompt.to_hdf5(group, 'q_prompt') + q_recoverable = (self.fragments + self.prompt_neutrons + + self.delayed_neutrons + self.prompt_photons + + self.delayed_photons + self.betas + + Polynomial((0.0, -1.0))) + q_recoverable.to_hdf5(group, 'q_recoverable') + + elif isinstance(self.prompt_neutrons, Tabulated1D): + # Make a Tabulated1D and evaluate the polynomial components at the + # table x points to get new y points. Subtract x from y to remove + # incident energy. + q_prompt = deepcopy(self.prompt_neutrons) + q_prompt.y += self.fragments(q_prompt.x) + q_prompt.y += self.prompt_photons(q_prompt.x) + q_prompt.y -= q_prompt.x + q_prompt.to_hdf5(group, 'q_prompt') + q_recoverable = q_prompt + q_recoverable.y += self.delayed_neutrons(q_recoverable.x) + q_recoverable.y += self.delayed_photons(q_recoverable.x) + q_recoverable.y += self.betas(q_recoverable.x) + q_recoverable.to_hdf5(group, 'q_recoverable') + + else: + raise ValueError('Unrecognized energy release format') diff --git a/openmc/data/function.py b/openmc/data/function.py index 56a3d4a45f..94a2f0911e 100644 --- a/openmc/data/function.py +++ b/openmc/data/function.py @@ -1,15 +1,61 @@ +from abc import ABCMeta, abstractmethod from collections import Iterable, Callable from numbers import Real, Integral import numpy as np import openmc.checkvalue as cv +from openmc.mixin import EqualityMixin INTERPOLATION_SCHEME = {1: 'histogram', 2: 'linear-linear', 3: 'linear-log', 4: 'log-linear', 5: 'log-log'} -class Tabulated1D(object): +class Function1D(EqualityMixin): + """A function of one independent variable with HDF5 support.""" + + __metaclass__ = ABCMeta + + @abstractmethod + def __call__(self): pass + + @abstractmethod + def to_hdf5(self, group, name='xy'): + """Write function to an HDF5 group + + Parameters + ---------- + group : h5py.Group + HDF5 group to write to + name : str + Name of the dataset to create + + """ + pass + + @classmethod + def from_hdf5(cls, dataset): + """Generate function from an HDF5 dataset + + Parameters + ---------- + dataset : h5py.Dataset + Dataset to read from + + Returns + ------- + openmc.data.Function1D + Function read from dataset + + """ + for subclass in cls.__subclasses__(): + if dataset.attrs['type'].decode() == subclass.__name__: + return subclass.from_hdf5(dataset) + raise ValueError("Unrecognized Function1D class: '" + + dataset.attrs['type'].decode() + "'") + + +class Tabulated1D(Function1D): """A one-dimensional tabulated function. This class mirrors the TAB1 type from the ENDF-6 format. A tabulated @@ -239,7 +285,7 @@ class Tabulated1D(object): """ dataset = group.create_dataset(name, data=np.vstack( [self.x, self.y])) - dataset.attrs['type'] = np.string_('tab1') + dataset.attrs['type'] = np.string_(type(self).__name__) dataset.attrs['breakpoints'] = self.breakpoints dataset.attrs['interpolation'] = self.interpolation @@ -258,6 +304,10 @@ class Tabulated1D(object): Function read from dataset """ + if dataset.attrs['type'].decode() != cls.__name__: + raise ValueError("Expected an HDF5 attribute 'type' equal to '" + + cls.__name__ + "'") + x = dataset.value[0, :] y = dataset.value[1, :] breakpoints = dataset.attrs['breakpoints'] @@ -304,7 +354,43 @@ class Tabulated1D(object): return Tabulated1D(x, y, breakpoints, interpolation) -class Sum(object): +class Polynomial(np.polynomial.Polynomial, Function1D): + def to_hdf5(self, group, name='xy'): + """Write polynomial function to an HDF5 group + + Parameters + ---------- + group : h5py.Group + HDF5 group to write to + name : str + Name of the dataset to create + + """ + dataset = group.create_dataset(name, data=self.coef) + dataset.attrs['type'] = np.string_(type(self).__name__) + + @classmethod + def from_hdf5(cls, dataset): + """Generate function from an HDF5 dataset + + Parameters + ---------- + dataset : h5py.Dataset + Dataset to read from + + Returns + ------- + openmc.data.Function1D + Function read from dataset + + """ + if dataset.attrs['type'].decode() != cls.__name__: + raise ValueError("Expected an HDF5 attribute 'type' equal to '" + + cls.__name__ + "'") + return cls(dataset.value) + + +class Sum(EqualityMixin): """Sum of multiple functions. This class allows you to create a callable object which represents the sum diff --git a/openmc/data/library.py b/openmc/data/library.py index dba5eabc16..49d1c78f61 100644 --- a/openmc/data/library.py +++ b/openmc/data/library.py @@ -3,9 +3,11 @@ import xml.etree.ElementTree as ET import h5py +from openmc.mixin import EqualityMixin from openmc.clean_xml import clean_xml_indentation -class DataLibrary(object): + +class DataLibrary(EqualityMixin): def __init__(self): self.libraries = [] diff --git a/openmc/data/neutron.py b/openmc/data/neutron.py index 450cf81ec9..456ccee7bc 100644 --- a/openmc/data/neutron.py +++ b/openmc/data/neutron.py @@ -1,25 +1,95 @@ from __future__ import division, unicode_literals import sys -from collections import OrderedDict, Iterable, Mapping +from collections import OrderedDict, Iterable, Mapping, MutableMapping +from itertools import chain from numbers import Integral, Real from warnings import warn import numpy as np import h5py -from .data import ATOMIC_SYMBOL, SUM_RULES +from .data import ATOMIC_SYMBOL, SUM_RULES, K_BOLTZMANN from .ace import Table, get_table +from .fission_energy import FissionEnergyRelease from .function import Tabulated1D, Sum from .product import Product from .reaction import Reaction, _get_photon_products from .urr import ProbabilityTables import openmc.checkvalue as cv +from openmc.mixin import EqualityMixin if sys.version_info[0] >= 3: basestring = str -class IncidentNeutron(object): +def _get_metadata(zaid, metastable_scheme='nndc'): + """Return basic identifying data for a nuclide with a given ZAID. + + Parameters + ---------- + zaid : int + ZAID (1000*Z + A) obtained from a library + metastable_scheme : {'nndc', 'mcnp'} + Determine how ZAID identifiers are to be interpreted in the case of + a metastable nuclide. Because the normal ZAID (=1000*Z + A) does not + encode metastable information, different conventions are used among + different libraries. In MCNP libraries, the convention is to add 400 + for a metastable nuclide except for Am242m, for which 95242 is + metastable and 95642 (or 1095242 in newer libraries) is the ground + state. For NNDC libraries, ZAID is given as 1000*Z + A + 100*m. + + Returns + ------- + name : str + Name of the table + element : str + The atomic symbol of the isotope in the table; e.g., Zr. + Z : int + Number of protons in the nucleus + mass_number : int + Number of nucleons in the nucleus + metastable : int + Metastable state of the nucleus. A value of zero indicates ground state. + + """ + + cv.check_type('zaid', zaid, int) + cv.check_value('metastable_scheme', metastable_scheme, ['nndc', 'mcnp']) + + Z = zaid // 1000 + mass_number = zaid % 1000 + + if metastable_scheme == 'mcnp': + if zaid > 1000000: + # New SZA format + Z = Z % 1000 + if zaid == 1095242: + metastable = 0 + else: + metastable = zaid // 1000000 + else: + if zaid == 95242: + metastable = 1 + elif zaid == 95642: + metastable = 0 + else: + metastable = 1 if mass_number > 300 else 0 + elif metastable_scheme == 'nndc': + metastable = 1 if mass_number > 300 else 0 + + while mass_number > 3 * Z: + mass_number -= 100 + + # Determine name + element = ATOMIC_SYMBOL[Z] + name = '{}{}'.format(element, mass_number) + if metastable > 0: + name += '_m{}'.format(metastable) + + return (name, element, Z, mass_number, metastable) + + +class IncidentNeutron(EqualityMixin): """Continuous-energy neutron interaction data. Instances of this class are not normally instantiated by the user but rather @@ -29,7 +99,7 @@ class IncidentNeutron(object): Parameters ---------- name : str - Name of the table + Name of the nuclide using the GND naming convention atomic_number : int Number of protons in the nucleus mass_number : int @@ -38,8 +108,9 @@ class IncidentNeutron(object): Metastable state of the nucleus. A value of zero indicates ground state. atomic_weight_ratio : float Atomic mass ratio of the target nuclide. - temperature : float - Temperature of the target nuclide in MeV. + kTs : Iterable of float + List of temperatures of the target nuclide in the data set. + The temperatures have units of MeV. Attributes ---------- @@ -49,14 +120,19 @@ class IncidentNeutron(object): Atomic symbol of the nuclide, e.g., 'Zr' atomic_weight_ratio : float Atomic weight ratio of the target nuclide. - energy : numpy.ndarray + energy : dict of numpy.ndarray The energy values (MeV) at which reaction cross-sections are tabulated. + They keys of the dict are the temperature string ('294K') for each + set of energies + fission_energy : None or openmc.data.FissionEnergyRelease + The energy released by fission, tabulated by component (e.g. prompt + neutrons or beta particles) and dependent on incident neutron energy mass_number : int Number of nucleons in the nucleus metastable : int Metastable state of the nucleus. A value of zero indicates ground state. name : str - ZAID identifier of the table, e.g. 92235.70c. + Name of the nuclide using the GND naming convention reactions : collections.OrderedDict Contains the cross sections, secondary angle and energy distributions, and other associated data for each reaction. The keys are the MT values @@ -64,26 +140,32 @@ class IncidentNeutron(object): summed_reactions : collections.OrderedDict Contains summed cross sections, e.g., the total cross section. The keys are the MT values and the values are Reaction objects. - temperature : float - Temperature of the target nuclide in MeV. - urr : None or openmc.data.ProbabilityTables - Unresolved resonance region probability tables + temperatures : list of str + List of string representations the temperatures of the target nuclide + in the data set. The temperatures are strings of the temperature, + rounded to the nearest integer; e.g., '294K' + kTs : Iterable of float + List of temperatures of the target nuclide in the data set. + The temperatures have units of MeV. + urr : dict + Dictionary whose keys are temperatures (e.g., '294K') and values are + unresolved resonance region probability tables. """ def __init__(self, name, atomic_number, mass_number, metastable, - atomic_weight_ratio, temperature): + atomic_weight_ratio, kTs): self.name = name self.atomic_number = atomic_number self.mass_number = mass_number self.metastable = metastable self.atomic_weight_ratio = atomic_weight_ratio - self.temperature = temperature - - self._energy = None + self.kTs = kTs + self.energy = {} + self._fission_energy = None self.reactions = OrderedDict() self.summed_reactions = OrderedDict() - self.urr = None + self._urr = {} def __contains__(self, mt): return mt in self.reactions or mt in self.summed_reactions @@ -123,12 +205,8 @@ class IncidentNeutron(object): return self._atomic_weight_ratio @property - def energy(self): - return self._energy - - @property - def temperature(self): - return self._temperature + def fission_energy(self): + return self._fission_energy @property def reactions(self): @@ -142,6 +220,10 @@ class IncidentNeutron(object): def urr(self): return self._urr + @property + def temperatures(self): + return ["{}K".format(int(round(kT / K_BOLTZMANN))) for kT in self.kTs] + @name.setter def name(self, name): cv.check_type('name', name, basestring) @@ -149,7 +231,7 @@ class IncidentNeutron(object): @property def atomic_symbol(self): - return atomic_symbol[self.atomic_number] + return ATOMIC_SYMBOL[self.atomic_number] @atomic_number.setter def atomic_number(self, atomic_number): @@ -175,16 +257,11 @@ class IncidentNeutron(object): cv.check_greater_than('atomic weight ratio', atomic_weight_ratio, 0.0) self._atomic_weight_ratio = atomic_weight_ratio - @temperature.setter - def temperature(self, temperature): - cv.check_type('temperature', temperature, Real) - cv.check_greater_than('temperature', temperature, 0.0, True) - self._temperature = temperature - - @energy.setter - def energy(self, energy): - cv.check_type('energy grid', energy, Iterable, Real) - self._energy = energy + @fission_energy.setter + def fission_energy(self, fission_energy): + cv.check_type('fission energy release', fission_energy, + FissionEnergyRelease) + self._fission_energy = fission_energy @reactions.setter def reactions(self, reactions): @@ -198,10 +275,61 @@ class IncidentNeutron(object): @urr.setter def urr(self, urr): - cv.check_type('probability tables', urr, - (ProbabilityTables, type(None))) + cv.check_type('probability table dictionary', urr, MutableMapping) + for key, value in urr: + cv.check_type('probability table temperature', key, basestring) + cv.check_type('probability tables', value, ProbabilityTables) self._urr = urr + def add_temperature_from_ace(self, ace_or_filename, metastable_scheme='nndc'): + """Append data from an ACE file at a different temperature. + + Parameters + ---------- + ace_or_filename : openmc.data.ace.Table or str + ACE table to read from. If given as a string, it is assumed to be + the filename for the ACE file. + metastable_scheme : {'nndc', 'mcnp'} + Determine how ZAID identifiers are to be interpreted in the case of + a metastable nuclide. Because the normal ZAID (=1000*Z + A) does not + encode metastable information, different conventions are used among + different libraries. In MCNP libraries, the convention is to add 400 + for a metastable nuclide except for Am242m, for which 95242 is + metastable and 95642 (or 1095242 in newer libraries) is the ground + state. For NNDC libraries, ZAID is given as 1000*Z + A + 100*m. + + """ + + data = IncidentNeutron.from_ace(ace_or_filename, metastable_scheme) + + # Check if temprature already exists + strT = data.temperatures[0] + if strT in self.temperatures: + warn('Cross sections at T={} already exist.'.format(strT)) + return + + # Check that name matches + if data.name != self.name: + raise ValueError('Data provided for an incorrect nuclide.') + + # Add temperature + self.kTs += data.kTs + + # Add energy grid + self.energy[strT] = data.energy[strT] + + # Add normal and summed reactions + for mt in chain(data.reactions, data.summed_reactions): + if mt not in self: + raise ValueError("Tried to add cross sections for MT={} at T={}" + " but this reaction doesn't exist.".format( + mt, strT)) + self[mt].xs[strT] = data[mt].xs[strT] + + # Add probability tables + if strT in data.urr: + self.urr[strT] = data.urr[strT] + def get_reaction_components(self, mt): """Determine what reactions make up summed reaction. @@ -255,10 +383,14 @@ class IncidentNeutron(object): g.attrs['A'] = self.mass_number g.attrs['metastable'] = self.metastable g.attrs['atomic_weight_ratio'] = self.atomic_weight_ratio - g.attrs['temperature'] = self.temperature + ktg = g.create_group('kTs') + for i, temperature in enumerate(self.temperatures): + ktg.create_dataset(temperature, data=self.kTs[i]) # Write energy grid - g.create_dataset('energy', data=self.energy) + eg = g.create_group('energy') + for temperature in self.temperatures: + eg.create_dataset(temperature, data=self.energy[temperature]) # Write reaction data rxs_group = g.create_group('reactions') @@ -272,9 +404,16 @@ class IncidentNeutron(object): rx.derived_products[0].to_hdf5(tgroup) # Write unresolved resonance probability tables - if self.urr is not None: + if self.urr: urr_group = g.create_group('urr') - self.urr.to_hdf5(urr_group) + for temperature, urr in self.urr.items(): + tgroup = urr_group.create_group(temperature) + urr.to_hdf5(tgroup) + + # Write fission energy release data + if self.fission_energy is not None: + fer_group = g.create_group('fission_energy_release') + self.fission_energy.to_hdf5(fer_group) f.close() @@ -306,13 +445,18 @@ class IncidentNeutron(object): mass_number = group.attrs['A'] metastable = group.attrs['metastable'] atomic_weight_ratio = group.attrs['atomic_weight_ratio'] - temperature = group.attrs['temperature'] + kTg = group['kTs'] + kTs = [] + for temp in kTg: + kTs.append(kTg[temp].value) data = cls(name, atomic_number, mass_number, metastable, - atomic_weight_ratio, temperature) + atomic_weight_ratio, kTs) # Read energy grid - data.energy = group['energy'].value + e_group = group['energy'] + for temperature, dset in e_group.items(): + data.energy[temperature] = dset.value # Read reaction data rxs_group = group['reactions'] @@ -326,21 +470,26 @@ class IncidentNeutron(object): tgroup = group['total_nu'] rx.derived_products.append(Product.from_hdf5(tgroup)) - # Build summed reactions. Start from the highest MT number because high - # MTs never depend on lower MTs. + # Build summed reactions. Start from the highest MT number because + # high MTs never depend on lower MTs. for mt_sum in sorted(SUM_RULES, reverse=True): if mt_sum not in data: - xs_components = [data[mt].xs for mt in SUM_RULES[mt_sum] - if mt in data] - if len(xs_components) > 0: - rxn = Reaction(mt_sum) - rxn.xs = Sum(xs_components) - data.summed_reactions[mt_sum] = rxn + rxs = [data[mt] for mt in SUM_RULES[mt_sum] if mt in data] + if len(rxs) > 0: + data.summed_reactions[mt_sum] = rx = Reaction(mt_sum) + for T in data.temperatures: + rx.xs[T] = Sum([rx.xs[T] for rx in rxs]) # Read unresolved resonance probability tables if 'urr' in group: urr_group = group['urr'] - data.urr = ProbabilityTables.from_hdf5(urr_group) + for temperature, tgroup in urr_group.items(): + data.urr[temperature] = ProbabilityTables.from_hdf5(tgroup) + + # Read fission energy release data + if 'fission_energy_release' in group: + fer_group = group['fission_energy_release'] + data.fission_energy = FissionEnergyRelease.from_hdf5(fer_group) return data @@ -350,9 +499,9 @@ class IncidentNeutron(object): Parameters ---------- - ace : openmc.data.ace.Table or str - ACE table to read from. If given as a string, it is assumed to be - the filename for the ACE file. + ace_or_filename : openmc.data.ace.Table or str + ACE table to read from. If the value is a string, it is assumed to + be the filename for the ACE file. metastable_scheme : {'nndc', 'mcnp'} Determine how ZAID identifiers are to be interpreted in the case of a metastable nuclide. Because the normal ZAID (=1000*Z + A) does not @@ -368,6 +517,8 @@ class IncidentNeutron(object): Incident neutron continuous-energy data """ + + # First obtain the data for the first provided ACE table/file if isinstance(ace_or_filename, Table): ace = ace_or_filename else: @@ -375,55 +526,35 @@ class IncidentNeutron(object): # If mass number hasn't been specified, make an educated guess zaid, xs = ace.name.split('.') - zaid = int(zaid) - Z = zaid // 1000 - mass_number = zaid % 1000 + name, element, Z, mass_number, metastable = \ + _get_metadata(int(zaid), metastable_scheme) - if metastable_scheme == 'mcnp': - if zaid > 1000000: - # New SZA format - Z = Z % 1000 - if zaid == 1095242: - metastable = 0 - else: - metastable = zaid // 1000000 - else: - if zaid == 95242: - metastable = 1 - elif zaid == 95642: - metastable = 0 - else: - metastable = 1 if mass_number > 300 else 0 - elif metastable_scheme == 'nndc': - metastable = 1 if mass_number > 300 else 0 - - while mass_number > 3*Z: - mass_number -= 100 - - # Determine name for group - element = ATOMIC_SYMBOL[Z] - if metastable > 0: - name = '{}{}_m{}.{}'.format(element, mass_number, metastable, xs) - else: - name = '{}{}.{}'.format(element, mass_number, xs) + # Assign temperature to the running list + kTs = [ace.temperature] data = cls(name, Z, mass_number, metastable, - ace.atomic_weight_ratio, ace.temperature) + ace.atomic_weight_ratio, kTs) + + # Get string of temperature to use as a dictionary key + strT = data.temperatures[0] # Read energy grid n_energy = ace.nxs[3] energy = ace.xss[ace.jxs[1]:ace.jxs[1] + n_energy] - data.energy = energy - total_xs = ace.xss[ace.jxs[1] + n_energy:ace.jxs[1] + 2*n_energy] - absorption_xs = ace.xss[ace.jxs[1] + 2*n_energy:ace.jxs[1] + 3*n_energy] + data.energy[strT] = energy + total_xs = ace.xss[ace.jxs[1] + n_energy:ace.jxs[1] + 2 * n_energy] + absorption_xs = ace.xss[ace.jxs[1] + 2 * n_energy:ace.jxs[1] + + 3 * n_energy] # Create summed reactions (total and absorption) total = Reaction(1) - total.xs = Tabulated1D(energy, total_xs) + total.xs[strT] = Tabulated1D(energy, total_xs) data.summed_reactions[1] = total - absorption = Reaction(27) - absorption.xs = Tabulated1D(energy, absorption_xs) - data.summed_reactions[27] = absorption + + if np.count_nonzero(absorption_xs) > 0: + absorption = Reaction(27) + absorption.xs[strT] = Tabulated1D(energy, absorption_xs) + data.summed_reactions[27] = absorption # Read each reaction n_reaction = ace.nxs[4] + 1 @@ -452,13 +583,16 @@ class IncidentNeutron(object): warn('Photon production is present for MT={} but no ' 'reaction components exist.'.format(mt)) continue - rx.xs = Sum([data.reactions[mt_i].xs for mt_i in mts]) + rx.xs[strT] = Sum([data.reactions[mt_i].xs[strT] + for mt_i in mts]) # Determine summed cross section rx.products += _get_photon_products(ace, rx) data.summed_reactions[mt] = rx # Read unresolved resonance probability tables - data.urr = ProbabilityTables.from_ace(ace) + urr = ProbabilityTables.from_ace(ace) + if urr is not None: + data.urr[strT] = urr return data diff --git a/openmc/data/product.py b/openmc/data/product.py index dd276daac3..753888f6df 100644 --- a/openmc/data/product.py +++ b/openmc/data/product.py @@ -3,17 +3,17 @@ from numbers import Real import sys import numpy as np -from numpy.polynomial.polynomial import Polynomial import openmc.checkvalue as cv -from .function import Tabulated1D +from openmc.mixin import EqualityMixin +from .function import Tabulated1D, Polynomial, Function1D from .angle_energy import AngleEnergy if sys.version_info[0] >= 3: basestring = str -class Product(object): +class Product(EqualityMixin): """Secondary particle emitted in a nuclear reaction Parameters @@ -36,7 +36,7 @@ class Product(object): yield represents particles from prompt and delayed sources. particle : str What particle the reaction product is. - yield_ : float or openmc.data.Tabulated1D or numpy.polynomial.Polynomial + yield_ : openmc.data.Function1D Yield of secondary particle in the reaction. """ @@ -47,7 +47,7 @@ class Product(object): self.emission_mode = 'prompt' self.distribution = [] self.applicability = [] - self.yield_ = 1 + self.yield_ = Polynomial((1,)) # 0-order polynomial i.e. a constant def __repr__(self): if isinstance(self.yield_, Real): @@ -119,8 +119,7 @@ class Product(object): @yield_.setter def yield_(self, yield_): - cv.check_type('product yield', yield_, - (Real, Tabulated1D, Polynomial)) + cv.check_type('product yield', yield_, Function1D) self._yield = yield_ def to_hdf5(self, group): @@ -138,16 +137,7 @@ class Product(object): group.attrs['decay_rate'] = self.decay_rate # Write yield - if isinstance(self.yield_, Tabulated1D): - self.yield_.to_hdf5(group, 'yield') - dset = group['yield'] - dset.attrs['type'] = np.string_('tabulated') - elif isinstance(self.yield_, Polynomial): - dset = group.create_dataset('yield', data=self.yield_.coef) - dset.attrs['type'] = np.string_('polynomial') - else: - dset = group.create_dataset('yield', data=float(self.yield_)) - dset.attrs['type'] = np.string_('constant') + self.yield_.to_hdf5(group, 'yield') # Write applicability/distribution group.attrs['n_distribution'] = len(self.distribution) @@ -180,13 +170,7 @@ class Product(object): p.decay_rate = group.attrs['decay_rate'] # Read yield - yield_type = group['yield'].attrs['type'].decode() - if yield_type == 'constant': - p.yield_ = group['yield'].value - elif yield_type == 'polynomial': - p.yield_ = Polynomial(group['yield'].value) - elif yield_type == 'tabulated': - p.yield_ = Tabulated1D.from_hdf5(group['yield']) + p.yield_ = Function1D.from_hdf5(group['yield']) # Read applicability/distribution n_distribution = group.attrs['n_distribution'] diff --git a/openmc/data/reaction.py b/openmc/data/reaction.py index ad707d276e..45d668b92f 100644 --- a/openmc/data/reaction.py +++ b/openmc/data/reaction.py @@ -1,18 +1,18 @@ from __future__ import division, unicode_literals -from collections import Iterable, Callable +from collections import Iterable, Callable, MutableMapping from copy import deepcopy -from numbers import Real +from numbers import Real, Integral from warnings import warn import numpy as np -from numpy.polynomial import Polynomial import openmc.checkvalue as cv +from openmc.mixin import EqualityMixin from openmc.stats import Uniform from .angle_distribution import AngleDistribution from .angle_energy import AngleEnergy -from .function import Tabulated1D -from .data import REACTION_NAME +from .function import Tabulated1D, Polynomial, Function1D +from .data import REACTION_NAME, K_BOLTZMANN from .product import Product from .uncorrelated import UncorrelatedAngleEnergy @@ -211,7 +211,7 @@ def _get_photon_products(ace, rx): # Get photon production cross section photon_prod_xs = ace.xss[idx + 2:idx + 2 + n_energy] - neutron_xs = rx.xs(energy) + neutron_xs = list(rx.xs.values())[0](energy) idx = np.where(neutron_xs > 0.) # Calculate photon yield @@ -251,7 +251,7 @@ def _get_photon_products(ace, rx): return photons -class Reaction(object): +class Reaction(EqualityMixin): """A nuclear reaction A Reaction object represents a single reaction channel for a nuclide with @@ -261,8 +261,7 @@ class Reaction(object): Parameters ---------- mt : int - The ENDF MT number for this reaction. On occasion, MCNP uses MT numbers - that don't correspond exactly to the ENDF specification. + The ENDF MT number for this reaction. Attributes ---------- @@ -274,16 +273,12 @@ class Reaction(object): The ENDF MT number for this reaction. q_value : float The Q-value of this reaction in MeV. - table : openmc.data.ace.Table - The ACE table which contains this reaction. threshold : float Threshold of the reaction in MeV - threshold_idx : int - The index on the energy grid corresponding to the threshold of this - reaction. - xs : callable + xs : dict of str to openmc.data.Function1D Microscopic cross section for this reaction as a function of incident - energy + energy; these cross sections are provided in a dictionary where the key + is the temperature of the cross section set. products : Iterable of openmc.data.Product Reaction products derived_products : Iterable of openmc.data.Product @@ -293,13 +288,13 @@ class Reaction(object): """ def __init__(self, mt): - self.center_of_mass = True + self._center_of_mass = True + self._q_value = 0. + self._xs = {} + self._products = [] + self._derived_products = [] + self.mt = mt - self.q_value = 0. - self.threshold_idx = 0 - self._xs = None - self.products = [] - self.derived_products = [] def __repr__(self): if self.mt in REACTION_NAME: @@ -320,8 +315,8 @@ class Reaction(object): return self._products @property - def threshold(self): - return self.xs.x[0] + def derived_products(self): + return self._derived_products @property def xs(self): @@ -342,12 +337,18 @@ class Reaction(object): cv.check_type('reaction products', products, Iterable, Product) self._products = products + @derived_products.setter + def derived_products(self, derived_products): + cv.check_type('reaction derived products', derived_products, + Iterable, Product) + self._derived_products = derived_products + @xs.setter def xs(self, xs): - cv.check_type('reaction cross section', xs, Callable) - if isinstance(xs, Tabulated1D): - for y in xs.y: - cv.check_greater_than('reaction cross section', y, 0.0, True) + cv.check_type('reaction cross section dictionary', xs, MutableMapping) + for key, value in xs.items(): + cv.check_type('reaction cross section temperature', key, basestring) + cv.check_type('reaction cross section', value, Function1D) self._xs = xs def to_hdf5(self, group): @@ -366,10 +367,16 @@ class Reaction(object): else: group.attrs['label'] = np.string_(self.mt) group.attrs['Q_value'] = self.q_value - group.attrs['threshold_idx'] = self.threshold_idx + 1 group.attrs['center_of_mass'] = 1 if self.center_of_mass else 0 - if self.xs is not None: - group.create_dataset('xs', data=self.xs.y) + for T in self.xs: + Tgroup = group.create_group(T) + if self.xs[T] is not None: + dset = Tgroup.create_dataset('xs', data=self.xs[T].y) + if hasattr(self.xs[T], '_threshold_idx'): + threshold_idx = self.xs[T]._threshold_idx + 1 + else: + threshold_idx = 1 + dset.attrs['threshold_idx'] = threshold_idx for i, p in enumerate(self.products): pgroup = group.create_group('product_{}'.format(i)) p.to_hdf5(pgroup) @@ -382,8 +389,9 @@ class Reaction(object): ---------- group : h5py.Group HDF5 group to write to - energy : Iterable of float - Array of energies at which cross sections are tabulated at + energy : dict + Dictionary whose keys are temperatures (e.g., '300K') and values are + arrays of energies at which cross sections are tabulated at. Returns ------- @@ -391,16 +399,27 @@ class Reaction(object): Reaction data """ + mt = group.attrs['mt'] rx = cls(mt) rx.q_value = group.attrs['Q_value'] - rx.threshold_idx = group.attrs['threshold_idx'] - 1 rx.center_of_mass = bool(group.attrs['center_of_mass']) - # Read cross section - if 'xs' in group: - xs = group['xs'].value - rx.xs = Tabulated1D(energy[rx.threshold_idx:], xs) + # Read cross section at each temperature + for T, Tgroup in group.items(): + if T.endswith('K'): + if 'xs' in Tgroup: + # Make sure temperature has associated energy grid + if T not in energy: + raise ValueError( + 'Could not create reaction cross section for MT={} ' + 'at T={} because no corresponding energy grid ' + 'exists.'.format(mt, T)) + xs = Tgroup['xs'].value + threshold_idx = Tgroup['xs'].attrs['threshold_idx'] - 1 + tabulated_xs = Tabulated1D(energy[T][threshold_idx:], xs) + tabulated_xs._threshold_idx = threshold_idx + rx.xs[T] = tabulated_xs # Determine number of products n_product = 0 @@ -421,6 +440,10 @@ class Reaction(object): n_grid = ace.nxs[3] grid = ace.xss[ace.jxs[1]:ace.jxs[1] + n_grid] + # Convert data temperature to a "300.0K" number for indexing + # temperature data + strT = str(int(round(ace.temperature / K_BOLTZMANN))) + "K" + if i_reaction > 0: mt = int(ace.xss[ace.jxs[3] + i_reaction - 1]) rx = cls(mt) @@ -435,11 +458,11 @@ class Reaction(object): loc = int(ace.xss[ace.jxs[6] + i_reaction - 1]) # Determine starting index on energy grid - rx.threshold_idx = int(ace.xss[ace.jxs[7] + loc - 1]) - 1 + threshold_idx = int(ace.xss[ace.jxs[7] + loc - 1]) - 1 # Determine number of energies in reaction n_energy = int(ace.xss[ace.jxs[7] + loc]) - energy = grid[rx.threshold_idx:rx.threshold_idx + n_energy] + energy = grid[threshold_idx:threshold_idx + n_energy] # Read reaction cross section xs = ace.xss[ace.jxs[7] + loc + 1:ace.jxs[7] + loc + 1 + n_energy] @@ -450,7 +473,9 @@ class Reaction(object): "to zero.".format(rx.mt, ace.name)) xs[xs < 0.0] = 0.0 - rx.xs = Tabulated1D(energy, xs) + tabulated_xs = Tabulated1D(energy, xs) + tabulated_xs._threshold_idx = threshold_idx + rx.xs[strT] = tabulated_xs # ================================================================== # YIELD AND ANGLE-ENERGY DISTRIBUTION @@ -465,7 +490,8 @@ class Reaction(object): idx = ace.jxs[11] + abs(ty) - 101 yield_ = Tabulated1D.from_ace(ace, idx) else: - yield_ = abs(ty) + # 0-order polynomial i.e. a constant + yield_ = Polynomial((abs(ty),)) neutron = Product('neutron') neutron.yield_ = yield_ @@ -508,7 +534,9 @@ class Reaction(object): "Setting to zero.".format(ace.name)) elastic_xs[elastic_xs < 0.0] = 0.0 - rx.xs = Tabulated1D(grid, elastic_xs) + tabulated_xs = Tabulated1D(grid, elastic_xs) + tabulated_xs._threshold_idx = 0 + rx.xs[strT] = tabulated_xs # No energy distribution for elastic scattering neutron = Product('neutron') diff --git a/openmc/data/thermal.py b/openmc/data/thermal.py index 9de39f518d..bbdb12dad2 100644 --- a/openmc/data/thermal.py +++ b/openmc/data/thermal.py @@ -7,6 +7,8 @@ import numpy as np import h5py import openmc.checkvalue as cv +from openmc.mixin import EqualityMixin +from .data import K_BOLTZMANN, ATOMIC_SYMBOL from .ace import Table, get_table from .angle_energy import AngleEnergy from .function import Tabulated1D @@ -33,6 +35,7 @@ _THERMAL_NAMES = {'al': 'c_Al27', 'al27': 'c_Al27', 'orthod': 'c_ortho_D', 'dortho': 'c_ortho_D', 'orthoh': 'c_ortho_H', 'hortho': 'c_ortho_H', 'ouo2': 'c_O_in_UO2', 'o2-u': 'c_O_in_UO2', 'o2/u': 'c_O_in_UO2', + 'sio2': 'c_SiO2', 'parad': 'c_para_D', 'dpara': 'c_para_D', 'parah': 'c_para_H', 'hpara': 'c_para_H', 'sch4': 'c_solid_CH4', 'smeth': 'c_solid_CH4', @@ -40,7 +43,27 @@ _THERMAL_NAMES = {'al': 'c_Al27', 'al27': 'c_Al27', 'zrzrh': 'c_Zr_in_ZrH', 'zr-h': 'c_Zr_in_ZrH', 'zr/h': 'c_Zr_in_ZrH'} -class CoherentElastic(object): +def get_thermal_name(name): + """Get proper S(a,b) table name, e.g. 'HH2O' -> 'c_H_in_H2O'""" + + if name in _THERMAL_NAMES.values(): + return name + elif name.lower() in _THERMAL_NAMES: + return _THERMAL_NAMES[name.lower()] + else: + # Make an educated guess?? This actually works well for + # JEFF-3.2 which stupidly uses names like lw00.32t, + # lw01.32t, etc. for different temperatures + matches = get_close_matches( + name.lower(), _THERMAL_NAMES.keys(), cutoff=0.5) + if len(matches) > 0: + return _THERMAL_NAMES[matches[0]] + else: + # OK, we give up. Just use the ACE name. + return 'c_' + name + + +class CoherentElastic(EqualityMixin): r"""Coherent elastic scattering data from a crystalline material Parameters @@ -67,7 +90,7 @@ class CoherentElastic(object): if isinstance(E, Iterable): E = np.asarray(E) idx = np.searchsorted(self.bragg_edges, E) - return self.factors[idx]/E + return self.factors[idx] / E def __len__(self): return len(self.bragg_edges) @@ -126,18 +149,19 @@ class CoherentElastic(object): return cls(bragg_edges, factors) -class ThermalScattering(object): +class ThermalScattering(EqualityMixin): """A ThermalScattering object contains thermal scattering data as represented by an S(alpha, beta) table. Parameters ---------- name : str - ZAID identifier of the table, e.g. lwtr.10t. + Name of the material using GND convention, e.g. c_H_in_H2O atomic_weight_ratio : float Atomic mass ratio of the target nuclide. - temperature : float - Temperature of the target nuclide in eV. + kTs : Iterable of float + List of temperatures of the target nuclide in the data set. + The temperatures have units of MeV. Attributes ---------- @@ -150,25 +174,33 @@ class ThermalScattering(object): Inelastic scattering cross section derived in the incoherent approximation name : str - Name of the table, e.g. lwtr.20t. - temperature : float - Temperature of the target nuclide in eV. - zaids : Iterable of int - ZAID identifiers that the thermal scattering data applies to + Name of the material using GND convention, e.g. c_H_in_H2O + temperatures : Iterable of str + List of string representations the temperatures of the target nuclide + in the data set. The temperatures are strings of the temperature, + rounded to the nearest integer; e.g., '294K' + kTs : Iterable of float + List of temperatures of the target nuclide in the data set. + The temperatures have units of MeV. + nuclides : Iterable of str + Nuclide names that the thermal scattering data applies to """ - def __init__(self, name, atomic_weight_ratio, temperature): + def __init__(self, name, atomic_weight_ratio, kTs): self.name = name self.atomic_weight_ratio = atomic_weight_ratio - self.temperature = temperature - self.elastic_xs = None - self.elastic_mu_out = None - self.inelastic_xs = None - self.inelastic_e_out = None - self.inelastic_mu_out = None + self.kTs = kTs + self.temperatures = [str(int(round(kT / K_BOLTZMANN))) + "K" + for kT in kTs] + self.elastic_xs = {} + self.elastic_mu_out = {} + self.inelastic_xs = {} + self.inelastic_e_out = {} + self.inelastic_mu_out = {} + self.inelastic_dist = {} self.secondary_mode = None - self.zaids = [] + self.nuclides = [] def __repr__(self): if hasattr(self, 'name'): @@ -194,83 +226,44 @@ class ThermalScattering(object): # Write basic data g = f.create_group(self.name) g.attrs['atomic_weight_ratio'] = self.atomic_weight_ratio - g.attrs['temperature'] = self.temperature - g.attrs['zaids'] = self.zaids + g.attrs['nuclides'] = np.array(self.nuclides, dtype='S') + g.attrs['secondary_mode'] = np.string_(self.secondary_mode) + ktg = g.create_group('kTs') + for i, temperature in enumerate(self.temperatures): + ktg.create_dataset(temperature, data=self.kTs[i]) - # Write thermal elastic scattering - if self.elastic_xs is not None: - elastic_group = g.create_group('elastic') - self.elastic_xs.to_hdf5(elastic_group, 'xs') - if self.elastic_mu_out is not None: - elastic_group.create_dataset('mu_out', data=self.elastic_mu_out) + for T in self.temperatures: + Tg = g.create_group(T) + # Write thermal elastic scattering + if self.elastic_xs: + elastic_group = Tg.create_group('elastic') - # Write thermal inelastic scattering - if self.inelastic_xs is not None: - inelastic_group = g.create_group('inelastic') - self.inelastic_xs.to_hdf5(inelastic_group, 'xs') - inelastic_group.attrs['secondary_mode'] = np.string_(self.secondary_mode) - if self.secondary_mode in ('equal', 'skewed'): - inelastic_group.create_dataset('energy_out', data=self.inelastic_e_out) - inelastic_group.create_dataset('mu_out', data=self.inelastic_mu_out) - elif self.secondary_mode == 'continuous': - self.inelastic_dist.to_hdf5(inelastic_group) + self.elastic_xs[T].to_hdf5(elastic_group, 'xs') + if self.elastic_mu_out: + elastic_group.create_dataset('mu_out', + data=self.elastic_mu_out[T]) - @classmethod - def from_hdf5(cls, group): - """Generate thermal scattering data from HDF5 group + # Write thermal inelastic scattering + if self.inelastic_xs: + inelastic_group = Tg.create_group('inelastic') + self.inelastic_xs[T].to_hdf5(inelastic_group, 'xs') + if self.secondary_mode in ('equal', 'skewed'): + inelastic_group.create_dataset('energy_out', + data=self.inelastic_e_out[T]) + inelastic_group.create_dataset('mu_out', + data=self.inelastic_mu_out[T]) + elif self.secondary_mode == 'continuous': + self.inelastic_dist[T].to_hdf5(inelastic_group) + + f.close() + + def add_temperature_from_ace(self, ace_or_filename, name=None): + """Add data to the ThermalScattering object from an ACE file at a + different temperature. Parameters ---------- - group : h5py.Group - HDF5 group to read from - - Returns - ------- - openmc.data.ThermalScattering - Neutron thermal scattering data - - """ - name = group.name[1:] - atomic_weight_ratio = group.attrs['atomic_weight_ratio'] - temperature = group.attrs['temperature'] - table = cls(name, atomic_weight_ratio, temperature) - table.zaids = group.attrs['zaids'] - - # Read thermal elastic scattering - if 'elastic' in group: - elastic_group = group['elastic'] - - # Cross section - elastic_xs_type = elastic_group['xs'].attrs['type'].decode() - if elastic_xs_type == 'tab1': - table.elastic_xs = Tabulated1D.from_hdf5(elastic_group['xs']) - elif elastic_xs_type == 'bragg': - table.elastic_xs = CoherentElastic.from_hdf5(elastic_group['xs']) - - # Angular distribution - if 'mu_out' in elastic_group: - table.elastic_mu_out = elastic_group['mu_out'].value - - # Read thermal inelastic scattering - if 'inelastic' in group: - inelastic_group = group['inelastic'] - table.secondary_mode = inelastic_group.attrs['secondary_mode'].decode() - table.inelastic_xs = Tabulated1D.from_hdf5(inelastic_group['xs']) - if table.secondary_mode in ('equal', 'skewed'): - table.inelastic_e_out = inelastic_group['energy_out'] - table.inelastic_mu_out = inelastic_group['mu_out'] - elif table.secondary_mode == 'continuous': - table.inelastic_dist = AngleEnergy.from_hdf5(inelastic_group) - - return table - - @classmethod - def from_ace(cls, ace_or_filename, name=None): - """Generate thermal scattering data from an ACE table - - Parameters - ---------- - ace : openmc.data.ace.Table or str + ace_or_filename : openmc.data.ace.Table or str ACE table to read from. If given as a string, it is assumed to be the filename for the ACE file. name : str @@ -293,7 +286,235 @@ class ThermalScattering(object): ace_name, xs = ace.name.split('.') if name is None: if ace_name.lower() in _THERMAL_NAMES: - name = _THERMAL_NAMES[ace_name.lower()] + '.' + xs + name = _THERMAL_NAMES[ace_name.lower()] + else: + # Make an educated guess? This actually works well for JEFF-3.2 + # which stupidly uses names like lw00.32t, lw01.32t, etc. for + # different temperatures + matches = get_close_matches( + ace_name.lower(), _THERMAL_NAMES.keys(), cutoff=0.5) + if len(matches) > 0: + name = _THERMAL_NAMES[matches[0]] + else: + # OK, we give up. Just use the ACE name. + name = 'c_' + ace.name + warn('Thermal scattering material "{}" is not recognized. ' + 'Assigning a name of {}.'.format(ace.name, name)) + + # If this ACE data matches the data within self then get the data + if ace.temperature not in self.kTs: + if name == self.name: + # Add temperature and kTs + strT = str(int(round(ace.temperature / K_BOLTZMANN))) + "K" + self.temperatures.append(strT) + self.kTs.append(ace.temperature) + + # Incoherent inelastic scattering cross section + idx = ace.jxs[1] + n_energy = int(ace.xss[idx]) + energy = ace.xss[idx + 1: idx + 1 + n_energy] + xs = ace.xss[idx + 1 + n_energy: idx + 1 + 2 * n_energy] + self.inelastic_xs[strT] = Tabulated1D(energy, xs) + + # Make sure secondary_mode is always equal. This should always + # be the case, but to reduce future debugging should something + # change, this will alert the developers to the issue. + if ace.nxs[7] == 0: + secondary_mode = 'equal' + elif ace.nxs[7] == 1: + secondary_mode = 'skewed' + elif ace.nxs[7] == 2: + secondary_mode = 'continuous' + + if secondary_mode != self.secondary_mode: + raise ValueError('Secondary Modes are inconsistent.') + + n_energy_out = ace.nxs[4] + if self.secondary_mode in ('equal', 'skewed'): + n_mu = ace.nxs[3] + idx = ace.jxs[3] + self.inelastic_e_out[strT] = \ + ace.xss[idx:idx + n_energy * n_energy_out * (n_mu + 2): + n_mu + 2] + self.inelastic_e_out[strT].shape = \ + (n_energy, n_energy_out) + + self.inelastic_mu_out[strT] = \ + ace.xss[idx:idx + n_energy * n_energy_out * (n_mu + 2)] + self.inelastic_mu_out[strT].shape = \ + (n_energy, n_energy_out, n_mu + 2) + self.inelastic_mu_out[strT] = \ + self.inelastic_mu_out[strT][:, :, 1:] + else: + n_mu = ace.nxs[3] - 1 + idx = ace.jxs[3] + locc = ace.xss[idx:idx + n_energy].astype(int) + n_energy_out = \ + ace.xss[idx + n_energy:idx + 2 * n_energy].astype(int) + energy_out = [] + mu_out = [] + for i in range(n_energy): + idx = locc[i] + + # Outgoing energy distribution for incoming energy i + e = ace.xss[idx + 1:idx + 1 + n_energy_out[i]*(n_mu + 3): + n_mu + 3] + p = ace.xss[idx + 2:idx + 2 + n_energy_out[i]*(n_mu + 3): + n_mu + 3] + c = ace.xss[idx + 3:idx + 3 + n_energy_out[i]*(n_mu + 3): + n_mu + 3] + eout_i = Tabular(e, p, 'linear-linear', ignore_negative=True) + eout_i.c = c + + # Outgoing angle distribution for each + # (incoming, outgoing) energy pair + mu_i = [] + for j in range(n_energy_out[i]): + mu = ace.xss[idx + 4:idx + 4 + n_mu] + p_mu = 1. / n_mu * np.ones(n_mu) + mu_ij = Discrete(mu, p_mu) + mu_ij.c = np.cumsum(p_mu) + mu_i.append(mu_ij) + idx += 3 + n_mu + + energy_out.append(eout_i) + mu_out.append(mu_i) + + # Create correlated angle-energy distribution + breakpoints = [n_energy] + interpolation = [2] + energy = self.inelastic_xs[strT].x + self.inelastic_dist[strT] = CorrelatedAngleEnergy( + breakpoints, interpolation, energy, energy_out, mu_out) + + # Incoherent/coherent elastic scattering cross section + idx = ace.jxs[4] + if idx != 0: + n_energy = int(ace.xss[idx]) + energy = ace.xss[idx + 1: idx + 1 + n_energy] + P = ace.xss[idx + 1 + n_energy: idx + 1 + 2 * n_energy] + + if ace.nxs[5] == 4: + self.elastic_xs[strT] = CoherentElastic(energy, P) + else: + self.elastic_xs[strT] = Tabulated1D(energy, P) + + # Angular distribution + n_mu = ace.nxs[6] + if n_mu != -1: + idx = ace.jxs[6] + self.elastic_mu_out[strT] = \ + ace.xss[idx:idx + n_energy * n_mu] + self.elastic_mu_out[strT].shape = \ + (n_energy, n_mu) + + else: + raise ValueError('Data provided for an incorrect library') + else: + raise Warning('Temperature data set already within ' + 'IncidentNeutron object') + + @classmethod + def from_hdf5(cls, group_or_filename): + """Generate thermal scattering data from HDF5 group + + Parameters + ---------- + group_or_filename : h5py.Group or str + HDF5 group containing interaction data. If given as a string, it is + assumed to be the filename for the HDF5 file, and the first group + is used to read from. + + Returns + ------- + openmc.data.ThermalScattering + Neutron thermal scattering data + + """ + if isinstance(group_or_filename, h5py.Group): + group = group_or_filename + else: + h5file = h5py.File(group_or_filename, 'r') + group = list(h5file.values())[0] + + name = group.name[1:] + atomic_weight_ratio = group.attrs['atomic_weight_ratio'] + kTg = group['kTs'] + kTs = [] + for temp in kTg: + kTs.append(kTg[temp].value) + temperatures = [str(int(round(kT / K_BOLTZMANN))) + "K" for kT in kTs] + + table = cls(name, atomic_weight_ratio, kTs) + table.nuclides = [nuc.decode() for nuc in group.attrs['nuclides']] + table.secondary_mode = group.attrs['secondary_mode'].decode() + + # Read thermal elastic scattering + for T in temperatures: + Tgroup = group[T] + if 'elastic' in Tgroup: + elastic_group = Tgroup['elastic'] + + # Cross section + elastic_xs_type = elastic_group['xs'].attrs['type'].decode() + if elastic_xs_type == 'Tabulated1D': + table.elastic_xs[T] = \ + Tabulated1D.from_hdf5(elastic_group['xs']) + elif elastic_xs_type == 'bragg': + table.elastic_xs[T] = \ + CoherentElastic.from_hdf5(elastic_group['xs']) + + # Angular distribution + if 'mu_out' in elastic_group: + table.elastic_mu_out[T] = \ + elastic_group['mu_out'].value + + # Read thermal inelastic scattering + if 'inelastic' in Tgroup: + inelastic_group = Tgroup['inelastic'] + table.inelastic_xs[T] = \ + Tabulated1D.from_hdf5(inelastic_group['xs']) + if table.secondary_mode in ('equal', 'skewed'): + table.inelastic_e_out[T] = \ + inelastic_group['energy_out'] + table.inelastic_mu_out[T] = \ + inelastic_group['mu_out'] + elif table.secondary_mode == 'continuous': + table.inelastic_dist[T] = \ + AngleEnergy.from_hdf5(inelastic_group) + + return table + + @classmethod + def from_ace(cls, ace_or_filename, name=None): + """Generate thermal scattering data from an ACE table + + Parameters + ---------- + ace_or_filename : openmc.data.ace.Table or str + ACE table to read from. If given as a string, it is assumed to be + the filename for the ACE file. + name : str + GND-conforming name of the material, e.g. c_H_in_H2O. If none is + passed, the appropriate name is guessed based on the name of the ACE + table. + + Returns + ------- + openmc.data.ThermalScattering + Thermal scattering data + + """ + if isinstance(ace_or_filename, Table): + ace = ace_or_filename + else: + ace = get_table(ace_or_filename) + + # Get new name that is GND-consistent + ace_name, xs = ace.name.split('.') + if name is None: + if ace_name.lower() in _THERMAL_NAMES: + name = _THERMAL_NAMES[ace_name.lower()] else: # Make an educated guess?? This actually works well for JEFF-3.2 # which stupidly uses names like lw00.32t, lw01.32t, etc. for @@ -301,21 +522,25 @@ class ThermalScattering(object): matches = get_close_matches( ace_name.lower(), _THERMAL_NAMES.keys(), cutoff=0.5) if len(matches) > 0: - name = _THERMAL_NAMES[matches[0]] + '.' + xs + name = _THERMAL_NAMES[matches[0]] else: # OK, we give up. Just use the ACE name. name = 'c_' + ace.name warn('Thermal scattering material "{}" is not recognized. ' 'Assigning a name of {}.'.format(ace.name, name)) - table = cls(name, ace.atomic_weight_ratio, ace.temperature) + # Assign temperature to the running list + kTs = [ace.temperature] + temperatures = [str(int(round(ace.temperature / K_BOLTZMANN))) + "K"] + + table = cls(name, ace.atomic_weight_ratio, kTs) # Incoherent inelastic scattering cross section idx = ace.jxs[1] n_energy = int(ace.xss[idx]) energy = ace.xss[idx+1 : idx+1+n_energy] xs = ace.xss[idx+1+n_energy : idx+1+2*n_energy] - table.inelastic_xs = Tabulated1D(energy, xs) + table.inelastic_xs[temperatures[0]] = Tabulated1D(energy, xs) if ace.nxs[7] == 0: table.secondary_mode = 'equal' @@ -328,34 +553,45 @@ class ThermalScattering(object): if table.secondary_mode in ('equal', 'skewed'): n_mu = ace.nxs[3] idx = ace.jxs[3] - table.inelastic_e_out = ace.xss[idx:idx+n_energy*n_energy_out*(n_mu+2):n_mu+2] - table.inelastic_e_out.shape = (n_energy, n_energy_out) + table.inelastic_e_out[temperatures[0]] = \ + ace.xss[idx:idx + n_energy * n_energy_out * (n_mu + 2): + n_mu + 2] + table.inelastic_e_out[temperatures[0]].shape = \ + (n_energy, n_energy_out) - table.inelastic_mu_out = ace.xss[idx:idx+n_energy*n_energy_out*(n_mu+2)] - table.inelastic_mu_out.shape = (n_energy, n_energy_out, n_mu+2) - table.inelastic_mu_out = table.inelastic_mu_out[:, :, 1:] + table.inelastic_mu_out[temperatures[0]] = \ + ace.xss[idx:idx + n_energy * n_energy_out * (n_mu + 2)] + table.inelastic_mu_out[temperatures[0]].shape = \ + (n_energy, n_energy_out, n_mu+2) + table.inelastic_mu_out[temperatures[0]] = \ + table.inelastic_mu_out[temperatures[0]][:, :, 1:] else: n_mu = ace.nxs[3] - 1 idx = ace.jxs[3] locc = ace.xss[idx:idx + n_energy].astype(int) - n_energy_out = ace.xss[idx + n_energy:idx + 2*n_energy].astype(int) + n_energy_out = \ + ace.xss[idx + n_energy:idx + 2 * n_energy].astype(int) energy_out = [] mu_out = [] for i in range(n_energy): idx = locc[i] # Outgoing energy distribution for incoming energy i - e = ace.xss[idx + 1:idx + 1 + n_energy_out[i]*(n_mu + 3):n_mu + 3] - p = ace.xss[idx + 2:idx + 2 + n_energy_out[i]*(n_mu + 3):n_mu + 3] - c = ace.xss[idx + 3:idx + 3 + n_energy_out[i]*(n_mu + 3):n_mu + 3] + e = ace.xss[idx + 1:idx + 1 + n_energy_out[i]*(n_mu + 3): + n_mu + 3] + p = ace.xss[idx + 2:idx + 2 + n_energy_out[i]*(n_mu + 3): + n_mu + 3] + c = ace.xss[idx + 3:idx + 3 + n_energy_out[i]*(n_mu + 3): + n_mu + 3] eout_i = Tabular(e, p, 'linear-linear', ignore_negative=True) eout_i.c = c - # Outgoing angle distribution for each (incoming, outgoing) energy pair + # Outgoing angle distribution for each + # (incoming, outgoing) energy pair mu_i = [] for j in range(n_energy_out[i]): mu = ace.xss[idx + 4:idx + 4 + n_mu] - p_mu = 1./n_mu*np.ones(n_mu) + p_mu = 1. / n_mu * np.ones(n_mu) mu_ij = Discrete(mu, p_mu) mu_ij.c = np.cumsum(p_mu) mu_i.append(mu_ij) @@ -367,31 +603,35 @@ class ThermalScattering(object): # Create correlated angle-energy distribution breakpoints = [n_energy] interpolation = [2] - energy = table.inelastic_xs.x - table.inelastic_dist = CorrelatedAngleEnergy( + energy = table.inelastic_xs[temperatures[0]].x + table.inelastic_dist[temperatures[0]] = CorrelatedAngleEnergy( breakpoints, interpolation, energy, energy_out, mu_out) # Incoherent/coherent elastic scattering cross section idx = ace.jxs[4] if idx != 0: n_energy = int(ace.xss[idx]) - energy = ace.xss[idx+1 : idx+1+n_energy] - P = ace.xss[idx+1+n_energy : idx+1+2*n_energy] + energy = ace.xss[idx + 1: idx + 1 + n_energy] + P = ace.xss[idx + 1 + n_energy: idx + 1 + 2 * n_energy] if ace.nxs[5] == 4: - table.elastic_xs = CoherentElastic(energy, P) + table.elastic_xs[temperatures[0]] = CoherentElastic(energy, P) else: - table.elastic_xs = Tabulated1D(energy, P) + table.elastic_xs[temperatures[0]] = Tabulated1D(energy, P) # Angular distribution n_mu = ace.nxs[6] if n_mu != -1: idx = ace.jxs[6] - table.elastic_mu_out = ace.xss[idx:idx + n_energy*n_mu] - table.elastic_mu_out.shape = (n_energy, n_mu) + table.elastic_mu_out[temperatures[0]] = \ + ace.xss[idx:idx + n_energy * n_mu] + table.elastic_mu_out[temperatures[0]].shape = \ + (n_energy, n_mu) - # Get relevant ZAIDs - pairs = np.fromiter(map(lambda p: p[0], ace.pairs), int) - table.zaids = pairs[np.nonzero(pairs)] + # Get relevant nuclides + for zaid, awr in ace.pairs: + if zaid > 0: + Z, A = divmod(zaid, 1000) + table.nuclides.append(ATOMIC_SYMBOL[Z] + str(A)) return table diff --git a/openmc/data/urr.py b/openmc/data/urr.py index 052da66126..05f64e5782 100644 --- a/openmc/data/urr.py +++ b/openmc/data/urr.py @@ -4,9 +4,10 @@ from numbers import Integral, Real import numpy as np import openmc.checkvalue as cv +from openmc.mixin import EqualityMixin -class ProbabilityTables(object): +class ProbabilityTables(EqualityMixin): r"""Unresolved resonance region probability tables. Parameters diff --git a/openmc/element.py b/openmc/element.py index ada5726b44..1b16806148 100644 --- a/openmc/element.py +++ b/openmc/element.py @@ -19,38 +19,28 @@ class Element(object): ---------- name : str Chemical symbol of the element, e.g. Pu - xs : str - Cross section identifier, e.g. 71c Attributes ---------- name : str Chemical symbol of the element, e.g. Pu - xs : str - Cross section identifier, e.g. 71c scattering : {'data', 'iso-in-lab', None} The type of angular scattering distribution to use """ - def __init__(self, name='', xs=None): + def __init__(self, name=''): # Initialize class attributes self._name = '' - self._xs = None self._scattering = None # Set class attributes self.name = name - if xs is not None: - self.xs = xs - def __eq__(self, other): if isinstance(other, Element): if self.name != other.name: return False - elif self.xs != other.xs: - return False else: return True elif isinstance(other, basestring) and other == self.name: @@ -72,17 +62,12 @@ class Element(object): def __repr__(self): string = 'Element - {0}\n'.format(self._name) - string += '{0: <16}{1}{2}\n'.format('\tXS', '=\t', self._xs) if self.scattering is not None: string += '{0: <16}{1}{2}\n'.format('\tscattering', '=\t', self.scattering) return string - @property - def xs(self): - return self._xs - @property def name(self): return self._name @@ -91,11 +76,6 @@ class Element(object): def scattering(self): return self._scattering - @xs.setter - def xs(self, xs): - check_type('cross section identifier', xs, basestring) - self._xs = xs - @name.setter def name(self, name): check_type('element name', name, basestring) @@ -127,6 +107,6 @@ class Element(object): isotopes = [] for isotope, abundance in sorted(NATURAL_ABUNDANCE.items()): if re.match(r'{}\d+'.format(self.name), isotope): - nuc = openmc.Nuclide(isotope, self.xs) + nuc = openmc.Nuclide(isotope) isotopes.append((nuc, abundance)) return isotopes diff --git a/openmc/filter.py b/openmc/filter.py index f71e19e487..5d2962c303 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -20,6 +20,12 @@ _FILTER_TYPES = ['universe', 'material', 'cell', 'cellborn', 'surface', 'mesh', 'energy', 'energyout', 'mu', 'polar', 'azimuthal', 'distribcell', 'delayedgroup'] +_CURRENT_NAMES = {1: 'x-min out', 2: 'x-max out', + 3: 'y-min out', 4: 'y-max out', + 5: 'z-min out', 6: 'z-max out', + 7: 'x-min in', 8: 'x-max in', + 9: 'y-min in', 10: 'y-max in', + 11: 'z-min in', 12: 'z-max in'} class FilterMeta(ABCMeta): def __new__(cls, name, bases, namespace, **kwargs): if not name.endswith('Filter'): @@ -260,7 +266,7 @@ class Filter(with_metaclass(FilterMeta, object)): cell instance ID for 'distribcell' Filters. The bin is a 2-tuple of floats for 'energy' and 'energyout' filters corresponding to the energy boundaries of the bin of interest. The bin is an (x,y,z) - 3-tuple for 'mesh' filters corresponding to the mesh cell + 3-tuple for 'mesh' filters corresponding to the mesh cell of interest. Returns @@ -387,7 +393,6 @@ class Filter(with_metaclass(FilterMeta, object)): filter_bins = np.repeat(self.bins, self.stride) tile_factor = data_size / len(filter_bins) filter_bins = np.tile(filter_bins, tile_factor) - filter_bins = filter_bins df = pd.concat([df, pd.DataFrame( {self.short_name.lower() : filter_bins})]) @@ -416,7 +421,22 @@ class UniverseFilter(IntegralFilter): pass class MaterialFilter(IntegralFilter): pass class CellFilter(IntegralFilter): pass class CellbornFilter(IntegralFilter): pass -class SurfaceFilter(IntegralFilter): pass + + +class SurfaceFilter(IntegralFilter): + def get_pandas_dataframe(self, data_size, distribcell_paths=True): + # Initialize Pandas DataFrame + import pandas as pd + df = pd.DataFrame() + + filter_bins = np.repeat(self.bins, self.stride) + tile_factor = data_size / len(filter_bins) + filter_bins = np.tile(filter_bins, tile_factor) + filter_bins = [_CURRENT_NAMES[x] for x in filter_bins] + df = pd.concat([df, pd.DataFrame( + {self.short_name.lower() : filter_bins})]) + + return df class MeshFilter(Filter): diff --git a/openmc/geometry.py b/openmc/geometry.py index 14fd48fb1e..b2a9b5e4aa 100644 --- a/openmc/geometry.py +++ b/openmc/geometry.py @@ -50,6 +50,20 @@ class Geometry(object): self._root_universe = root_universe + def add_volume_information(self, volume_calc): + """Add volume information from a stochastic volume calculation. + + Parameters + ---------- + volume_calc : openmc.VolumeCalculation + Results from a stochastic volume calculation + + """ + if volume_calc.domain_type == 'cell': + for cell in self.get_all_cells(): + if cell.id in volume_calc.results: + cell.add_volume_information(volume_calc) + def export_to_xml(self): """Create a geometry.xml file that can be used for a simulation. @@ -166,24 +180,6 @@ class Geometry(object): universes.sort(key=lambda x: x.id) return universes - def get_all_nuclides(self): - """Return all nuclides assigned to a material in the geometry - - Returns - ------- - list of openmc.Nuclide - Nuclides in the geometry - - """ - - nuclides = OrderedDict() - materials = self.get_all_materials() - - for material in materials: - nuclides.update(material.get_all_nuclides()) - - return nuclides - def get_all_materials(self): """Return all materials assigned to a cell diff --git a/openmc/lattice.py b/openmc/lattice.py index 81144e4d81..c6a5af4109 100644 --- a/openmc/lattice.py +++ b/openmc/lattice.py @@ -144,25 +144,26 @@ class Lattice(object): return univs - def get_all_nuclides(self): - """Return all nuclides contained in the lattice + def get_nuclides(self): + """Returns all nuclides in the lattice Returns ------- - nuclides : collections.OrderedDict - Dictionary whose keys are nuclide names and values are 2-tuples of - (nuclide, density) + nuclides : list of str + List of nuclide names """ - nuclides = OrderedDict() + nuclides = [] # Get all unique Universes contained in each of the lattice cells unique_universes = self.get_unique_universes() # Append all Universes containing each cell to the dictionary - for universe_id, universe in unique_universes.items(): - nuclides.update(universe.get_all_nuclides()) + for universe in unique_universes.values(): + for nuclide in universe.get_nuclides(): + if nuclide not in nuclides: + nuclides.append(nuclide) return nuclides diff --git a/openmc/macroscopic.py b/openmc/macroscopic.py index 1dd087903f..a1ca62c9ab 100644 --- a/openmc/macroscopic.py +++ b/openmc/macroscopic.py @@ -13,35 +13,25 @@ class Macroscopic(object): ---------- name : str Name of the macroscopic data, e.g. UO2 - xs : str - Cross section identifier, e.g. 71c Attributes ---------- name : str Name of the nuclide, e.g. UO2 - xs : str - Cross section identifier, e.g. 71c """ - def __init__(self, name='', xs=None): + def __init__(self, name=''): # Initialize class attributes self._name = '' - self._xs = None - # Set the Material class attributes + # Set the Macroscopic class attributes self.name = name - if xs is not None: - self.xs = xs - def __eq__(self, other): if isinstance(other, Macroscopic): if self.name != other.name: return False - elif self.xs != other.xs: - return False else: return True elif isinstance(other, basestring) and other == self.name: @@ -53,27 +43,17 @@ class Macroscopic(object): return not self == other def __hash__(self): - return hash((self._name, self._xs)) + return hash((self._name)) def __repr__(self): string = 'Nuclide - {0}\n'.format(self._name) - string += '{0: <16}{1}{2}\n'.format('\tXS', '=\t', self._xs) return string @property def name(self): return self._name - @property - def xs(self): - return self._xs - @name.setter def name(self, name): check_type('name', name, basestring) self._name = name - - @xs.setter - def xs(self, xs): - check_type('cross-section identifier', xs, basestring) - self._xs = xs diff --git a/openmc/material.py b/openmc/material.py index d7ffd04e94..f56af485a4 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -6,6 +6,7 @@ from xml.etree import ElementTree as ET import sys import openmc +import openmc.data import openmc.checkvalue as cv from openmc.clean_xml import sort_xml_elements, clean_xml_indentation @@ -40,11 +41,19 @@ class Material(object): name : str, optional Name of the material. If not specified, the name will be the empty string. + temperature : str, optional + The temperature identifier applied to this material. The units are + in Kelvin and the temperature rounded to the nearest integer. + For example, a tempreature of 293.6K would be provided as '294K' Attributes ---------- id : int Unique identifier for the material + temperature : str + The temperature identifier applied to this material. The units are + in Kelvin and the temperature rounded to the nearest integer. + For example, a tempreature of 293.6K would be provided as '294K' density : float Density of the material (units defined separately) density_units : str @@ -62,10 +71,11 @@ class Material(object): """ - def __init__(self, material_id=None, name=''): + def __init__(self, material_id=None, name='', temperature=None): # Initialize class attributes self.id = material_id self.name = name + self.temperature = temperature self._density = None self._density_units = '' @@ -79,7 +89,7 @@ class Material(object): # A list of tuples (element, percent, percent type) self._elements = [] - # If specified, a list of tuples of (table name, xs identifier) + # If specified, a list of table names self._sab = [] # If true, the material will be initialized as distributed @@ -119,6 +129,8 @@ class Material(object): string = 'Material\n' string += '{0: <16}{1}{2}\n'.format('\tID', '=\t', self._id) string += '{0: <16}{1}{2}\n'.format('\tName', '=\t', self._name) + string += '{0: <16}{1}{2}\n'.format('\Temperature', '=\t', + self._temperature) string += '{0: <16}{1}{2}'.format('\tDensity', '=\t', self._density) string += ' [{0}]\n'.format(self._density_units) @@ -126,13 +138,12 @@ class Material(object): string += '{0: <16}\n'.format('\tS(a,b) Tables') for sab in self._sab: - string += '{0: <16}{1}[{2}{3}]\n'.format('\tS(a,b)', '=\t', - sab[0], sab[1]) + string += '{0: <16}{1}{2}\n'.format('\tS(a,b)', '=\t', sab) string += '{0: <16}\n'.format('\tNuclides') for nuclide, percent, percent_type in self._nuclides: - string += '{0: <16}'.format('\t{0.name}.{0.xs}'.format(nuclide)) + string += '{0: <16}'.format('\t{0.name}'.format(nuclide)) string += '=\t{0: <12} [{1}]\n'.format(percent, percent_type) if self._macroscopic is not None: @@ -142,7 +153,7 @@ class Material(object): string += '{0: <16}\n'.format('\tElements') for element, percent, percent_type in self._elements: - string += '{0: <16}'.format('\t{0.name}.{0.xs}'.format(element)) + string += '{0: <16}'.format('\t{0.name}'.format(element)) string += '=\t{0: <12} [{1}]\n'.format(percent, percent_type) return string @@ -155,6 +166,10 @@ class Material(object): def name(self): return self._name + @property + def temperature(self): + return self._temperature + @property def density(self): return self._density @@ -200,6 +215,15 @@ class Material(object): else: self._name = '' + @temperature.setter + def temperature(self, temperature): + if temperature is not None: + cv.check_type('Temperature for Material ID="{0}"'.format(self._id), + temperature, basestring) + self._temperature = temperature + else: + self._temperature = '' + def set_density(self, units, density=None): """Set the density of the material @@ -457,15 +481,13 @@ class Material(object): if element == elm: self._nuclides.remove(elm) - def add_s_alpha_beta(self, name, xs): + def add_s_alpha_beta(self, name): r"""Add an :math:`S(\alpha,\beta)` table to the material Parameters ---------- name : str Name of the :math:`S(\alpha,\beta)` table - xs : str - Cross section identifier, e.g. '71t' """ @@ -479,12 +501,14 @@ class Material(object): 'non-string table name "{1}"'.format(self._id, name) raise ValueError(msg) - if not isinstance(xs, basestring): - msg = 'Unable to add an S(a,b) table to Material ID="{0}" with a ' \ - 'non-string cross-section identifier "{1}"'.format(self._id, xs) - raise ValueError(msg) + new_name = openmc.data.get_thermal_name(name) + if new_name != name: + msg = 'OpenMC S(a,b) tables follow the GND naming convention. ' \ + 'Table "{}" is being renamed as "{}".'.format(name, new_name) + warnings.warn(msg) + + self._sab.append(new_name) - self._sab.append((name, xs)) def make_isotropic_in_lab(self): for nuclide, percent, percent_type in self._nuclides: @@ -492,9 +516,31 @@ class Material(object): for element, percent, percent_type in self._elements: element.scattering = 'iso-in-lab' - def get_all_nuclides(self): + def get_nuclides(self): """Returns all nuclides in the material + Returns + ------- + nuclides : list of str + List of nuclide names + + """ + + nuclides = [] + + for nuclide, density, density_type in self._nuclides: + nuclides.append(nuclide.name) + + for element, density, density_type in self._elements: + # Expand natural element into isotopes + for isotope, abundance in element.expand(): + nuclides.append(isotope.name) + + return nuclides + + def get_nuclide_densities(self): + """Returns all nuclides in the material and their densities + Returns ------- nuclides : dict @@ -525,9 +571,6 @@ class Material(object): else: xml_element.set("wo", str(nuclide[1])) - if nuclide[0].xs is not None: - xml_element.set("xs", nuclide[0].xs) - if not nuclide[0].scattering is None: xml_element.set("scattering", nuclide[0].scattering) @@ -537,9 +580,6 @@ class Material(object): xml_element = ET.Element("macroscopic") xml_element.set("name", macroscopic.name) - if macroscopic.xs is not None: - xml_element.set("xs", macroscopic.xs) - return xml_element def _get_element_xml(self, element, distrib=False): @@ -552,9 +592,6 @@ class Material(object): else: xml_element.set("wo", str(element[1])) - if element[0].xs is not None: - xml_element.set("xs", element[0].xs) - if not element[0].scattering is None: xml_element.set("scattering", element[0].scattering) @@ -593,6 +630,11 @@ class Material(object): if len(self._name) > 0: element.set("name", str(self._name)) + # Create temperature XML subelement + if len(self.temperature) > 0: + subelement = ET.SubElement(element, "temperature") + subelement.text = self.temperature + # Create density XML subelement subelement = ET.SubElement(element, "density") if self._density_units is not 'sum': @@ -657,8 +699,7 @@ class Material(object): if len(self._sab) > 0: for sab in self._sab: subelement = ET.SubElement(element, "sab") - subelement.set("name", sab[0]) - subelement.set("xs", sab[1]) + subelement.set("name", sab) return element @@ -683,30 +724,14 @@ class Materials(cv.CheckedList): materials : Iterable of openmc.Material Materials to add to the collection - Attributes - ---------- - default_xs : str - The default cross section identifier applied to a nuclide when none is - specified - """ def __init__(self, materials=None): super(Materials, self).__init__(Material, 'materials collection') - self._default_xs = None self._materials_file = ET.Element("materials") if materials is not None: self += materials - @property - def default_xs(self): - return self._default_xs - - @default_xs.setter - def default_xs(self, xs): - cv.check_type('default xs', xs, basestring) - self._default_xs = xs - def add_material(self, material): """Append material to collection @@ -788,10 +813,6 @@ class Materials(cv.CheckedList): material.make_isotropic_in_lab() def _create_material_subelements(self): - if self._default_xs is not None: - subelement = ET.SubElement(self._materials_file, "default_xs") - subelement.text = self._default_xs - for material in self: xml_element = material.get_material_xml() self._materials_file.append(xml_element) diff --git a/openmc/mesh.py b/openmc/mesh.py index 169e7705cc..7d7b483f73 100644 --- a/openmc/mesh.py +++ b/openmc/mesh.py @@ -6,6 +6,7 @@ import sys import numpy as np import openmc.checkvalue as cv +import openmc if sys.version_info[0] >= 3: @@ -181,6 +182,38 @@ class Mesh(object): string += '{0: <16}{1}{2}\n'.format('\tPixels', '=\t', self._width) return string + def cell_generator(self): + """Generator function to traverse through every [i,j,k] index + of the mesh. + + For example the following code: + + .. code-block:: python + + for mesh_index in mymesh.cell_generator(): + print mesh_index + + will produce the following output for a 3-D 2x2x2 mesh in mymesh:: + + [1, 1, 1] + [1, 1, 2] + [1, 2, 1] + [1, 2, 2] + ... + + + """ + + if len(self.dimension) == 2: + for x in range(self.dimension[0]): + for y in range(self.dimension[1]): + yield [x + 1, y + 1, 1] + else: + for x in range(self.dimension[0]): + for y in range(self.dimension[1]): + for z in range(self.dimension[2]): + yield [x + 1, y + 1, z + 1] + def get_mesh_xml(self): """Return XML representation of the mesh @@ -210,3 +243,99 @@ class Mesh(object): subelement.text = ' '.join(map(str, self._width)) return element + + def build_cells(self, bc=['reflective'] * 6): + """Generates a lattice of universes with the same dimensionality + as the mesh object. The individual cells/universes produced + will not have material definitions applied and so downstream code + will have to apply that information. + + Parameters + ---------- + bc : iterable of {'reflective', 'periodic', 'transmission', or 'vacuum'} + Boundary conditions for each of the four faces of a rectangle + (if aplying to a 2D mesh) or six faces of a parallelepiped + (if applying to a 3D mesh) provided in the following order: + [x min, x max, y min, y max, z min, z max]. 2-D cells do not + contain the z min and z max entries. + + Returns + ------- + root_cell : openmc.Cell + The cell containing the lattice representing the mesh geometry; + this cell is a single parallelepiped with boundaries matching + the outermost mesh boundary with the boundary conditions from bc + applied. + cells : iterable of openmc.Cell + The list of cells within each lattice position mimicking the mesh + geometry. + + """ + + twod = len(self.dimension) == 2 + cv.check_length('bc', bc, length_min=4, length_max=6) + for entry in bc: + cv.check_value('bc', entry, ['transmission', 'vacuum', + 'reflective', 'periodic']) + + # Build the cell which will contain the lattice + xplanes = [openmc.XPlane(x0=self.lower_left[0], + boundary_type=bc[0]), + openmc.XPlane(x0=self.upper_right[0], + boundary_type=bc[1])] + yplanes = [openmc.YPlane(y0=self.lower_left[1], + boundary_type=bc[2]), + openmc.YPlane(y0=self.upper_right[1], + boundary_type=bc[3])] + if twod: + zplanes = [openmc.ZPlane(z0=np.finfo(np.float).min, + boundary_type='reflective'), + openmc.ZPlane(z0=np.finfo(np.float).max, + boundary_type='reflective')] + else: + zplanes = [openmc.ZPlane(z0=self.lower_left[2], + boundary_type=bc[4]), + openmc.ZPlane(z0=self.upper_right[2], + boundary_type=bc[5])] + root_cell = openmc.Cell() + root_cell.region = ((+xplanes[0] & -xplanes[1]) & + (+yplanes[0] & -yplanes[1]) & + (+zplanes[0] & -zplanes[1])) + + # Build the universes which will be used for each of the [i,j,k] + # locations within the mesh. + # We will also have to build cells to assign to these universes + universes = np.ndarray(self.dimension[::-1], dtype=np.object) + cells = [] + for [i, j, k] in self.cell_generator(): + if twod: + universes[j - 1, i - 1] = openmc.Universe() + cells.append(openmc.Cell()) + universes[j - 1, i - 1].add_cells([cells[-1]]) + else: + universes[k - 1, j - 1, i - 1] = openmc.Universe() + cells.append(openmc.Cell()) + universes[k - 1, j - 1, i - 1].add_cells([cells[-1]]) + + lattice = openmc.RectLattice() + lattice.lower_left = self.lower_left + + if self.width is not None: + lattice.pitch = self.width + else: + dx = ((self.upper_right[0] - self.lower_left[0]) / + self.dimension[0]) + dy = ((self.upper_right[1] - self.lower_left[1]) / + self.dimension[1]) + if twod: + lattice.pitch = [dx, dy] + else: + dz = ((self.upper_right[2] - self.lower_left[2]) / + self.dimension[2]) + lattice.pitch = [dx, dy, dz] + lattice.universes = universes + + # Fill Cell with the Lattice + root_cell.fill = lattice + + return root_cell, cells diff --git a/openmc/mgxs/__init__.py b/openmc/mgxs/__init__.py index 4fcf8b6aed..7fd6e0a692 100644 --- a/openmc/mgxs/__init__.py +++ b/openmc/mgxs/__init__.py @@ -1,3 +1,4 @@ from openmc.mgxs.groups import EnergyGroups from openmc.mgxs.library import Library from openmc.mgxs.mgxs import * +from openmc.mgxs.mdgxs import * diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index 84571ce236..4b68952a67 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -11,6 +11,7 @@ import numpy as np import openmc import openmc.mgxs import openmc.checkvalue as cv +from openmc.tallies import ESTIMATOR_TYPES if sys.version_info[0] >= 3: @@ -18,17 +19,18 @@ if sys.version_info[0] >= 3: class Library(object): - """A multi-group cross section library for some energy group structure. + """A multi-energy-group and multi-delayed-group cross section library for + some energy group structure. This class can be used for both OpenMC input generation and tally data post-processing to compute spatially-homogenized and energy-integrated multi-group cross sections for deterministic neutronics calculations. - This class helps automate the generation of MGXS objects for some energy - group structure and domain type. The Library serves as a collection for - MGXS objects with routines to automate the initialization of tallies for - input files, the loading of tally data from statepoint files, data storage, - energy group condensation and more. + This class helps automate the generation of MGXS and MDGXS objects for some + energy group structure and domain type. The Library serves as a collection + for MGXS and MDGXS objects with routines to automate the initialization of + tallies for input files, the loading of tally data from statepoint files, + data storage, energy group condensation and more. Parameters ---------- @@ -39,7 +41,7 @@ class Library(object): mgxs_types : Iterable of str The types of cross sections in the library (e.g., ['total', 'scatter']) name : str, optional - Name of the multi-group cross section. library Used as a label to + Name of the multi-group cross section library. Used as a label to identify tallies in OpenMC 'tallies.xml' file. Attributes @@ -64,6 +66,11 @@ class Library(object): The highest legendre moment in the scattering matrices (default is 0) energy_groups : openmc.mgxs.EnergyGroups Energy group structure for energy condensation + delayed_groups : list of int + Delayed groups to filter out the xs + estimator : str or None + The tally estimator used to compute multi-group cross sections. If None, + the default for each MGXS type is used. tally_trigger : openmc.Trigger An (optional) tally precision trigger given to each tally used to compute the cross section @@ -95,6 +102,7 @@ class Library(object): self._domain_type = None self._domains = 'all' self._energy_groups = None + self._delayed_groups = None self._correction = 'P0' self._legendre_order = 0 self._tally_trigger = None @@ -102,6 +110,7 @@ class Library(object): self._sp_filename = None self._keff = None self._sparse = False + self._estimator = None self.name = name self.openmc_geometry = openmc_geometry @@ -126,6 +135,7 @@ class Library(object): clone._correction = self.correction clone._legendre_order = self.legendre_order clone._energy_groups = copy.deepcopy(self.energy_groups, memo) + clone._delayed_groups = copy.deepcopy(self.delayed_groups, memo) clone._tally_trigger = copy.deepcopy(self.tally_trigger, memo) clone._all_mgxs = copy.deepcopy(self.all_mgxs) clone._sp_filename = self._sp_filename @@ -194,6 +204,10 @@ class Library(object): def energy_groups(self): return self._energy_groups + @property + def delayed_groups(self): + return self._delayed_groups + @property def correction(self): return self._correction @@ -206,10 +220,21 @@ class Library(object): def tally_trigger(self): return self._tally_trigger + @property + def estimator(self): + return self._estimator + @property def num_groups(self): return self.energy_groups.num_groups + @property + def num_delayed_groups(self): + if self.delayed_groups == None: + return 0 + else: + return len(self.delayed_groups) + @property def all_mgxs(self): return self._all_mgxs @@ -239,22 +264,33 @@ class Library(object): @mgxs_types.setter def mgxs_types(self, mgxs_types): + all_mgxs_types = openmc.mgxs.MGXS_TYPES + openmc.mgxs.MDGXS_TYPES if mgxs_types == 'all': - self._mgxs_types = openmc.mgxs.MGXS_TYPES + self._mgxs_types = all_mgxs_types else: cv.check_iterable_type('mgxs_types', mgxs_types, basestring) for mgxs_type in mgxs_types: - cv.check_value('mgxs_type', mgxs_type, openmc.mgxs.MGXS_TYPES) + cv.check_value('mgxs_type', mgxs_type, all_mgxs_types) self._mgxs_types = mgxs_types @by_nuclide.setter def by_nuclide(self, by_nuclide): cv.check_type('by_nuclide', by_nuclide, bool) + + if by_nuclide == True and self.domain_type == 'mesh': + raise ValueError('Unable to create MGXS library by nuclide with ' + 'mesh domain') + self._by_nuclide = by_nuclide @domain_type.setter def domain_type(self, domain_type): cv.check_value('domain type', domain_type, openmc.mgxs.DOMAIN_TYPES) + + if self.by_nuclide == True and domain_type == 'mesh': + raise ValueError('Unable to create MGXS library by nuclide with ' + 'mesh domain') + self._domain_type = domain_type @domains.setter @@ -298,6 +334,23 @@ class Library(object): cv.check_type('energy groups', energy_groups, openmc.mgxs.EnergyGroups) self._energy_groups = energy_groups + @delayed_groups.setter + def delayed_groups(self, delayed_groups): + + if delayed_groups != None: + + cv.check_type('delayed groups', delayed_groups, list, int) + cv.check_greater_than('num delayed groups', len(delayed_groups), 0) + + # Check that the groups are within [1, MAX_DELAYED_GROUPS] + for group in delayed_groups: + cv.check_greater_than('delayed group', group, 0) + cv.check_less_than('delayed group', group, + openmc.mgxs.MAX_DELAYED_GROUPS, + equality=True) + + self._delayed_groups = delayed_groups + @correction.setter def correction(self, correction): cv.check_value('correction', correction, ('P0', None)) @@ -327,6 +380,11 @@ class Library(object): cv.check_type('tally trigger', tally_trigger, openmc.Trigger) self._tally_trigger = tally_trigger + @estimator.setter + def estimator(self, estimator): + cv.check_value('estimator', estimator, ESTIMATOR_TYPES) + self._estimator = estimator + @sparse.setter def sparse(self, sparse): """Convert tally data from NumPy arrays to SciPy list of lists (LIL) @@ -363,14 +421,23 @@ class Library(object): for domain in self.domains: self.all_mgxs[domain.id] = OrderedDict() for mgxs_type in self.mgxs_types: - mgxs = openmc.mgxs.MGXS.get_mgxs(mgxs_type, name=self.name) + if mgxs_type in openmc.mgxs.MDGXS_TYPES: + mgxs = openmc.mgxs.MDGXS.get_mgxs(mgxs_type, name=self.name) + else: + mgxs = openmc.mgxs.MGXS.get_mgxs(mgxs_type, name=self.name) + mgxs.domain = domain mgxs.domain_type = self.domain_type mgxs.energy_groups = self.energy_groups mgxs.by_nuclide = self.by_nuclide + if self.estimator is not None: + mgxs.estimator = self.estimator + + if mgxs_type in openmc.mgxs.MDGXS_TYPES: + mgxs.delayed_groups = self.delayed_groups # If a tally trigger was specified, add it to the MGXS - if self.tally_trigger: + if self.tally_trigger is not None: mgxs.tally_trigger = self.tally_trigger # Specify whether to use a transport ('P0') correction @@ -460,7 +527,7 @@ class Library(object): ---------- domain : Material or Cell or Universe or Integral The material, cell, or universe object of interest (or its ID) - mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'multiplicity matrix', 'nu-fission matrix', chi', 'chi-prompt', 'inverse-velocity', 'prompt-nu-fission'} + mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'multiplicity matrix', 'nu-fission matrix', chi', 'chi-prompt', 'inverse-velocity', 'prompt-nu-fission', 'delayed-nu-fission', 'chi-delayed', 'beta'} The type of multi-group cross section object to return Returns @@ -755,15 +822,15 @@ class Library(object): return pickle.load(open(full_filename, 'rb')) def get_xsdata(self, domain, xsdata_name, nuclide='total', xs_type='macro', - xs_id='1m', order=None, tabular_legendre=None, - tabular_points=33): + order=None, tabular_legendre=None, tabular_points=33, + subdomain=None): """Generates an openmc.XSdata object describing a multi-group cross section data set for eventual combination in to an openmc.MGXSLibrary object (i.e., the library). Parameters ---------- - domain : openmc.Material or openmc.Cell or openmc.Universe + domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh The domain for spatial homogenization xsdata_name : str Name to apply to the "xsdata" entry produced by this method @@ -774,8 +841,6 @@ class Library(object): Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. If the Library object is not tallied by nuclide this will be set to 'macro' regardless. - xs_ids : str - Cross section set identifier. Defaults to '1m'. order : int Scattering order for this data entry. Default is None, which will set the XSdata object to use the order of the @@ -792,6 +857,12 @@ class Library(object): parameter is set to `True`. In this case, this parameter sets the number of equally-spaced points in the domain of [-1,1] to be used in building the tabular distribution. Default is `33`. + subdomain : iterable of int + This parameter is not used unless using a mesh domain. In that + case, the subdomain is an [i,j,k] index (1-based indexing) of the + mesh cell of interest in the openmc.Mesh object. Note: + this parameter currently only supports subdomains within a mesh, + and not the subdomains of a distribcell. Returns ------- @@ -811,11 +882,10 @@ class Library(object): """ cv.check_type('domain', domain, (openmc.Material, openmc.Cell, - openmc.Cell)) + openmc.Universe, openmc.Mesh)) cv.check_type('xsdata_name', xsdata_name, basestring) cv.check_type('nuclide', nuclide, basestring) cv.check_value('xs_type', xs_type, ['macro', 'micro']) - cv.check_type('xs_id', xs_id, basestring) cv.check_type('order', order, (type(None), Integral)) if order is not None: cv.check_greater_than('order', order, 0, equality=True) @@ -824,6 +894,9 @@ class Library(object): (type(None), bool)) if tabular_points is not None: cv.check_greater_than('tabular_points', tabular_points, 1) + if subdomain is not None: + cv.check_iterable_type('subdomain', subdomain, Integral, + max_depth=3) # Make sure statepoint has been loaded if self._sp_filename is None: @@ -839,7 +912,6 @@ class Library(object): name = xsdata_name if nuclide is not 'total': name += '_' + nuclide - name += '.' + xs_id xsdata = openmc.XSdata(name, self.energy_groups) if order is None: @@ -859,52 +931,66 @@ class Library(object): xsdata.zaid = self._nuclides[nuclide][0] xsdata.awr = self._nuclides[nuclide][1] + if subdomain is None: + subdomain = 'all' + else: + subdomain = [subdomain] + # Now get xs data itself if 'nu-transport' in self.mgxs_types and self.correction == 'P0': mymgxs = self.get_mgxs(domain, 'nu-transport') - xsdata.set_total_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide]) + xsdata.set_total_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide], + subdomains=subdomain) elif 'total' in self.mgxs_types: mymgxs = self.get_mgxs(domain, 'total') - xsdata.set_total_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide]) + xsdata.set_total_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide], + subdomain=subdomain) if 'absorption' in self.mgxs_types: mymgxs = self.get_mgxs(domain, 'absorption') xsdata.set_absorption_mgxs(mymgxs, xs_type=xs_type, - nuclide=[nuclide]) + nuclide=[nuclide], + subdomain=subdomain) if 'fission' in self.mgxs_types: mymgxs = self.get_mgxs(domain, 'fission') xsdata.set_fission_mgxs(mymgxs, xs_type=xs_type, - nuclide=[nuclide]) + nuclide=[nuclide], subdomain=subdomain) if 'kappa-fission' in self.mgxs_types: mymgxs = self.get_mgxs(domain, 'kappa-fission') xsdata.set_kappa_fission_mgxs(mymgxs, xs_type=xs_type, - nuclide=[nuclide]) + nuclide=[nuclide], + subdomain=subdomain) # For chi and nu-fission we can either have only a nu-fission matrix # provided, or vectors of chi and nu-fission provided if 'nu-fission matrix' in self.mgxs_types: mymgxs = self.get_mgxs(domain, 'nu-fission matrix') xsdata.set_nu_fission_mgxs(mymgxs, xs_type=xs_type, - nuclide=[nuclide]) + nuclide=[nuclide], + subdomain=subdomain) else: if 'chi' in self.mgxs_types: mymgxs = self.get_mgxs(domain, 'chi') - xsdata.set_chi_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide]) + xsdata.set_chi_mgxs(mymgxs, xs_type=xs_type, nuclide=[nuclide], + subdomain=subdomain) if 'nu-fission' in self.mgxs_types: mymgxs = self.get_mgxs(domain, 'nu-fission') xsdata.set_nu_fission_mgxs(mymgxs, xs_type=xs_type, - nuclide=[nuclide]) + nuclide=[nuclide], + subdomain=subdomain) # If multiplicity matrix is available, prefer that if 'multiplicity matrix' in self.mgxs_types: mymgxs = self.get_mgxs(domain, 'multiplicity matrix') xsdata.set_multiplicity_mgxs(mymgxs, xs_type=xs_type, - nuclide=[nuclide]) + nuclide=[nuclide], + subdomain=subdomain) using_multiplicity = True - # multiplicity wil fall back to using scatter and nu-scatter + # multiplicity will fall back to using scatter and nu-scatter elif ((('scatter matrix' in self.mgxs_types) and ('nu-scatter matrix' in self.mgxs_types))): scatt_mgxs = self.get_mgxs(domain, 'scatter matrix') nuscatt_mgxs = self.get_mgxs(domain, 'nu-scatter matrix') xsdata.set_multiplicity_mgxs(nuscatt_mgxs, scatt_mgxs, - xs_type=xs_type, nuclide=[nuclide]) + xs_type=xs_type, nuclide=[nuclide], + subdomain=subdomain) using_multiplicity = True else: using_multiplicity = False @@ -912,12 +998,13 @@ class Library(object): if using_multiplicity: nuscatt_mgxs = self.get_mgxs(domain, 'nu-scatter matrix') xsdata.set_scatter_mgxs(nuscatt_mgxs, xs_type=xs_type, - nuclide=[nuclide]) + nuclide=[nuclide], subdomain=subdomain) else: if 'nu-scatter matrix' in self.mgxs_types: nuscatt_mgxs = self.get_mgxs(domain, 'nu-scatter matrix') xsdata.set_scatter_mgxs(nuscatt_mgxs, xs_type=xs_type, - nuclide=[nuclide]) + nuclide=[nuclide], + subdomain=subdomain) # Since we are not using multiplicity, then # scattering multiplication (nu-scatter) must be @@ -931,8 +1018,7 @@ class Library(object): return xsdata def create_mg_library(self, xs_type='macro', xsdata_names=None, - xs_ids=None, tabular_legendre=None, - tabular_points=33): + tabular_legendre=None, tabular_points=33): """Creates an openmc.MGXSLibrary object to contain the MGXS data for the Multi-Group mode of OpenMC. @@ -945,10 +1031,6 @@ class Library(object): xsdata_names : Iterable of str List of names to apply to the "xsdata" entries in the resultant mgxs data file. Defaults to 'set1', 'set2', ... - xs_ids : str or Iterable of str - Cross section set identifier (i.e., '71c') for all - data sets (if only str) or for each individual one - (if iterable of str). Defaults to '1m'. tabular_legendre : None or bool Flag to denote whether or not the Legendre expansion of the scattering angular distribution is to be converted to a tabular @@ -988,15 +1070,6 @@ class Library(object): cv.check_value('xs_type', xs_type, ['macro', 'micro']) if xsdata_names is not None: cv.check_iterable_type('xsdata_names', xsdata_names, basestring) - if xs_ids is not None: - if isinstance(xs_ids, basestring): - # If we only have a string lets convert it now to a list - # of strings. - xs_ids = [xs_ids for i in range(len(self.domains))] - else: - cv.check_iterable_type('xs_ids', xs_ids, basestring) - else: - xs_ids = ['1m' for i in range(len(self.domains))] # If gathering material-specific data, set the xs_type to macro if not self.by_nuclide: @@ -1005,32 +1078,55 @@ class Library(object): # Initialize file mgxs_file = openmc.MGXSLibrary(self.energy_groups) - # Create the xsdata object and add it to the mgxs_file - for i, domain in enumerate(self.domains): - if self.by_nuclide: - nuclides = list(domain.get_all_nuclides().keys()) - else: - nuclides = ['total'] - for nuclide in nuclides: - # Build & add metadata to XSdata object - if xsdata_names is None: - xsdata_name = 'set' + str(i + 1) + if self.domain_type == 'mesh': + # Create the xsdata objects and add to the mgxs_file + i = 0 + for domain in self.domains: + if self.by_nuclide: + raise NotImplementedError("Mesh domains do not currently " + "support nuclidic tallies") + for subdomain in domain.cell_generator(): + # Build & add metadata to XSdata object + if xsdata_names is None: + xsdata_name = 'set' + str(i + 1) + else: + xsdata_name = xsdata_names[i] + + # Create XSdata and Macroscopic for this domain + xsdata = self.get_xsdata(domain, xsdata_name, + tabular_legendre=tabular_legendre, + tabular_points=tabular_points, + subdomain=subdomain) + mgxs_file.add_xsdata(xsdata) + i += 1 + + else: + # Create the xsdata object and add it to the mgxs_file + for i, domain in enumerate(self.domains): + if self.by_nuclide: + nuclides = domain.get_nuclides() else: - xsdata_name = xsdata_names[i] - if nuclide is not 'total': - xsdata_name += '_' + nuclide + nuclides = ['total'] + for nuclide in nuclides: + # Build & add metadata to XSdata object + if xsdata_names is None: + xsdata_name = 'set' + str(i + 1) + else: + xsdata_name = xsdata_names[i] + if nuclide is not 'total': + xsdata_name += '_' + nuclide - xsdata = self.get_xsdata(domain, xsdata_name, nuclide=nuclide, - xs_type=xs_type, xs_id=xs_ids[i], - tabular_legendre=tabular_legendre, - tabular_points=tabular_points) + xsdata = self.get_xsdata(domain, xsdata_name, + nuclide=nuclide, xs_type=xs_type, + tabular_legendre=tabular_legendre, + tabular_points=tabular_points) - mgxs_file.add_xsdata(xsdata) + mgxs_file.add_xsdata(xsdata) return mgxs_file - def create_mg_mode(self, xsdata_names=None, xs_ids=None, - tabular_legendre=None, tabular_points=33): + def create_mg_mode(self, xsdata_names=None, tabular_legendre=None, + tabular_points=33, bc=['reflective'] * 6): """Creates an openmc.MGXSLibrary object to contain the MGXS data for the Multi-Group mode of OpenMC as well as the associated openmc.Materials and openmc.Geometry objects. The created Geometry is the same as that @@ -1044,10 +1140,6 @@ class Library(object): xsdata_names : Iterable of str List of names to apply to the "xsdata" entries in the resultant mgxs data file. Defaults to 'set1', 'set2', ... - xs_ids : str or Iterable of str - Cross section set identifier (i.e., '71c') for all - data sets (if only str) or for each individual one - (if iterable of str). Defaults to '1m'. tabular_legendre : None or bool Flag to denote whether or not the Legendre expansion of the scattering angular distribution is to be converted to a tabular @@ -1060,6 +1152,12 @@ class Library(object): parameter is set to `True`. In this case, this parameter sets the number of equally-spaced points in the domain of [-1,1] to be used in building the tabular distribution. Default is `33`. + bc : iterable of {'reflective', 'periodic', 'transmission', or 'vacuum'} + Boundary conditions for each of the four faces of a rectangle + (if applying to a 2D mesh) or six faces of a parallelepiped + (if applying to a 3D mesh) provided in the following order: + [x min, x max, y min, y max, z min, z max]. 2-D cells do not + contain the z min and z max entries. Returns ------- @@ -1090,62 +1188,76 @@ class Library(object): # multi-group cross section types self.check_library_for_openmc_mgxs() - if xsdata_names is not None: - cv.check_iterable_type('xsdata_names', xsdata_names, basestring) - if xs_ids is not None: - if isinstance(xs_ids, basestring): - # If we only have a string lets convert it now to a list - # of strings. - xs_ids = [xs_ids for i in range(len(self.domains))] - else: - cv.check_iterable_type('xs_ids', xs_ids, basestring) + # If the domain type is a mesh, then there can only be one domain for + # this method. This is because we can build a model automatically if + # the user provided multiple mesh domains for library generation since + # the multiple meshes could be overlapping or in disparate regions + # of the continuous energy model. The next step makes sure there is + # only one before continuing. + if self.domain_type == 'mesh': + cv.check_length("domains", self.domains, 1, 1) + + # Get the MGXS File Data + mgxs_file = self.create_mg_library('macro', xsdata_names, + tabular_legendre, tabular_points) + + # Now move on the creating the geometry and assigning materials + if self.domain_type == 'mesh': + root = openmc.Universe(name='root', universe_id=0) + + # Add cells representative of the mesh with reflective BC + root_cell, cells = \ + self.domains[0].build_cells(bc) + root.add_cell(root_cell) + geometry = openmc.Geometry() + geometry.root_universe = root + materials = openmc.Materials() + + for i, subdomain in enumerate(self.domains[0].cell_generator()): + xsdata = mgxs_file.xsdatas[i] + + # Build the macroscopic and assign it to the cell of + # interest + macroscopic = openmc.Macroscopic(name=xsdata.name) + + # Create Material and add to collection + material = openmc.Material(name=xsdata.name) + material.add_macroscopic(macroscopic) + materials.append(material) + + # Set the materials for each of the universes + cells[i].fill = materials[i] + else: - xs_ids = ['1m' for i in range(len(self.domains))] - xs_type = 'macro' + # Create a copy of the Geometry for these Macroscopics + geometry = copy.deepcopy(self.openmc_geometry) + materials = openmc.Materials() - # Initialize MGXS File - mgxs_file = openmc.MGXSLibrary(self.energy_groups) + # Get all Cells from the Geometry for differentiation + all_cells = geometry.get_all_material_cells() - # Create a copy of the Geometry to differentiate for these Macroscopics - geometry = copy.deepcopy(self.openmc_geometry) - materials = openmc.Materials() + # Create the xsdata object and add it to the mgxs_file + for i, domain in enumerate(self.domains): + xsdata = mgxs_file.xsdatas[i] - # Get all Cells from the Geometry for differentiation - all_cells = geometry.get_all_material_cells() + macroscopic = openmc.Macroscopic(name=xsdata.name) - # Create the xsdata object and add it to the mgxs_file - for i, domain in enumerate(self.domains): + # Create Material and add to collection + material = openmc.Material(name=xsdata.name) + material.add_macroscopic(macroscopic) + materials.append(material) - # Build & add metadata to XSdata object - if xsdata_names is None: - xsdata_name = 'set' + str(i + 1) - else: - xsdata_name = xsdata_names[i] + # Differentiate Geometry with new Material + if self.domain_type == 'material': + # Fill all appropriate Cells with new Material + for cell in all_cells: + if cell.fill.id == domain.id: + cell.fill = material - # Create XSdata and Macroscopic for this domain - xsdata = self.get_xsdata(domain, xsdata_name, nuclide='total', - xs_type=xs_type, xs_id=xs_ids[i], - tabular_legendre=tabular_legendre, - tabular_points=tabular_points) - mgxs_file.add_xsdata(xsdata) - macroscopic = openmc.Macroscopic(name=xsdata_name, xs=xs_ids[i]) - - # Create Material and add to collection - material = openmc.Material(name=xsdata_name + '.' + xs_ids[i]) - material.add_macroscopic(macroscopic) - materials.append(material) - - # Differentiate Geometry with new Material - if self.domain_type == 'material': - # Fill all appropriate Cells with new Material - for cell in all_cells: - if cell.fill.id == domain.id: - cell.fill = material - - elif self.domain_type == 'cell': - for cell in all_cells: - if cell.id == domain.id: - cell.fill = material + elif self.domain_type == 'cell': + for cell in all_cells: + if cell.id == domain.id: + cell.fill = material return mgxs_file, materials, geometry diff --git a/openmc/mgxs/mdgxs.py b/openmc/mgxs/mdgxs.py new file mode 100644 index 0000000000..8941d4c6f9 --- /dev/null +++ b/openmc/mgxs/mdgxs.py @@ -0,0 +1,1576 @@ +from __future__ import division + +from collections import Iterable, OrderedDict +from numbers import Integral +import warnings +import os +import sys +import copy +import abc + +import numpy as np + +import openmc +from openmc.mgxs import MGXS +import openmc.checkvalue as cv + +if sys.version_info[0] >= 3: + basestring = str + +# Supported cross section types +MDGXS_TYPES = ['delayed-nu-fission', + 'chi-delayed', + 'beta'] + +# Maximum number of delayed groups, from src/constants.F90 +MAX_DELAYED_GROUPS = 8 + + +class MDGXS(MGXS): + """An abstract multi-delayed-group cross section for some energy and delayed + group structures within some spatial domain. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group and multi-delayed-group cross sections for downstream + neutronics calculations. + + NOTE: Users should instantiate the subclasses of this abstract class. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + delayed_groups : list of int + Delayed groups to filter out the xs + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'chi-delayed', 'beta', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe or Mesh + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + delayed_groups : list of int + Delayed groups to filter out the xs + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell', and 'universe' + domain types. This is equal to the number of cell instances for + 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file) and the number of mesh cells for + 'mesh' domain types. + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ + + # This is an abstract class which cannot be instantiated + __metaclass__ = abc.ABCMeta + + def __init__(self, domain=None, domain_type=None, energy_groups=None, + delayed_groups=None, by_nuclide=False, name=''): + super(MDGXS, self).__init__(domain, domain_type, energy_groups, + by_nuclide, name) + + self._delayed_groups = None + + if delayed_groups is not None: + self.delayed_groups = delayed_groups + + def __deepcopy__(self, memo): + existing = memo.get(id(self)) + + # If this is the first time we have tried to copy this object, copy it + if existing is None: + clone = type(self).__new__(type(self)) + clone._name = self.name + clone._rxn_type = self.rxn_type + clone._by_nuclide = self.by_nuclide + clone._nuclides = copy.deepcopy(self._nuclides) + clone._domain = self.domain + clone._domain_type = self.domain_type + clone._energy_groups = copy.deepcopy(self.energy_groups, memo) + clone._delayed_groups = copy.deepcopy(self.delayed_groups, memo) + clone._tally_trigger = copy.deepcopy(self.tally_trigger, memo) + clone._rxn_rate_tally = copy.deepcopy(self._rxn_rate_tally, memo) + clone._xs_tally = copy.deepcopy(self._xs_tally, memo) + clone._sparse = self.sparse + clone._derived = self.derived + + clone._tallies = OrderedDict() + for tally_type, tally in self.tallies.items(): + clone.tallies[tally_type] = copy.deepcopy(tally, memo) + + memo[id(self)] = clone + + return clone + + # If this object has been copied before, return the first copy made + else: + return existing + + @property + def delayed_groups(self): + return self._delayed_groups + + @property + def num_delayed_groups(self): + if self.delayed_groups == None: + return 1 + else: + return len(self.delayed_groups) + + @delayed_groups.setter + def delayed_groups(self, delayed_groups): + + if delayed_groups != None: + + cv.check_type('delayed groups', delayed_groups, list, int) + cv.check_greater_than('num delayed groups', len(delayed_groups), 0) + + # Check that the groups are within [1, MAX_DELAYED_GROUPS] + for group in delayed_groups: + cv.check_greater_than('delayed group', group, 0) + cv.check_less_than('delayed group', group, MAX_DELAYED_GROUPS, + equality=True) + + self._delayed_groups = delayed_groups + + @property + def filters(self): + + # Create the non-domain specific Filters for the Tallies + group_edges = self.energy_groups.group_edges + energy_filter = openmc.Filter('energy', group_edges) + + if self.delayed_groups != None: + delayed_filter = openmc.Filter('delayedgroup', self.delayed_groups) + return [[energy_filter], [delayed_filter, energy_filter]] + else: + return [[energy_filter], [energy_filter]] + + @staticmethod + def get_mgxs(mdgxs_type, domain=None, domain_type=None, + energy_groups=None, delayed_groups=None, + by_nuclide=False, name=''): + """Return a MDGXS subclass object for some energy group structure within + some spatial domain for some reaction type. + + This is a factory method which can be used to quickly create MDGXS + subclass objects for various reaction types. + + Parameters + ---------- + mdgxs_type : {'delayed-nu-fission', 'chi-delayed', 'beta'} + The type of multi-delayed-group cross section object to return + domain : openmc.Material or openmc.Cell or openmc.Universe or + openmc.Mesh + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} + The domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain. + Defaults to False + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. Defaults to the empty string. + delayed_groups : list of int + Delayed groups to filter out the xs + + Returns + ------- + openmc.mgxs.MDGXS + A subclass of the abstract MDGXS class for the multi-delayed-group + cross section type requested by the user + + """ + + cv.check_value('mdgxs_type', mdgxs_type, MDGXS_TYPES) + + if mdgxs_type == 'delayed-nu-fission': + mdgxs = DelayedNuFissionXS(domain, domain_type, energy_groups, + delayed_groups) + elif mdgxs_type == 'chi-delayed': + mdgxs = ChiDelayed(domain, domain_type, energy_groups, + delayed_groups) + elif mdgxs_type == 'beta': + mdgxs = Beta(domain, domain_type, energy_groups, delayed_groups) + + mdgxs.by_nuclide = by_nuclide + mdgxs.name = name + return mdgxs + + def get_xs(self, groups='all', subdomains='all', nuclides='all', + xs_type='macro', order_groups='increasing', + value='mean', delayed_groups='all', squeeze=True, **kwargs): + """Returns an array of multi-delayed-group cross sections. + + This method constructs a 4D NumPy array for the requested + multi-delayed-group cross section data for one or more + subdomains (1st dimension), delayed groups (2nd demension), + energy groups (3rd dimension), and nuclides (4th dimension). + + Parameters + ---------- + groups : Iterable of Integral or 'all' + Energy groups of interest. Defaults to 'all'. + subdomains : Iterable of Integral or 'all' + Subdomain IDs of interest. Defaults to 'all'. + nuclides : Iterable of str or 'all' or 'sum' + A list of nuclide name strings (e.g., ['U-235', 'U-238']). The + special string 'all' will return the cross sections for all nuclides + in the spatial domain. The special string 'sum' will return the + cross section summed over all nuclides. Defaults to 'all'. + xs_type: {'macro', 'micro'} + Return the macro or micro cross section in units of cm^-1 or barns. + Defaults to 'macro'. + order_groups: {'increasing', 'decreasing'} + Return the cross section indexed according to increasing or + decreasing energy groups (decreasing or increasing energies). + Defaults to 'increasing'. + value : {'mean', 'std_dev', 'rel_err'} + A string for the type of value to return. Defaults to 'mean'. + delayed_groups : list of int or 'all' + Delayed groups of interest. Defaults to 'all'. + squeeze : bool + A boolean representing whether to eliminate the extra dimensions + of the multi-dimensional array to be returned. Defaults to True. + + Returns + ------- + numpy.ndarray + A NumPy array of the multi-group cross section indexed in the order + each group, subdomain and nuclide is listed in the parameters. + + Raises + ------ + ValueError + When this method is called before the multi-delayed-group cross + section is computed from tally data. + + """ + + cv.check_value('value', value, ['mean', 'std_dev', 'rel_err']) + cv.check_value('xs_type', xs_type, ['macro', 'micro']) + + # FIXME: Unable to get microscopic xs for mesh domain because the mesh + # cells do not know the nuclide densities in each mesh cell. + if self.domain_type == 'mesh' and xs_type == 'micro': + msg = 'Unable to get micro xs for mesh domain since the mesh ' \ + 'cells do not know the nuclide densities in each mesh cell.' + raise ValueError(msg) + + filters = [] + filter_bins = [] + + # Construct a collection of the domain filter bins + if not isinstance(subdomains, basestring): + cv.check_iterable_type('subdomains', subdomains, Integral, + max_depth=3) + for subdomain in subdomains: + filters.append(self.domain_type) + filter_bins.append((subdomain,)) + + # Construct list of energy group bounds tuples for all requested groups + if not isinstance(groups, basestring): + cv.check_iterable_type('groups', groups, Integral) + for group in groups: + filters.append('energy') + filter_bins.append( + (self.energy_groups.get_group_bounds(group),)) + + # Construct list of delayed group tuples for all requested groups + if not isinstance(delayed_groups, basestring): + cv.check_type('delayed groups', delayed_groups, list, int) + for delayed_group in delayed_groups: + filters.append('delayedgroup') + filter_bins.append((delayed_group,)) + + # Construct a collection of the nuclides to retrieve from the xs tally + if self.by_nuclide: + if nuclides == 'all' or nuclides == 'sum' or nuclides == ['sum']: + query_nuclides = self.get_nuclides() + else: + query_nuclides = nuclides + else: + query_nuclides = ['total'] + + # If user requested the sum for all nuclides, use tally summation + if nuclides == 'sum' or nuclides == ['sum']: + xs_tally = self.xs_tally.summation(nuclides=query_nuclides) + xs = xs_tally.get_values(filters=filters, + filter_bins=filter_bins, value=value) + else: + xs = self.xs_tally.get_values(filters=filters, + filter_bins=filter_bins, + nuclides=query_nuclides, value=value) + + # Divide by atom number densities for microscopic cross sections + if xs_type == 'micro': + if self.by_nuclide: + densities = self.get_nuclide_densities(nuclides) + else: + densities = self.get_nuclide_densities('sum') + if value == 'mean' or value == 'std_dev': + xs /= densities[np.newaxis, :, np.newaxis] + + # Eliminate the trivial score dimension + xs = np.squeeze(xs, axis=len(xs.shape) - 1) + xs = np.nan_to_num(xs) + + if groups == 'all': + num_groups = self.num_groups + else: + num_groups = len(groups) + + if delayed_groups == 'all': + num_delayed_groups = self.num_delayed_groups + else: + num_delayed_groups = len(delayed_groups) + + # Reshape tally data array with separate axes for domain, energy groups, + # delayed groups, and nuclides + num_subdomains = int(xs.shape[0] / (num_groups * num_delayed_groups)) + new_shape = (num_subdomains, num_delayed_groups, num_groups) + new_shape += xs.shape[1:] + xs = np.reshape(xs, new_shape) + + # Reverse data if user requested increasing energy groups since + # tally data is stored in order of increasing energies + if order_groups == 'increasing': + xs = xs[:, :, ::-1, :] + + if squeeze: + xs = np.squeeze(xs) + xs = np.atleast_1d(xs) + + return xs + + def get_slice(self, nuclides=[], groups=[], delayed_groups=[]): + """Build a sliced MDGXS for the specified nuclides, energy groups, + and delayed groups. + + This method constructs a new MDGXS to encapsulate a subset of the data + represented by this MDGXS. The subset of data to include in the tally + slice is determined by the nuclides, energy groups, delayed groups + specified in the input parameters. + + Parameters + ---------- + nuclides : list of str + A list of nuclide name strings + (e.g., ['U-235', 'U-238']; default is []) + groups : list of int + A list of energy group indices starting at 1 for the high energies + (e.g., [1, 2, 3]; default is []) + delayed_groups : list of int + A list of delayed group indices + (e.g., [1, 2, 3]; default is []) + + Returns + ------- + openmc.mgxs.MDGXS + A new MDGXS object which encapsulates the subset of data requested + for the nuclide(s) and/or energy group(s) and/or delayed group(s) + requested in the parameters. + + """ + + cv.check_iterable_type('nuclides', nuclides, basestring) + cv.check_iterable_type('energy_groups', groups, Integral) + cv.check_type('delayed groups', delayed_groups, list, int) + + # Build lists of filters and filter bins to slice + filters = [] + filter_bins = [] + + if len(groups) != 0: + energy_bins = [] + for group in groups: + group_bounds = self.energy_groups.get_group_bounds(group) + energy_bins.append(group_bounds) + filter_bins.append(tuple(energy_bins)) + filters.append('energy') + + if len(delayed_groups) != 0: + filter_bins.append(tuple(delayed_groups)) + filters.append('delayedgroup') + + # Clone this MGXS to initialize the sliced version + slice_xs = copy.deepcopy(self) + slice_xs._rxn_rate_tally = None + slice_xs._xs_tally = None + + # Slice each of the tallies across nuclides and energy groups + for tally_type, tally in slice_xs.tallies.items(): + slice_nuclides = [nuc for nuc in nuclides if nuc in tally.nuclides] + if filters != []: + tally_slice = tally.get_slice(filters=filters, + filter_bins=filter_bins, + nuclides=slice_nuclides) + else: + tally_slice = tally.get_slice(nuclides=slice_nuclides) + slice_xs.tallies[tally_type] = tally_slice + + # Assign sliced energy group structure to sliced MDGXS + if groups: + new_group_edges = [] + for group in groups: + group_edges = self.energy_groups.get_group_bounds(group) + new_group_edges.extend(group_edges) + new_group_edges = np.unique(new_group_edges) + slice_xs.energy_groups.group_edges = sorted(new_group_edges) + + # Assign sliced delayed group structure to sliced MDGXS + if delayed_groups: + slice_xs.delayed_groups = delayed_groups + + # Assign sliced nuclides to sliced MGXS + if nuclides: + slice_xs.nuclides = nuclides + + slice_xs.sparse = self.sparse + return slice_xs + + def merge(self, other): + """Merge another MGXS with this one + + MGXS are only mergeable if their energy groups and nuclides are either + identical or mutually exclusive. If results have been loaded from a + statepoint, then MGXS are only mergeable along one and only one of + energy groups or nuclides. + + Parameters + ---------- + other : openmc.mgxs.MDGXS + MDGXS to merge with this one + + Returns + ------- + merged_mdgxs : openmc.mgxs.MDGXS + Merged MDGXS + + """ + + merged_mdgxs = super(MDGXS, self).merge(other) + + # Merge delayed groups + if self.delayed_groups != other.delayed_groups: + merged_mdgxs.delayed_groups = list(set(self.delayed_groups + + other.delayed_groups)) + + return merged_mdgxs + + def print_xs(self, subdomains='all', nuclides='all', xs_type='macro'): + """Print a string representation for the multi-group cross section. + + Parameters + ---------- + subdomains : Iterable of Integral or 'all' + The subdomain IDs of the cross sections to include in the report. + Defaults to 'all'. + nuclides : Iterable of str or 'all' or 'sum' + The nuclides of the cross-sections to include in the report. This + may be a list of nuclide name strings (e.g., ['U-235', 'U-238']). + The special string 'all' will report the cross sections for all + nuclides in the spatial domain. The special string 'sum' will report + the cross sections summed over all nuclides. Defaults to 'all'. + xs_type: {'macro', 'micro'} + Return the macro or micro cross section in units of cm^-1 or barns. + Defaults to 'macro'. + + """ + + if self.delayed_groups == None: + super(MDGXS, self).print_xs(subdomains, nuclides, xs_type) + return + + # Construct a collection of the subdomains to report + if not isinstance(subdomains, basestring): + cv.check_iterable_type('subdomains', subdomains, Integral) + elif self.domain_type == 'distribcell': + subdomains = np.arange(self.num_subdomains, dtype=np.int) + elif self.domain_type == 'mesh': + xyz = [range(1, x+1) for x in self.domain.dimension] + subdomains = list(itertools.product(*xyz)) + else: + subdomains = [self.domain.id] + + # Construct a collection of the nuclides to report + if self.by_nuclide: + if nuclides == 'all': + nuclides = self.get_nuclides() + elif nuclides == 'sum': + nuclides = ['sum'] + else: + cv.check_iterable_type('nuclides', nuclides, basestring) + else: + nuclides = ['sum'] + + cv.check_value('xs_type', xs_type, ['macro', 'micro']) + + # Build header for string with type and domain info + string = 'Multi-Delayed-Group XS\n' + string += '{0: <16}=\t{1}\n'.format('\tReaction Type', self.rxn_type) + string += '{0: <16}=\t{1}\n'.format('\tDomain Type', self.domain_type) + string += '{0: <16}=\t{1}\n'.format('\tDomain ID', self.domain.id) + + # Generate the header for an individual XS + xs_header = '\tCross Sections [{0}]:'.format(self.get_units(xs_type)) + + # If cross section data has not been computed, only print string header + if self.tallies is None: + print(string) + return + + # Loop over all subdomains + for subdomain in subdomains: + + if self.domain_type == 'distribcell' or self.domain_type == 'mesh': + string += '{0: <16}=\t{1}\n'.format('\tSubdomain', subdomain) + + # Loop over all Nuclides + for nuclide in nuclides: + + # Build header for nuclide type + if nuclide != 'sum': + string += '{0: <16}=\t{1}\n'.format('\tNuclide', nuclide) + + # Add the cross section header + string += '{0: <16}\n'.format(xs_header) + + for delayed_group in self.delayed_groups: + + template = '{0: <12}Delayed Group {1}:\t' + string += template.format('', delayed_group) + string += '\n' + + template = '{0: <12}Group {1} [{2: <10} - {3: <10}MeV]:\t' + + # Loop over energy groups ranges + for group in range(1, self.num_groups+1): + bounds = self.energy_groups.get_group_bounds(group) + string += template.format('', group, bounds[0], bounds[1]) + average = self.get_xs([group], [subdomain], [nuclide], + xs_type=xs_type, value='mean', + delayed_groups=[delayed_group]) + rel_err = self.get_xs([group], [subdomain], [nuclide], + xs_type=xs_type, value='rel_err', + delayed_groups=[delayed_group]) + average = average.flatten()[0] + rel_err = rel_err.flatten()[0] * 100. + string += '{:.2e} +/- {:1.2e}%'.format(average, rel_err) + string += '\n' + string += '\n' + string += '\n' + + print(string) + + def export_xs_data(self, filename='mgxs', directory='mgxs', + format='csv', groups='all', xs_type='macro', + delayed_groups='all'): + """Export the multi-delayed-group cross section data to a file. + + This method leverages the functionality in the Pandas library to export + the multi-group cross section data in a variety of output file formats + for storage and/or post-processing. + + Parameters + ---------- + filename : str + Filename for the exported file. Defaults to 'mgxs'. + directory : str + Directory for the exported file. Defaults to 'mgxs'. + format : {'csv', 'excel', 'pickle', 'latex'} + The format for the exported data file. Defaults to 'csv'. + groups : Iterable of Integral or 'all' + Energy groups of interest. Defaults to 'all'. + xs_type: {'macro', 'micro'} + Store the macro or micro cross section in units of cm^-1 or barns. + Defaults to 'macro'. + delayed_groups : list of int or 'all' + Delayed groups of interest. Defaults to 'all'. + + """ + + cv.check_type('filename', filename, basestring) + cv.check_type('directory', directory, basestring) + cv.check_value('format', format, ['csv', 'excel', 'pickle', 'latex']) + cv.check_value('xs_type', xs_type, ['macro', 'micro']) + + # Make directory if it does not exist + if not os.path.exists(directory): + os.makedirs(directory) + + filename = os.path.join(directory, filename) + filename = filename.replace(' ', '-') + + # Get a Pandas DataFrame for the data + df = self.get_pandas_dataframe(groups=groups, xs_type=xs_type, + delayed_groups=delayed_groups) + + # Export the data using Pandas IO API + if format == 'csv': + df.to_csv(filename + '.csv', index=False) + elif format == 'excel': + if self.domain_type == 'mesh': + df.to_excel(filename + '.xls') + else: + df.to_excel(filename + '.xls', index=False) + elif format == 'pickle': + df.to_pickle(filename + '.pkl') + elif format == 'latex': + if self.domain_type == 'distribcell': + msg = 'Unable to export distribcell multi-group cross section' \ + 'data to a LaTeX table' + raise NotImplementedError(msg) + + df.to_latex(filename + '.tex', bold_rows=True, + longtable=True, index=False) + + # Surround LaTeX table with code needed to run pdflatex + with open(filename + '.tex','r') as original: + data = original.read() + with open(filename + '.tex','w') as modified: + modified.write( + '\\documentclass[preview, 12pt, border=1mm]{standalone}\n') + modified.write('\\usepackage{caption}\n') + modified.write('\\usepackage{longtable}\n') + modified.write('\\usepackage{booktabs}\n') + modified.write('\\begin{document}\n\n') + modified.write(data) + modified.write('\n\\end{document}') + + def get_pandas_dataframe(self, groups='all', nuclides='all', + xs_type='macro', distribcell_paths=True, + delayed_groups='all'): + """Build a Pandas DataFrame for the MDGXS data. + + This method leverages :meth:`openmc.Tally.get_pandas_dataframe`, but + renames the columns with terminology appropriate for cross section data. + + Parameters + ---------- + groups : Iterable of Integral or 'all' + Energy groups of interest. Defaults to 'all'. + nuclides : Iterable of str or 'all' or 'sum' + The nuclides of the cross-sections to include in the dataframe. This + may be a list of nuclide name strings (e.g., ['U-235', 'U-238']). + The special string 'all' will include the cross sections for all + nuclides in the spatial domain. The special string 'sum' will + include the cross sections summed over all nuclides. Defaults + to 'all'. + xs_type: {'macro', 'micro'} + Return macro or micro cross section in units of cm^-1 or barns. + Defaults to 'macro'. + distribcell_paths : bool, optional + Construct columns for distribcell tally filters (default is True). + The geometric information in the Summary object is embedded into + a Multi-index column with a geometric "path" to each distribcell + instance. + delayed_groups : list of int or 'all' + Delayed groups of interest. Defaults to 'all'. + + Returns + ------- + pandas.DataFrame + A Pandas DataFrame for the cross section data. + + Raises + ------ + ValueError + When this method is called before the multi-delayed-group cross + section is computed from tally data. + + """ + + if not isinstance(groups, basestring): + cv.check_iterable_type('groups', groups, Integral) + if nuclides != 'all' and nuclides != 'sum': + cv.check_iterable_type('nuclides', nuclides, basestring) + if not isinstance(delayed_groups, basestring): + cv.check_type('delayed groups', delayed_groups, list, int) + + cv.check_value('xs_type', xs_type, ['macro', 'micro']) + + # Get a Pandas DataFrame from the derived xs tally + if self.by_nuclide and nuclides == 'sum': + + # Use tally summation to sum across all nuclides + query_nuclides = [nuclides] + xs_tally = self.xs_tally.summation(nuclides=self.get_nuclides()) + df = xs_tally.get_pandas_dataframe( + distribcell_paths=distribcell_paths) + + # Remove nuclide column since it is homogeneous and redundant + if self.domain_type == 'mesh': + df.drop('sum(nuclide)', axis=1, level=0, inplace=True) + else: + df.drop('sum(nuclide)', axis=1, inplace=True) + + # If the user requested a specific set of nuclides + elif self.by_nuclide and nuclides != 'all': + query_nuclides = nuclides + xs_tally = self.xs_tally.get_slice(nuclides=nuclides) + df = xs_tally.get_pandas_dataframe( + distribcell_paths=distribcell_paths) + + # If the user requested all nuclides, keep nuclide column in dataframe + else: + query_nuclides = self.nuclides + df = self.xs_tally.get_pandas_dataframe( + distribcell_paths=distribcell_paths) + + # Remove the score column since it is homogeneous and redundant + if self.domain_type == 'mesh': + df = df.drop('score', axis=1, level=0) + else: + df = df.drop('score', axis=1) + + # Override energy groups bounds with indices + all_groups = np.arange(self.num_groups, 0, -1, dtype=np.int) + all_groups = np.repeat(all_groups, len(query_nuclides)) + if 'energy low [MeV]' in df and 'energyout low [MeV]' in df: + df.rename(columns={'energy low [MeV]': 'group in'}, + inplace=True) + in_groups = np.tile(all_groups, int(self.num_subdomains * + self.num_delayed_groups)) + in_groups = np.repeat(in_groups, int(df.shape[0] / in_groups.size)) + df['group in'] = in_groups + del df['energy high [MeV]'] + + df.rename(columns={'energyout low [MeV]': 'group out'}, + inplace=True) + out_groups = np.repeat(all_groups, self.xs_tally.num_scores) + out_groups = np.tile(out_groups, int(df.shape[0] / out_groups.size)) + df['group out'] = out_groups + del df['energyout high [MeV]'] + columns = ['group in', 'group out'] + + elif 'energyout low [MeV]' in df: + df.rename(columns={'energyout low [MeV]': 'group out'}, + inplace=True) + in_groups = np.tile(all_groups, int(df.shape[0] / all_groups.size)) + df['group out'] = in_groups + del df['energyout high [MeV]'] + columns = ['group out'] + + elif 'energy low [MeV]' in df: + df.rename(columns={'energy low [MeV]': 'group in'}, inplace=True) + in_groups = np.tile(all_groups, int(df.shape[0] / all_groups.size)) + df['group in'] = in_groups + del df['energy high [MeV]'] + columns = ['group in'] + + # Select out those groups the user requested + if not isinstance(groups, basestring): + if 'group in' in df: + df = df[df['group in'].isin(groups)] + if 'group out' in df: + df = df[df['group out'].isin(groups)] + + # If user requested micro cross sections, divide out the atom densities + if xs_type == 'micro': + if self.by_nuclide: + densities = self.get_nuclide_densities(nuclides) + else: + densities = self.get_nuclide_densities('sum') + densities = np.repeat(densities, len(self.rxn_rate_tally.scores)) + tile_factor = df.shape[0] / len(densities) + df['mean'] /= np.tile(densities, tile_factor) + df['std. dev.'] /= np.tile(densities, tile_factor) + + # Sort the dataframe by domain type id (e.g., distribcell id) and + # energy groups such that data is from fast to thermal + if self.domain_type == 'mesh': + mesh_str = 'mesh {0}'.format(self.domain.id) + df.sort_values(by=[(mesh_str, 'x'), (mesh_str, 'y'), \ + (mesh_str, 'z')] + columns, inplace=True) + else: + df.sort_values(by=[self.domain_type] + columns, inplace=True) + + return df + + +class ChiDelayed(MDGXS): + r"""The delayed fission spectrum. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group and multi-delayed-group cross sections for multi-group + neutronics calculations. At a minimum, one needs to set the + :attr:`ChiDelayed.energy_groups` and :attr:`ChiDelayed.domain` properties. + Tallies for the flux and appropriate reaction rates over the specified + domain are generated automatically via the :attr:`ChiDelayed.tallies` + property, which can then be appended to a :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross + section can then be obtained from the :attr:`ChiDelayed.xs_tally` property. + + For a spatial domain :math:`V`, energy group :math:`[E_g,E_{g-1}]`, and + delayed group :math:`d`, the delayed fission spectrum is calculated as: + + .. math:: + + \langle \nu^d \sigma_{f,g' \rightarrow g} \phi \rangle &= \int_{r \in V} + dr \int_{4\pi} d\Omega' \int_0^\infty dE' \int_{E_g}^{E_{g-1}} dE \; + \chi(E) \nu^d \sigma_f (r, E') \psi(r, E', \Omega')\\ + \langle \nu^d \sigma_f \phi \rangle &= \int_{r \in V} dr \int_{4\pi} + d\Omega' \int_0^\infty dE' \int_0^\infty dE \; \chi(E) \nu^d \sigma_f (r, + E') \psi(r, E', \Omega') \\ + \chi_g^d &= \frac{\langle \nu^d \sigma_{f,g' \rightarrow g} \phi \rangle} + {\langle \nu^d \sigma_f \phi \rangle} + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} + The domain type for spatial homogenization + groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + delayed_groups : list of int + Delayed groups to filter out the xs + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe or Mesh + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + delayed_groups : list of int + Delayed groups to filter out the xs + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`ChiDelayed.tally_keys` property and + values are instances of :class:`openmc.Tally`. + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ + + def __init__(self, domain=None, domain_type=None, energy_groups=None, + delayed_groups=None, by_nuclide=False, name=''): + super(ChiDelayed, self).__init__(domain, domain_type, energy_groups, + delayed_groups, by_nuclide, name) + self._rxn_type = 'chi-delayed' + + @property + def scores(self): + return ['delayed-nu-fission', 'delayed-nu-fission'] + + @property + def filters(self): + # Create the non-domain specific Filters for the Tallies + group_edges = self.energy_groups.group_edges + energyout = openmc.Filter('energyout', group_edges) + energyin = openmc.Filter('energy', [group_edges[0], group_edges[-1]]) + if self.delayed_groups != None: + delayed_filter = openmc.Filter('delayedgroup', self.delayed_groups) + return [[delayed_filter, energyin], [delayed_filter, energyout]] + else: + return [[energyin], [energyout]] + + @property + def tally_keys(self): + return ['delayed-nu-fission-in', 'delayed-nu-fission-out'] + + @property + def estimator(self): + return 'analog' + + @property + def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + self._rxn_rate_tally = self.tallies['delayed-nu-fission-out'] + self._rxn_rate_tally.sparse = self.sparse + return self._rxn_rate_tally + + @property + def xs_tally(self): + + if self._xs_tally is None: + delayed_nu_fission_in = self.tallies['delayed-nu-fission-in'] + + # Remove coarse energy filter to keep it out of tally arithmetic + energy_filter = delayed_nu_fission_in.find_filter('energy') + delayed_nu_fission_in.remove_filter(energy_filter) + + # Compute chi + self._xs_tally = self.rxn_rate_tally / delayed_nu_fission_in + super(ChiDelayed, self)._compute_xs() + + # Add the coarse energy filter back to the nu-fission tally + delayed_nu_fission_in.filters.append(energy_filter) + + return self._xs_tally + + def get_slice(self, nuclides=[], groups=[], delayed_groups=[]): + """Build a sliced ChiDelayed for the specified nuclides and energy + groups. + + This method constructs a new MGXS to encapsulate a subset of the data + represented by this MGXS. The subset of data to include in the tally + slice is determined by the nuclides and energy groups specified in + the input parameters. + + Parameters + ---------- + nuclides : list of str + A list of nuclide name strings + (e.g., ['U-235', 'U-238']; default is []) + groups : list of Integral + A list of energy group indices starting at 1 for the high energies + (e.g., [1, 2, 3]; default is []) + delayed_groups : list of int + A list of delayed group indices + (e.g., [1, 2, 3]; default is []) + + Returns + ------- + openmc.mgxs.MDGXS + A new MDGXS which encapsulates the subset of data requested + for the nuclide(s) and/or energy group(s) and/or delayed group(s) + requested in the parameters. + + """ + + # Temporarily remove energy filter from delayed-nu-fission-in since its + # group structure will work in super MGXS.get_slice(...) method + delayed_nu_fission_in = self.tallies['delayed-nu-fission-in'] + energy_filter = delayed_nu_fission_in.find_filter('energy') + delayed_nu_fission_in.remove_filter(energy_filter) + + # Call super class method and null out derived tallies + slice_xs = super(ChiDelayed, self).get_slice(nuclides, groups, + delayed_groups) + slice_xs._rxn_rate_tally = None + slice_xs._xs_tally = None + + # Slice energy groups if needed + filters = [] + filter_bins = [] + + if len(groups) != 0: + energy_bins = [] + for group in groups: + group_bounds = self.energy_groups.get_group_bounds(group) + energy_bins.append(group_bounds) + filter_bins.append(tuple(energy_bins)) + filters.append('energyout') + + if len(delayed_groups) != 0: + filter_bins.append(tuple(delayed_groups)) + filters.append('delayedgroup') + + if filters != []: + + # Slice nu-fission-out tally along energyout filter + delayed_nu_fission_out = slice_xs.tallies['delayed-nu-fission-out'] + tally_slice = delayed_nu_fission_out.get_slice \ + (filters=filters, filter_bins=filter_bins) + slice_xs._tallies['delayed-nu-fission-out'] = tally_slice + + # Add energy filter back to nu-fission-in tallies + self.tallies['delayed-nu-fission-in'].add_filter(energy_filter) + slice_xs._tallies['delayed-nu-fission-in'].add_filter(energy_filter) + + slice_xs.sparse = self.sparse + return slice_xs + + def merge(self, other): + """Merge another ChiDelayed with this one + + If results have been loaded from a statepoint, then ChiDelayed are only + mergeable along one and only one of energy groups or nuclides. + + Parameters + ---------- + other : openmc.mdgxs.MGXS + MGXS to merge with this one + + Returns + ------- + merged_mdgxs : openmc.mgxs.MDGXS + Merged MDGXS + """ + + if not self.can_merge(other): + raise ValueError('Unable to merge ChiDelayed') + + # Create deep copy of tally to return as merged tally + merged_mdgxs = copy.deepcopy(self) + merged_mdgxs._derived = True + merged_mdgxs._rxn_rate_tally = None + merged_mdgxs._xs_tally = None + + # Merge energy groups + if self.energy_groups != other.energy_groups: + merged_groups = self.energy_groups.merge(other.energy_groups) + merged_mdgxs.energy_groups = merged_groups + + # Merge delayed groups + if self.delayed_groups != other.delayed_groups: + merged_mdgxs.delayed_groups = list(set(self.delayed_groups + + other.delayed_groups)) + + # Merge nuclides + if self.nuclides != other.nuclides: + + # The nuclides must be mutually exclusive + for nuclide in self.nuclides: + if nuclide in other.nuclides: + msg = 'Unable to merge Chi Delayed with shared nuclides' + raise ValueError(msg) + + # Concatenate lists of nuclides for the merged MGXS + merged_mdgxs.nuclides = self.nuclides + other.nuclides + + # Merge tallies + for tally_key in self.tallies: + merged_tally = self.tallies[tally_key].merge\ + (other.tallies[tally_key]) + merged_mdgxs.tallies[tally_key] = merged_tally + + return merged_mdgxs + + def get_xs(self, groups='all', subdomains='all', nuclides='all', + xs_type='macro', order_groups='increasing', + value='mean', delayed_groups='all', squeeze=True, **kwargs): + """Returns an array of the delayed fission spectrum. + + This method constructs a 4D NumPy array for the requested + multi-delayed-group cross section data for one or more + subdomains (1st dimension), delayed groups (2nd demension), + energy groups (3rd dimension), and nuclides (4th dimension). + + Parameters + ---------- + groups : Iterable of Integral or 'all' + Energy groups of interest. Defaults to 'all'. + delayed_groups : list of int or 'all' + Delayed groups of interest. Defaults to 'all'. + subdomains : Iterable of Integral or 'all' + Subdomain IDs of interest. Defaults to 'all'. + nuclides : Iterable of str or 'all' or 'sum' + A list of nuclide name strings (e.g., ['U-235', 'U-238']). The + special string 'all' will return the cross sections for all nuclides + in the spatial domain. The special string 'sum' will return the + cross section summed over all nuclides. Defaults to 'all'. + xs_type: {'macro', 'micro'} + This parameter is not relevant for chi but is included here to + mirror the parent MGXS.get_xs(...) class method + order_groups: {'increasing', 'decreasing'} + Return the cross section indexed according to increasing or + decreasing energy groups (decreasing or increasing energies). + Defaults to 'increasing'. + value : {'mean', 'std_dev', 'rel_err'} + A string for the type of value to return. Defaults to 'mean'. + squeeze : bool + A boolean representing whether to eliminate the extra dimensions + of the multi-dimensional array to be returned. Defaults to True. + + Returns + ------- + numpy.ndarray + A NumPy array of the multi-group and multi-delayed-group cross + section indexed in the order each group, subdomain and nuclide is + listed in the parameters. + + Raises + ------ + ValueError + When this method is called before the multi-group cross section is + computed from tally data. + + """ + + cv.check_value('value', value, ['mean', 'std_dev', 'rel_err']) + cv.check_value('xs_type', xs_type, ['macro', 'micro']) + + # FIXME: Unable to get microscopic xs for mesh domain because the mesh + # cells do not know the nuclide densities in each mesh cell. + if self.domain_type == 'mesh' and xs_type == 'micro': + msg = 'Unable to get micro xs for mesh domain since the mesh ' \ + 'cells do not know the nuclide densities in each mesh cell.' + raise ValueError(msg) + + filters = [] + filter_bins = [] + + # Construct a collection of the domain filter bins + if not isinstance(subdomains, basestring): + cv.check_iterable_type('subdomains', subdomains, Integral, + max_depth=3) + for subdomain in subdomains: + filters.append(self.domain_type) + filter_bins.append((subdomain,)) + + # Construct list of energy group bounds tuples for all requested groups + if not isinstance(groups, basestring): + cv.check_iterable_type('groups', groups, Integral) + for group in groups: + filters.append('energyout') + filter_bins.append( + (self.energy_groups.get_group_bounds(group),)) + + # Construct list of delayed group tuples for all requested groups + if not isinstance(delayed_groups, basestring): + cv.check_type('delayed groups', delayed_groups, list, int) + for delayed_group in delayed_groups: + filters.append('delayedgroup') + filter_bins.append((delayed_group,)) + + # If chi delayed was computed for each nuclide in the domain + if self.by_nuclide: + + # Get the sum as the fission source weighted average chi for all + # nuclides in the domain + if nuclides == 'sum' or nuclides == ['sum']: + + # Retrieve the fission production tallies + delayed_nu_fission_in = self.tallies['delayed-nu-fission-in'] + delayed_nu_fission_out = self.tallies['delayed-nu-fission-out'] + + # Sum out all nuclides + nuclides = self.get_nuclides() + delayed_nu_fission_in = delayed_nu_fission_in.summation\ + (nuclides=nuclides) + delayed_nu_fission_out = delayed_nu_fission_out.summation\ + (nuclides=nuclides) + + # Remove coarse energy filter to keep it out of tally arithmetic + energy_filter = delayed_nu_fission_in.find_filter('energy') + delayed_nu_fission_in.remove_filter(energy_filter) + + # Compute chi and store it as the xs_tally attribute so we can + # use the generic get_xs(...) method + xs_tally = delayed_nu_fission_out / delayed_nu_fission_in + + # Add the coarse energy filter back to the nu-fission tally + delayed_nu_fission_in.filters.append(energy_filter) + + xs = xs_tally.get_values(filters=filters, + filter_bins=filter_bins, value=value) + + # Get chi delayed for all nuclides in the domain + elif nuclides == 'all': + nuclides = self.get_nuclides() + xs = self.xs_tally.get_values(filters=filters, + filter_bins=filter_bins, + nuclides=nuclides, value=value) + + # Get chi delayed for user-specified nuclides in the domain + else: + cv.check_iterable_type('nuclides', nuclides, basestring) + xs = self.xs_tally.get_values(filters=filters, + filter_bins=filter_bins, + nuclides=nuclides, value=value) + + # If chi delayed was computed as an average of nuclides in the domain + else: + xs = self.xs_tally.get_values(filters=filters, + filter_bins=filter_bins, value=value) + + # Eliminate the trivial score dimension + xs = np.squeeze(xs, axis=len(xs.shape) - 1) + xs = np.nan_to_num(xs) + + # Reshape tally data array with separate axes for domain and energy + if groups == 'all': + num_groups = self.num_groups + else: + num_groups = len(groups) + + if delayed_groups == 'all': + num_delayed_groups = self.num_delayed_groups + else: + num_delayed_groups = len(delayed_groups) + + # Reshape tally data array with separate axes for domain, energy groups, + # delayed groups, and nuclides + num_subdomains = int(xs.shape[0] / (num_groups * num_delayed_groups)) + new_shape = (num_subdomains, num_delayed_groups, num_groups) + new_shape += xs.shape[1:] + xs = np.reshape(xs, new_shape) + + # Reverse data if user requested increasing energy groups since + # tally data is stored in order of increasing energies + if order_groups == 'increasing': + xs = xs[:, :, ::-1, :] + + if squeeze: + xs = np.squeeze(xs) + xs = np.atleast_1d(xs) + + return xs + + +class DelayedNuFissionXS(MDGXS): + r"""A fission delayed neutron production multi-group cross section. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group fission neutron production cross sections for multi-group + neutronics calculations. At a minimum, one needs to set the + :attr:`DelayedNuFissionXS.energy_groups` and :attr:`DelayedNuFissionXS.domain` + properties. Tallies for the flux and appropriate reaction rates over the + specified domain are generated automatically via the + :attr:`DelayedNuFissionXS.tallies` property, which can then be appended to a + :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`DelayedNuFissionXS.xs_tally` property. + + For a spatial domain :math:`V`, energy group :math:`[E_g,E_{g-1}]`, and + delayed group :math:`d`, the fission delayed neutron production cross + section is calculated as: + + .. math:: + + \frac{\int_{r \in V} dr \int_{4\pi} d\Omega \int_{E_g}^{E_{g-1}} dE \; + \nu^d \sigma_f (r, E) \psi (r, E, \Omega)}{\int_{r \in V} dr \int_{4\pi} + d\Omega \int_{E_g}^{E_{g-1}} dE \; \psi (r, E, \Omega)}. + + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} + The domain type for spatial homogenization + groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + delayed_groups : list of int + Delayed groups to filter out the xs + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe or Mesh + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + delayed_groups : list of int + Delayed groups to filter out the xs + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`DelayedNuFissionXS.tally_keys` property + and values are instances of :class:`openmc.Tally`. + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ + + def __init__(self, domain=None, domain_type=None, energy_groups=None, + delayed_groups=None, by_nuclide=False, name=''): + super(DelayedNuFissionXS, self).__init__(domain, domain_type, + energy_groups, delayed_groups, + by_nuclide, name) + self._rxn_type = 'delayed-nu-fission' + + +class Beta(MDGXS): + r"""The delayed neutron fraction. + + This class can be used for both OpenMC input generation and tally data + post-processing to compute spatially-homogenized and energy-integrated + multi-group and multi-delayed group cross sections for multi-group + neutronics calculations. At a minimum, one needs to set the + :attr:`Beta.energy_groups` and :attr:`Beta.domain` properties. Tallies for + the flux and appropriate reaction rates over the specified domain are + generated automatically via the :attr:`Beta.tallies` property, which can + then be appended to a :class:`openmc.Tallies` instance. + + For post-processing, the :meth:`MGXS.load_from_statepoint` will pull in the + necessary data to compute multi-group cross sections from a + :class:`openmc.StatePoint` instance. The derived multi-group cross section + can then be obtained from the :attr:`Beta.xs_tally` property. + + For a spatial domain :math:`V`, energy group :math:`[E_g,E_{g-1}]`, and + delayed group :math:`d`, the delayed neutron fraction is calculated as: + + .. math:: + + \langle \nu^d \sigma_f \phi \rangle &= \int_{r \in V} dr \int_{4\pi} + d\Omega' \int_0^\infty dE' \int_0^\infty dE \; \chi(E) \nu^d + \sigma_f (r, E') \psi(r, E', \Omega') \\ + \langle \nu \sigma_f \phi \rangle &= \int_{r \in V} dr \int_{4\pi} + d\Omega' \int_0^\infty dE' \int_0^\infty dE \; \chi(E) \nu + \sigma_f (r, E') \psi(r, E', \Omega') \\ + \beta_{d,g} &= \frac{\langle \nu^d \sigma_f \phi \rangle} + {\langle \nu \sigma_f \phi \rangle} + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe or openmc.Mesh + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} + The domain type for spatial homogenization + groups : openmc.mgxs.EnergyGroups + The energy group structure for energy condensation + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + name : str, optional + Name of the multi-group cross section. Used as a label to identify + tallies in OpenMC 'tallies.xml' file. + delayed_groups : list of int + Delayed groups to filter out the xs + + Attributes + ---------- + name : str, optional + Name of the multi-group cross section + rxn_type : str + Reaction type (e.g., 'total', 'nu-fission', etc.) + by_nuclide : bool + If true, computes cross sections for each nuclide in domain + domain : Material or Cell or Universe or Mesh + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe', 'mesh'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + delayed_groups : list of int + Delayed groups to filter out the xs + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'tracklength', 'analog'} + The tally estimator used to compute the multi-group cross section + tallies : collections.OrderedDict + OpenMC tallies needed to compute the multi-group cross section. The keys + are strings listed in the :attr:`Beta.tally_keys` property and + values are instances of :class:`openmc.Tally`. + rxn_rate_tally : openmc.Tally + Derived tally for the reaction rate tally used in the numerator to + compute the multi-group cross section. This attribute is None + unless the multi-group cross section has been computed. + xs_tally : openmc.Tally + Derived tally for the multi-group cross section. This attribute + is None unless the multi-group cross section has been computed. + num_subdomains : int + The number of subdomains is unity for 'material', 'cell' and 'universe' + domain types. When the This is equal to the number of cell instances + for 'distribcell' domain types (it is equal to unity prior to loading + tally data from a statepoint file). + num_nuclides : int + The number of nuclides for which the multi-group cross section is + being tracked. This is unity if the by_nuclide attribute is False. + nuclides : Iterable of str or 'sum' + The optional user-specified nuclides for which to compute cross + sections (e.g., 'U-238', 'O-16'). If by_nuclide is True but nuclides + are not specified by the user, all nuclides in the spatial domain + are included. This attribute is 'sum' if by_nuclide is false. + sparse : bool + Whether or not the MGXS' tallies use SciPy's LIL sparse matrix format + for compressed data storage + loaded_sp : bool + Whether or not a statepoint file has been loaded with tally data + derived : bool + Whether or not the MGXS is merged from one or more other MGXS + hdf5_key : str + The key used to index multi-group cross sections in an HDF5 data store + + """ + + def __init__(self, domain=None, domain_type=None, energy_groups=None, + delayed_groups=None, by_nuclide=False, name=''): + super(Beta, self).__init__(domain, domain_type, energy_groups, + delayed_groups, by_nuclide, name) + self._rxn_type = 'beta' + + @property + def scores(self): + return ['nu-fission', 'delayed-nu-fission'] + + @property + def tally_keys(self): + return ['nu-fission', 'delayed-nu-fission'] + + @property + def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + self._rxn_rate_tally = self.tallies['delayed-nu-fission'] + self._rxn_rate_tally.sparse = self.sparse + return self._rxn_rate_tally + + @property + def xs_tally(self): + + if self._xs_tally is None: + nu_fission = self.tallies['nu-fission'] + + # Compute beta + self._xs_tally = self.rxn_rate_tally / nu_fission + super(Beta, self)._compute_xs() + + return self._xs_tally diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index e1c2e62217..1d2e9098d3 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -13,6 +13,7 @@ import numpy as np import openmc import openmc.checkvalue as cv +from openmc.tallies import ESTIMATOR_TYPES from openmc.mgxs import EnergyGroups if sys.version_info[0] >= 3: @@ -39,7 +40,6 @@ MGXS_TYPES = ['total', 'inverse-velocity', 'prompt-nu-fission'] - # Supported domain types DOMAIN_TYPES = ['cell', 'distribcell', @@ -102,7 +102,7 @@ class MGXS(object): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : {'tracklength', 'collision', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section @@ -144,11 +144,11 @@ class MGXS(object): def __init__(self, domain=None, domain_type=None, energy_groups=None, by_nuclide=False, name=''): - self._name = '' self._rxn_type = None self._by_nuclide = None self._nuclides = None + self._estimator = 'tracklength' self._domain = None self._domain_type = None self._energy_groups = None @@ -160,6 +160,7 @@ class MGXS(object): self._loaded_sp = False self._derived = False self._hdf5_key = None + self._valid_estimators = ESTIMATOR_TYPES self.name = name self.by_nuclide = by_nuclide @@ -250,7 +251,7 @@ class MGXS(object): @property def estimator(self): - return 'tracklength' + return self._estimator @property def tallies(self): @@ -288,9 +289,7 @@ class MGXS(object): # If this is a by-nuclide cross-section, add nuclides to Tally if self.by_nuclide and score != 'flux': - all_nuclides = self.get_all_nuclides() - for nuclide in all_nuclides: - self._tallies[key].nuclides.append(nuclide) + self._tallies[key].nuclides += self.get_nuclides() else: self._tallies[key].nuclides.append('total') @@ -329,16 +328,16 @@ class MGXS(object): @property def num_nuclides(self): if self.by_nuclide: - return len(self.get_all_nuclides()) + return len(self.get_nuclides()) else: return 1 @property def nuclides(self): if self.by_nuclide: - return self.get_all_nuclides() + return self.get_nuclides() else: - return 'sum' + return ['sum'] @property def loaded_sp(self): @@ -370,6 +369,11 @@ class MGXS(object): cv.check_iterable_type('nuclides', nuclides, basestring) self._nuclides = nuclides + @estimator.setter + def estimator(self, estimator): + cv.check_value('estimator', estimator, self._valid_estimators) + self._estimator = estimator + @domain.setter def domain(self, domain): cv.check_type('domain', domain, _DOMAINS) @@ -503,7 +507,7 @@ class MGXS(object): mgxs.name = name return mgxs - def get_all_nuclides(self): + def get_nuclides(self): """Get all nuclides in the cross section's spatial domain. Returns @@ -528,8 +532,7 @@ class MGXS(object): # Otherwise, return all nuclides in the spatial domain else: - nuclides = self.domain.get_all_nuclides() - return list(nuclides.keys()) + return self.domain.get_nuclides() def get_nuclide_density(self, nuclide): """Get the atomic number density in units of atoms/b-cm for a nuclide @@ -545,26 +548,14 @@ class MGXS(object): float The atomic number density (atom/b-cm) for the nuclide of interest - Raises - ------- - ValueError - When the density is requested for a nuclide which is not found in - the spatial domain. - """ cv.check_type('nuclide', nuclide, basestring) # Get list of all nuclides in the spatial domain - nuclides = self.domain.get_all_nuclides() + nuclides = self.domain.get_nuclide_densities() - if nuclide not in nuclides: - msg = 'Unable to get density for nuclide "{0}" which is not in ' \ - '{1} "{2}"'.format(nuclide, self.domain_type, self.domain.id) - ValueError(msg) - - density = nuclides[nuclide][1] - return density + return nuclides[nuclide][1] if nuclide in nuclides else 0.0 def get_nuclide_densities(self, nuclides='all'): """Get an array of atomic number densities in units of atom/b-cm for all @@ -597,14 +588,14 @@ class MGXS(object): # Sum the atomic number densities for all nuclides if nuclides == 'sum': - nuclides = self.get_all_nuclides() + nuclides = self.get_nuclides() densities = np.zeros(1, dtype=np.float) for nuclide in nuclides: densities[0] += self.get_nuclide_density(nuclide) # Tabulate the atomic number densities for all nuclides elif nuclides == 'all': - nuclides = self.get_all_nuclides() + nuclides = self.get_nuclides() densities = np.zeros(self.num_nuclides, dtype=np.float) for i, nuclide in enumerate(nuclides): densities[i] += self.get_nuclide_density(nuclide) @@ -635,7 +626,7 @@ class MGXS(object): # If computing xs for each nuclide, replace CrossNuclides with originals if self.by_nuclide: self.xs_tally._nuclides = [] - nuclides = self.get_all_nuclides() + nuclides = self.get_nuclides() for nuclide in nuclides: self.xs_tally.nuclides.append(openmc.Nuclide(nuclide)) @@ -725,11 +716,13 @@ class MGXS(object): def get_xs(self, groups='all', subdomains='all', nuclides='all', xs_type='macro', order_groups='increasing', - value='mean', **kwargs): + value='mean', squeeze=True, **kwargs): r"""Returns an array of multi-group cross sections. - This method constructs a 2D NumPy array for the requested multi-group - cross section data data for one or more energy groups and subdomains. + This method constructs a 3D NumPy array for the requested + multi-group cross section data for one or more subdomains + (1st dimension), energy groups (2nd dimension), and nuclides + (3rd dimension). Parameters ---------- @@ -751,6 +744,9 @@ class MGXS(object): Defaults to 'increasing'. value : {'mean', 'std_dev', 'rel_err'} A string for the type of value to return. Defaults to 'mean'. + squeeze : bool + A boolean representing whether to eliminate the extra dimensions + of the multi-dimensional array to be returned. Defaults to True. Returns ------- @@ -781,7 +777,8 @@ class MGXS(object): # Construct a collection of the domain filter bins if not isinstance(subdomains, basestring): - cv.check_iterable_type('subdomains', subdomains, Integral, max_depth=3) + cv.check_iterable_type('subdomains', subdomains, Integral, + max_depth=3) for subdomain in subdomains: filters.append(self.domain_type) filter_bins.append((subdomain,)) @@ -796,7 +793,7 @@ class MGXS(object): # Construct a collection of the nuclides to retrieve from the xs tally if self.by_nuclide: if nuclides == 'all' or nuclides == 'sum' or nuclides == ['sum']: - query_nuclides = self.get_all_nuclides() + query_nuclides = self.get_nuclides() else: query_nuclides = nuclides else: @@ -820,25 +817,29 @@ class MGXS(object): if value == 'mean' or value == 'std_dev': xs /= densities[np.newaxis, :, np.newaxis] + # Eliminate the trivial score dimension + xs = np.squeeze(xs, axis=len(xs.shape) - 1) + xs = np.nan_to_num(xs) + + if groups == 'all': + num_groups = self.num_groups + else: + num_groups = len(groups) + + # Reshape tally data array with separate axes for domain and energy + num_subdomains = int(xs.shape[0] / num_groups) + new_shape = (num_subdomains, num_groups) + xs.shape[1:] + xs = np.reshape(xs, new_shape) + # Reverse data if user requested increasing energy groups since # tally data is stored in order of increasing energies if order_groups == 'increasing': - if groups == 'all': - num_groups = self.num_groups - else: - num_groups = len(groups) - - # Reshape tally data array with separate axes for domain and energy - num_subdomains = int(xs.shape[0] / num_groups) - new_shape = (num_subdomains, num_groups) + xs.shape[1:] - xs = np.reshape(xs, new_shape) - - # Reverse energies to align with increasing energy groups xs = xs[:, ::-1, :] - # Eliminate trivial dimensions - xs = np.squeeze(xs) - xs = np.atleast_1d(xs) + if squeeze: + xs = np.squeeze(xs) + xs = np.atleast_1d(xs) + return xs def get_condensed_xs(self, coarse_groups): @@ -1164,7 +1165,7 @@ class MGXS(object): # Construct a collection of the nuclides to report if self.by_nuclide: if nuclides == 'all': - nuclides = self.get_all_nuclides() + nuclides = self.get_nuclides() elif nuclides == 'sum': nuclides = ['sum'] else: @@ -1302,7 +1303,7 @@ class MGXS(object): # Construct a collection of the nuclides to report if self.by_nuclide: if nuclides == 'all': - nuclides = self.get_all_nuclides() + nuclides = self.get_nuclides() densities = np.zeros(len(nuclides), dtype=np.float) elif nuclides == 'sum': nuclides = ['sum'] @@ -1351,8 +1352,6 @@ class MGXS(object): std_dev = self.get_xs(subdomains=[subdomain], nuclides=[nuclide], xs_type=xs_type, value='std_dev', row_column=row_column) - average = average.squeeze() - std_dev = std_dev.squeeze() # Add MGXS results data to the HDF5 group nuclide_group.require_dataset('average', dtype=np.float64, @@ -1484,25 +1483,27 @@ class MGXS(object): if self.by_nuclide and nuclides == 'sum': # Use tally summation to sum across all nuclides - query_nuclides = self.get_all_nuclides() - xs_tally = self.xs_tally.summation(nuclides=query_nuclides) + query_nuclides = [nuclides] + xs_tally = self.xs_tally.summation(nuclides=self.get_nuclides()) df = xs_tally.get_pandas_dataframe( distribcell_paths=distribcell_paths) # Remove nuclide column since it is homogeneous and redundant if self.domain_type == 'mesh': - df.drop('nuclide', axis=1, level=0, inplace=True) + df.drop('sum(nuclide)', axis=1, level=0, inplace=True) else: - df.drop('nuclide', axis=1, inplace=True) + df.drop('sum(nuclide)', axis=1, inplace=True) # If the user requested a specific set of nuclides elif self.by_nuclide and nuclides != 'all': + query_nuclides = nuclides xs_tally = self.xs_tally.get_slice(nuclides=nuclides) df = xs_tally.get_pandas_dataframe( distribcell_paths=distribcell_paths) # If the user requested all nuclides, keep nuclide column in dataframe else: + query_nuclides = self.nuclides df = self.xs_tally.get_pandas_dataframe( distribcell_paths=distribcell_paths) @@ -1514,19 +1515,19 @@ class MGXS(object): # Override energy groups bounds with indices all_groups = np.arange(self.num_groups, 0, -1, dtype=np.int) - all_groups = np.repeat(all_groups, self.num_nuclides) + all_groups = np.repeat(all_groups, len(query_nuclides)) if 'energy low [MeV]' in df and 'energyout low [MeV]' in df: df.rename(columns={'energy low [MeV]': 'group in'}, inplace=True) - in_groups = np.tile(all_groups, self.num_subdomains) - in_groups = np.repeat(in_groups, df.shape[0] / in_groups.size) + in_groups = np.tile(all_groups, int(self.num_subdomains)) + in_groups = np.repeat(in_groups, int(df.shape[0] / in_groups.size)) df['group in'] = in_groups del df['energy high [MeV]'] df.rename(columns={'energyout low [MeV]': 'group out'}, inplace=True) out_groups = np.repeat(all_groups, self.xs_tally.num_scores) - out_groups = np.tile(out_groups, df.shape[0] / out_groups.size) + out_groups = np.tile(out_groups, int(df.shape[0] / out_groups.size)) df['group out'] = out_groups del df['energyout high [MeV]'] columns = ['group in', 'group out'] @@ -1534,14 +1535,14 @@ class MGXS(object): elif 'energyout low [MeV]' in df: df.rename(columns={'energyout low [MeV]': 'group out'}, inplace=True) - in_groups = np.tile(all_groups, self.num_subdomains) + in_groups = np.tile(all_groups, int(df.shape[0] / all_groups.size)) df['group out'] = in_groups del df['energyout high [MeV]'] columns = ['group out'] elif 'energy low [MeV]' in df: df.rename(columns={'energy low [MeV]': 'group in'}, inplace=True) - in_groups = np.tile(all_groups, self.num_subdomains) + in_groups = np.tile(all_groups, int(df.shape[0] / all_groups.size)) df['group in'] = in_groups del df['energy high [MeV]'] columns = ['group in'] @@ -1564,6 +1565,10 @@ class MGXS(object): df['mean'] /= np.tile(densities, tile_factor) df['std. dev.'] /= np.tile(densities, tile_factor) + # Replace NaNs by zeros (happens if nuclide density is zero) + df['mean'].replace(np.nan, 0.0, inplace=True) + df['std. dev.'].replace(np.nan, 0.0, inplace=True) + # Sort the dataframe by domain type id (e.g., distribcell id) and # energy groups such that data is from fast to thermal if self.domain_type == 'mesh': @@ -1572,6 +1577,7 @@ class MGXS(object): (mesh_str, 'z')] + columns, inplace=True) else: df.sort_values(by=[self.domain_type] + columns, inplace=True) + return df def get_units(self, xs_type='macro'): @@ -1646,7 +1652,7 @@ class MatrixMGXS(MGXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : {'tracklength', 'collision', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section @@ -1695,18 +1701,16 @@ class MatrixMGXS(MGXS): return [[energy], [energy, energyout]] - @property - def estimator(self): - return 'analog' - def get_xs(self, in_groups='all', out_groups='all', subdomains='all', nuclides='all', xs_type='macro', order_groups='increasing', - row_column='inout', value='mean', **kwargs): + row_column='inout', value='mean', squeeze=True, **kwargs): """Returns an array of multi-group cross sections. - This method constructs a 2D NumPy array for the requested multi-group - matrix data for one or more energy groups and subdomains. + This method constructs a 4D NumPy array for the requested + multi-group cross section data for one or more subdomains + (1st dimension), energy groups in (2nd dimension), energy groups out + (3rd dimension), and nuclides (4th dimension). Parameters ---------- @@ -1735,6 +1739,9 @@ class MatrixMGXS(MGXS): Defaults to 'inout'. value : {'mean', 'std_dev', 'rel_err'} A string for the type of value to return. Defaults to 'mean'. + squeeze : bool + A boolean representing whether to eliminate the extra dimensions + of the multi-dimensional array to be returned. Defaults to True. Returns ------- @@ -1790,7 +1797,7 @@ class MatrixMGXS(MGXS): # Construct a collection of the nuclides to retrieve from the xs tally if self.by_nuclide: if nuclides == 'all' or nuclides == 'sum' or nuclides == ['sum']: - query_nuclides = self.get_all_nuclides() + query_nuclides = self.get_nuclides() else: query_nuclides = nuclides else: @@ -1806,8 +1813,6 @@ class MatrixMGXS(MGXS): filter_bins=filter_bins, nuclides=query_nuclides, value=value) - xs = np.nan_to_num(xs) - # Divide by atom number densities for microscopic cross sections if xs_type == 'micro': if self.by_nuclide: @@ -1817,33 +1822,36 @@ class MatrixMGXS(MGXS): if value == 'mean' or value == 'std_dev': xs /= densities[np.newaxis, :, np.newaxis] + # Eliminate the trivial score dimension + xs = np.squeeze(xs, axis=len(xs.shape) - 1) + xs = np.nan_to_num(xs) + + if in_groups == 'all': + num_in_groups = self.num_groups + else: + num_in_groups = len(in_groups) + + if out_groups == 'all': + num_out_groups = self.num_groups + else: + num_out_groups = len(out_groups) + + # Reshape tally data array with separate axes for domain and energy + num_subdomains = int(xs.shape[0] / (num_in_groups * num_out_groups)) + new_shape = (num_subdomains, num_in_groups, num_out_groups) + new_shape += xs.shape[1:] + xs = np.reshape(xs, new_shape) + + # Transpose the matrix if requested by user + if row_column == 'outin': + xs = np.swapaxes(xs, 1, 2) + # Reverse data if user requested increasing energy groups since # tally data is stored in order of increasing energies if order_groups == 'increasing': - if in_groups == 'all': - num_in_groups = self.num_groups - else: - num_in_groups = len(in_groups) - if out_groups == 'all': - num_out_groups = self.num_groups - else: - num_out_groups = len(out_groups) - - # Reshape tally data array with separate axes for domain and energy - num_subdomains = int(xs.shape[0] / - (num_in_groups * num_out_groups)) - new_shape = (num_subdomains, num_in_groups, num_out_groups) - new_shape += xs.shape[1:] - xs = np.reshape(xs, new_shape) - - # Transpose the matrix if requested by user - if row_column == 'outin': - xs = np.swapaxes(xs, 1, 2) - - # Reverse energies to align with increasing energy groups xs = xs[:, ::-1, ::-1, :] - # Eliminate trivial dimensions + if squeeze: xs = np.squeeze(xs) xs = np.atleast_2d(xs) @@ -1937,7 +1945,7 @@ class MatrixMGXS(MGXS): # Construct a collection of the nuclides to report if self.by_nuclide: if nuclides == 'all': - nuclides = self.get_all_nuclides() + nuclides = self.get_nuclides() if nuclides == 'sum': nuclides = ['sum'] else: @@ -2075,7 +2083,7 @@ class TotalXS(MGXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : {'tracklength', 'collision', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -2193,7 +2201,7 @@ class TransportXS(MGXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : 'analog' The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -2236,6 +2244,8 @@ class TransportXS(MGXS): super(TransportXS, self).__init__(domain, domain_type, groups, by_nuclide, name) self._rxn_type = 'transport' + self._estimator = 'analog' + self._valid_estimators = ['analog'] @property def scores(self): @@ -2248,10 +2258,6 @@ class TransportXS(MGXS): energyout_filter = openmc.Filter('energyout', group_edges) return [[energy_filter], [energy_filter], [energyout_filter]] - @property - def estimator(self): - return 'analog' - @property def rxn_rate_tally(self): if self._rxn_rate_tally is None: @@ -2323,7 +2329,7 @@ class NuTransportXS(TransportXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : 'analog' The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -2444,7 +2450,7 @@ class AbsorptionXS(MGXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : {'tracklength', 'collision', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -2461,7 +2467,8 @@ class AbsorptionXS(MGXS): The number of subdomains is unity for 'material', 'cell' and 'universe' domain types. This is equal to the number of cell instances for 'distribcell' domain types (it is equal to unity prior to loading - tally data from a statepoint file). + tally data from a statepoint file) and the number of mesh cells for + 'mesh' domain types. num_nuclides : int The number of nuclides for which the multi-group cross section is being tracked. This is unity if the by_nuclide attribute is False. @@ -2560,7 +2567,7 @@ class CaptureXS(MGXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : {'tracklength', 'collision', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -2682,7 +2689,7 @@ class FissionXS(MGXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : {'tracklength', 'collision', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -2793,7 +2800,7 @@ class NuFissionXS(MGXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : {'tracklength', 'collision', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -2837,7 +2844,6 @@ class NuFissionXS(MGXS): groups, by_nuclide, name) self._rxn_type = 'nu-fission' - class KappaFissionXS(MGXS): r"""A recoverable fission energy production rate multi-group cross section. @@ -2909,7 +2915,7 @@ class KappaFissionXS(MGXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : {'tracklength', 'collision', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -3022,7 +3028,7 @@ class ScatterXS(MGXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : {'tracklength', 'collision', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -3137,7 +3143,7 @@ class NuScatterXS(MGXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : {'tracklength', 'collision', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -3180,10 +3186,8 @@ class NuScatterXS(MGXS): super(NuScatterXS, self).__init__(domain, domain_type, groups, by_nuclide, name) self._rxn_type = 'nu-scatter' - - @property - def estimator(self): - return 'analog' + self._estimator = 'analog' + self._valid_estimators = ['analog'] class ScatterMatrixXS(MatrixMGXS): @@ -3271,7 +3275,7 @@ class ScatterMatrixXS(MatrixMGXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : 'analog' The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -3317,6 +3321,8 @@ class ScatterMatrixXS(MatrixMGXS): self._correction = 'P0' self._legendre_order = 0 self._hdf5_key = 'scatter matrix' + self._estimator = 'analog' + self._valid_estimators = ['analog'] def __deepcopy__(self, memo): clone = super(ScatterMatrixXS, self).__deepcopy__(memo) @@ -3520,11 +3526,13 @@ class ScatterMatrixXS(MatrixMGXS): def get_xs(self, in_groups='all', out_groups='all', subdomains='all', nuclides='all', moment='all', xs_type='macro', order_groups='increasing', - row_column='inout', value='mean'): + row_column='inout', value='mean', squeeze=True): r"""Returns an array of multi-group cross sections. - This method constructs a 2D NumPy array for the requested scattering - matrix data data for one or more energy groups and subdomains. + This method constructs a 5D NumPy array for the requested + multi-group cross section data for one or more subdomains + (1st dimension), energy groups in (2nd dimension), energy groups out + (3rd dimension), nuclides (4th dimension), and moments (5th dimension). NOTE: The scattering moments are not multiplied by the :math:`(2l+1)/2` prefactor in the expansion of the scattering source into Legendre @@ -3560,6 +3568,9 @@ class ScatterMatrixXS(MatrixMGXS): Defaults to 'inout'. value : {'mean', 'std_dev', 'rel_err'} A string for the type of value to return. Defaults to 'mean'. + squeeze : bool + A boolean representing whether to eliminate the extra dimensions + of the multi-dimensional array to be returned. Defaults to True. Returns ------- @@ -3622,7 +3633,7 @@ class ScatterMatrixXS(MatrixMGXS): # Construct a collection of the nuclides to retrieve from the xs tally if self.by_nuclide: if nuclides == 'all' or nuclides == 'sum' or nuclides == ['sum']: - query_nuclides = self.get_all_nuclides() + query_nuclides = self.get_nuclides() else: query_nuclides = nuclides else: @@ -3638,8 +3649,6 @@ class ScatterMatrixXS(MatrixMGXS): filter_bins=filter_bins, nuclides=query_nuclides, value=value) - xs = np.nan_to_num(xs) - # Divide by atom number densities for microscopic cross sections if xs_type == 'micro': if self.by_nuclide: @@ -3649,32 +3658,35 @@ class ScatterMatrixXS(MatrixMGXS): if value == 'mean' or value == 'std_dev': xs /= densities[np.newaxis, :, np.newaxis] + # Convert and nans to zero + xs = np.nan_to_num(xs) + + if in_groups == 'all': + num_in_groups = self.num_groups + else: + num_in_groups = len(in_groups) + + if out_groups == 'all': + num_out_groups = self.num_groups + else: + num_out_groups = len(out_groups) + + # Reshape tally data array with separate axes for domain and energy + num_subdomains = int(xs.shape[0] / (num_in_groups * num_out_groups)) + new_shape = (num_subdomains, num_in_groups, num_out_groups) + new_shape += xs.shape[1:] + xs = np.reshape(xs, new_shape) + + # Transpose the scattering matrix if requested by user + if row_column == 'outin': + xs = np.swapaxes(xs, 1, 2) + # Reverse data if user requested increasing energy groups since # tally data is stored in order of increasing energies if order_groups == 'increasing': - if in_groups == 'all': - num_in_groups = self.num_groups - else: - num_in_groups = len(in_groups) - if out_groups == 'all': - num_out_groups = self.num_groups - else: - num_out_groups = len(out_groups) - - # Reshape tally data array with separate axes for domain and energy - num_subdomains = int(xs.shape[0] / (num_in_groups * num_out_groups)) - new_shape = (num_subdomains, num_in_groups, num_out_groups) - new_shape += xs.shape[1:] - xs = np.reshape(xs, new_shape) - - # Transpose the scattering matrix if requested by user - if row_column == 'outin': - xs = np.swapaxes(xs, 1, 2) - - # Reverse energies to align with increasing energy groups xs = xs[:, ::-1, ::-1, :] - # Eliminate trivial dimensions + if squeeze: xs = np.squeeze(xs) xs = np.atleast_2d(xs) @@ -3731,7 +3743,7 @@ class ScatterMatrixXS(MatrixMGXS): if self.legendre_order > 0: # Insert a column corresponding to the Legendre moments moments = ['P{}'.format(i) for i in range(self.legendre_order+1)] - moments = np.tile(moments, df.shape[0] / len(moments)) + moments = np.tile(moments, int(df.shape[0] / len(moments))) df['moment'] = moments # Place the moment column before the mean column @@ -3789,7 +3801,7 @@ class ScatterMatrixXS(MatrixMGXS): # Construct a collection of the nuclides to report if self.by_nuclide: if nuclides == 'all': - nuclides = self.get_all_nuclides() + nuclides = self.get_nuclides() if nuclides == 'sum': nuclides = ['sum'] else: @@ -3932,7 +3944,7 @@ class NuScatterMatrixXS(ScatterMatrixXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : 'analog' The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -4054,7 +4066,7 @@ class MultiplicityMatrixXS(MatrixMGXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : 'analog' The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -4097,6 +4109,8 @@ class MultiplicityMatrixXS(MatrixMGXS): super(MultiplicityMatrixXS, self).__init__(domain, domain_type, groups, by_nuclide, name) self._rxn_type = 'multiplicity matrix' + self._estimator = 'analog' + self._valid_estimators = ['analog'] @property def scores(self): @@ -4201,7 +4215,7 @@ class NuFissionMatrixXS(MatrixMGXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : 'analog' The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -4245,6 +4259,8 @@ class NuFissionMatrixXS(MatrixMGXS): groups, by_nuclide, name) self._rxn_type = 'nu-fission' self._hdf5_key = 'nu-fission matrix' + self._estimator = 'analog' + self._valid_estimators = ['analog'] class Chi(MGXS): @@ -4316,7 +4332,7 @@ class Chi(MGXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : 'analog' The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -4358,6 +4374,8 @@ class Chi(MGXS): groups=None, by_nuclide=False, name=''): super(Chi, self).__init__(domain, domain_type, groups, by_nuclide, name) self._rxn_type = 'chi' + self._estimator = 'analog' + self._valid_estimators = ['analog'] @property def scores(self): @@ -4375,10 +4393,6 @@ class Chi(MGXS): def tally_keys(self): return ['nu-fission-in', 'nu-fission-out'] - @property - def estimator(self): - return 'analog' - @property def rxn_rate_tally(self): if self._rxn_rate_tally is None: @@ -4515,11 +4529,13 @@ class Chi(MGXS): def get_xs(self, groups='all', subdomains='all', nuclides='all', xs_type='macro', order_groups='increasing', - value='mean', **kwargs): + value='mean', squeeze=True, **kwargs): """Returns an array of the fission spectrum. - This method constructs a 2D NumPy array for the requested multi-group - cross section data data for one or more energy groups and subdomains. + This method constructs a 3D NumPy array for the requested + multi-group cross section data for one or more subdomains + (1st dimension), energy groups (2nd dimension), and nuclides + (3rd dimension). Parameters ---------- @@ -4541,6 +4557,9 @@ class Chi(MGXS): Defaults to 'increasing'. value : {'mean', 'std_dev', 'rel_err'} A string for the type of value to return. Defaults to 'mean'. + squeeze : bool + A boolean representing whether to eliminate the extra dimensions + of the multi-dimensional array to be returned. Defaults to True. Returns ------- @@ -4595,7 +4614,7 @@ class Chi(MGXS): nu_fission_out = self.tallies['nu-fission-out'] # Sum out all nuclides - nuclides = self.get_all_nuclides() + nuclides = self.get_nuclides() nu_fission_in = nu_fission_in.summation(nuclides=nuclides) nu_fission_out = nu_fission_out.summation(nuclides=nuclides) @@ -4615,7 +4634,7 @@ class Chi(MGXS): # Get chi for all nuclides in the domain elif nuclides == 'all': - nuclides = self.get_all_nuclides() + nuclides = self.get_nuclides() xs = self.xs_tally.get_values(filters=filters, filter_bins=filter_bins, nuclides=nuclides, value=value) @@ -4632,27 +4651,29 @@ class Chi(MGXS): xs = self.xs_tally.get_values(filters=filters, filter_bins=filter_bins, value=value) + # Eliminate the trivial score dimension + xs = np.squeeze(xs, axis=len(xs.shape) - 1) + xs = np.nan_to_num(xs) + + # Reshape tally data array with separate axes for domain and energy + if groups == 'all': + num_groups = self.num_groups + else: + num_groups = len(groups) + + num_subdomains = int(xs.shape[0] / num_groups) + new_shape = (num_subdomains, num_groups) + xs.shape[1:] + xs = np.reshape(xs, new_shape) + # Reverse data if user requested increasing energy groups since # tally data is stored in order of increasing energies if order_groups == 'increasing': - - # Reshape tally data array with separate axes for domain and energy - if groups == 'all': - num_groups = self.num_groups - else: - num_groups = len(groups) - num_subdomains = int(xs.shape[0] / num_groups) - new_shape = (num_subdomains, num_groups) + xs.shape[1:] - xs = np.reshape(xs, new_shape) - - # Reverse energies to align with increasing energy groups xs = xs[:, ::-1, :] - # Eliminate trivial dimensions + if squeeze: xs = np.squeeze(xs) xs = np.atleast_1d(xs) - xs = np.nan_to_num(xs) return xs def get_pandas_dataframe(self, groups='all', nuclides='all', @@ -4761,7 +4782,7 @@ class ChiPrompt(Chi): \langle \nu^p \sigma_{f,g' \rightarrow g} \phi \rangle &= \int_{r \in V} dr \int_{4\pi} d\Omega' \int_0^\infty dE' \int_{E_g}^{E_{g-1}} dE \; - \chi(E) \nu^p \sigma_f (r, E') \psi(r, E', \Omega')\\ + \chi(E)^p \nu^p \sigma_f (r, E') \psi(r, E', \Omega')\\ \langle \nu^p \sigma_f \phi \rangle &= \int_{r \in V} dr \int_{4\pi} d\Omega' \int_0^\infty dE' \int_0^\infty dE \; \chi(E) \nu^p \sigma_f (r, E') \psi(r, E', \Omega') \\ @@ -4806,7 +4827,7 @@ class ChiPrompt(Chi): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : 'analog' The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -4921,7 +4942,7 @@ class InverseVelocity(MGXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : {'tracklength', 'collision', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys @@ -4938,7 +4959,8 @@ class InverseVelocity(MGXS): The number of subdomains is unity for 'material', 'cell' and 'universe' domain types. This is equal to the number of cell instances for 'distribcell' domain types (it is equal to unity prior to loading - tally data from a statepoint file). + tally data from a statepoint file) and the number of mesh cells for + 'mesh' domain types. num_nuclides : int The number of nuclides for which the multi-group cross section is being tracked. This is unity if the by_nuclide attribute is False. @@ -5055,7 +5077,7 @@ class PromptNuFissionXS(MGXS): tally_keys : list of str The keys into the tallies dictionary for each tally used to compute the multi-group cross section - estimator : {'tracklength', 'analog'} + estimator : {'tracklength', 'collision', 'analog'} The tally estimator used to compute the multi-group cross section tallies : collections.OrderedDict OpenMC tallies needed to compute the multi-group cross section. The keys diff --git a/openmc/mgxs_library.py b/openmc/mgxs_library.py index 6f8188b101..37ad6c1be4 100644 --- a/openmc/mgxs_library.py +++ b/openmc/mgxs_library.py @@ -99,9 +99,6 @@ class XSdata(object): Unique identifier for the xsdata object alias : str Separate unique identifier for the xsdata object - zaid : int - 1000*(atomic number) + mass number. As an example, the zaid of U235 - would be 92235. awr : float Atomic weight ratio of an isotope. That is, the ratio of the mass of the isotope to the mass of a single neutron. @@ -227,7 +224,6 @@ class XSdata(object): self._energy_groups = energy_groups self._representation = representation self._alias = None - self._zaid = None self._awr = None self._kT = None self._fissionable = False @@ -262,10 +258,6 @@ class XSdata(object): def alias(self): return self._alias - @property - def zaid(self): - return self._zaid - @property def awr(self): return self._awr @@ -396,13 +388,6 @@ class XSdata(object): else: self._alias = self._name - @zaid.setter - def zaid(self, zaid): - # Check type and value - check_type('zaid', zaid, Integral) - check_greater_than('zaid', zaid, 0) - self._zaid = zaid - @awr.setter def awr(self, awr): # Check validity of type and that the awr value is > 0 @@ -603,7 +588,8 @@ class XSdata(object): if np.sum(self._nu_fission) > 0.0: self._fissionable = True - def set_total_mgxs(self, total, nuclide='total', xs_type='macro'): + def set_total_mgxs(self, total, nuclide='total', xs_type='macro', + subdomain='all'): """This method allows for an openmc.mgxs.TotalXS or openmc.mgxs.TransportXS to be used to set the total cross section for this XSdata object. @@ -619,6 +605,9 @@ class XSdata(object): xs_type: {'macro', 'micro'} Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + subdomain : iterable of int + If the MGXS contains a mesh domain type, the subdomain parameter + specifies which mesh cell (i.e., [i, j, k] index) to use. See also -------- @@ -631,16 +620,17 @@ class XSdata(object): openmc.mgxs.TransportXS)) check_value('energy_groups', total.energy_groups, [self.energy_groups]) check_value('domain_type', total.domain_type, - ['universe', 'cell', 'material']) + ['universe', 'cell', 'material', 'mesh']) if self.representation is 'isotropic': - self._total = total.get_xs(nuclides=nuclide, xs_type=xs_type) + self._total = total.get_xs(nuclides=nuclide, xs_type=xs_type, + subdomains=subdomain) elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) def set_absorption_mgxs(self, absorption, nuclide='total', - xs_type='macro'): + xs_type='macro', subdomain=None): """This method allows for an openmc.mgxs.AbsorptionXS to be used to set the absorption cross section for this XSdata object. @@ -655,6 +645,9 @@ class XSdata(object): xs_type: {'macro', 'micro'} Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + subdomain : iterable of int + If the MGXS contains a mesh domain type, the subdomain parameter + specifies which mesh cell (i.e., [i, j, k] index) to use. See also -------- @@ -667,16 +660,18 @@ class XSdata(object): check_value('energy_groups', absorption.energy_groups, [self.energy_groups]) check_value('domain_type', absorption.domain_type, - ['universe', 'cell', 'material']) + ['universe', 'cell', 'material', 'mesh']) if self.representation is 'isotropic': self._absorption = absorption.get_xs(nuclides=nuclide, - xs_type=xs_type) + xs_type=xs_type, + subdomains=subdomain) elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) - def set_fission_mgxs(self, fission, nuclide='total', xs_type='macro'): + def set_fission_mgxs(self, fission, nuclide='total', xs_type='macro', + subdomain=None): """This method allows for an openmc.mgxs.FissionXS to be used to set the fission cross section for this XSdata object. @@ -691,6 +686,9 @@ class XSdata(object): xs_type: {'macro', 'micro'} Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + subdomain : iterable of int + If the MGXS contains a mesh domain type, the subdomain parameter + specifies which mesh cell (i.e., [i, j, k] index) to use. See also -------- @@ -703,17 +701,18 @@ class XSdata(object): check_value('energy_groups', fission.energy_groups, [self.energy_groups]) check_value('domain_type', fission.domain_type, - ['universe', 'cell', 'material']) + ['universe', 'cell', 'material', 'mesh']) if self.representation is 'isotropic': self._fission = fission.get_xs(nuclides=nuclide, - xs_type=xs_type) + xs_type=xs_type, + subdomains=subdomain) elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) def set_nu_fission_mgxs(self, nu_fission, nuclide='total', - xs_type='macro'): + xs_type='macro', subdomain=None): """This method allows for an openmc.mgxs.NuFissionXS to be used to set the nu-fission cross section for this XSdata object. @@ -728,6 +727,9 @@ class XSdata(object): xs_type: {'macro', 'micro'} Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + subdomain : iterable of int + If the MGXS contains a mesh domain type, the subdomain parameter + specifies which mesh cell (i.e., [i, j, k] index) to use. See also -------- @@ -741,11 +743,12 @@ class XSdata(object): check_value('energy_groups', nu_fission.energy_groups, [self.energy_groups]) check_value('domain_type', nu_fission.domain_type, - ['universe', 'cell', 'material']) + ['universe', 'cell', 'material', 'mesh']) if self.representation is 'isotropic': self._nu_fission = nu_fission.get_xs(nuclides=nuclide, - xs_type=xs_type) + xs_type=xs_type, + subdomains=subdomain) elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) @@ -759,7 +762,7 @@ class XSdata(object): self._fissionable = True def set_kappa_fission_mgxs(self, k_fission, nuclide='total', - xs_type='macro'): + xs_type='macro', subdomain=None): """This method allows for an openmc.mgxs.KappaFissionXS to be used to set the kappa-fission cross section for this XSdata object. @@ -775,6 +778,9 @@ class XSdata(object): xs_type: {'macro', 'micro'} Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + subdomain : iterable of int + If the MGXS contains a mesh domain type, the subdomain parameter + specifies which mesh cell (i.e., [i, j, k] index) to use. See also -------- @@ -787,16 +793,18 @@ class XSdata(object): check_value('energy_groups', k_fission.energy_groups, [self.energy_groups]) check_value('domain_type', k_fission.domain_type, - ['universe', 'cell', 'material']) + ['universe', 'cell', 'material', 'mesh']) if self.representation is 'isotropic': self._kappa_fission = k_fission.get_xs(nuclides=nuclide, - xs_type=xs_type) + xs_type=xs_type, + subdomains=subdomain) elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) - def set_chi_mgxs(self, chi, nuclide='total', xs_type='macro'): + def set_chi_mgxs(self, chi, nuclide='total', xs_type='macro', + subdomain=None): """This method allows for an openmc.mgxs.Chi to be used to set chi for this XSdata object. @@ -810,6 +818,9 @@ class XSdata(object): xs_type: {'macro', 'micro'} Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + subdomain : iterable of int + If the MGXS contains a mesh domain type, the subdomain parameter + specifies which mesh cell (i.e., [i, j, k] index) to use. See also -------- @@ -827,11 +838,11 @@ class XSdata(object): check_type('chi', chi, openmc.mgxs.Chi) check_value('energy_groups', chi.energy_groups, [self.energy_groups]) check_value('domain_type', chi.domain_type, - ['universe', 'cell', 'material']) + ['universe', 'cell', 'material', 'mesh']) if self.representation is 'isotropic': self._chi = chi.get_xs(nuclides=nuclide, - xs_type=xs_type) + xs_type=xs_type, subdomains=subdomain) elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) @@ -839,7 +850,8 @@ class XSdata(object): if self.use_chi is not None: self.use_chi = True - def set_scatter_mgxs(self, scatter, nuclide='total', xs_type='macro'): + def set_scatter_mgxs(self, scatter, nuclide='total', xs_type='macro', + subdomain=None): """This method allows for an openmc.mgxs.ScatterMatrixXS to be used to set the scatter matrix cross section for this XSdata object. If the XSdata.order attribute has not yet been set, then @@ -856,6 +868,9 @@ class XSdata(object): xs_type: {'macro', 'micro'} Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + subdomain : iterable of int + If the MGXS contains a mesh domain type, the subdomain parameter + specifies which mesh cell (i.e., [i, j, k] index) to use. See also -------- @@ -868,7 +883,7 @@ class XSdata(object): check_value('energy_groups', scatter.energy_groups, [self.energy_groups]) check_value('domain_type', scatter.domain_type, - ['universe', 'cell', 'material']) + ['universe', 'cell', 'material', 'mesh']) if self.scatt_type != 'legendre': msg = 'Anisotropic scattering representations other than ' \ @@ -892,16 +907,16 @@ class XSdata(object): self.energy_groups.num_groups, self.energy_groups.num_groups)) for moment in range(self.num_orders): - self._scatter[moment, :, :] = scatter.get_xs(nuclides=nuclide, - xs_type=xs_type, - moment=moment) + self._scatter[moment, :, :] = \ + scatter.get_xs(nuclides=nuclide, xs_type=xs_type, + moment=moment, subdomains=subdomain) elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' raise ValueError(msg) def set_multiplicity_mgxs(self, nuscatter, scatter=None, nuclide='total', - xs_type='macro'): + xs_type='macro', subdomain=None): """This method allows for either the direct use of only an openmc.mgxs.MultiplicityMatrixXS OR an openmc.mgxs.NuScatterMatrixXS and openmc.mgxs.ScatterMatrixXS to be used to set the scattering @@ -926,6 +941,9 @@ class XSdata(object): xs_type: {'macro', 'micro'} Provide the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + subdomain : iterable of int + If the MGXS contains a mesh domain type, the subdomain parameter + specifies which mesh cell (i.e., [i, j, k] index) to use. See also -------- @@ -939,7 +957,7 @@ class XSdata(object): check_value('energy_groups', nuscatter.energy_groups, [self.energy_groups]) check_value('domain_type', nuscatter.domain_type, - ['universe', 'cell', 'material']) + ['universe', 'cell', 'material', 'mesh']) if scatter is not None: check_type('scatter', scatter, openmc.mgxs.ScatterMatrixXS) if isinstance(nuscatter, openmc.mgxs.MultiplicityMatrixXS): @@ -950,16 +968,18 @@ class XSdata(object): check_value('energy_groups', scatter.energy_groups, [self.energy_groups]) check_value('domain_type', scatter.domain_type, - ['universe', 'cell', 'material']) + ['universe', 'cell', 'material', 'mesh']) if self.representation is 'isotropic': nuscatt = nuscatter.get_xs(nuclides=nuclide, - xs_type=xs_type, moment=0) + xs_type=xs_type, moment=0, + subdomains=subdomain) if isinstance(nuscatter, openmc.mgxs.MultiplicityMatrixXS): self._multiplicity = nuscatt else: scatt = scatter.get_xs(nuclides=nuclide, - xs_type=xs_type, moment=0) + xs_type=xs_type, moment=0, + subdomains=subdomain) self._multiplicity = np.divide(nuscatt, scatt) elif self.representation is 'angle': msg = 'Angular-Dependent MGXS have not yet been implemented' @@ -978,18 +998,10 @@ class XSdata(object): subelement = ET.SubElement(element, 'kT') subelement.text = str(self._kT) - if self._zaid is not None: - subelement = ET.SubElement(element, 'zaid') - subelement.text = str(self._zaid) - if self._awr is not None: subelement = ET.SubElement(element, 'awr') subelement.text = str(self._awr) - if self._kT is not None: - subelement = ET.SubElement(element, 'kT') - subelement.text = str(self._kT) - if self._fissionable is not None: subelement = ET.SubElement(element, 'fissionable') subelement.text = str(self._fissionable) @@ -1085,6 +1097,10 @@ class MGXSLibrary(object): def energy_groups(self): return self._energy_groups + @property + def xsdatas(self): + return self._xsdatas + @inverse_velocities.setter def inverse_velocities(self, inverse_velocities): check_type('inverse_velocities', inverse_velocities, Iterable, Real) diff --git a/openmc/mixin.py b/openmc/mixin.py new file mode 100644 index 0000000000..dd97e89249 --- /dev/null +++ b/openmc/mixin.py @@ -0,0 +1,20 @@ +import numpy as np + + +class EqualityMixin(object): + """A Class which provides generic __eq__ and __ne__ functionality which + can easily be inherited by downstream classes. + """ + + def __eq__(self, other): + if isinstance(other, type(self)): + for key, value in self.__dict__.items(): + if not np.array_equal(value, other.__dict__.get(key)): + return False + else: + return False + + return True + + def __ne__(self, other): + return not self.__eq__(other) diff --git a/openmc/model/triso.py b/openmc/model/triso.py index 89e0d8aa76..5525ea559c 100644 --- a/openmc/model/triso.py +++ b/openmc/model/triso.py @@ -1,13 +1,26 @@ +from __future__ import division import copy -from collections import Iterable -from numbers import Real import warnings +import itertools +import random +from collections import Iterable, defaultdict +from numbers import Real +from random import uniform, gauss +from heapq import heappush, heappop +from math import pi, sin, cos, floor, log10, sqrt +from abc import ABCMeta, abstractproperty, abstractmethod import numpy as np +try: + import scipy.spatial + _SCIPY_AVAILABLE = True +except ImportError: + _SCIPY_AVAILABLE = False import openmc import openmc.checkvalue as cv + class TRISO(openmc.Cell): """Tristructural-isotopic (TRISO) micro fuel particle @@ -82,6 +95,377 @@ class TRISO(openmc.Cell): k_min:k_max+1, j_min:j_max+1, i_min:i_max+1])) +class _Domain(object): + """Container in which to pack particles. + + Parameters + ---------- + particle_radius : float + Radius of particles to be packed in container. + center : Iterable of float + Cartesian coordinates of the center of the container. Default is + [0., 0., 0.] + + Attributes + ---------- + particle_radius : float + Radius of particles to be packed in container. + center : list of float + Cartesian coordinates of the center of the container. Default is + [0., 0., 0.] + cell_length : list of float + Length in x-, y-, and z- directions of each cell in mesh overlaid on + domain. + limits : list of float + Minimum and maximum position in x-, y-, and z-directions where particle + center can be placed. + volume : float + Volume of the container. + + """ + + __metaclass__ = ABCMeta + + def __init__(self, particle_radius, center=[0., 0., 0.]): + self._cell_length = None + self._limits = None + + self.particle_radius = particle_radius + self.center = center + + @property + def particle_radius(self): + return self._particle_radius + + @property + def center(self): + return self._center + + @abstractproperty + def limits(self): + pass + + @abstractproperty + def cell_length(self): + pass + + @abstractproperty + def volume(self): + pass + + @particle_radius.setter + def particle_radius(self, particle_radius): + self._particle_radius = float(particle_radius) + self._limits = None + self._cell_length = None + + @center.setter + def center(self, center): + if np.asarray(center).size != 3: + raise ValueError('Unable to set domain center to {} since it must ' + 'be of length 3'.format(center)) + self._center = [float(x) for x in center] + self._limits = None + self._cell_length = None + + def mesh_cell(self, p): + """Calculate the index of the cell in a mesh overlaid on the domain in + which the given particle center falls. + + Parameters + ---------- + p : Iterable of float + Cartesian coordinates of particle center. + + Returns + ------- + tuple of int + Indices of mesh cell. + + """ + return tuple(int(p[i]/self.cell_length[i]) for i in range(3)) + + def nearby_mesh_cells(self, p): + """Calculates the indices of all cells in a mesh overlaid on the domain + within one diameter of the given particle. + + Parameters + ---------- + p : Iterable of float + Cartesian coordinates of particle center. + + Returns + ------- + list of tuple of int + Indices of mesh cells. + + """ + d = 2*self.particle_radius + r = [[a/self.cell_length[i] for a in [p[i]-d, p[i], p[i]+d]] + for i in range(3)] + return list(itertools.product(*({int(x) for x in y} for y in r))) + + @abstractmethod + def random_point(self): + """Generate Cartesian coordinates of center of a particle that is + contained entirely within the domain with uniform probability. + + Returns + ------- + list of float + Cartesian coordinates of particle center. + + """ + pass + + +class _CubicDomain(_Domain): + """Cubic container in which to pack particles. + + Parameters + ---------- + length : float + Length of each side of the cubic container. + particle_radius : float + Radius of particles to be packed in container. + center : Iterable of float + Cartesian coordinates of the center of the container. Default is + [0., 0., 0.] + + Attributes + ---------- + length : float + Length of each side of the cubic container. + particle_radius : float + Radius of particles to be packed in container. + center : list of float + Cartesian coordinates of the center of the container. Default is + [0., 0., 0.] + cell_length : list of float + Length in x-, y-, and z- directions of each cell in mesh overlaid on + domain. + limits : list of float + Minimum and maximum position in x-, y-, and z-directions where particle + center can be placed. + volume : float + Volume of the container. + + """ + + def __init__(self, length, particle_radius, center=[0., 0., 0.]): + super(_CubicDomain, self).__init__(particle_radius, center) + self.length = length + + @property + def length(self): + return self._length + + @property + def limits(self): + if self._limits is None: + xlim = self.length/2 - self.particle_radius + self._limits = [[x - xlim for x in self.center], + [x + xlim for x in self.center]] + return self._limits + + @property + def cell_length(self): + if self._cell_length is None: + mesh_length = [self.length, self.length, self.length] + self._cell_length = [x/int(x/(4*self.particle_radius)) + for x in mesh_length] + return self._cell_length + + @property + def volume(self): + return self.length**3 + + @length.setter + def length(self, length): + self._length = float(length) + self._limits = None + self._cell_length = None + + @limits.setter + def limits(self, limits): + self._limits = limits + + def random_point(self): + return [uniform(self.limits[0][0], self.limits[1][0]), + uniform(self.limits[0][1], self.limits[1][1]), + uniform(self.limits[0][2], self.limits[1][2])] + + +class _CylindricalDomain(_Domain): + """Cylindrical container in which to pack particles. + + Parameters + ---------- + length : float + Length along z-axis of the cylindrical container. + radius : float + Radius of the cylindrical container. + center : Iterable of float + Cartesian coordinates of the center of the container. Default is + [0., 0., 0.] + + Attributes + ---------- + length : float + Length along z-axis of the cylindrical container. + radius : float + Radius of the cylindrical container. + particle_radius : float + Radius of particles to be packed in container. + center : list of float + Cartesian coordinates of the center of the container. Default is + [0., 0., 0.] + cell_length : list of float + Length in x-, y-, and z- directions of each cell in mesh overlaid on + domain. + limits : list of float + Minimum and maximum position in x-, y-, and z-directions where particle + center can be placed. + volume : float + Volume of the container. + + """ + + def __init__(self, length, radius, particle_radius, center=[0., 0., 0.]): + super(_CylindricalDomain, self).__init__(particle_radius, center) + self.length = length + self.radius = radius + + @property + def length(self): + return self._length + + @property + def radius(self): + return self._radius + + @property + def limits(self): + if self._limits is None: + xlim = self.length/2 - self.particle_radius + rlim = self.radius - self.particle_radius + self._limits = [[self.center[0] - rlim, self.center[1] - rlim, + self.center[2] - xlim], + [self.center[0] + rlim, self.center[1] + rlim, + self.center[2] + xlim]] + return self._limits + + @property + def cell_length(self): + if self._cell_length is None: + mesh_length = [2*self.radius, 2*self.radius, self.length] + self._cell_length = [x/int(x/(4*self.particle_radius)) + for x in mesh_length] + return self._cell_length + + @property + def volume(self): + return self.length * pi * self.radius**2 + + @length.setter + def length(self, length): + self._length = float(length) + self._limits = None + self._cell_length = None + + @radius.setter + def radius(self, radius): + self._radius = float(radius) + self._limits = None + self._cell_length = None + + @limits.setter + def limits(self, limits): + self._limits = limits + + def random_point(self): + r = sqrt(uniform(0, (self.radius - self.particle_radius)**2)) + t = uniform(0, 2*pi) + return [r*cos(t) + self.center[0], r*sin(t) + self.center[1], + uniform(self.limits[0][2], self.limits[1][2])] + + +class _SphericalDomain(_Domain): + """Spherical container in which to pack particles. + + Parameters + ---------- + radius : float + Radius of the spherical container. + center : Iterable of float + Cartesian coordinates of the center of the container. Default is + [0., 0., 0.] + + Attributes + ---------- + radius : float + Radius of the spherical container. + particle_radius : float + Radius of particles to be packed in container. + center : list of float + Cartesian coordinates of the center of the container. Default is + [0., 0., 0.] + cell_length : list of float + Length in x-, y-, and z- directions of each cell in mesh overlaid on + domain. + limits : list of float + Minimum and maximum position in x-, y-, and z-directions where particle + center can be placed. + volume : float + Volume of the container. + + """ + + def __init__(self, radius, particle_radius, center=[0., 0., 0.]): + super(_SphericalDomain, self).__init__(particle_radius, center) + self.radius = radius + + @property + def radius(self): + return self._radius + + @property + def limits(self): + if self._limits is None: + rlim = self.radius - self.particle_radius + self._limits = [[x - rlim for x in self.center], + [x + rlim for x in self.center]] + return self._limits + + @property + def cell_length(self): + if self._cell_length is None: + mesh_length = [2*self.radius, 2*self.radius, 2*self.radius] + self._cell_length = [x/int(x/(4*self.particle_radius)) + for x in mesh_length] + return self._cell_length + + @property + def volume(self): + return 4/3 * pi * self.radius**3 + + @radius.setter + def radius(self, radius): + self._radius = float(radius) + self._limits = None + self._cell_length = None + + @limits.setter + def limits(self, limits): + self._limits = limits + + def random_point(self): + x = (gauss(0, 1), gauss(0, 1), gauss(0, 1)) + r = (uniform(0, (self.radius - self.particle_radius)**3)**(1/3) / + sqrt(x[0]**2 + x[1]**2 + x[2]**2)) + return [r*x[i] + self.center[i] for i in range(3)] + + def create_triso_lattice(trisos, lower_left, pitch, shape, background): """Create a lattice containing TRISO particles for optimized tracking. @@ -153,3 +537,503 @@ def create_triso_lattice(trisos, lower_left, pitch, shape, background): lattice.outer = openmc.Universe(cells=[background_cell]) return lattice + + +def _random_sequential_pack(domain, n_particles): + """Random sequential packing of particles within a container. + + Parameters + ---------- + domain : openmc.model._Domain + Container in which to pack particles. + n_particles : int + Number of particles to pack. + + Returns + ------ + numpy.ndarray + Cartesian coordinates of centers of particles. + + """ + + sqd = (2*domain.particle_radius)**2 + particles = [] + mesh = defaultdict(list) + + for i in range(n_particles): + # Randomly sample new center coordinates while there are any overlaps + while True: + p = domain.random_point() + idx = domain.mesh_cell(p) + if any((p[0]-q[0])**2 + (p[1]-q[1])**2 + (p[2]-q[2])**2 < sqd + for q in mesh[idx]): + continue + else: + break + particles.append(p) + + for idx in domain.nearby_mesh_cells(p): + mesh[idx].append(p) + + return np.array(particles) + + +def _close_random_pack(domain, particles, contraction_rate): + """Close random packing of particles using the Jodrey-Tory algorithm. + + Parameters + ---------- + domain : openmc.model._Domain + Container in which to pack particles. + particles : numpy.ndarray + Initial Cartesian coordinates of centers of particles. + contraction_rate : float + Contraction rate of outer diameter. + + """ + + def add_rod(d, i, j): + """Add a new rod to the priority queue. + + Parameters + ---------- + d : float + distance between centers of particles i and j. + i, j : int + Index of particles in particles array. + + """ + + rod = [d, i, j] + rods_map[i] = (j, rod) + rods_map[j] = (i, rod) + heappush(rods, rod) + + def remove_rod(i): + """Mark the rod containing particle i as removed. + + Parameters + ---------- + i : int + Index of particle in particles array. + + """ + + if i in rods_map: + j, rod = rods_map.pop(i) + del rods_map[j] + rod[1] = removed + rod[2] = removed + + def pop_rod(): + """Remove and return the shortest rod. + + Returns + ------- + d : float + distance between centers of particles i and j. + i, j : int + Index of particles in particles array. + + """ + + while rods: + d, i, j = heappop(rods) + if i != removed and j != removed: + del rods_map[i] + del rods_map[j] + return d, i, j + + def create_rod_list(): + """Generate sorted list of rods (distances between particle centers). + + Rods are arranged in a heap where each element contains the rod length + and the particle indices. A rod between particles p and q is only + included if the distance between p and q could not be changed by the + elimination of a greater overlap, i.e. q has no nearer neighbors than p. + + A mapping of particle ids to rods is maintained in 'rods_map'. Each key + in the dict is the id of a particle that is in the rod list, and the + value is the id of its nearest neighbor and the rod that contains them. + The dict is used to find rods in the priority queue and to mark removed + rods so rods can be "removed" without breaking the heap structure + invariant. + + """ + + # Create KD tree for quick nearest neighbor search + tree = scipy.spatial.cKDTree(particles) + + # Find distance to nearest neighbor and index of nearest neighbor for + # all particles + d, n = tree.query(particles, k=2) + d = d[:,1] + n = n[:,1] + + # Array of particle indices, indices of nearest neighbors, and + # distances to nearest neighbors + a = np.vstack((list(range(n.size)), n, d)).T + + # Sort along second column and swap first and second columns to create + # array of nearest neighbor indices, indices of particles they are + # nearest neighbors of, and distances between them + b = a[a[:,1].argsort()] + b[:,[0, 1]] = b[:,[1, 0]] + + # Find the intersection between 'a' and 'b': a list of particles who + # are each other's nearest neighbors and the distance between them + r = list({tuple(x) for x in a} & {tuple(x) for x in b}) + + # Remove duplicate rods and sort by distance + r = map(list, set([(x[2], int(min(x[0:2])), int(max(x[0:2]))) + for x in r])) + + # Clear priority queue and add rods + del rods[:] + rods_map.clear() + for d, i, j in r: + add_rod(d, i, j) + + # Inner diameter is set initially to the shortest center-to-center + # distance between any two particles + if rods: + inner_diameter[0] = rods[0][0] + + def update_mesh(i): + """Update which mesh cells the particle is in based on new particle + center coordinates. + + 'mesh'/'mesh_map' is a two way dictionary used to look up which + particles are located within one diameter of a given mesh cell and + which mesh cells a given particle center is within one diameter of. + This is used to speed up the nearest neighbor search. + + Parameters + ---------- + i : int + Index of particle in particles array. + + """ + + # Determine which mesh cells the particle is in and remove the + # particle id from those cells + for idx in mesh_map[i]: + mesh[idx].remove(i) + del mesh_map[i] + + # Determine which mesh cells are within one diameter of particle's + # center and add this particle to the list of particles in those cells + for idx in domain.nearby_mesh_cells(particles[i]): + mesh[idx].add(i) + mesh_map[i].add(idx) + + def reduce_outer_diameter(): + """Reduce the outer diameter so that at the (i+1)-st iteration it is: + + d_out^(i+1) = d_out^(i) - (1/2)^(j) * d_out0 * k / n, + + where k is the contraction rate, n is the number of particles, and + + j = floor(-log10(pf_out - pf_in)). + + """ + + inner_pf = (4/3 * pi * (inner_diameter[0]/2)**3 * n_particles / + domain.volume) + outer_pf = (4/3 * pi * (outer_diameter[0]/2)**3 * n_particles / + domain.volume) + + j = floor(-log10(outer_pf - inner_pf)) + outer_diameter[0] = (outer_diameter[0] - 0.5**j * contraction_rate * + initial_outer_diameter / n_particles) + + + def repel_particles(i, j, d): + """Move particles p and q apart according to the following + transformation (accounting for reflective boundary conditions on + domain): + + r_i^(n+1) = r_i^(n) + 1/2(d_out^(n+1) - d^(n)) + r_j^(n+1) = r_j^(n) - 1/2(d_out^(n+1) - d^(n)) + + Parameters + ---------- + i, j : int + Index of particles in particles array. + d : float + distance between centers of particles i and j. + + """ + + # Moving each particle distance 'r' away from the other along the line + # joining the particle centers will ensure their final distance is equal + # to the outer diameter + r = (outer_diameter[0] - d)/2 + + v = (particles[i] - particles[j])/d + particles[i] += r*v + particles[j] -= r*v + + # Apply reflective boundary conditions + particles[i] = particles[i].clip(domain.limits[0], domain.limits[1]) + particles[j] = particles[j].clip(domain.limits[0], domain.limits[1]) + + update_mesh(i) + update_mesh(j) + + def nearest(i): + """Find index of nearest neighbor of particle i. + + Parameters + ---------- + i : int + Index in particles array of particle for which to find nearest + neighbor. + + Returns + ------- + int + Index in particles array of nearest neighbor of i + float + distance between i and nearest neighbor. + + """ + + # Need the second nearest neighbor of i since the nearest neighbor + # will be itself. Using argpartition, the k-th nearest neighbor is + # placed at index k. + idx = list(mesh[domain.mesh_cell(particles[i])]) + dists = scipy.spatial.distance.cdist([particles[i]], particles[idx])[0] + if dists.size > 1: + j = dists.argpartition(1)[1] + return idx[j], dists[j] + else: + return None, None + + def update_rod_list(i, j): + """Update the rod list with the new nearest neighbors of particles i + and j since their overlap was eliminated. + + Parameters + ---------- + i, j : int + Index of particles in particles array. + + """ + + # If the nearest neighbor k of particle i has no nearer neighbors, + # remove the rod currently containing k from the rod list and add rod + # k-i, keeping the rod list sorted + k, d_ik = nearest(i) + if k and nearest(k)[0] == i: + remove_rod(k) + add_rod(d_ik, i, k) + l, d_jl = nearest(j) + if l and nearest(l)[0] == j: + remove_rod(l) + add_rod(d_jl, j, l) + + # Set inner diameter to the shortest distance between two particle + # centers + if rods: + inner_diameter[0] = rods[0][0] + + if not _SCIPY_AVAILABLE: + raise ImportError('SciPy must be installed to perform ' + 'close random packing.') + + n_particles = len(particles) + diameter = 2*domain.particle_radius + + # Flag for marking rods that have been removed from priority queue + removed = -1 + + # Outer diameter initially set to arbitrary value that yields pf of 1 + initial_outer_diameter = 2*(domain.volume/(n_particles*4/3*pi))**(1/3) + + # Inner and outer diameter of particles will change during packing + outer_diameter = [initial_outer_diameter] + inner_diameter = [0] + + rods = [] + rods_map = {} + mesh = defaultdict(set) + mesh_map = defaultdict(set) + + for i in range(n_particles): + for idx in domain.nearby_mesh_cells(particles[i]): + mesh[idx].add(i) + mesh_map[i].add(idx) + + while True: + create_rod_list() + if inner_diameter[0] >= diameter: + break + while True: + d, i, j = pop_rod() + reduce_outer_diameter() + repel_particles(i, j, d) + update_rod_list(i, j) + if inner_diameter[0] >= diameter or not rods: + break + + +def pack_trisos(radius, fill, domain_shape='cylinder', domain_length=None, + domain_radius=None, domain_center=[0., 0., 0.], + n_particles=None, packing_fraction=None, + initial_packing_fraction=0.3, contraction_rate=1/400, seed=1): + """Generate a random, non-overlapping configuration of TRISO particles + within a container. + + Parameters + ---------- + radius : float + Outer radius of TRISO particles. + fill : openmc.Universe + Universe which contains all layers of the TRISO particle. + domain_shape : {'cube', 'cylinder', or 'sphere'} + Geometry of the container in which the TRISO particles are packed. + domain_length : float + Length of the container (if cube or cylinder). + domain_radius : float + Radius of the container (if cylinder or sphere). + domain_center : Iterable of float + Cartesian coordinates of the center of the container. + n_particles : int + Number of TRISO particles to pack in the domain. Exactly one of + 'n_particles' and 'packing_fraction' should be specified -- the other + will be calculated. + packing_fraction : float + Packing fraction of particles. Exactly one of 'n_particles' and + 'packing_fraction' should be specified -- the other will be calculated. + initial_packing_fraction : float, optional + Packing fraction used to initialize the configuration of particles in + the domain. Default value is 0.3. It is not recommended to set the + initial packing fraction much higher than 0.3 as the random sequential + packing algorithm becomes prohibitively slow as it approaches its limit + (~0.38). + contraction_rate : float, optional + Contraction rate of outer diameter. This can affect the speed of the + close random packing algorithm. Default value is 1/400. + seed : int, optional + RNG seed. + + Returns + ------- + trisos : list of openmc.model.TRISO + List of TRISO particles in the domain. + + Notes + ----- + The particle configuration is generated using a combination of random + sequential packing (RSP) and close random packing (CRP). RSP performs + better than CRP for lower packing fractions (pf), but it becomes + prohibitively slow as it approaches its packing limit (~0.38). CRP can + achieve higher pf of up to ~0.64 and scales better with increasing pf. + + If the desired pf is below some threshold for which RSP will be faster than + CRP ('initial_packing_fraction'), only RSP is used. If a higher pf is + required, particles with a radius smaller than the desired final radius + (and therefore with a smaller pf) are initialized within the domain using + RSP. This initial configuration of particles is then used as a starting + point for CRP using Jodrey and Tory's algorithm [1]_. + + In RSP, particle centers are placed one by one at random, and placement + attempts for a particle are made until the particle is not overlapping any + others. This implementation of the algorithm uses a mesh over the domain + to speed up the nearest neighbor search by only searching for a particle's + neighbors within that mesh cell. + + In CRP, each particle is assigned two diameters, and inner and an outer, + which approach each other during the simulation. The inner diameter, + defined as the minimum center-to-center distance, is the true diameter of + the particles and defines the pf. At each iteration the worst overlap + between particles based on outer diameter is eliminated by moving the + particles apart along the line joining their centers. Iterations continue + until the two diameters converge or until the desired pf is reached. + + References + ---------- + .. [1] W. S. Jodrey and E. M. Tory, "Computer simulation of close random + packing of equal spheres", Phys. Rev. A 32 (1985) 2347-2351. + + """ + + # Check for valid container geometry and dimensions + if domain_shape not in ['cube', 'cylinder', 'sphere']: + raise ValueError('Unable to set domain_shape to "{}". Only "cube", ' + '"cylinder", and "sphere" are ' + 'supported."'.format(domain_shape)) + if not domain_length and domain_shape in ['cube', 'cylinder']: + raise ValueError('"domain_length" must be specified for {} domain ' + 'geometry '.format(domain_shape)) + if not domain_radius and domain_shape in ['cylinder', 'sphere']: + raise ValueError('"domain_radius" must be specified for {} domain ' + 'geometry '.format(domain_shape)) + + if domain_shape is 'cube': + domain = _CubicDomain(length=domain_length, particle_radius=radius, + center=domain_center) + elif domain_shape is 'cylinder': + domain = _CylindricalDomain(length=domain_length, radius=domain_radius, + particle_radius=radius, center=domain_center) + elif domain_shape is 'sphere': + domain = _SphericalDomain(radius=domain_radius, particle_radius=radius, + center=domain_center) + + # Calculate the packing fraction if the number of particles is specified; + # otherwise, calculate the number of particles from the packing fraction. + if ((n_particles is None and packing_fraction is None) or + (n_particles is not None and packing_fraction is not None)): + raise ValueError('Exactly one of "n_particles" and "packing_fraction" ' + 'must be specified.') + elif packing_fraction is None: + n_particles = int(n_particles) + packing_fraction = 4/3*pi*radius**3*n_particles / domain.volume + elif n_particles is None: + packing_fraction = float(packing_fraction) + n_particles = int(packing_fraction*domain.volume // (4/3*pi*radius**3)) + + # Check for valid packing fractions for each algorithm + if packing_fraction >= 0.64: + raise ValueError('Packing fraction of {} is greater than the ' + 'packing fraction limit for close random ' + 'packing (0.64)'.format(packing_fraction)) + if initial_packing_fraction >= 0.38: + raise ValueError('Initial packing fraction of {} is greater than the ' + 'packing fraction limit for random sequential' + 'packing (0.38)'.format(initial_packing_fraction)) + if initial_packing_fraction > packing_fraction: + initial_packing_fraction = packing_fraction + if packing_fraction > 0.3: + initial_packing_fraction = 0.3 + + random.seed(seed) + + # Calculate the particle radius used in the initial random sequential + # packing from the initial packing fraction + initial_radius = (3/4 * initial_packing_fraction * domain.volume / + (pi * n_particles))**(1/3) + domain.particle_radius = initial_radius + + # Recalculate the limits for the initial random sequential packing using + # the desired final particle radius to ensure particles are fully contained + # within the domain during the close random pack + domain.limits = [[x - initial_radius + radius for x in domain.limits[0]], + [x + initial_radius - radius for x in domain.limits[1]]] + + # Generate non-overlapping particles for an initial inner radius using + # random sequential packing algorithm + particles = _random_sequential_pack(domain, n_particles) + + # Use the particle configuration produced in random sequential packing as a + # starting point for close random pack with the desired final particle + # radius + if initial_packing_fraction != packing_fraction: + domain.particle_radius = radius + _close_random_pack(domain, particles, contraction_rate) + + trisos = [] + for p in particles: + trisos.append(TRISO(radius, fill, p)) + return trisos diff --git a/openmc/nuclide.py b/openmc/nuclide.py index 14609161fe..11c59e6879 100644 --- a/openmc/nuclide.py +++ b/openmc/nuclide.py @@ -1,5 +1,6 @@ from numbers import Integral import sys +import warnings from openmc.checkvalue import check_type @@ -14,42 +15,28 @@ class Nuclide(object): ---------- name : str Name of the nuclide, e.g. U235 - xs : str - Cross section identifier, e.g. 71c Attributes ---------- name : str Name of the nuclide, e.g. U235 - xs : str - Cross section identifier, e.g. 71c - zaid : int - 1000*(atomic number) + mass number. As an example, the zaid of U235 - would be 92235. scattering : 'data' or 'iso-in-lab' or None The type of angular scattering distribution to use """ - def __init__(self, name='', xs=None): + def __init__(self, name=''): # Initialize class attributes self._name = '' - self._xs = None - self._zaid = None self._scattering = None # Set the Material class attributes self.name = name - if xs is not None: - self.xs = xs - def __eq__(self, other): if isinstance(other, Nuclide): if self.name != other.name: return False - elif self.xs != other.xs: - return False else: return True elif isinstance(other, basestring) and other == self.name: @@ -71,9 +58,6 @@ class Nuclide(object): def __repr__(self): string = 'Nuclide - {0}\n'.format(self._name) - string += '{0: <16}{1}{2}\n'.format('\tXS', '=\t', self.xs) - if self.zaid is not None: - string += '{0: <16}{1}{2}\n'.format('\tZAID', '=\t', self.zaid) if self.scattering is not None: string += '{0: <16}{1}{2}\n'.format('\tscattering', '=\t', self.scattering) @@ -83,14 +67,6 @@ class Nuclide(object): def name(self): return self._name - @property - def xs(self): - return self._xs - - @property - def zaid(self): - return self._zaid - @property def scattering(self): return self._scattering @@ -100,19 +76,18 @@ class Nuclide(object): check_type('name', name, basestring) self._name = name - @xs.setter - def xs(self, xs): - check_type('cross-section identifier', xs, basestring) - self._xs = xs + if '-' in name: + self._name = name.replace('-', '') + self._name = self._name.replace('Nat', '0') + if self._name.endswith('m'): + self._name = self._name[:-1] + '_m1' - @zaid.setter - def zaid(self, zaid): - check_type('zaid', zaid, Integral) - self._zaid = zaid + msg = 'OpenMC nuclides follow the GND naming convention. Nuclide ' \ + '"{}" is being renamed as "{}".'.format(name, self._name) + warnings.warn(msg) @scattering.setter def scattering(self, scattering): - if not scattering in ['data', 'iso-in-lab']: msg = 'Unable to set scattering for Nuclide to {0} ' \ 'which is not "data" or "iso-in-lab"'.format(scattering) diff --git a/openmc/opencg_compatible.py b/openmc/opencg_compatible.py index 93a257f465..8983f5fa05 100644 --- a/openmc/opencg_compatible.py +++ b/openmc/opencg_compatible.py @@ -689,13 +689,14 @@ def get_openmc_cell(opencg_cell): translation = np.asarray(opencg_cell.translation, dtype=np.float64) openmc_cell.translation = translation - surfaces = [] - operators = [] - for surface, halfspace in opencg_cell.surfaces.values(): - surfaces.append(get_openmc_surface(surface)) - operators.append(operator.neg if halfspace == -1 else operator.pos) - openmc_cell.region = openmc.Intersection( - *[op(s) for op, s in zip(operators, surfaces)]) + if opencg_cell.surfaces: + surfaces = [] + operators = [] + for surface, halfspace in opencg_cell.surfaces.values(): + surfaces.append(get_openmc_surface(surface)) + operators.append(operator.neg if halfspace == -1 else operator.pos) + openmc_cell.region = openmc.Intersection( + *[op(s) for op, s in zip(operators, surfaces)]) # Add the OpenMC Cell to the global collection of all OpenMC Cells OPENMC_CELLS[cell_id] = openmc_cell @@ -911,6 +912,7 @@ def get_openmc_lattice(opencg_lattice): if lattice_id in OPENMC_LATTICES: return OPENMC_LATTICES[lattice_id] + name = opencg_lattice.name dimension = opencg_lattice.dimension width = opencg_lattice.width offset = opencg_lattice.offset @@ -941,7 +943,7 @@ def get_openmc_lattice(opencg_lattice): ((np.array(width, dtype=np.float64) * np.array(dimension, dtype=np.float64))) / -2.0 - openmc_lattice = openmc.RectLattice(lattice_id=lattice_id) + openmc_lattice = openmc.RectLattice(lattice_id=lattice_id, name=name) openmc_lattice.pitch = width openmc_lattice.universes = universe_array openmc_lattice.lower_left = lower_left @@ -995,13 +997,17 @@ def get_opencg_geometry(openmc_geometry): return opencg_geometry -def get_openmc_geometry(opencg_geometry): +def get_openmc_geometry(opencg_geometry, compatible=False): """Return an OpenMC geometry corresponding to an OpenCG geometry. Parameters ---------- opencg_geometry : opencg.Geometry OpenCG geometry + compatible : bool + Whether the OpenCG geometry is compatible with OpenMC's geometric + primitives. This should be set to False if the OpenCG geometry + uses SquarePrism surfaces. False by default. Returns ------- @@ -1017,9 +1023,6 @@ def get_openmc_geometry(opencg_geometry): opencg_geometry.assign_auto_ids() opencg_geometry = copy.deepcopy(opencg_geometry) - # Update Cell bounding boxes in Geometry - opencg_geometry.update_bounding_boxes() - # Clear dictionaries and auto-generated ID OPENMC_SURFACES.clear() OPENCG_SURFACES.clear() @@ -1031,12 +1034,13 @@ def get_openmc_geometry(opencg_geometry): OPENCG_LATTICES.clear() # Make the entire geometry "compatible" before assigning auto IDs - universes = opencg_geometry.get_all_universes() - for universe in universes.values(): - if not isinstance(universe, opencg.Lattice): - make_opencg_cells_compatible(universe) + if not compatible: + universes = opencg_geometry.get_all_universes() + for universe in universes.values(): + if not isinstance(universe, opencg.Lattice): + make_opencg_cells_compatible(universe) - opencg_geometry.assign_auto_ids() + opencg_geometry.assign_auto_ids() opencg_root_universe = opencg_geometry.root_universe openmc_root_universe = get_openmc_universe(opencg_root_universe) diff --git a/openmc/plots.py b/openmc/plots.py index 73b51da5e8..cc5c0d44b3 100644 --- a/openmc/plots.py +++ b/openmc/plots.py @@ -67,6 +67,11 @@ class Plot(object): col_spec : dict Dictionary indicating that certain cells/materials (keys) should be colored with a specific RGB (values) + level : int + Universe depth to plot at + meshlines : dict + Dictionary defining type, id, linewidth and color of a regular mesh + to be plotted on top of a plot """ @@ -81,10 +86,12 @@ class Plot(object): self._color = 'cell' self._type = 'slice' self._basis = 'xy' - self._background = [0, 0, 0] + self._background = None self._mask_components = None self._mask_background = None self._col_spec = None + self._level = None + self._meshlines = None @property def id(self): @@ -138,6 +145,14 @@ class Plot(object): def col_spec(self): return self._col_spec + @property + def level(self): + return self._level + + @property + def meshlines(self): + return self._meshlines + @id.setter def id(self, plot_id): if plot_id is None: @@ -231,9 +246,9 @@ class Plot(object): @mask_components.setter def mask_components(self, mask_components): - cv.check_type('plot mask_components', mask_components, Iterable, Integral) + cv.check_type('plot mask components', mask_components, Iterable, Integral) for component in mask_components: - cv.check_greater_than('plot mask_components', component, 0, True) + cv.check_greater_than('plot mask components', component, 0, True) self._mask_components = mask_components @mask_background.setter @@ -245,6 +260,45 @@ class Plot(object): cv.check_less_than('plot mask background', rgb, 256) self._mask_background = mask_background + @level.setter + def level(self, plot_level): + cv.check_type('plot level', plot_level, Integral) + cv.check_greater_than('plot level', plot_level, 0, equality=True) + self._level = plot_level + + @meshlines.setter + def meshlines(self, meshlines): + cv.check_type('plot meshlines', meshlines, dict) + if 'type' not in meshlines: + msg = 'Unable to set on plot the meshlines "{0}" which ' \ + 'does not have a "type" key'.format(meshlines) + raise ValueError(msg) + + elif meshlines['type'] not in ['tally', 'entropy', 'ufs', 'cmfd']: + msg = 'Unable to set the meshlines with ' \ + 'type "{0}"'.format(meshlines['type']) + raise ValueError(msg) + + if 'id' in meshlines: + cv.check_type('plot meshlines id', meshlines['id'], Integral) + cv.check_greater_than('plot meshlines id', meshlines['id'], 0, + equality=True) + + if 'linewidth' in meshlines: + cv.check_type('plot mesh linewidth', meshlines['linewidth'], Integral) + cv.check_greater_than('plot mesh linewidth', meshlines['linewidth'], + 0, equality=True) + + if 'color' in meshlines: + cv.check_type('plot meshlines color', meshlines['color'], Iterable, + Integral) + cv.check_length('plot meshlines color', meshlines['color'], 3) + for rgb in meshlines['color']: + cv.check_greater_than('plot meshlines color', rgb, 0, True) + cv.check_less_than('plot meshlines color', rgb, 256) + + self._meshlines = meshlines + def __repr__(self): string = 'Plot\n' string += '{0: <16}{1}{2}\n'.format('\tID', '=\t', self._id) @@ -256,11 +310,16 @@ class Plot(object): string += '{0: <16}{1}{2}\n'.format('\tOrigin', '=\t', self._origin) string += '{0: <16}{1}{2}\n'.format('\tPixels', '=\t', self._origin) string += '{0: <16}{1}{2}\n'.format('\tColor', '=\t', self._color) - string += '{0: <16}{1}{2}\n'.format('\tMask', '=\t', + string += '{0: <16}{1}{2}\n'.format('\tBackground', '=\t', + self._background) + string += '{0: <16}{1}{2}\n'.format('\tMask components', '=\t', self._mask_components) - string += '{0: <16}{1}{2}\n'.format('\tMask', '=\t', + string += '{0: <16}{1}{2}\n'.format('\tMask background', '=\t', self._mask_background) string += '{0: <16}{1}{2}\n'.format('\tCol Spec', '=\t', self._col_spec) + string += '{0: <16}{1}{2}\n'.format('\tLevel', '=\t', self._level) + string += '{0: <16}{1}{2}\n'.format('\tMeshlines', '=\t', + self._meshlines) return string def colorize(self, geometry, seed=1): @@ -382,7 +441,7 @@ class Plot(object): subelement = ET.SubElement(element, "pixels") subelement.text = ' '.join(map(str, self._pixels)) - if self._mask_background is not None: + if self._background is not None: subelement = ET.SubElement(element, "background") subelement.text = ' '.join(map(str, self._background)) @@ -400,6 +459,21 @@ class Plot(object): subelement.set("background", ' '.join(map( str, self._mask_background))) + if self._level is not None: + subelement = ET.SubElement(element, "level") + subelement.text = str(self._level) + + if self._meshlines is not None: + subelement = ET.SubElement(element, "meshlines") + subelement.set("meshtype", self._meshlines['type']) + if self._meshlines['id'] is not None: + subelement.set("id", str(self._meshlines['id'])) + if self._meshlines['linewidth'] is not None: + subelement.set("linewidth", str(self._meshlines['linewidth'])) + if self._meshlines['color'] is not None: + subelement.set("color", ' '.join(map( + str, self._meshlines['color']))) + return element diff --git a/openmc/settings.py b/openmc/settings.py index b9a93bd114..c7d6debb9e 100644 --- a/openmc/settings.py +++ b/openmc/settings.py @@ -1,4 +1,4 @@ -from collections import Iterable +from collections import Iterable, MutableSequence, Mapping from numbers import Real, Integral import warnings from xml.etree import ElementTree as ET @@ -7,10 +7,8 @@ import sys import numpy as np from openmc.clean_xml import clean_xml_indentation -from openmc.checkvalue import (check_type, check_length, check_value, - check_greater_than, check_less_than) -from openmc import Nuclide -from openmc.source import Source +import openmc.checkvalue as cv +from openmc import Nuclide, VolumeCalculation, Source if sys.version_info[0] >= 3: basestring = str @@ -80,8 +78,6 @@ class Settings(object): cross section library. If it is not set, the :envvar:`OPENMC_MULTIPOLE_LIBRARY` environment variable will be used. A multipole library is optional. - energy_grid : {'nuclide', 'logarithm', 'material-union'} - Set the method used to search energy grids. energy_mode : {'continuous-energy', 'multi-group'} Set whether the calculation should be continuous-energy or multi-group. max_order : int @@ -105,6 +101,14 @@ class Settings(object): Coordinates of the lower-left point of the Shannon entropy mesh entropy_upper_right : tuple or list Coordinates of the upper-right point of the Shannon entropy mesh + temperature : dict + Defines a default temperature and method for treating intermediate + temperatures at which nuclear data doesn't exist. Accepted keys are + 'default', 'method', and 'tolerance'. The value for 'default' should be + a float representing the default temperature in Kelvin. The value for + 'method' should be 'nearest' or 'multipole'. If the method is + 'nearest', 'tolerance' indicates a range of temperature within which + cross sections may be used. trigger_active : bool Indicate whether tally triggers are used trigger_max_batches : int @@ -132,11 +136,10 @@ class Settings(object): Coordinates of the lower-left point of the UFS mesh ufs_upper_right : tuple or list Coordinates of the upper-right point of the UFS mesh - use_windowed_multipole : bool - Whether or not windowed multipole can be used to evaluate resolved - resonance cross sections. resonance_scattering : ResonanceScattering or iterable of ResonanceScattering The elastic scattering model to use for resonant isotopes + volume_calculations : VolumeCalculation or iterable of VolumeCalculation + Stochastic volume calculation specifications """ @@ -155,12 +158,11 @@ class Settings(object): self._max_order = None # Source subelement - self._source = None + self._source = cv.CheckedList(Source, 'source distributions') self._confidence_intervals = None self._cross_sections = None self._multipole_library = None - self._energy_grid = None self._ptables = None self._run_cmfd = None self._seed = None @@ -197,6 +199,8 @@ class Settings(object): self._trace = None self._track = None + self._temperature = {} + # Cutoff subelement self._weight = None self._weight_avg = None @@ -216,10 +220,11 @@ class Settings(object): self._settings_file = ET.Element("settings") self._run_mode_subelement = None - self._source_element = None - self._multipole_active = None - self._resonance_scattering = None + self._resonance_scattering = cv.CheckedList( + ResonanceScattering, 'resonance scattering models') + self._volume_calculations = cv.CheckedList( + VolumeCalculation, 'volume calculations') @property def run_mode(self): @@ -269,10 +274,6 @@ class Settings(object): def multipole_library(self): return self._multipole_library - @property - def energy_grid(self): - return self._energy_grid - @property def ptables(self): return self._ptables @@ -361,6 +362,10 @@ class Settings(object): def verbosity(self): return self._verbosity + @property + def temperature(self): + return self._temperature + @property def trace(self): return self._trace @@ -413,14 +418,14 @@ class Settings(object): def dd_count_interactions(self): return self._dd_count_interactions - @property - def use_windowed_multipole(self): - return self._multipole_active - @property def resonance_scattering(self): return self._resonance_scattering + @property + def volume_calculations(self): + return self._volume_calculations + @run_mode.setter def run_mode(self, run_mode): if run_mode not in ['eigenvalue', 'fixed source']: @@ -431,26 +436,26 @@ class Settings(object): @batches.setter def batches(self, batches): - check_type('batches', batches, Integral) - check_greater_than('batches', batches, 0) + cv.check_type('batches', batches, Integral) + cv.check_greater_than('batches', batches, 0) self._batches = batches @generations_per_batch.setter def generations_per_batch(self, generations_per_batch): - check_type('generations per patch', generations_per_batch, Integral) - check_greater_than('generations per batch', generations_per_batch, 0) + cv.check_type('generations per patch', generations_per_batch, Integral) + cv.check_greater_than('generations per batch', generations_per_batch, 0) self._generations_per_batch = generations_per_batch @inactive.setter def inactive(self, inactive): - check_type('inactive batches', inactive, Integral) - check_greater_than('inactive batches', inactive, 0, True) + cv.check_type('inactive batches', inactive, Integral) + cv.check_greater_than('inactive batches', inactive, 0, True) self._inactive = inactive @particles.setter def particles(self, particles): - check_type('particles', particles, Integral) - check_greater_than('particles', particles, 0) + cv.check_type('particles', particles, Integral) + cv.check_greater_than('particles', particles, 0) self._particles = particles @keff_trigger.setter @@ -484,23 +489,21 @@ class Settings(object): @energy_mode.setter def energy_mode(self, energy_mode): - check_value('energy mode', energy_mode, + cv.check_value('energy mode', energy_mode, ['continuous-energy', 'multi-group']) self._energy_mode = energy_mode @max_order.setter def max_order(self, max_order): - check_type('maximum scattering order', max_order, Integral) - check_greater_than('maximum scattering order', max_order, 0, True) + cv.check_type('maximum scattering order', max_order, Integral) + cv.check_greater_than('maximum scattering order', max_order, 0, True) self._max_order = max_order @source.setter def source(self, source): - if isinstance(source, Source): - self._source = [source,] - else: - check_type('source distribution', source, Iterable, Source) - self._source = source + if not isinstance(source, MutableSequence): + source = [source] + self._source = cv.CheckedList(Source, 'source distributions', source) @output.setter def output(self, output): @@ -525,197 +528,206 @@ class Settings(object): @output_path.setter def output_path(self, output_path): - check_type('output path', output_path, basestring) + cv.check_type('output path', output_path, basestring) self._output_path = output_path @verbosity.setter def verbosity(self, verbosity): - check_type('verbosity', verbosity, Integral) - check_greater_than('verbosity', verbosity, 1, True) - check_less_than('verbosity', verbosity, 10, True) + cv.check_type('verbosity', verbosity, Integral) + cv.check_greater_than('verbosity', verbosity, 1, True) + cv.check_less_than('verbosity', verbosity, 10, True) self._verbosity = verbosity @statepoint_batches.setter def statepoint_batches(self, batches): - check_type('statepoint batches', batches, Iterable, Integral) + cv.check_type('statepoint batches', batches, Iterable, Integral) for batch in batches: - check_greater_than('statepoint batch', batch, 0) + cv.check_greater_than('statepoint batch', batch, 0) self._statepoint_batches = batches @statepoint_interval.setter def statepoint_interval(self, interval): - check_type('statepoint interval', interval, Integral) + cv.check_type('statepoint interval', interval, Integral) self._statepoint_interval = interval @sourcepoint_batches.setter def sourcepoint_batches(self, batches): - check_type('sourcepoint batches', batches, Iterable, Integral) + cv.check_type('sourcepoint batches', batches, Iterable, Integral) for batch in batches: - check_greater_than('sourcepoint batch', batch, 0) + cv.check_greater_than('sourcepoint batch', batch, 0) self._sourcepoint_batches = batches @sourcepoint_interval.setter def sourcepoint_interval(self, interval): - check_type('sourcepoint interval', interval, Integral) + cv.check_type('sourcepoint interval', interval, Integral) self._sourcepoint_interval = interval @sourcepoint_separate.setter def sourcepoint_separate(self, source_separate): - check_type('sourcepoint separate', source_separate, bool) + cv.check_type('sourcepoint separate', source_separate, bool) self._sourcepoint_separate = source_separate @sourcepoint_write.setter def sourcepoint_write(self, source_write): - check_type('sourcepoint write', source_write, bool) + cv.check_type('sourcepoint write', source_write, bool) self._sourcepoint_write = source_write @sourcepoint_overwrite.setter def sourcepoint_overwrite(self, source_overwrite): - check_type('sourcepoint overwrite', source_overwrite, bool) + cv.check_type('sourcepoint overwrite', source_overwrite, bool) self._sourcepoint_overwrite = source_overwrite @confidence_intervals.setter def confidence_intervals(self, confidence_intervals): - check_type('confidence interval', confidence_intervals, bool) + cv.check_type('confidence interval', confidence_intervals, bool) self._confidence_intervals = confidence_intervals @cross_sections.setter def cross_sections(self, cross_sections): - check_type('cross sections', cross_sections, basestring) + cv.check_type('cross sections', cross_sections, basestring) self._cross_sections = cross_sections @multipole_library.setter def multipole_library(self, multipole_library): - check_type('cross sections', multipole_library, basestring) + cv.check_type('cross sections', multipole_library, basestring) self._multipole_library = multipole_library - @energy_grid.setter - def energy_grid(self, energy_grid): - check_value('energy grid', energy_grid, - ['nuclide', 'logarithm', 'material-union']) - self._energy_grid = energy_grid - @ptables.setter def ptables(self, ptables): - check_type('probability tables', ptables, bool) + cv.check_type('probability tables', ptables, bool) self._ptables = ptables @run_cmfd.setter def run_cmfd(self, run_cmfd): - check_type('run_cmfd', run_cmfd, bool) + cv.check_type('run_cmfd', run_cmfd, bool) self._run_cmfd = run_cmfd @seed.setter def seed(self, seed): - check_type('random number generator seed', seed, Integral) - check_greater_than('random number generator seed', seed, 0) + cv.check_type('random number generator seed', seed, Integral) + cv.check_greater_than('random number generator seed', seed, 0) self._seed = seed @survival_biasing.setter def survival_biasing(self, survival_biasing): - check_type('survival biasing', survival_biasing, bool) + cv.check_type('survival biasing', survival_biasing, bool) self._survival_biasing = survival_biasing @weight.setter def weight(self, weight): - check_type('weight cutoff', weight, Real) - check_greater_than('weight cutoff', weight, 0.0) + cv.check_type('weight cutoff', weight, Real) + cv.check_greater_than('weight cutoff', weight, 0.0) self._weight = weight @weight_avg.setter def weight_avg(self, weight_avg): - check_type('average survival weight', weight_avg, Real) - check_greater_than('average survival weight', weight_avg, 0.0) + cv.check_type('average survival weight', weight_avg, Real) + cv.check_greater_than('average survival weight', weight_avg, 0.0) self._weight_avg = weight_avg @entropy_dimension.setter def entropy_dimension(self, dimension): - check_type('entropy mesh dimension', dimension, Iterable, Integral) - check_length('entropy mesh dimension', dimension, 3) + cv.check_type('entropy mesh dimension', dimension, Iterable, Integral) + cv.check_length('entropy mesh dimension', dimension, 3) self._entropy_dimension = dimension @entropy_lower_left.setter def entropy_lower_left(self, lower_left): - check_type('entropy mesh lower left corner', lower_left, + cv.check_type('entropy mesh lower left corner', lower_left, Iterable, Real) - check_length('entropy mesh lower left corner', lower_left, 3) + cv.check_length('entropy mesh lower left corner', lower_left, 3) self._entropy_lower_left = lower_left @entropy_upper_right.setter def entropy_upper_right(self, upper_right): - check_type('entropy mesh upper right corner', upper_right, + cv.check_type('entropy mesh upper right corner', upper_right, Iterable, Real) - check_length('entropy mesh upper right corner', upper_right, 3) + cv.check_length('entropy mesh upper right corner', upper_right, 3) self._entropy_upper_right = upper_right @trigger_active.setter def trigger_active(self, trigger_active): - check_type('trigger active', trigger_active, bool) + cv.check_type('trigger active', trigger_active, bool) self._trigger_active = trigger_active @trigger_max_batches.setter def trigger_max_batches(self, trigger_max_batches): - check_type('trigger maximum batches', trigger_max_batches, Integral) - check_greater_than('trigger maximum batches', trigger_max_batches, 0) + cv.check_type('trigger maximum batches', trigger_max_batches, Integral) + cv.check_greater_than('trigger maximum batches', trigger_max_batches, 0) self._trigger_max_batches = trigger_max_batches @trigger_batch_interval.setter def trigger_batch_interval(self, trigger_batch_interval): - check_type('trigger batch interval', trigger_batch_interval, Integral) - check_greater_than('trigger batch interval', trigger_batch_interval, 0) + cv.check_type('trigger batch interval', trigger_batch_interval, Integral) + cv.check_greater_than('trigger batch interval', trigger_batch_interval, 0) self._trigger_batch_interval = trigger_batch_interval @no_reduce.setter def no_reduce(self, no_reduce): - check_type('no reduction option', no_reduce, bool) + cv.check_type('no reduction option', no_reduce, bool) self._no_reduce = no_reduce + @temperature.setter + def temperature(self, temperature): + cv.check_type('temperature settings', temperature, Mapping) + for key, value in temperature.items(): + cv.check_value('temperature key', key, + ['default', 'method', 'tolerance']) + if key == 'default': + cv.check_type('default temperature', value, Real) + elif key == 'method': + cv.check_value('temperature method', value, + ['nearest', 'interpolation', 'multipole']) + elif key == 'tolerance': + cv.check_type('temperature tolerance', value, Real) + self._temperature = temperature + @threads.setter def threads(self, threads): - check_type('number of threads', threads, Integral) - check_greater_than('number of threads', threads, 0) + cv.check_type('number of threads', threads, Integral) + cv.check_greater_than('number of threads', threads, 0) self._threads = threads @trace.setter def trace(self, trace): - check_type('trace', trace, Iterable, Integral) - check_length('trace', trace, 3) - check_greater_than('trace batch', trace[0], 0) - check_greater_than('trace generation', trace[1], 0) - check_greater_than('trace particle', trace[2], 0) + cv.check_type('trace', trace, Iterable, Integral) + cv.check_length('trace', trace, 3) + cv.check_greater_than('trace batch', trace[0], 0) + cv.check_greater_than('trace generation', trace[1], 0) + cv.check_greater_than('trace particle', trace[2], 0) self._trace = trace @track.setter def track(self, track): - check_type('track', track, Iterable, Integral) + cv.check_type('track', track, Iterable, Integral) if len(track) % 3 != 0: msg = 'Unable to set the track to "{0}" since its length is ' \ 'not a multiple of 3'.format(track) raise ValueError(msg) for t in zip(track[::3], track[1::3], track[2::3]): - check_greater_than('track batch', t[0], 0) - check_greater_than('track generation', t[0], 0) - check_greater_than('track particle', t[0], 0) + cv.check_greater_than('track batch', t[0], 0) + cv.check_greater_than('track generation', t[0], 0) + cv.check_greater_than('track particle', t[0], 0) self._track = track @ufs_dimension.setter def ufs_dimension(self, dimension): - check_type('UFS mesh dimension', dimension, Iterable, Integral) - check_length('UFS mesh dimension', dimension, 3) + cv.check_type('UFS mesh dimension', dimension, Iterable, Integral) + cv.check_length('UFS mesh dimension', dimension, 3) for dim in dimension: - check_greater_than('UFS mesh dimension', dim, 1, True) + cv.check_greater_than('UFS mesh dimension', dim, 1, True) self._ufs_dimension = dimension @ufs_lower_left.setter def ufs_lower_left(self, lower_left): - check_type('UFS mesh lower left corner', lower_left, Iterable, Real) - check_length('UFS mesh lower left corner', lower_left, 3) + cv.check_type('UFS mesh lower left corner', lower_left, Iterable, Real) + cv.check_length('UFS mesh lower left corner', lower_left, 3) self._ufs_lower_left = lower_left @ufs_upper_right.setter def ufs_upper_right(self, upper_right): - check_type('UFS mesh upper right corner', upper_right, Iterable, Real) - check_length('UFS mesh upper right corner', upper_right, 3) + cv.check_type('UFS mesh upper right corner', upper_right, Iterable, Real) + cv.check_length('UFS mesh upper right corner', upper_right, 3) self._ufs_upper_right = upper_right @dd_mesh_dimension.setter @@ -724,8 +736,8 @@ class Settings(object): warnings.warn('This feature is not yet implemented in a release ' 'version of openmc') - check_type('DD mesh dimension', dimension, Iterable, Integral) - check_length('DD mesh dimension', dimension, 3) + cv.check_type('DD mesh dimension', dimension, Iterable, Integral) + cv.check_length('DD mesh dimension', dimension, 3) self._dd_mesh_dimension = dimension @@ -735,8 +747,8 @@ class Settings(object): warnings.warn('This feature is not yet implemented in a release ' 'version of openmc') - check_type('DD mesh lower left corner', lower_left, Iterable, Real) - check_length('DD mesh lower left corner', lower_left, 3) + cv.check_type('DD mesh lower left corner', lower_left, Iterable, Real) + cv.check_length('DD mesh lower left corner', lower_left, 3) self._dd_mesh_lower_left = lower_left @@ -746,8 +758,8 @@ class Settings(object): warnings.warn('This feature is not yet implemented in a release ' 'version of openmc') - check_type('DD mesh upper right corner', upper_right, Iterable, Real) - check_length('DD mesh upper right corner', upper_right, 3) + cv.check_type('DD mesh upper right corner', upper_right, Iterable, Real) + cv.check_length('DD mesh upper right corner', upper_right, 3) self._dd_mesh_upper_right = upper_right @@ -757,7 +769,7 @@ class Settings(object): warnings.warn('This feature is not yet implemented in a release ' 'version of openmc') - check_type('DD nodemap', nodemap, Iterable) + cv.check_type('DD nodemap', nodemap, Iterable) nodemap = np.array(nodemap).flatten() @@ -782,7 +794,7 @@ class Settings(object): warnings.warn('This feature is not yet implemented in a release ' 'version of openmc') - check_type('DD allow leakage', allow, bool) + cv.check_type('DD allow leakage', allow, bool) self._dd_allow_leakage = allow @@ -793,24 +805,23 @@ class Settings(object): warnings.warn('This feature is not yet implemented in a release ' 'version of openmc') - check_type('DD count interactions', interactions, bool) + cv.check_type('DD count interactions', interactions, bool) self._dd_count_interactions = interactions - @use_windowed_multipole.setter - def use_windowed_multipole(self, active): - check_type('use_windowed_multipole', active, bool) - self._multipole_active = active - @resonance_scattering.setter def resonance_scattering(self, res): - if isinstance(res, Iterable): - check_type('resonance_scattering', res, Iterable, - ResonanceScattering) - self._resonance_scattering = res - else: - check_type('resonance_scattering', res, ResonanceScattering) - self._resonance_scattering = [res] + if not isinstance(res, MutableSequence): + res = [res] + self._resonance_scattering = cv.CheckedList( + ResonanceScattering, 'resonance scattering models', res) + + @volume_calculations.setter + def volume_calculations(self, vol_calcs): + if not isinstance(vol_calcs, MutableSequence): + vol_calcs = [vol_calcs] + self._volume_calculations = cv.CheckedList( + VolumeCalculation, 'stochastic volume calculations', vol_calcs) def _create_run_mode_subelement(self): @@ -869,9 +880,12 @@ class Settings(object): element.text = str(self._max_order) def _create_source_subelement(self): - if self.source is not None: - for source in self.source: - self._settings_file.append(source.to_xml()) + for source in self.source: + self._settings_file.append(source.to_xml_element()) + + def _create_volume_calcs_subelement(self): + for calc in self.volume_calculations: + self._settings_file.append(calc.to_xml_element()) def _create_output_subelement(self): if self._output is not None: @@ -952,11 +966,6 @@ class Settings(object): element = ET.SubElement(self._settings_file, "multipole_library") element.text = str(self._multipole_library) - def _create_energy_grid_subelement(self): - if self._energy_grid is not None: - element = ET.SubElement(self._settings_file, "energy_grid") - element.text = str(self._energy_grid) - def _create_ptables_subelement(self): if self._ptables is not None: element = ET.SubElement(self._settings_file, "ptables") @@ -1039,6 +1048,13 @@ class Settings(object): element = ET.SubElement(self._settings_file, "no_reduce") element.text = str(self._no_reduce).lower() + def _create_temperature_subelements(self): + if self.temperature: + for key, value in self.temperature.items(): + element = ET.SubElement(self._settings_file, + "temperature_{}".format(key)) + element.text = str(value) + def _create_threads_subelement(self): if self._threads is not None: element = ET.SubElement(self._settings_file, "threads") @@ -1096,24 +1112,11 @@ class Settings(object): subelement = ET.SubElement(element, "count_interactions") subelement.text = str(self._dd_count_interactions).lower() - def _create_use_multipole_subelement(self): - if self._multipole_active is not None: - element = ET.SubElement(self._settings_file, - "use_windowed_multipole") - element.text = str(self._multipole_active) - - def _create_resonance_scattering_element(self): - if self.resonance_scattering is None: - return - - element = ET.SubElement(self._settings_file, "resonance_scattering") - - for r in self.resonance_scattering: - if r.nuclide.name != r.nuclide_0K.name: - raise ValueError("The nuclide and nuclide_0K attributes of " - "a ResonantScattering object must have " - "identical names.") - r.create_xml_subelement(element) + def _create_resonance_scattering_subelement(self): + if len(self.resonance_scattering) > 0: + elem = ET.SubElement(self._settings_file, 'resonance_scattering') + for r in self.resonance_scattering: + elem.append(r.to_xml_element()) def export_to_xml(self): """Create a settings.xml file that can be used for a simulation. @@ -1125,7 +1128,6 @@ class Settings(object): self._source_subelement = None self._trigger_subelement = None self._run_mode_subelement = None - self._source_element = None self._create_run_mode_subelement() self._create_source_subelement() @@ -1135,7 +1137,6 @@ class Settings(object): self._create_confidence_intervals() self._create_cross_sections_subelement() self._create_multipole_library_subelement() - self._create_energy_grid_subelement() self._create_energy_mode_subelement() self._create_max_order_subelement() self._create_ptables_subelement() @@ -1148,12 +1149,13 @@ class Settings(object): self._create_no_reduce_subelement() self._create_threads_subelement() self._create_verbosity_subelement() + self._create_temperature_subelements() self._create_trace_subelement() self._create_track_subelement() self._create_ufs_subelement() self._create_dd_subelement() - self._create_use_multipole_subelement() - self._create_resonance_scattering_element() + self._create_resonance_scattering_subelement() + self._create_volume_calcs_subelement() # Clean the indentation in the file to be user-readable clean_xml_indentation(self._settings_file) @@ -1167,14 +1169,26 @@ class Settings(object): class ResonanceScattering(object): """Specification of the elastic scattering model for resonant isotopes + Parameters + ---------- + nuclide : openmc.Nuclide + The nuclide affected by this resonance scattering treatment. + method : {'ARES', 'CXS', 'DBRC', 'WCM'} + The method used to sample outgoing scattering energies. Valid options + are 'ARES', 'CXS' (constant cross section), 'DBRC' (Doppler broadening + rejection correction), and 'WCM' (weight correction method). + E_min : float + The minimum energy above which the specified method is applied. By + default, CXS will be used below E_min. + E_max : float + The maximum energy below which the specified method is applied. By + default, the asymptotic target-at-rest model is applied above E_max. + Attributes ---------- nuclide : openmc.Nuclide The nuclide affected by this resonance scattering treatment. - nuclide_0K : openmc.Nuclide - This should be the same isotope as the nuclide attribute above, but it - should have an xs attribute that identifies 0 Kelvin data. - method : str + method : {'ARES', 'CXS', 'DBRC', 'WCM'} The method used to sample outgoing scattering energies. Valid options are 'ARES', 'CXS' (constant cross section), 'DBRC' (Doppler broadening rejection correction), and 'WCM' (weight correction method). @@ -1187,21 +1201,20 @@ class ResonanceScattering(object): """ - def __init__(self): - self._nuclide = None - self._nuclide_0K = None - self._method = None + def __init__(self, nuclide, method='CXS', E_min=None, E_max=None): self._E_min = None self._E_max = None + self.nuclide = nuclide + self.method = method + if E_min is not None: + self.E_min = E_min + if E_max is not None: + self.E_max = E_max @property def nuclide(self): return self._nuclide - @property - def nuclide_0K(self): - return self._nuclide_0K - @property def method(self): return self._method @@ -1216,45 +1229,45 @@ class ResonanceScattering(object): @nuclide.setter def nuclide(self, nuc): - check_type('nuclide', nuc, Nuclide) + cv.check_type('nuclide', nuc, Nuclide) self._nuclide = nuc - @nuclide_0K.setter - def nuclide_0K(self, nuc): - check_type('nuclide_0K', nuc, Nuclide) - self._nuclide_0K = nuc - @method.setter def method(self, m): - check_value('method', m, ('ARES', 'CXS', 'DBRC', 'WCM')) + cv.check_value('method', m, ('ARES', 'CXS', 'DBRC', 'WCM')) self._method = m @E_min.setter def E_min(self, E): - check_type('E_min', E, Real) - check_greater_than('E_min', E, 0, True) + cv.check_type('E_min', E, Real) + cv.check_greater_than('E_min', E, 0, True) self._E_min = E @E_max.setter def E_max(self, E): - check_type('E_max', E, Real) - check_greater_than('E_max', E, 0, True) + cv.check_type('E_max', E, Real) + cv.check_greater_than('E_max', E, 0, True) self._E_max = E - def create_xml_subelement(self, xml_element): - scatterer = ET.SubElement(xml_element, "scatterer") + def to_xml_element(self): + """Return XML representation of the resonance scattering model + + Returns + ------- + element : xml.etree.ElementTree.Element + XML element containing resonance scattering model + + """ + scatterer = ET.Element("scatterer") subelement = ET.SubElement(scatterer, 'nuclide') subelement.text = self.nuclide.name if self.method is not None: subelement = ET.SubElement(scatterer, 'method') subelement.text = self.method - subelement = ET.SubElement(scatterer, 'xs_label') - subelement.text = '{0.name}.{0.xs}'.format(self.nuclide) - subelement = ET.SubElement(scatterer, 'xs_label_0K') - subelement.text = '{0.name}.{0.xs}'.format(self.nuclide_0K) if self.E_min is not None: subelement = ET.SubElement(scatterer, 'E_min') subelement.text = str(self.E_min) if self.E_max is not None: subelement = ET.SubElement(scatterer, 'E_max') subelement.text = str(self.E_max) + return scatterer diff --git a/openmc/source.py b/openmc/source.py index 7e8a68accf..ee32cd0f4b 100644 --- a/openmc/source.py +++ b/openmc/source.py @@ -103,7 +103,7 @@ class Source(object): cv.check_greater_than('source strength', strength, 0.0, True) self._strength = strength - def to_xml(self): + def to_xml_element(self): """Return XML representation of the source Returns @@ -117,9 +117,9 @@ class Source(object): if self.file is not None: element.set("file", self.file) if self.space is not None: - element.append(self.space.to_xml()) + element.append(self.space.to_xml_element()) if self.angle is not None: - element.append(self.angle.to_xml()) + element.append(self.angle.to_xml_element()) if self.energy is not None: - element.append(self.energy.to_xml('energy')) + element.append(self.energy.to_xml_element('energy')) return element diff --git a/openmc/statepoint.py b/openmc/statepoint.py index cdb9c4bc62..3697585b42 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -2,6 +2,7 @@ import sys import re import os import warnings +import glob import numpy as np @@ -22,8 +23,9 @@ class StatePoint(object): filename : str Path to file to load autolink : bool, optional - Whether to automatically link in metadata from a summary.h5 - file. Defaults to True. + Whether to automatically link in metadata from a summary.h5 file and + stochastic volume calculation results from volume_*.h5 files. Defaults + to True. Attributes ---------- @@ -143,6 +145,12 @@ class StatePoint(object): su = openmc.Summary(path_summary) self.link_with_summary(su) + path_volume = os.path.join(os.path.dirname(filename), 'volume_*.h5') + for path_i in glob.glob(path_volume): + if re.search(r'volume_\d+\.h5', path_i): + vol = openmc.VolumeCalculation.from_hdf5(path_i) + self.add_volume_information(vol) + def close(self): self._f.close() @@ -481,6 +489,18 @@ class StatePoint(object): for tally_id in self.tallies: self.tallies[tally_id].sparse = self.sparse + def add_volume_information(self, volume_calc): + """Add volume information to the geometry within the file + + Parameters + ---------- + volume_calc : openmc.VolumeCalculation + Results from a stochastic volume calculation + + """ + if self.summary is not None: + self.summary.add_volume_information(volume_calc) + def get_tally(self, scores=[], filters=[], nuclides=[], name=None, id=None, estimator=None, exact_filters=False, exact_nuclides=False, exact_scores=False): @@ -662,7 +682,7 @@ class StatePoint(object): if isinstance(tally_filter, openmc.SurfaceFilter): surface_ids = [] for bin in tally_filter.bins: - surface_ids.append(summary.surfaces[bin].id) + surface_ids.append(bin) tally_filter.bins = surface_ids if isinstance(tally_filter, (openmc.CellFilter, diff --git a/openmc/stats/multivariate.py b/openmc/stats/multivariate.py index e4eadd7aa4..e49a94ee19 100644 --- a/openmc/stats/multivariate.py +++ b/openmc/stats/multivariate.py @@ -50,7 +50,7 @@ class UnitSphere(object): self._reference_uvw = uvw/np.linalg.norm(uvw) @abstractmethod - def to_xml(self): + def to_xml_element(self): return '' @@ -109,13 +109,21 @@ class PolarAzimuthal(UnitSphere): cv.check_type('azimuthal angle', phi, Univariate) self._phi = phi - def to_xml(self): + def to_xml_element(self): + """Return XML representation of the angular distribution + + Returns + ------- + element : xml.etree.ElementTree.Element + XML element containing angular distribution data + + """ element = ET.Element('angle') element.set("type", "mu-phi") if self.reference_uvw is not None: element.set("reference_uvw", ' '.join(map(str, self.reference_uvw))) - element.append(self.mu.to_xml('mu')) - element.append(self.phi.to_xml('phi')) + element.append(self.mu.to_xml_element('mu')) + element.append(self.phi.to_xml_element('phi')) return element @@ -127,7 +135,15 @@ class Isotropic(UnitSphere): def __init__(self): super(Isotropic, self).__init__() - def to_xml(self): + def to_xml_element(self): + """Return XML representation of the isotropic distribution + + Returns + ------- + element : xml.etree.ElementTree.Element + XML element containing isotropic distribution data + + """ element = ET.Element('angle') element.set("type", "isotropic") return element @@ -152,7 +168,15 @@ class Monodirectional(UnitSphere): def __init__(self, reference_uvw=[1., 0., 0.]): super(Monodirectional, self).__init__(reference_uvw) - def to_xml(self): + def to_xml_element(self): + """Return XML representation of the monodirectional distribution + + Returns + ------- + element : xml.etree.ElementTree.Element + XML element containing monodirectional distribution data + + """ element = ET.Element('angle') element.set("type", "monodirectional") if self.reference_uvw is not None: @@ -174,7 +198,7 @@ class Spatial(object): pass @abstractmethod - def to_xml(self): + def to_xml_element(self): return '' @@ -238,12 +262,20 @@ class CartesianIndependent(Spatial): cv.check_type('z coordinate', z, Univariate) self._z = z - def to_xml(self): + def to_xml_element(self): + """Return XML representation of the spatial distribution + + Returns + ------- + element : xml.etree.ElementTree.Element + XML element containing spatial distribution data + + """ element = ET.Element('space') element.set('type', 'cartesian') - element.append(self.x.to_xml('x')) - element.append(self.y.to_xml('y')) - element.append(self.z.to_xml('z')) + element.append(self.x.to_xml_element('x')) + element.append(self.y.to_xml_element('y')) + element.append(self.z.to_xml_element('z')) return element @@ -308,7 +340,15 @@ class Box(Spatial): cv.check_type('only fissionable', only_fissionable, bool) self._only_fissionable = only_fissionable - def to_xml(self): + def to_xml_element(self): + """Return XML representation of the box distribution + + Returns + ------- + element : xml.etree.ElementTree.Element + XML element containing box distribution data + + """ element = ET.Element('space') if self.only_fissionable: element.set("type", "fission") @@ -352,7 +392,15 @@ class Point(Spatial): cv.check_length('coordinate', xyz, 3) self._xyz = xyz - def to_xml(self): + def to_xml_element(self): + """Return XML representation of the point distribution + + Returns + ------- + element : xml.etree.ElementTree.Element + XML element containing point distribution location + + """ element = ET.Element('space') element.set("type", "point") params = ET.SubElement(element, "parameters") diff --git a/openmc/stats/univariate.py b/openmc/stats/univariate.py index 24ab98895d..ce0f0fae1d 100644 --- a/openmc/stats/univariate.py +++ b/openmc/stats/univariate.py @@ -7,6 +7,7 @@ from xml.etree import ElementTree as ET import numpy as np import openmc.checkvalue as cv +from openmc.mixin import EqualityMixin if sys.version_info[0] >= 3: basestring = str @@ -15,7 +16,7 @@ _INTERPOLATION_SCHEMES = ['histogram', 'linear-linear', 'linear-log', 'log-linear', 'log-log'] -class Univariate(object): +class Univariate(EqualityMixin): """Probability distribution of a single random variable. The Univariate class is an abstract class that can be derived to implement a @@ -29,7 +30,7 @@ class Univariate(object): pass @abstractmethod - def to_xml(self, element_name): + def to_xml_element(self, element_name): return '' @abstractmethod @@ -92,7 +93,20 @@ class Discrete(Univariate): cv.check_greater_than('discrete probability', pk, 0.0, True) self._p = p - def to_xml(self, element_name): + def to_xml_element(self, element_name): + """Return XML representation of the discrete distribution + + Parameters + ---------- + element_name : str + XML element name + + Returns + ------- + element : xml.etree.ElementTree.Element + XML element containing discrete distribution data + + """ element = ET.Element(element_name) element.set("type", "discrete") @@ -153,7 +167,20 @@ class Uniform(Univariate): t.c = [0., 1.] return t - def to_xml(self, element_name): + def to_xml_element(self, element_name): + """Return XML representation of the uniform distribution + + Parameters + ---------- + element_name : str + XML element name + + Returns + ------- + element : xml.etree.ElementTree.Element + XML element containing uniform distribution data + + """ element = ET.Element(element_name) element.set("type", "uniform") element.set("parameters", '{} {}'.format(self.a, self.b)) @@ -196,7 +223,20 @@ class Maxwell(Univariate): cv.check_greater_than('Maxwell temperature', theta, 0.0) self._theta = theta - def to_xml(self, element_name): + def to_xml_element(self, element_name): + """Return XML representation of the Maxwellian distribution + + Parameters + ---------- + element_name : str + XML element name + + Returns + ------- + element : xml.etree.ElementTree.Element + XML element containing Maxwellian distribution data + + """ element = ET.Element(element_name) element.set("type", "maxwell") element.set("parameters", str(self.theta)) @@ -254,7 +294,20 @@ class Watt(Univariate): cv.check_greater_than('Watt b', b, 0.0) self._b = b - def to_xml(self, element_name): + def to_xml_element(self, element_name): + """Return XML representation of the Watt distribution + + Parameters + ---------- + element_name : str + XML element name + + Returns + ------- + element : xml.etree.ElementTree.Element + XML element containing Watt distribution data + + """ element = ET.Element(element_name) element.set("type", "watt") element.set("parameters", '{} {}'.format(self.a, self.b)) @@ -333,7 +386,20 @@ class Tabular(Univariate): cv.check_value('interpolation', interpolation, _INTERPOLATION_SCHEMES) self._interpolation = interpolation - def to_xml(self, element_name): + def to_xml_element(self, element_name): + """Return XML representation of the tabular distribution + + Parameters + ---------- + element_name : str + XML element name + + Returns + ------- + element : xml.etree.ElementTree.Element + XML element containing tabular distribution data + + """ element = ET.Element(element_name) element.set("type", "tabular") element.set("interpolation", self.interpolation) @@ -386,7 +452,7 @@ class Legendre(Univariate): self._legendre_polynomial = np.polynomial.legendre.Legendre( coefficients) - def to_xml(self, element_name): + def to_xml_element(self, element_name): raise NotImplementedError @@ -440,5 +506,5 @@ class Mixture(Univariate): Iterable, Univariate) self._distribution = distribution - def to_xml(self, element_name): + def to_xml_element(self, element_name): raise NotImplementedError diff --git a/openmc/summary.py b/openmc/summary.py index e0a327326f..a5862bb046 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -83,11 +83,10 @@ class Summary(object): n_nuclides = self._f['nuclides/n_nuclides_total'].value names = self._f['nuclides/names'].value awrs = self._f['nuclides/awrs'].value - zaids = self._f['nuclides/zaids'].value for n in range(n_nuclides): name = names[n].decode() name = name[:name.find('.')] - self.nuclides[name] = (zaids[n], awrs[n]) + self.nuclides[name] = awrs[n] def _read_geometry(self): # Read in and initialize the Materials and Geometry @@ -124,22 +123,21 @@ class Summary(object): if 'sab_names' in self._f['materials'][key]: sab_tables = self._f['materials'][key]['sab_names'].value for sab_table in sab_tables: - name, xs = sab_table.decode().split('.') - material.add_s_alpha_beta(name, xs) + name = sab_table.decode() + material.add_s_alpha_beta(name) # Set the Material's density to atom/b-cm as used by OpenMC material.set_density(density=density, units='atom/b-cm') # Add all nuclides to the Material for fullname, density in zip(nuclides, nuc_densities): - fullname = fullname.decode().strip() - name, xs = fullname.split('.') + name = fullname.decode().strip() if 'nat' in name: - material.add_element(openmc.Element(name=name, xs=xs), + material.add_element(openmc.Element(name=name), percent=density, percent_type='ao') else: - material.add_nuclide(openmc.Nuclide(name=name, xs=xs), + material.add_nuclide(openmc.Nuclide(name=name), percent=density, percent_type='ao') # Add the Material to the global dictionary of all Materials @@ -576,6 +574,17 @@ class Summary(object): # Add Tally to the global dictionary of all Tallies self.tallies[tally_id] = tally + def add_volume_information(self, volume_calc): + """Add volume information to the geometry within the summary file + + Parameters + ---------- + volume_calc : openmc.VolumeCalculation + Results from a stochastic volume calculation + + """ + self.openmc_geometry.add_volume_information(volume_calc) + def get_material_by_id(self, material_id): """Return a Material object given the material id diff --git a/openmc/tallies.py b/openmc/tallies.py index 415e4d9997..f791ca0f60 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -40,6 +40,9 @@ _SCORE_CLASSES = (basestring, CrossScore, AggregateScore) _NUCLIDE_CLASSES = (basestring, Nuclide, CrossNuclide, AggregateNuclide) _FILTER_CLASSES = (Filter, CrossFilter, AggregateFilter) +# Valid types of estimators +ESTIMATOR_TYPES = ['tracklength', 'collision', 'analog'] + def reset_auto_tally_id(): """Reset counter for auto-generated tally IDs.""" @@ -387,8 +390,7 @@ class Tally(object): @estimator.setter def estimator(self, estimator): - cv.check_value('estimator', estimator, - ['analog', 'tracklength', 'collision']) + cv.check_value('estimator', estimator, ESTIMATOR_TYPES) self._estimator = estimator @triggers.setter @@ -795,6 +797,9 @@ class Tally(object): else: no_scores_match = False + if score == 'current' and score not in self.scores: + return False + # Nuclides cannot be specified on 'flux' scores if 'flux' in self.scores or 'flux' in other.scores: if self.nuclides != other.nuclides: @@ -2189,8 +2194,8 @@ class Tally(object): """ - cv.check_type('filter1', filter1, (Filter, CrossFilter, AggregateFilter)) - cv.check_type('filter2', filter2, (Filter, CrossFilter, AggregateFilter)) + cv.check_type('filter1', filter1, _FILTER_CLASSES) + cv.check_type('filter2', filter2, _FILTER_CLASSES) # Check that the filters exist in the tally and are not the same if filter1 == filter2: @@ -2272,8 +2277,8 @@ class Tally(object): 'since it does not contain any results.'.format(self.id) raise ValueError(msg) - cv.check_type('nuclide1', nuclide1, Nuclide) - cv.check_type('nuclide2', nuclide2, Nuclide) + cv.check_type('nuclide1', nuclide1, _NUCLIDE_CLASSES) + cv.check_type('nuclide2', nuclide2, _NUCLIDE_CLASSES) # Check that the nuclides exist in the tally and are not the same if nuclide1 == nuclide2: @@ -3310,7 +3315,7 @@ class Tally(object): """ - cv.check_type('new_filter', new_filter, Filter) + cv.check_type('new_filter', new_filter, _FILTER_CLASSES) if new_filter in self.filters: msg = 'Unable to diagonalize Tally ID="{0}" which already ' \ diff --git a/openmc/universe.py b/openmc/universe.py index c8e7fcab1e..c8fb89a384 100644 --- a/openmc/universe.py +++ b/openmc/universe.py @@ -349,7 +349,27 @@ class Universe(object): # Return the offset computed at all nested Universe levels return offset - def get_all_nuclides(self): + def get_nuclides(self): + """Returns all nuclides in the universe + + Returns + ------- + nuclides : list of str + List of nuclide names + + """ + + nuclides = [] + + # Append all Nuclides in each Cell in the Universe to the dictionary + for cell in self.cells.values(): + for nuclide in cell.get_nuclides(): + if nuclide not in nuclides: + nuclides.append(nuclide) + + return nuclides + + def get_nuclide_densities(self): """Return all nuclides contained in the universe Returns @@ -360,13 +380,8 @@ class Universe(object): """ - nuclides = OrderedDict() - - # Append all Nuclides in each Cell in the Universe to the dictionary - for cell in self._cells.values(): - nuclides.update(cell.get_all_nuclides()) - - return nuclides + raise NotImplementedError('Determining average nuclide densities over ' + 'an entire universe not yet supported.') def get_all_cells(self): """Return all cells that are contained within the universe diff --git a/openmc/volume.py b/openmc/volume.py new file mode 100644 index 0000000000..2a2a92f61e --- /dev/null +++ b/openmc/volume.py @@ -0,0 +1,248 @@ +from collections import Iterable, Mapping +from numbers import Real, Integral +from xml.etree import ElementTree as ET +from warnings import warn + +import numpy as np +import pandas as pd + +import openmc +import openmc.checkvalue as cv + + +class VolumeCalculation(object): + """Stochastic volume calculation specifications and results. + + Parameters + ---------- + domains : Iterable of openmc.Cell, openmc.Material, or openmc.Universe + Domains to find volumes of + samples : int + Number of samples used to generate volume estimates + lower_left : Iterable of float + Lower-left coordinates of bounding box used to sample points. If this + argument is not supplied, an attempt is made to automatically determine + a bounding box. + upper_right : Iterable of float + Upper-right coordinates of bounding box used to sample points. If this + argument is not supplied, an attempt is made to automatically determine + a bounding box. + + Attributes + ---------- + ids : Iterable of int + IDs of domains to find volumes of + domain_type : {'cell', 'material', 'universe'} + Type of each domain + samples : int + Number of samples used to generate volume estimates + lower_left : Iterable of float + Lower-left coordinates of bounding box used to sample points + upper_right : Iterable of float + Upper-right coordinates of bounding box used to sample points + results : dict + Dictionary whose keys are unique IDs of domains and values are + dictionaries with calculated volumes and total number of atoms for each + nuclide present in the domain. + volumes : dict + Dictionary whose keys are unique IDs of domains and values are the + estimated volumes + atoms_dataframe : pandas.DataFrame + DataFrame showing the estimated number of atoms for each nuclide present + in each domain specified. + + """ + def __init__(self, domains, samples, lower_left=None, + upper_right=None): + self._results = None + + cv.check_type('domains', domains, Iterable, + (openmc.Cell, openmc.Material, openmc.Universe)) + if isinstance(domains[0], openmc.Cell): + self._domain_type = 'cell' + elif isinstance(domains[0], openmc.Material): + self._domain_type = 'material' + elif isinstance(domains[0], openmc.Universe): + self._domain_type = 'universe' + self.ids = [d.id for d in domains] + + self.samples = samples + + if lower_left is not None: + if upper_right is None: + raise ValueError('Both lower-left and upper-right coordinates ' + 'should be specified') + + # For cell domains, try to compute bounding box and make sure + # user-specified one is valid + if self.domain_type == 'cell': + for c in domains: + if c.region is None: + continue + ll, ur = c.region.bounding_box + if np.any(np.isinf(ll)) or np.any(np.isinf(ur)): + continue + if (np.any(np.asarray(lower_left) > ll) or + np.any(np.asarray(upper_right) < ur)): + warn("Specified bounding box is smaller than computed " + "bounding box for cell {}. Volume calculation may " + "be incorrect!".format(c.id)) + + self.lower_left = lower_left + self.upper_right = upper_right + else: + if self.domain_type == 'cell': + ll, ur = openmc.Union(*[c.region for c in domains]).bounding_box + if np.any(np.isinf(ll)) or np.any(np.isinf(ur)): + raise ValueError('Could not automatically determine bounding ' + 'box for stochastic volume calculation.') + else: + self.lower_left = ll + self.upper_right = ur + else: + raise ValueError('Could not automatically determine bounding box ' + 'for stochastic volume calculation.') + + @property + def ids(self): + return self._ids + + @property + def samples(self): + return self._samples + + @property + def lower_left(self): + return self._lower_left + + @property + def upper_right(self): + return self._upper_right + + @property + def results(self): + return self._results + + @property + def domain_type(self): + return self._domain_type + + @property + def volumes(self): + return {uid: results['volume'] for uid, results in self.results.items()} + + @property + def atoms_dataframe(self): + items = [] + columns = [self.domain_type.capitalize(), 'Nuclide', 'Atoms', + 'Uncertainty'] + for uid, results in self.results.items(): + for name, atoms in results['atoms']: + items.append((uid, name, atoms[0], atoms[1])) + + return pd.DataFrame.from_records(items, columns=columns) + + @ids.setter + def ids(self, ids): + cv.check_type('domain IDs', ids, Iterable, Real) + self._ids = ids + + @samples.setter + def samples(self, samples): + cv.check_type('number of samples', samples, Integral) + cv.check_greater_than('number of samples', samples, 0) + self._samples = samples + + @lower_left.setter + def lower_left(self, lower_left): + name = 'lower-left bounding box coordinates', + cv.check_type(name, lower_left, Iterable, Real) + cv.check_length(name, lower_left, 3) + self._lower_left = lower_left + + @upper_right.setter + def upper_right(self, upper_right): + name = 'upper-right bounding box coordinates' + cv.check_type(name, upper_right, Iterable, Real) + cv.check_length(name, upper_right, 3) + self._upper_right = upper_right + + @results.setter + def results(self, results): + cv.check_type('results', results, Mapping) + self._results = results + + @classmethod + def from_hdf5(cls, filename): + """Load stochastic volume calculation results from HDF5 file. + + Parameters + ---------- + filename : str + Path to volume.h5 file + + Returns + ------- + openmc.VolumeCalculation + Results of the stochastic volume calculation + + """ + import h5py + + with h5py.File(filename, 'r') as f: + domain_type = f.attrs['domain_type'].decode() + samples = f.attrs['samples'] + lower_left = f.attrs['lower_left'] + upper_right = f.attrs['upper_right'] + + results = {} + ids = [] + for obj_name in f: + if obj_name.startswith('domain_'): + domain_id = int(obj_name[7:]) + ids.append(domain_id) + group = f[obj_name] + volume = tuple(group['volume'].value) + nucnames = group['nuclides'].value + atoms = group['atoms'].value + + atom_list = [] + for name_i, atoms_i in zip(nucnames, atoms): + atom_list.append((name_i.decode(), tuple(atoms_i))) + results[domain_id] = {'volume': volume, 'atoms': atom_list} + + # Instantiate some throw-away domains that are used by the constructor + # to assign IDs + if domain_type == 'cell': + domains = [openmc.Cell(uid) for uid in ids] + elif domain_type == 'material': + domains = [openmc.Material(uid) for uid in ids] + elif domain_type == 'universe': + domains = [openmc.Universe(uid) for uid in ids] + + # Instantiate the class and assign results + vol = cls(domains, samples, lower_left, upper_right) + vol.results = results + return vol + + def to_xml_element(self): + """Return XML representation of the volume calculation + + Returns + ------- + element : xml.etree.ElementTree.Element + XML element containing volume calculation data + + """ + element = ET.Element("volume_calc") + dt_elem = ET.SubElement(element, "domain_type") + dt_elem.text = self.domain_type + id_elem = ET.SubElement(element, "domain_ids") + id_elem.text = ' '.join(str(uid) for uid in self.ids) + samples_elem = ET.SubElement(element, "samples") + samples_elem.text = str(self.samples) + ll_elem = ET.SubElement(element, "lower_left") + ll_elem.text = ' '.join(str(x) for x in self.lower_left) + ur_elem = ET.SubElement(element, "upper_right") + ur_elem.text = ' '.join(str(x) for x in self.upper_right) + return element diff --git a/readme.rst b/readme.rst index 03964d9436..90484ad494 100644 --- a/readme.rst +++ b/readme.rst @@ -7,7 +7,7 @@ OpenMC Monte Carlo Particle Transport Code The OpenMC project aims to provide a fully-featured Monte Carlo particle transport code based on modern methods. It is a constructive solid geometry, -continuous-energy transport code that uses ACE format cross sections. The +continuous-energy transport code that uses HDF5 format cross sections. The project started under the Computational Reactor Physics Group at MIT. Complete documentation on the usage of OpenMC is hosted on Read the Docs at diff --git a/scripts/openmc-ace-to-hdf5 b/scripts/openmc-ace-to-hdf5 index c2198ec4fe..ff8c19962b 100755 --- a/scripts/openmc-ace-to-hdf5 +++ b/scripts/openmc-ace-to-hdf5 @@ -25,6 +25,13 @@ follows the NNDC data convention (1000*Z + A + 300 + 100*m), or the MCNP data convention (essentially the same as NNDC, except that the first metastable state of Am242 is 95242 and the ground state is 95642). +The optional --fission_energy_release argument will accept an HDF5 file +containing a library of fission energy release (ENDF MF=1 MT=458) data. A +library built from ENDF/B-VII.1 data is released with OpenMC and can be found at +openmc/data/fission_Q_data_endb71.h5. This data is necessary for +'fission-q-prompt' and 'fission-q-recoverable' tallies, but is not needed +otherwise. + """ class CustomFormatter(argparse.ArgumentDefaultsHelpFormatter, @@ -47,6 +54,8 @@ parser.add_argument('--xsdir', help='MCNP xsdir file that lists ' 'ACE libraries') parser.add_argument('--xsdata', help='Serpent xsdata file that lists ' 'ACE libraries') +parser.add_argument('--fission_energy_release', help='HDF5 file containing ' + 'fission energy release data') args = parser.parse_args() if not os.path.isdir(args.destination): @@ -106,6 +115,7 @@ elif args.xsdata is not None: else: ace_libraries = args.libraries +nuclides = {} library = openmc.data.DataLibrary() for filename in ace_libraries: @@ -116,36 +126,87 @@ for filename in ace_libraries: lib = openmc.data.ace.Library(filename) for table in lib.tables: - if table.name.endswith('c'): + name, xs = table.name.split('.') + if xs.endswith('c'): # Continuous-energy neutron data - try: - neutron = openmc.data.IncidentNeutron.from_ace( - table, args.metastable) - except Exception as e: - print('Failed to convert {}: {}'.format(table.name, e)) - continue - print('Converting {} (ACE) to {} (HDF5)'.format(table.name, neutron.name)) + if name not in nuclides: + try: + neutron = openmc.data.IncidentNeutron.from_ace( + table, args.metastable) + except Exception as e: + print('Failed to convert {}: {}'.format(table.name, e)) + continue - # Determine filename - outfile = os.path.join(args.destination, - neutron.name.replace('.', '_') + '.h5') - neutron.export_to_hdf5(outfile, 'w') + # Fission energy release data, if available + if args.fission_energy_release is not None: + fer = openmc.data.FissionEnergyRelease.from_compact_hdf5( + args.fission_energy_release, neutron) + if fer is not None: + neutron.fission_energy = fer - # Register with library - library.register_file(outfile) + print('Converting {} (ACE) to {} (HDF5)'.format(table.name, + neutron.name)) - elif table.name.endswith('t'): + # Determine filename + outfile = os.path.join(args.destination, + neutron.name.replace('.', '_') + '.h5') + neutron.export_to_hdf5(outfile, 'w') + + # Register with library + library.register_file(outfile) + + # Add nuclide to list + nuclides[name] = outfile + else: + # Then we only need to append the data + try: + neutron = \ + openmc.data.IncidentNeutron.from_hdf5(nuclides[name]) + print('Converting {} (ACE) to {} (HDF5)'.format(table.name, + neutron.name)) + neutron.add_temperature_from_ace(table, args.metastable) + neutron.export_to_hdf5(nuclides[name] + '_1', 'w') + os.rename(nuclides[name] + '_1', nuclides[name]) + except Exception as e: + print('Failed to convert {}: {}'.format(table.name, e)) + continue + + elif xs.endswith('t'): + # Adjust name to be the new thermal scattering name + name = openmc.data.get_thermal_name(name) # Thermal scattering data - thermal = openmc.data.ThermalScattering.from_ace(table) - print('Converting {} (ACE) to {} (HDF5)'.format(table.name, thermal.name)) + if name not in nuclides: + try: + thermal = openmc.data.ThermalScattering.from_ace(table) + except Exception as e: + print('Failed to convert {}: {}'.format(table.name, e)) + continue + print('Converting {} (ACE) to {} (HDF5)'.format(table.name, + thermal.name)) - # Determine filename - outfile = os.path.join(args.destination, - thermal.name.replace('.', '_') + '.h5') - thermal.export_to_hdf5(outfile, 'w') + # Determine filename + outfile = os.path.join(args.destination, + thermal.name.replace('.', '_') + '.h5') + thermal.export_to_hdf5(outfile, 'w') - # Register with library - library.register_file(outfile, 'thermal') + # Register with library + library.register_file(outfile, 'thermal') + + # Add data to list + nuclides[name] = outfile + + else: + # Then we only need to append the data + try: + thermal = openmc.data.ThermalScattering.from_hdf5(nuclides[name]) + print('Converting {} (ACE) to {} (HDF5)'.format(table.name, + thermal.name)) + thermal.add_temperature_from_ace(table) + thermal.export_to_hdf5(nuclides[name] + '_1', 'w') + os.rename(nuclides[name] + '_1', nuclides[name]) + except Exception as e: + print('Failed to convert {}: {}'.format(table.name, e)) + continue # Write cross_sections.xml libpath = os.path.join(args.destination, 'cross_sections.xml') diff --git a/scripts/openmc-update-inputs b/scripts/openmc-update-inputs index 5b5bf0978f..613e4a2241 100755 --- a/scripts/openmc-update-inputs +++ b/scripts/openmc-update-inputs @@ -253,23 +253,6 @@ def update_geometry(geometry_root): return was_updated -def get_thermal_name(name): - """Get proper S(a,b) table name, e.g. 'HH2O' -> 'c_H_in_H2O'""" - if name.lower() in _THERMAL_NAMES: - return _THERMAL_NAMES[name.lower()] - else: - # Make an educated guess?? This actually works well for - # JEFF-3.2 which stupidly uses names like lw00.32t, - # lw01.32t, etc. for different temperatures - matches = get_close_matches( - name.lower(), _THERMAL_NAMES.keys(), cutoff=0.5) - if len(matches) > 0: - return _THERMAL_NAMES[matches[0]] + '.' + xs - else: - # OK, we give up. Just use the ACE name. - return 'c_' + name - return name - def update_materials(root): """Update the given XML materials tree. Return True if changes were made.""" was_updated = False @@ -298,13 +281,13 @@ def update_materials(root): for sab in material.findall('sab'): if 'name' in sab.attrib: sabname = sab.attrib['name'] - sab.set('name', get_thermal_name(sabname)) + sab.set('name', openmc.data.get_thermal_name(sabname)) was_updated = True elif sab.find('name') is not None: name_elem = sab.find('name') sabname = name_elem.text - name_elem.text = get_thermal(sabname) + name_elem.text = openmc.data.get_thermal_name(sabname) was_updated = True return was_updated diff --git a/src/algorithm.F90 b/src/algorithm.F90 new file mode 100644 index 0000000000..101b11b9a7 --- /dev/null +++ b/src/algorithm.F90 @@ -0,0 +1,275 @@ +module algorithm + + use constants + use stl_vector, only: VectorInt, VectorReal + + implicit none + + integer, parameter :: MAX_ITERATION = 64 + + interface binary_search + module procedure binary_search_real, binary_search_int4, binary_search_int8 + end interface binary_search + + interface sort + module procedure sort_int, sort_real, sort_vector_int, sort_vector_real + end interface sort + + interface find + module procedure find_int, find_real, find_vector_int, find_vector_real + end interface find + +contains + +!=============================================================================== +! BINARY_SEARCH performs a binary search of an array to find where a specific +! value lies in the array. This is used extensively for energy grid searching +!=============================================================================== + + pure function binary_search_real(array, n, val) result(array_index) + + integer, intent(in) :: n + real(8), intent(in) :: array(n) + real(8), intent(in) :: val + integer :: array_index + + integer :: L + integer :: R + integer :: n_iteration + + L = 1 + R = n + + if (val < array(L) .or. val > array(R)) then + array_index = -1 + return + end if + + n_iteration = 0 + do while (R - L > 1) + ! Find values at midpoint + array_index = L + (R - L)/2 + if (val >= array(array_index)) then + L = array_index + else + R = array_index + end if + + ! check for large number of iterations + n_iteration = n_iteration + 1 + if (n_iteration == MAX_ITERATION) then + array_index = -2 + return + end if + end do + + array_index = L + + end function binary_search_real + + pure function binary_search_int4(array, n, val) result(array_index) + + integer, intent(in) :: n + integer, intent(in) :: array(n) + integer, intent(in) :: val + integer :: array_index + + integer :: L + integer :: R + integer :: n_iteration + + L = 1 + R = n + + if (val < array(L) .or. val > array(R)) then + array_index = -1 + return + end if + + n_iteration = 0 + do while (R - L > 1) + ! Find values at midpoint + array_index = L + (R - L)/2 + if (val >= array(array_index)) then + L = array_index + else + R = array_index + end if + + ! check for large number of iterations + n_iteration = n_iteration + 1 + if (n_iteration == MAX_ITERATION) then + array_index = -2 + return + end if + end do + + array_index = L + + end function binary_search_int4 + + pure function binary_search_int8(array, n, val) result(array_index) + + integer, intent(in) :: n + integer(8), intent(in) :: array(n) + integer(8), intent(in) :: val + integer :: array_index + + integer :: L + integer :: R + integer :: n_iteration + + L = 1 + R = n + + if (val < array(L) .or. val > array(R)) then + array_index = -1 + return + end if + + n_iteration = 0 + do while (R - L > 1) + ! Find values at midpoint + array_index = L + (R - L)/2 + if (val >= array(array_index)) then + L = array_index + else + R = array_index + end if + + ! check for large number of iterations + n_iteration = n_iteration + 1 + if (n_iteration == MAX_ITERATION) then + array_index = -2 + return + end if + end do + + array_index = L + + end function binary_search_int8 + +!=============================================================================== +! SORT sorts an array in place using an insertion sort. +!=============================================================================== + + pure subroutine sort_int(array) + integer, intent(inout) :: array(:) + + integer :: k, m + integer :: temp + + if (size(array) > 1) then + SORT: do k = 2, size(array) + ! Save value to move + m = k + temp = array(k) + + MOVE_OVER: do while (m > 1) + ! Check if insertion value is greater than (m-1)th value + if (temp >= array(m - 1)) exit + + ! Move values over until hitting one that's not larger + array(m) = array(m - 1) + m = m - 1 + end do MOVE_OVER + + ! Put the original value into its new position + array(m) = temp + end do SORT + end if + end subroutine sort_int + + pure subroutine sort_real(array) + real(8), intent(inout) :: array(:) + + integer :: k, m + real(8) :: temp + + if (size(array) > 1) then + SORT: do k = 2, size(array) + ! Save value to move + m = k + temp = array(k) + + MOVE_OVER: do while (m > 1) + ! Check if insertion value is greater than (m-1)th value + if (temp >= array(m - 1)) exit + + ! Move values over until hitting one that's not larger + array(m) = array(m - 1) + m = m - 1 + end do MOVE_OVER + + ! Put the original value into its new position + array(m) = temp + end do SORT + end if + end subroutine sort_real + + pure subroutine sort_vector_int(vec) + type(VectorInt), intent(inout) :: vec + + call sort_int(vec % data(1:vec%size())) + end subroutine sort_vector_int + + pure subroutine sort_vector_real(vec) + type(VectorReal), intent(inout) :: vec + + call sort_real(vec % data(1:vec%size())) + end subroutine sort_vector_real + +!=============================================================================== +! FIND determines the index of the first occurrence of a value in an array. If +! the value does not appear in the array, -1 is returned. +!=============================================================================== + + pure function find_int(array, val) result(index) + integer, intent(in) :: array(:) + integer, intent(in) :: val + integer :: index + + integer :: i + + index = -1 + do i = 1, size(array) + if (array(i) == val) then + index = i + exit + end if + end do + end function find_int + + pure function find_real(array, val) result(index) + real(8), intent(in) :: array(:) + real(8), intent(in) :: val + integer :: index + + integer :: i + + index = -1 + do i = 1, size(array) + if (array(i) == val) then + index = i + exit + end if + end do + end function find_real + + pure function find_vector_int(vec, val) result(index) + type(VectorInt), intent(in) :: vec + integer, intent(in) :: val + integer :: index + + index = find_int(vec % data(1:vec % size()), val) + end function find_vector_int + + pure function find_vector_real(vec, val) result(index) + type(VectorReal), intent(in) :: vec + real(8), intent(in) :: val + integer :: index + + index = find_real(vec % data(1:vec % size()), val) + end function find_vector_real + +end module algorithm diff --git a/src/angle_distribution.F90 b/src/angle_distribution.F90 index a4fea6ff77..5d16f74242 100644 --- a/src/angle_distribution.F90 +++ b/src/angle_distribution.F90 @@ -2,12 +2,12 @@ module angle_distribution use hdf5, only: HID_T, HSIZE_T + use algorithm, only: binary_search use constants, only: ZERO, ONE, HISTOGRAM, LINEAR_LINEAR use distribution_univariate, only: DistributionContainer, Tabular use hdf5_interface, only: read_attribute, get_shape, read_dataset, & open_dataset, close_dataset use random_lcg, only: prn - use search, only: binary_search implicit none private diff --git a/src/cmfd_data.F90 b/src/cmfd_data.F90 index 0f1d9420be..e1bf1f9c35 100644 --- a/src/cmfd_data.F90 +++ b/src/cmfd_data.F90 @@ -51,9 +51,10 @@ contains subroutine compute_xs() use constants, only: FILTER_MESH, FILTER_ENERGYIN, FILTER_ENERGYOUT, & - FILTER_SURFACE, IN_RIGHT, OUT_RIGHT, IN_FRONT, & - OUT_FRONT, IN_TOP, OUT_TOP, CMFD_NOACCEL, ZERO, & - ONE, TINY_BIT + FILTER_SURFACE, OUT_LEFT, OUT_RIGHT, OUT_BACK, & + OUT_FRONT, OUT_BOTTOM, OUT_TOP, IN_LEFT, IN_RIGHT, & + IN_BACK, IN_FRONT, IN_BOTTOM, IN_TOP, CMFD_NOACCEL, & + ZERO, ONE, TINY_BIT use error, only: fatal_error use global, only: cmfd, n_cmfd_tallies, cmfd_tallies, meshes,& matching_bins @@ -234,76 +235,74 @@ contains matching_bins(i_filter_ein) = ng - h + 1 end if - ! Left surface + ! Get the bin for this mesh cell matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, & - (/ i-1, j, k /) + 1, .true.) - matching_bins(i_filter_surf) = IN_RIGHT + (/ i, j, k /)) + + ! Left surface + matching_bins(i_filter_surf) = OUT_LEFT score_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t%stride) + 1 ! outgoing + * t % stride) + 1 cmfd % current(1,h,i,j,k) = t % results(1,score_index) % sum - matching_bins(i_filter_surf) = OUT_RIGHT + + matching_bins(i_filter_surf) = IN_LEFT score_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 ! incoming + * t % stride) + 1 cmfd % current(2,h,i,j,k) = t % results(1,score_index) % sum ! Right surface - matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, & - (/ i, j, k /) + 1, .true.) matching_bins(i_filter_surf) = IN_RIGHT score_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 ! incoming + * t % stride) + 1 cmfd % current(3,h,i,j,k) = t % results(1,score_index) % sum + matching_bins(i_filter_surf) = OUT_RIGHT score_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 ! outgoing + * t % stride) + 1 cmfd % current(4,h,i,j,k) = t % results(1,score_index) % sum ! Back surface - matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, & - (/ i, j-1, k /) + 1, .true.) - matching_bins(i_filter_surf) = IN_FRONT + matching_bins(i_filter_surf) = OUT_BACK score_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 ! outgoing + * t % stride) + 1 cmfd % current(5,h,i,j,k) = t % results(1,score_index) % sum - matching_bins(i_filter_surf) = OUT_FRONT + + matching_bins(i_filter_surf) = IN_BACK score_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 ! incoming + * t % stride) + 1 cmfd % current(6,h,i,j,k) = t % results(1,score_index) % sum ! Front surface - matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, & - (/ i, j, k /) + 1, .true.) matching_bins(i_filter_surf) = IN_FRONT score_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 ! incoming + * t % stride) + 1 cmfd % current(7,h,i,j,k) = t % results(1,score_index) % sum + matching_bins(i_filter_surf) = OUT_FRONT score_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 ! outgoing + * t % stride) + 1 cmfd % current(8,h,i,j,k) = t % results(1,score_index) % sum ! Bottom surface - matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, & - (/ i, j, k-1 /) + 1, .true.) - matching_bins(i_filter_surf) = IN_TOP + matching_bins(i_filter_surf) = OUT_BOTTOM score_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 ! outgoing + * t % stride) + 1 cmfd % current(9,h,i,j,k) = t % results(1,score_index) % sum - matching_bins(i_filter_surf) = OUT_TOP + + matching_bins(i_filter_surf) = IN_BOTTOM score_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 ! incoming + * t % stride) + 1 cmfd % current(10,h,i,j,k) = t % results(1,score_index) % sum ! Top surface - matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, & - (/ i, j, k /) + 1, .true.) matching_bins(i_filter_surf) = IN_TOP score_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 ! incoming + * t % stride) + 1 cmfd % current(11,h,i,j,k) = t % results(1,score_index) % sum + matching_bins(i_filter_surf) = OUT_TOP score_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 ! outgoing + * t % stride) + 1 cmfd % current(12,h,i,j,k) = t % results(1,score_index) % sum end if TALLY @@ -448,7 +447,6 @@ contains ! Get leakage leakage = ZERO LEAK: do l = 1, 3 - leakage = leakage + ((cmfd % current(4*l,g,i,j,k) - & cmfd % current(4*l-1,g,i,j,k))) - & ((cmfd % current(4*l-2,g,i,j,k) - & diff --git a/src/cmfd_execute.F90 b/src/cmfd_execute.F90 index b7d0cc3879..d2631254b1 100644 --- a/src/cmfd_execute.F90 +++ b/src/cmfd_execute.F90 @@ -213,13 +213,13 @@ contains subroutine cmfd_reweight(new_weights) + use algorithm, only: binary_search use constants, only: ZERO, ONE use error, only: warning, fatal_error use global, only: meshes, source_bank, work, n_user_meshes, cmfd, & master use mesh_header, only: RegularMesh use mesh, only: count_bank_sites, get_mesh_indices - use search, only: binary_search use string, only: to_str #ifdef MPI diff --git a/src/cmfd_input.F90 b/src/cmfd_input.F90 index baa08e76e8..327b55b42a 100644 --- a/src/cmfd_input.F90 +++ b/src/cmfd_input.F90 @@ -531,13 +531,15 @@ contains allocate(SurfaceFilter :: filters(n_filters) % obj) select type(filt => filters(n_filters) % obj) type is(SurfaceFilter) - filt % n_bins = 2 * m % n_dimension - allocate(filt % surfaces(2 * m % n_dimension)) + filt % n_bins = 4 * m % n_dimension + allocate(filt % surfaces(4 * m % n_dimension)) if (m % n_dimension == 2) then - filt % surfaces = (/ IN_RIGHT, OUT_RIGHT, IN_FRONT, OUT_FRONT /) + filt % surfaces = (/ OUT_LEFT, IN_LEFT, IN_RIGHT, OUT_RIGHT, & + OUT_BACK, IN_BACK, IN_FRONT, OUT_FRONT /) elseif (m % n_dimension == 3) then - filt % surfaces = (/ IN_RIGHT, OUT_RIGHT, IN_FRONT, OUT_FRONT, & - IN_TOP, OUT_TOP /) + filt % surfaces = (/ OUT_LEFT, IN_LEFT, IN_RIGHT, OUT_RIGHT, & + OUT_BACK, IN_BACK, IN_FRONT, OUT_FRONT, & + OUT_BOTTOM, IN_BOTTOM, IN_TOP, OUT_TOP /) end if end select t % find_filter(FILTER_SURFACE) = n_filters diff --git a/src/constants.F90 b/src/constants.F90 index a22c9ac050..9cdc430af1 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -54,7 +54,8 @@ module constants ! Maximum number of external source spatial resamples to encounter before an ! error is thrown. - integer, parameter :: MAX_EXTSRC_RESAMPLES = 10000 + integer, parameter :: EXTSRC_REJECT_THRESHOLD = 10000 + real(8), parameter :: EXTSRC_REJECT_FRACTION = 0.05 ! ============================================================================ ! PHYSICAL CONSTANTS @@ -267,6 +268,12 @@ module constants JENDL_33 = 7, & JENDL_40 = 8 + ! Temperature treatment method + integer, parameter :: & + TEMPERATURE_NEAREST = 1, & + TEMPERATURE_INTERPOLATION = 2, & + TEMPERATURE_MULTIPOLE = 3 + ! ============================================================================ ! TALLY-RELATED CONSTANTS @@ -289,7 +296,7 @@ module constants EVENT_ABSORB = 2 ! Tally score type - integer, parameter :: N_SCORE_TYPES = 21 + integer, parameter :: N_SCORE_TYPES = 23 integer, parameter :: & SCORE_FLUX = -1, & ! flux SCORE_TOTAL = -2, & ! total reaction rate @@ -311,7 +318,9 @@ module constants SCORE_EVENTS = -18, & ! number of events SCORE_DELAYED_NU_FISSION = -19, & ! delayed neutron production rate SCORE_PROMPT_NU_FISSION = -20, & ! prompt neutron production rate - SCORE_INVERSE_VELOCITY = -21 ! flux-weighted inverse velocity + SCORE_INVERSE_VELOCITY = -21, & ! flux-weighted inverse velocity + SCORE_FISS_Q_PROMPT = -22, & ! prompt fission Q-value + SCORE_FISS_Q_RECOV = -23 ! recoverable fission Q-value ! Maximum scattering order supported integer, parameter :: MAX_ANG_ORDER = 10 @@ -356,12 +365,18 @@ module constants ! Tally surface current directions integer, parameter :: & - IN_RIGHT = 1, & - OUT_RIGHT = 2, & - IN_FRONT = 3, & - OUT_FRONT = 4, & - IN_TOP = 5, & - OUT_TOP = 6 + OUT_LEFT = 1, & ! x min + OUT_RIGHT = 2, & ! x max + OUT_BACK = 3, & ! y min + OUT_FRONT = 4, & ! y max + OUT_BOTTOM = 5, & ! z min + OUT_TOP = 6, & ! z max + IN_LEFT = 7, & ! x min + IN_RIGHT = 8, & ! x max + IN_BACK = 9, & ! y min + IN_FRONT = 10, & ! y max + IN_BOTTOM = 11, & ! z min + IN_TOP = 12 ! z max ! Tally trigger types and threshold integer, parameter :: & @@ -380,11 +395,12 @@ module constants ! ============================================================================ ! RANDOM NUMBER STREAM CONSTANTS - integer, parameter :: N_STREAMS = 4 + integer, parameter :: N_STREAMS = 5 integer, parameter :: STREAM_TRACKING = 1 integer, parameter :: STREAM_TALLIES = 2 integer, parameter :: STREAM_SOURCE = 3 integer, parameter :: STREAM_URR_PTABLE = 4 + integer, parameter :: STREAM_VOLUME = 5 ! ============================================================================ ! MISCELLANEOUS CONSTANTS @@ -397,12 +413,6 @@ module constants integer, parameter :: ERROR_INT = -huge(0) real(8), parameter :: ERROR_REAL = -huge(0.0_8) * 0.917826354_8 - ! Energy grid methods - integer, parameter :: & - GRID_NUCLIDE = 1, & ! unique energy grid for each nuclide - GRID_MAT_UNION = 2, & ! material union grids with pointers - GRID_LOGARITHM = 3 ! lethargy mapping - ! Running modes integer, parameter :: & MODE_FIXEDSOURCE = 1, & ! Fixed source mode diff --git a/src/cross_section.F90 b/src/cross_section.F90 index a8acb25a83..e2cc31d5ea 100644 --- a/src/cross_section.F90 +++ b/src/cross_section.F90 @@ -1,7 +1,8 @@ module cross_section + use algorithm, only: binary_search use constants - use energy_grid, only: grid_method, log_spacing + use energy_grid, only: log_spacing use error, only: fatal_error use global use list_header, only: ListElemInt @@ -14,7 +15,6 @@ module cross_section use particle_header, only: Particle use random_lcg, only: prn, future_prn, prn_set_stream use sab_header, only: SAlphaBeta - use search, only: binary_search implicit none @@ -37,7 +37,6 @@ contains ! union grid real(8) :: atom_density ! atom density of a nuclide logical :: check_sab ! should we check for S(a,b) table? - type(Material), pointer :: mat ! current material ! Set all material macroscopic cross sections to zero material_xs % total = ZERO @@ -49,89 +48,83 @@ contains ! Exit subroutine if material is void if (p % material == MATERIAL_VOID) return - mat => materials(p % material) - - ! Find energy index on energy grid - if (grid_method == GRID_MAT_UNION) then - i_grid = find_energy_index(mat, p % E) - else if (grid_method == GRID_LOGARITHM) then + associate (mat => materials(p % material)) + ! Find energy index on energy grid i_grid = int(log(p % E/energy_min_neutron)/log_spacing) - end if - ! Determine if this material has S(a,b) tables - check_sab = (mat % n_sab > 0) + ! Determine if this material has S(a,b) tables + check_sab = (mat % n_sab > 0) - ! Initialize position in i_sab_nuclides - j = 1 + ! Initialize position in i_sab_nuclides + j = 1 - ! Add contribution from each nuclide in material - do i = 1, mat % n_nuclides - ! ======================================================================== - ! CHECK FOR S(A,B) TABLE + ! Add contribution from each nuclide in material + do i = 1, mat % n_nuclides + ! ======================================================================== + ! CHECK FOR S(A,B) TABLE - i_sab = 0 + i_sab = 0 - ! Check if this nuclide matches one of the S(a,b) tables specified -- this - ! relies on i_sab_nuclides being in sorted order - if (check_sab) then - if (i == mat % i_sab_nuclides(j)) then - ! Get index in sab_tables - i_sab = mat % i_sab_tables(j) + ! Check if this nuclide matches one of the S(a,b) tables specified -- this + ! relies on i_sab_nuclides being in sorted order + if (check_sab) then + if (i == mat % i_sab_nuclides(j)) then + ! Get index in sab_tables + i_sab = mat % i_sab_tables(j) - ! If particle energy is greater than the highest energy for the S(a,b) - ! table, don't use the S(a,b) table - if (p % E > sab_tables(i_sab) % threshold_inelastic) i_sab = 0 + ! If particle energy is greater than the highest energy for the S(a,b) + ! table, don't use the S(a,b) table + if (p % E > sab_tables(i_sab) % data(1) % threshold_inelastic) i_sab = 0 - ! Increment position in i_sab_nuclides - j = j + 1 + ! Increment position in i_sab_nuclides + j = j + 1 - ! Don't check for S(a,b) tables if there are no more left - if (j > mat % n_sab) check_sab = .false. + ! Don't check for S(a,b) tables if there are no more left + if (j > mat % n_sab) check_sab = .false. + end if end if - end if - ! ======================================================================== - ! CALCULATE MICROSCOPIC CROSS SECTION + ! ======================================================================== + ! CALCULATE MICROSCOPIC CROSS SECTION - ! Determine microscopic cross sections for this nuclide - i_nuclide = mat % nuclide(i) + ! Determine microscopic cross sections for this nuclide + i_nuclide = mat % nuclide(i) - ! Calculate microscopic cross section for this nuclide - if (p % E /= micro_xs(i_nuclide) % last_E & - .or. p % sqrtkT /= micro_xs(i_nuclide) % last_sqrtkT) then - call calculate_nuclide_xs(i_nuclide, i_sab, p % E, p % material, i, & - i_grid, p % sqrtkT) - else if (i_sab /= micro_xs(i_nuclide) % last_index_sab) then - call calculate_nuclide_xs(i_nuclide, i_sab, p % E, p % material, i, & - i_grid, p % sqrtkT) - end if + ! Calculate microscopic cross section for this nuclide + if (p % E /= micro_xs(i_nuclide) % last_E & + .or. p % sqrtkT /= micro_xs(i_nuclide) % last_sqrtkT) then + call calculate_nuclide_xs(i_nuclide, i_sab, p % E, i_grid, p % sqrtkT) + else if (i_sab /= micro_xs(i_nuclide) % last_index_sab) then + call calculate_nuclide_xs(i_nuclide, i_sab, p % E, i_grid, p % sqrtkT) + end if - ! ======================================================================== - ! ADD TO MACROSCOPIC CROSS SECTION + ! ======================================================================== + ! ADD TO MACROSCOPIC CROSS SECTION - ! Copy atom density of nuclide in material - atom_density = mat % atom_density(i) + ! Copy atom density of nuclide in material + atom_density = mat % atom_density(i) - ! Add contributions to material macroscopic total cross section - material_xs % total = material_xs % total + & - atom_density * micro_xs(i_nuclide) % total + ! Add contributions to material macroscopic total cross section + material_xs % total = material_xs % total + & + atom_density * micro_xs(i_nuclide) % total - ! Add contributions to material macroscopic scattering cross section - material_xs % elastic = material_xs % elastic + & - atom_density * micro_xs(i_nuclide) % elastic + ! Add contributions to material macroscopic scattering cross section + material_xs % elastic = material_xs % elastic + & + atom_density * micro_xs(i_nuclide) % elastic - ! Add contributions to material macroscopic absorption cross section - material_xs % absorption = material_xs % absorption + & - atom_density * micro_xs(i_nuclide) % absorption + ! Add contributions to material macroscopic absorption cross section + material_xs % absorption = material_xs % absorption + & + atom_density * micro_xs(i_nuclide) % absorption - ! Add contributions to material macroscopic fission cross section - material_xs % fission = material_xs % fission + & - atom_density * micro_xs(i_nuclide) % fission + ! Add contributions to material macroscopic fission cross section + material_xs % fission = material_xs % fission + & + atom_density * micro_xs(i_nuclide) % fission - ! Add contributions to material macroscopic nu-fission cross section - material_xs % nu_fission = material_xs % nu_fission + & - atom_density * micro_xs(i_nuclide) % nu_fission - end do + ! Add contributions to material macroscopic nu-fission cross section + material_xs % nu_fission = material_xs % nu_fission + & + atom_density * micro_xs(i_nuclide) % nu_fission + end do + end associate end subroutine calculate_xs @@ -140,169 +133,162 @@ contains ! given index in the nuclides array at the energy of the given particle !=============================================================================== - subroutine calculate_nuclide_xs(i_nuclide, i_sab, E, i_mat, i_nuc_mat, & - i_log_union, sqrtkT) + subroutine calculate_nuclide_xs(i_nuclide, i_sab, E, i_log_union, sqrtkT) integer, intent(in) :: i_nuclide ! index into nuclides array integer, intent(in) :: i_sab ! index into sab_tables array real(8), intent(in) :: E ! energy - integer, intent(in) :: i_mat ! index into materials array - integer, intent(in) :: i_nuc_mat ! index into nuclides array for a material integer, intent(in) :: i_log_union ! index into logarithmic mapping array or ! material union energy grid real(8), intent(in) :: sqrtkT ! Square root of kT, material dependent logical :: use_mp ! true if XS can be calculated with windowed multipole + integer :: i_temp ! index for temperature integer :: i_grid ! index on nuclide energy grid integer :: i_low ! lower logarithmic mapping index integer :: i_high ! upper logarithmic mapping index real(8) :: f ! interp factor on nuclide energy grid + real(8) :: kT ! temperature in MeV real(8) :: sigT, sigA, sigF ! Intermediate multipole variables - type(Nuclide), pointer :: nuc - type(Material), pointer :: mat - ! Set pointer to nuclide and material - nuc => nuclides(i_nuclide) - mat => materials(i_mat) - - ! Check to see if there is multipole data present at this energy - use_mp = .false. - if (nuc % mp_present) then - if (E >= nuc % multipole % start_E/1.0e6_8 .and. & - E <= nuc % multipole % end_E/1.0e6_8) then - use_mp = .true. - end if - end if - - ! Evaluate multipole or interpolate - if (use_mp) then - ! Call multipole kernel - call multipole_eval(nuc % multipole, E, sqrtkT, sigT, sigA, sigF) - - micro_xs(i_nuclide) % total = sigT - micro_xs(i_nuclide) % absorption = sigA - micro_xs(i_nuclide) % elastic = sigT - sigA - - if (nuc % fissionable) then - micro_xs(i_nuclide) % fission = sigF - micro_xs(i_nuclide) % nu_fission = sigF * nuc % nu(E, EMISSION_TOTAL) + associate (nuc => nuclides(i_nuclide)) + ! Check to see if there is multipole data present at this energy + use_mp = .false. + if (nuc % mp_present) then + if (E >= nuc % multipole % start_E/1.0e6_8 .and. & + E <= nuc % multipole % end_E/1.0e6_8) then + use_mp = .true. + else + ! If using multipole data but outside the RRR, pick the nearest + ! temperature. Note that there is no tolerance here, so this + ! temperature could be very far off! + kT = sqrtkT**2 + i_temp = minloc(abs(nuclides(i_nuclide) % kTs - kT), dim=1) + end if else - micro_xs(i_nuclide) % fission = ZERO - micro_xs(i_nuclide) % nu_fission = ZERO + ! If not using multipole data, do a linear search on temperature + kT = sqrtkT**2 + do i_temp = 1, size(nuclides(i_nuclide) % kTs) + if (abs(nuclides(i_nuclide) % kTs(i_temp) - kT) < & + K_BOLTZMANN*temperature_tolerance) exit + end do end if - ! Ensure these values are set - ! Note, the only time either is used is in one of 4 places: - ! 1. physics.F90 - scatter - For inelastic scatter. - ! 2. physics.F90 - sample_fission - For partial fissions. - ! 3. tally.F90 - score_general - For tallying on MTxxx reactions. - ! 4. cross_section.F90 - calculate_urr_xs - For unresolved purposes. - ! It is worth noting that none of these occur in the resolved - ! resonance range, so the value here does not matter. - micro_xs(i_nuclide) % index_grid = 0 - micro_xs(i_nuclide) % interp_factor = ZERO - else - ! Determine index on nuclide energy grid - select case (grid_method) - case (GRID_MAT_UNION) + ! Evaluate multipole or interpolate + if (use_mp) then + ! Call multipole kernel + call multipole_eval(nuc % multipole, E, sqrtkT, sigT, sigA, sigF) - i_grid = mat % nuclide_grid_index(i_nuc_mat, i_log_union) + micro_xs(i_nuclide) % total = sigT + micro_xs(i_nuclide) % absorption = sigA + micro_xs(i_nuclide) % elastic = sigT - sigA - case (GRID_LOGARITHM) - ! Determine the energy grid index using a logarithmic mapping to reduce - ! the energy range over which a binary search needs to be performed - - if (E < nuc % energy(1)) then - i_grid = 1 - elseif (E > nuc % energy(nuc % n_grid)) then - i_grid = nuc % n_grid - 1 + if (nuc % fissionable) then + micro_xs(i_nuclide) % fission = sigF + micro_xs(i_nuclide) % nu_fission = sigF * nuc % nu(E, EMISSION_TOTAL) else - ! Determine bounding indices based on which equal log-spaced interval - ! the energy is in - i_low = nuc % grid_index(i_log_union) - i_high = nuc % grid_index(i_log_union + 1) + 1 - - ! Perform binary search over reduced range - i_grid = binary_search(nuc % energy(i_low:i_high), & - i_high - i_low + 1, E) + i_low - 1 + micro_xs(i_nuclide) % fission = ZERO + micro_xs(i_nuclide) % nu_fission = ZERO end if - case (GRID_NUCLIDE) - ! Perform binary search on the nuclide energy grid in order to determine - ! which points to interpolate between + ! Ensure these values are set + ! Note, the only time either is used is in one of 4 places: + ! 1. physics.F90 - scatter - For inelastic scatter. + ! 2. physics.F90 - sample_fission - For partial fissions. + ! 3. tally.F90 - score_general - For tallying on MTxxx reactions. + ! 4. cross_section.F90 - calculate_urr_xs - For unresolved purposes. + ! It is worth noting that none of these occur in the resolved + ! resonance range, so the value here does not matter. + micro_xs(i_nuclide) % index_temp = i_temp + micro_xs(i_nuclide) % index_grid = 0 + micro_xs(i_nuclide) % interp_factor = ZERO + else + associate (grid => nuc % grid(i_temp), xs => nuc % sum_xs(i_temp)) + ! Determine the energy grid index using a logarithmic mapping to reduce + ! the energy range over which a binary search needs to be performed - if (E <= nuc % energy(1)) then - i_grid = 1 - elseif (E > nuc % energy(nuc % n_grid)) then - i_grid = nuc % n_grid - 1 - else - i_grid = binary_search(nuc % energy, nuc % n_grid, E) + if (E < grid % energy(1)) then + i_grid = 1 + elseif (E > grid % energy(size(grid % energy))) then + i_grid = size(grid % energy) - 1 + else + ! Determine bounding indices based on which equal log-spaced interval + ! the energy is in + i_low = grid % grid_index(i_log_union) + i_high = grid % grid_index(i_log_union + 1) + 1 + + ! Perform binary search over reduced range + i_grid = binary_search(grid % energy(i_low:i_high), & + i_high - i_low + 1, E) + i_low - 1 + end if + + ! check for rare case where two energy points are the same + if (grid % energy(i_grid) == grid % energy(i_grid + 1)) & + i_grid = i_grid + 1 + + ! calculate interpolation factor + f = (E - grid % energy(i_grid)) / & + (grid % energy(i_grid + 1) - grid % energy(i_grid)) + + micro_xs(i_nuclide) % index_temp = i_temp + micro_xs(i_nuclide) % index_grid = i_grid + micro_xs(i_nuclide) % interp_factor = f + + ! Initialize nuclide cross-sections to zero + micro_xs(i_nuclide) % fission = ZERO + micro_xs(i_nuclide) % nu_fission = ZERO + + ! Calculate microscopic nuclide total cross section + micro_xs(i_nuclide) % total = (ONE - f) * xs % total(i_grid) & + + f * xs % total(i_grid + 1) + + ! Calculate microscopic nuclide elastic cross section + micro_xs(i_nuclide) % elastic = (ONE - f) * xs % elastic(i_grid) & + + f * xs % elastic(i_grid + 1) + + ! Calculate microscopic nuclide absorption cross section + micro_xs(i_nuclide) % absorption = (ONE - f) * xs % absorption( & + i_grid) + f * xs % absorption(i_grid + 1) + + if (nuc % fissionable) then + ! Calculate microscopic nuclide total cross section + micro_xs(i_nuclide) % fission = (ONE - f) * xs % fission(i_grid) & + + f * xs % fission(i_grid + 1) + + ! Calculate microscopic nuclide nu-fission cross section + micro_xs(i_nuclide) % nu_fission = (ONE - f) * xs % nu_fission( & + i_grid) + f * xs % nu_fission(i_grid + 1) + end if + end associate + end if + + ! Initialize sab treatment to false + micro_xs(i_nuclide) % index_sab = NONE + micro_xs(i_nuclide) % elastic_sab = ZERO + + ! Initialize URR probability table treatment to false + micro_xs(i_nuclide) % use_ptable = .false. + + ! If there is S(a,b) data for this nuclide, we need to do a few + ! things. Since the total cross section was based on non-S(a,b) data, we + ! need to correct it by subtracting the non-S(a,b) elastic cross section and + ! then add back in the calculated S(a,b) elastic+inelastic cross section. + + if (i_sab > 0) call calculate_sab_xs(i_nuclide, i_sab, E, sqrtkT) + + ! if the particle is in the unresolved resonance range and there are + ! probability tables, we need to determine cross sections from the table + + if (urr_ptables_on .and. nuc % urr_present .and. .not. use_mp) then + if (E > nuc % urr_data(i_temp) % energy(1) .and. E < nuc % & + urr_data(i_temp) % energy(nuc % urr_data(i_temp) % n_energy)) then + call calculate_urr_xs(i_nuclide, i_temp, E) end if - - end select - - ! check for rare case where two energy points are the same - if (nuc % energy(i_grid) == nuc % energy(i_grid+1)) i_grid = i_grid + 1 - - ! calculate interpolation factor - f = (E - nuc%energy(i_grid))/(nuc%energy(i_grid+1) - nuc%energy(i_grid)) - - micro_xs(i_nuclide) % index_grid = i_grid - micro_xs(i_nuclide) % interp_factor = f - - ! Initialize nuclide cross-sections to zero - micro_xs(i_nuclide) % fission = ZERO - micro_xs(i_nuclide) % nu_fission = ZERO - - ! Calculate microscopic nuclide total cross section - micro_xs(i_nuclide) % total = (ONE - f) * nuc % total(i_grid) & - + f * nuc % total(i_grid+1) - - ! Calculate microscopic nuclide elastic cross section - micro_xs(i_nuclide) % elastic = (ONE - f) * nuc % elastic(i_grid) & - + f * nuc % elastic(i_grid+1) - - ! Calculate microscopic nuclide absorption cross section - micro_xs(i_nuclide) % absorption = (ONE - f) * nuc % absorption( & - i_grid) + f * nuc % absorption(i_grid+1) - - if (nuc % fissionable) then - ! Calculate microscopic nuclide total cross section - micro_xs(i_nuclide) % fission = (ONE - f) * nuc % fission(i_grid) & - + f * nuc % fission(i_grid+1) - - ! Calculate microscopic nuclide nu-fission cross section - micro_xs(i_nuclide) % nu_fission = (ONE - f) * nuc % nu_fission( & - i_grid) + f * nuc % nu_fission(i_grid+1) end if - end if - ! Initialize sab treatment to false - micro_xs(i_nuclide) % index_sab = NONE - micro_xs(i_nuclide) % elastic_sab = ZERO - - ! Initialize URR probability table treatment to false - micro_xs(i_nuclide) % use_ptable = .false. - - ! If there is S(a,b) data for this nuclide, we need to do a few - ! things. Since the total cross section was based on non-S(a,b) data, we - ! need to correct it by subtracting the non-S(a,b) elastic cross section and - ! then add back in the calculated S(a,b) elastic+inelastic cross section. - - if (i_sab > 0) call calculate_sab_xs(i_nuclide, i_sab, E) - - ! if the particle is in the unresolved resonance range and there are - ! probability tables, we need to determine cross sections from the table - - if (urr_ptables_on .and. nuc % urr_present) then - if (E > nuc % urr_data % energy(1) .and. & - E < nuc % urr_data % energy(nuc % urr_data % n_energy)) then - call calculate_urr_xs(i_nuclide, E) - end if - end if - - micro_xs(i_nuclide) % last_E = E - micro_xs(i_nuclide) % last_index_sab = i_sab - micro_xs(i_nuclide) % last_sqrtkT = sqrtkT + micro_xs(i_nuclide) % last_E = E + micro_xs(i_nuclide) % last_index_sab = i_sab + micro_xs(i_nuclide) % last_sqrtkT = sqrtkT + end associate end subroutine calculate_nuclide_xs @@ -312,75 +298,85 @@ contains ! whatever data were taken from the normal Nuclide table. !=============================================================================== - subroutine calculate_sab_xs(i_nuclide, i_sab, E) + subroutine calculate_sab_xs(i_nuclide, i_sab, E, sqrtkT) integer, intent(in) :: i_nuclide ! index into nuclides array integer, intent(in) :: i_sab ! index into sab_tables array real(8), intent(in) :: E ! energy + real(8), intent(in) :: sqrtkT ! temperature integer :: i_grid ! index on S(a,b) energy grid + integer :: i_temp ! temperature index real(8) :: f ! interp factor on S(a,b) energy grid real(8) :: inelastic ! S(a,b) inelastic cross section real(8) :: elastic ! S(a,b) elastic cross section - type(SAlphaBeta), pointer :: sab + real(8) :: kT ! Set flag that S(a,b) treatment should be used for scattering micro_xs(i_nuclide) % index_sab = i_sab + ! Determine temperature for S(a,b) table + kT = sqrtkT**2 + do i_temp = 1, size(sab_tables(i_sab) % kTs) + if (abs(sab_tables(i_sab) % kTs(i_temp) - kT) < & + K_BOLTZMANN*temperature_tolerance) exit + end do + ! Get pointer to S(a,b) table - sab => sab_tables(i_sab) + associate (sab => sab_tables(i_sab) % data(i_temp)) - ! Get index and interpolation factor for inelastic grid - if (E < sab % inelastic_e_in(1)) then - i_grid = 1 - f = ZERO - else - i_grid = binary_search(sab % inelastic_e_in, sab % n_inelastic_e_in, E) - f = (E - sab%inelastic_e_in(i_grid)) / & - (sab%inelastic_e_in(i_grid+1) - sab%inelastic_e_in(i_grid)) - end if + ! Get index and interpolation factor for inelastic grid + if (E < sab % inelastic_e_in(1)) then + i_grid = 1 + f = ZERO + else + i_grid = binary_search(sab % inelastic_e_in, sab % n_inelastic_e_in, E) + f = (E - sab%inelastic_e_in(i_grid)) / & + (sab%inelastic_e_in(i_grid+1) - sab%inelastic_e_in(i_grid)) + end if - ! Calculate S(a,b) inelastic scattering cross section - inelastic = (ONE - f) * sab % inelastic_sigma(i_grid) + & - f * sab % inelastic_sigma(i_grid + 1) + ! Calculate S(a,b) inelastic scattering cross section + inelastic = (ONE - f) * sab % inelastic_sigma(i_grid) + & + f * sab % inelastic_sigma(i_grid + 1) - ! Check for elastic data - if (E < sab % threshold_elastic) then - ! Determine whether elastic scattering is given in the coherent or - ! incoherent approximation. For coherent, the cross section is - ! represented as P/E whereas for incoherent, it is simply P + ! Check for elastic data + if (E < sab % threshold_elastic) then + ! Determine whether elastic scattering is given in the coherent or + ! incoherent approximation. For coherent, the cross section is + ! represented as P/E whereas for incoherent, it is simply P - if (sab % elastic_mode == SAB_ELASTIC_EXACT) then - if (E < sab % elastic_e_in(1)) then - ! If energy is below that of the lowest Bragg peak, the elastic - ! cross section will be zero - elastic = ZERO + if (sab % elastic_mode == SAB_ELASTIC_EXACT) then + if (E < sab % elastic_e_in(1)) then + ! If energy is below that of the lowest Bragg peak, the elastic + ! cross section will be zero + elastic = ZERO + else + i_grid = binary_search(sab % elastic_e_in, & + sab % n_elastic_e_in, E) + elastic = sab % elastic_P(i_grid) / E + end if else - i_grid = binary_search(sab % elastic_e_in, & - sab % n_elastic_e_in, E) - elastic = sab % elastic_P(i_grid) / E + ! Determine index on elastic energy grid + if (E < sab % elastic_e_in(1)) then + i_grid = 1 + else + i_grid = binary_search(sab % elastic_e_in, & + sab % n_elastic_e_in, E) + end if + + ! Get interpolation factor for elastic grid + f = (E - sab%elastic_e_in(i_grid))/(sab%elastic_e_in(i_grid+1) - & + sab%elastic_e_in(i_grid)) + + ! Calculate S(a,b) elastic scattering cross section + elastic = (ONE - f) * sab % elastic_P(i_grid) + & + f * sab % elastic_P(i_grid + 1) end if else - ! Determine index on elastic energy grid - if (E < sab % elastic_e_in(1)) then - i_grid = 1 - else - i_grid = binary_search(sab % elastic_e_in, & - sab % n_elastic_e_in, E) - end if - - ! Get interpolation factor for elastic grid - f = (E - sab%elastic_e_in(i_grid))/(sab%elastic_e_in(i_grid+1) - & - sab%elastic_e_in(i_grid)) - - ! Calculate S(a,b) elastic scattering cross section - elastic = (ONE - f) * sab % elastic_P(i_grid) + & - f * sab % elastic_P(i_grid + 1) + ! No elastic data + elastic = ZERO end if - else - ! No elastic data - elastic = ZERO - end if + end associate ! Correct total and elastic cross sections micro_xs(i_nuclide) % total = micro_xs(i_nuclide) % total - & @@ -390,6 +386,9 @@ contains ! Store S(a,b) elastic cross section for sampling later micro_xs(i_nuclide) % elastic_sab = elastic + ! Save temperature index + micro_xs(i_nuclide) % index_temp_sab = i_temp + end subroutine calculate_sab_xs !=============================================================================== @@ -397,9 +396,9 @@ contains ! from probability tables !=============================================================================== - subroutine calculate_urr_xs(i_nuclide, E) - + subroutine calculate_urr_xs(i_nuclide, i_temp, E) integer, intent(in) :: i_nuclide ! index into nuclides array + integer, intent(in) :: i_temp ! temperature index real(8), intent(in) :: E ! energy integer :: i_energy ! index for energy @@ -414,7 +413,7 @@ contains micro_xs(i_nuclide) % use_ptable = .true. - associate (nuc => nuclides(i_nuclide), urr => nuclides(i_nuclide) % urr_data) + associate (nuc => nuclides(i_nuclide), urr => nuclides(i_nuclide) % urr_data(i_temp)) ! determine energy table i_energy = 1 do @@ -433,7 +432,7 @@ contains ! random number for the same nuclide at different temperatures, therefore ! preserving correlation of temperature in probability tables. call prn_set_stream(STREAM_URR_PTABLE) - r = future_prn(int(nuc_zaid_dict % get_key(nuc % zaid), 8)) + r = future_prn(int(i_nuclide, 8)) call prn_set_stream(STREAM_TRACKING) i_low = 1 @@ -497,10 +496,10 @@ contains f = micro_xs(i_nuclide) % interp_factor ! Determine inelastic scattering cross section - associate (rxn => nuc % reactions(nuc % urr_inelastic)) - if (i_energy >= rxn % threshold) then - inelastic = (ONE - f) * rxn % sigma(i_energy - rxn%threshold + 1) + & - f * rxn % sigma(i_energy - rxn%threshold + 2) + associate (xs => nuc % reactions(nuc % urr_inelastic) % xs(i_temp)) + if (i_energy >= xs % threshold) then + inelastic = (ONE - f) * xs % value(i_energy - xs % threshold + 1) + & + f * xs % value(i_energy - xs % threshold + 2) end if end associate end if diff --git a/src/eigenvalue.F90 b/src/eigenvalue.F90 index 9befbe3c3d..713bbc351a 100644 --- a/src/eigenvalue.F90 +++ b/src/eigenvalue.F90 @@ -4,6 +4,7 @@ module eigenvalue use message_passing #endif + use algorithm, only: binary_search use constants, only: ZERO use error, only: fatal_error, warning use global @@ -11,7 +12,6 @@ module eigenvalue use mesh, only: count_bank_sites use mesh_header, only: RegularMesh use random_lcg, only: prn, set_particle_seed, advance_prn_seed - use search, only: binary_search use string, only: to_str implicit none diff --git a/src/endf.F90 b/src/endf.F90 index a836a54397..07094d5d9b 100644 --- a/src/endf.F90 +++ b/src/endf.F90 @@ -14,7 +14,7 @@ contains pure function reaction_name(MT) result(string) integer, intent(in) :: MT - character(20) :: string + character(MAX_WORD_LEN) :: string select case (MT) ! Special reactions for tallies @@ -60,6 +60,10 @@ contains string = "events" case (SCORE_INVERSE_VELOCITY) string = "inverse-velocity" + case (SCORE_FISS_Q_PROMPT) + string = "fission-q-prompt" + case (SCORE_FISS_Q_RECOV) + string = "fission-q-recoverable" ! Normal ENDF-based reactions case (TOTAL_XS) diff --git a/src/endf_header.F90 b/src/endf_header.F90 index c4b4ef3ad8..e9e45ab751 100644 --- a/src/endf_header.F90 +++ b/src/endf_header.F90 @@ -2,10 +2,10 @@ module endf_header use hdf5, only: HID_T, HSIZE_T + use algorithm, only: binary_search use constants, only: ZERO, HISTOGRAM, LINEAR_LINEAR, LINEAR_LOG, & LOG_LINEAR, LOG_LOG use hdf5_interface - use search, only: binary_search implicit none @@ -30,17 +30,6 @@ module endf_header end subroutine function1d_from_hdf5_ end interface -!=============================================================================== -! CONSTANT1D represents a constant one-dimensional function -!=============================================================================== - - type, extends(Function1D) :: Constant1D - real(8) :: y - contains - procedure :: from_hdf5 => constant1d_from_hdf5 - procedure :: evaluate => constant1d_evaluate - end type Constant1D - !=============================================================================== ! POLYNOMIAL represents a one-dimensional function expressed as a polynomial !=============================================================================== @@ -72,25 +61,6 @@ module endf_header contains -!=============================================================================== -! Constant1D implementation -!=============================================================================== - - subroutine constant1d_from_hdf5(this, dset_id) - class(Constant1D), intent(inout) :: this - integer(HID_T), intent(in) :: dset_id - - call read_dataset(this % y, dset_id) - end subroutine constant1d_from_hdf5 - - pure function constant1d_evaluate(this, x) result(y) - class(Constant1D), intent(in) :: this - real(8), intent(in) :: x - real(8) :: y - - y = this % y - end function constant1d_evaluate - !=============================================================================== ! Polynomial implementation !=============================================================================== diff --git a/src/energy_distribution.F90 b/src/energy_distribution.F90 index c45762bb0a..770da617cc 100644 --- a/src/energy_distribution.F90 +++ b/src/energy_distribution.F90 @@ -2,12 +2,12 @@ module energy_distribution use hdf5 + use algorithm, only: binary_search use constants, only: ZERO, ONE, HALF, TWO, PI, HISTOGRAM, LINEAR_LINEAR use endf_header, only: Tabulated1D use hdf5_interface use math, only: maxwell_spectrum, watt_spectrum use random_lcg, only: prn - use search, only: binary_search !=============================================================================== ! ENERGYDISTRIBUTION (abstract) defines an energy distribution that is a diff --git a/src/energy_grid.F90 b/src/energy_grid.F90 index 66419f83cc..47408943e3 100644 --- a/src/energy_grid.F90 +++ b/src/energy_grid.F90 @@ -13,64 +13,18 @@ module energy_grid contains -!=============================================================================== -! UNIONIZED_GRID creates a unionized energy grid, for the entire problem or for -! each material, composed of the grids from each nuclide in the entire problem, -! or each material, respectively. Right now, the grid for each nuclide is added -! into a linked list one at a time with an effective insertion sort. Could be -! done with a hash for all energy points and then a quicksort at the end (what -! hash function to use?) -!=============================================================================== - - subroutine unionized_grid() - - integer :: i ! index in nuclides array - integer :: j ! index in materials array - type(ListReal) :: list - type(Nuclide), pointer :: nuc - type(Material), pointer :: mat - - call write_message("Creating unionized energy grid...", 5) - - ! add grid points for each nuclide in the material - do j = 1, n_materials - mat => materials(j) - do i = 1, mat % n_nuclides - nuc => nuclides(mat % nuclide(i)) - call add_grid_points(list, nuc % energy) - end do - - ! set size of unionized material energy grid - mat % n_grid = list % size() - - ! create allocated array from linked list - allocate(mat % e_grid(mat % n_grid)) - do i = 1, mat % n_grid - mat % e_grid(i) = list % get_item(i) - end do - - ! delete linked list and dictionary - call list % clear() - end do - - ! Set pointers to unionized energy grid for each nuclide - call grid_pointers() - - end subroutine unionized_grid - !=============================================================================== ! LOGARITHMIC_GRID determines a logarithmic mapping for energies to bounding ! indices on a nuclide energy grid !=============================================================================== subroutine logarithmic_grid() - integer :: i, j, k ! Loop indices + integer :: t ! temperature index integer :: M ! Number of equally log-spaced bins real(8) :: E_max ! Maximum energy in MeV real(8) :: E_min ! Minimum energy in MeV real(8), allocatable :: umesh(:) ! Equally log-spaced energy grid - type(Nuclide), pointer :: nuc ! Set minimum/maximum energies E_max = energy_max_neutron @@ -85,123 +39,29 @@ contains umesh(:) = [(i*log_spacing, i=0, M)] do i = 1, n_nuclides_total - ! Allocate logarithmic mapping for nuclide - nuc => nuclides(i) - allocate(nuc % grid_index(0:M)) + associate (nuc => nuclides(i)) + do t = 1, size(nuc % grid) + ! Allocate logarithmic mapping for nuclide + allocate(nuc % grid(t) % grid_index(0:M)) - ! Determine corresponding indices in nuclide grid to energies on - ! equal-logarithmic grid - j = 1 - do k = 0, M - do while (log(nuc%energy(j + 1)/E_min) <= umesh(k)) - ! Ensure that for isotopes where maxval(nuc % energy) << E_max - ! that there are no out-of-bounds issues. - if (j + 1 == nuc % n_grid) then - exit - end if - j = j + 1 + ! Determine corresponding indices in nuclide grid to energies on + ! equal-logarithmic grid + j = 1 + do k = 0, M + do while (log(nuc % grid(t) % energy(j + 1)/E_min) <= umesh(k)) + ! Ensure that for isotopes where maxval(nuc % energy) << E_max + ! that there are no out-of-bounds issues. + if (j + 1 == size(nuc % grid(t) % energy)) exit + j = j + 1 + end do + nuc % grid(t) % grid_index(k) = j + end do end do - nuc % grid_index(k) = j - end do + end associate end do deallocate(umesh) end subroutine logarithmic_grid -!=============================================================================== -! ADD_GRID_POINTS adds energy points from the 'energy' array into a linked list -! of points already stored from previous arrays. -!=============================================================================== - - subroutine add_grid_points(list, energy) - - type(ListReal) :: list - real(8), intent(in) :: energy(:) - - integer :: i ! index in energy array - integer :: n ! size of energy array - integer :: current ! current index - real(8) :: E ! actual energy value - - i = 1 - n = size(energy) - - ! Set current index to beginning of the list - current = 1 - - do while (i <= n) - E = energy(i) - - ! If we've reached the end of the grid energy list, add the remaining - ! energy points to the end - if (current > list % size()) then - ! Finish remaining energies - do while (i <= n) - call list % append(energy(i)) - i = i + 1 - end do - exit - end if - - if (E < list % get_item(current)) then - - ! Insert new energy in this position - call list % insert(current, E) - - ! Advance index in linked list and in new energy grid - i = i + 1 - current = current + 1 - - elseif (E == list % get_item(current)) then - ! Found the exact same energy, no need to store duplicates so just - ! skip and move to next index - i = i + 1 - current = current + 1 - else - current = current + 1 - end if - - end do - - end subroutine add_grid_points - -!=============================================================================== -! GRID_POINTERS creates an array of pointers (ints) for each nuclide to link -! each point on the nuclide energy grid to one on a unionized energy grid -!=============================================================================== - - subroutine grid_pointers() - - integer :: i ! loop index for nuclides - integer :: j ! loop index for nuclide energy grid - integer :: k ! loop index for materials - integer :: index_e ! index on union energy grid - real(8) :: union_energy ! energy on union grid - real(8) :: energy ! energy on nuclide grid - type(Nuclide), pointer :: nuc - type(Material), pointer :: mat - - do k = 1, n_materials - mat => materials(k) - allocate(mat % nuclide_grid_index(mat % n_nuclides, mat % n_grid)) - do i = 1, mat % n_nuclides - nuc => nuclides(mat % nuclide(i)) - - index_e = 1 - energy = nuc % energy(index_e) - - do j = 1, mat % n_grid - union_energy = mat % e_grid(j) - if (union_energy >= energy .and. index_e < nuc % n_grid) then - index_e = index_e + 1 - energy = nuc % energy(index_e) - end if - mat % nuclide_grid_index(i,j) = index_e - 1 - end do - end do - end do - - end subroutine grid_pointers - end module energy_grid diff --git a/src/geometry.F90 b/src/geometry.F90 index 6d4ca77671..d41ca14475 100644 --- a/src/geometry.F90 +++ b/src/geometry.F90 @@ -248,14 +248,15 @@ contains ! ====================================================================== ! AT LOWEST UNIVERSE, TERMINATE SEARCH - ! Set the particle material + ! Save previous material and temperature p % last_material = p % material - if (size(c % material) == 1) then - ! Only one material for this cell; assign that one to the particle. - p % material = c % material(1) - else - ! Distributed instances of this cell have different materials. - ! Determine which instance this is and assign the matching material. + p % last_sqrtkT = p % sqrtkT + + ! Get distributed offset + if (size(c % material) > 1 .or. size(c % sqrtkT) > 1) then + ! Distributed instances of this cell have different + ! materials/temperatures. Determine which instance this is for + ! assigning the matching material/temperature. distribcell_index = c % distribcell_index offset = 0 do k = 1, p % n_coord @@ -276,37 +277,20 @@ contains end if end if end do - p % material = c % material(offset + 1) end if - ! Set the particle temperature - if (size(c % sqrtkT) == 1) then - ! Only one temperature for this cell; assign that one to the particle. - p % sqrtkT = c % sqrtkT(1) + ! Save the material + if (size(c % material) > 1) then + p % material = c % material(offset + 1) else - ! Distributed instances of this cell have different temperatures. - ! Determine which instance this is and assign the matching temp. - distribcell_index = c % distribcell_index - offset = 0 - do k = 1, p % n_coord - if (cells(p % coord(k) % cell) % type == CELL_FILL) then - offset = offset + cells(p % coord(k) % cell) % & - offset(distribcell_index) - elseif (cells(p % coord(k) % cell) % type == CELL_LATTICE) then - if (lattices(p % coord(k + 1) % lattice) % obj & - % are_valid_indices([& - p % coord(k + 1) % lattice_x, & - p % coord(k + 1) % lattice_y, & - p % coord(k + 1) % lattice_z])) then - offset = offset + lattices(p % coord(k + 1) % lattice) % obj % & - offset(distribcell_index, & - p % coord(k + 1) % lattice_x, & - p % coord(k + 1) % lattice_y, & - p % coord(k + 1) % lattice_z) - end if - end if - end do + p % material = c % material(1) + end if + + ! Save the temperature + if (size(c % sqrtkT) > 1) then p % sqrtkT = c % sqrtkT(offset + 1) + else + p % sqrtkT = c % sqrtkT(1) end if elseif (c % type == CELL_FILL) then CELL_TYPE diff --git a/src/global.F90 b/src/global.F90 index 1558c050e4..bea5f61a83 100644 --- a/src/global.F90 +++ b/src/global.F90 @@ -17,6 +17,7 @@ module global use tally_header, only: TallyObject, TallyResult use trigger_header, only: KTrigger use timer_header, only: Timer + use volume_header, only: VolumeCalculation #ifdef MPIF08 use mpi_f08 @@ -35,6 +36,8 @@ module global type(Material), allocatable, target :: materials(:) type(ObjectPlot), allocatable, target :: plots(:) + type(VolumeCalculation), allocatable :: volume_calcs(:) + ! Size of main arrays integer :: n_cells ! # of cells integer :: n_universes ! # of universes @@ -74,9 +77,6 @@ module global ! Dictionaries to look up cross sections and listings type(DictCharInt) :: nuclide_dict - ! Default xs identifier (e.g. 70c or 300K) - character(5):: default_xs - ! ============================================================================ ! CONTINUOUS-ENERGY CROSS SECTION RELATED VARIABLES @@ -99,13 +99,10 @@ module global ! What to assume for expanding natural elements integer :: default_expand = ENDF_BVII1 - ! Whether or not windowed multipole cross sections should be used. - logical :: multipole_active = .false. - - ! Total amount of nuclide ZAID and dictionary of nuclide ZAID and index -- - ! this is used when sampling unresolved resonance probability tables - integer(8) :: n_nuc_zaid_total - type(DictIntInt) :: nuc_zaid_dict + ! Default temperature and method for choosing temperatures + integer :: temperature_method = TEMPERATURE_NEAREST + real(8) :: temperature_tolerance = 10.0_8 + real(8) :: temperature_default = 293.6_8 ! ============================================================================ ! MULTI-GROUP CROSS SECTION RELATED VARIABLES @@ -430,7 +427,6 @@ module global ! Various output options logical :: output_summary = .true. - logical :: output_xs = .false. logical :: output_tallies = .true. ! ============================================================================ diff --git a/src/hdf5_interface.F90 b/src/hdf5_interface.F90 index 5a1e2a2fff..136628162c 100644 --- a/src/hdf5_interface.F90 +++ b/src/hdf5_interface.F90 @@ -73,10 +73,18 @@ module hdf5_interface module procedure read_attribute_integer_1D module procedure read_attribute_integer_2D module procedure read_attribute_string + module procedure read_attribute_string_1D end interface read_attribute + interface write_attribute + module procedure write_attribute_double + module procedure write_attribute_double_1D + module procedure write_attribute_integer + end interface write_attribute + public :: write_dataset public :: read_dataset + public :: write_attribute public :: read_attribute public :: file_create public :: file_open @@ -88,6 +96,8 @@ module hdf5_interface public :: close_dataset public :: get_shape public :: write_attribute_string + public :: get_groups + public :: get_datasets contains @@ -197,6 +207,82 @@ contains call h5fclose_f(file_id, hdf5_err) end subroutine file_close +!=============================================================================== +! GET_GROUPS Gets a list of all the groups in a given location. +!=============================================================================== + + subroutine get_groups(object_id, names) + integer(HID_T), intent(in) :: object_id + character(len=255), allocatable, intent(out) :: names(:) + + integer :: n_members, i, group_count, type + integer :: hdf5_err + character(len=255) :: name + + + ! Get number of members in this location + call h5gn_members_f(object_id, './', n_members, hdf5_err) + + ! Get the number of groups + group_count = 0 + do i = 0, n_members - 1 + call h5gget_obj_info_idx_f(object_id, "./", i, name, type, hdf5_err) + if (type == H5G_GROUP_F) then + group_count = group_count + 1 + end if + end do + + ! Now we can allocate the storage for the ids + allocate(names(group_count)) + group_count = 0 + do i = 0, n_members - 1 + call h5gget_obj_info_idx_f(object_id, "./", i, name, type, hdf5_err) + if (type == H5G_GROUP_F) then + group_count = group_count + 1 + names(group_count) = trim(name) + end if + end do + + end subroutine get_groups + +!=============================================================================== +! GET_DATASETS Gets a list of all the datasets in a given location. +!=============================================================================== + + subroutine get_datasets(object_id, names) + integer(HID_T), intent(in) :: object_id + character(len=255), allocatable, intent(out) :: names(:) + + integer :: n_members, i, dset_count, type + integer :: hdf5_err + character(len=255) :: name + + + ! Get number of members in this location + call h5gn_members_f(object_id, './', n_members, hdf5_err) + + ! Get the number of datasets + dset_count = 0 + do i = 0, n_members - 1 + call h5gget_obj_info_idx_f(object_id, "./", i, name, type, hdf5_err) + if (type == H5G_DATASET_F ) then + dset_count = dset_count + 1 + end if + end do + + ! Now we can allocate the storage for the ids + allocate(names(dset_count)) + dset_count = 0 + do i = 0, n_members - 1 + call h5gget_obj_info_idx_f(object_id, "./", i, name, type, hdf5_err) + if (type == H5G_DATASET_F ) then + dset_count = dset_count + 1 + names(dset_count) = trim(name) + end if + end do + + end subroutine get_datasets + !=============================================================================== ! OPEN_GROUP opens an existing HDF5 group !=============================================================================== @@ -2059,6 +2145,25 @@ contains call h5aclose_f(attr_id, hdf5_err) end subroutine read_attribute_double + subroutine write_attribute_double(obj_id, name, buffer) + integer(HID_T), intent(in) :: obj_id + character(*), intent(in) :: name + real(8), intent(in), target :: buffer + + integer :: hdf5_err + integer(HID_T) :: dspace_id + integer(HID_T) :: attr_id + type(C_PTR) :: f_ptr + + call h5screate_f(H5S_SCALAR_F, dspace_id, hdf5_err) + call h5acreate_f(obj_id, trim(name), H5T_NATIVE_DOUBLE, dspace_id, & + attr_id, hdf5_err) + f_ptr = c_loc(buffer) + call h5awrite_f(attr_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + call h5aclose_f(attr_id, hdf5_err) + call h5sclose_f(dspace_id, hdf5_err) + end subroutine write_attribute_double + subroutine read_attribute_double_1D(buffer, obj_id, name) real(8), target, allocatable, intent(inout) :: buffer(:) integer(HID_T), intent(in) :: obj_id @@ -2097,6 +2202,37 @@ contains call h5aread_f(attr_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) end subroutine read_attribute_double_1D_explicit + subroutine write_attribute_double_1D(obj_id, name, buffer) + integer(HID_T), intent(in) :: obj_id + character(*), intent(in) :: name + real(8), target, intent(in) :: buffer(:) + + integer(HSIZE_T) :: dims(1) + + dims(:) = shape(buffer) + call write_attribute_double_1D_explicit(obj_id, dims, name, buffer) + end subroutine write_attribute_double_1D + + subroutine write_attribute_double_1D_explicit(obj_id, dims, name, buffer) + integer(HID_T), intent(in) :: obj_id + integer(HSIZE_T), intent(in) :: dims(1) + character(*), intent(in) :: name + real(8), target, intent(in) :: buffer(dims(1)) + + integer :: hdf5_err + integer(HID_T) :: dspace_id + integer(HID_T) :: attr_id + type(C_PTR) :: f_ptr + + call h5screate_simple_f(1, dims, dspace_id, hdf5_err) + call h5acreate_f(obj_id, trim(name), H5T_NATIVE_DOUBLE, dspace_id, & + attr_id, hdf5_err) + f_ptr = c_loc(buffer) + call h5awrite_f(attr_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + call h5aclose_f(attr_id, hdf5_err) + call h5sclose_f(dspace_id, hdf5_err) + end subroutine write_attribute_double_1D_explicit + subroutine read_attribute_double_2D(buffer, obj_id, name) real(8), target, allocatable, intent(inout) :: buffer(:,:) integer(HID_T), intent(in) :: obj_id @@ -2150,6 +2286,25 @@ contains call h5aclose_f(attr_id, hdf5_err) end subroutine read_attribute_integer + subroutine write_attribute_integer(obj_id, name, buffer) + integer(HID_T), intent(in) :: obj_id + character(*), intent(in) :: name + integer, intent(in), target :: buffer + + integer :: hdf5_err + integer(HID_T) :: dspace_id + integer(HID_T) :: attr_id + type(C_PTR) :: f_ptr + + call h5screate_f(H5S_SCALAR_F, dspace_id, hdf5_err) + call h5acreate_f(obj_id, trim(name), H5T_NATIVE_INTEGER, dspace_id, & + attr_id, hdf5_err) + f_ptr = c_loc(buffer) + call h5awrite_f(attr_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + call h5aclose_f(attr_id, hdf5_err) + call h5sclose_f(dspace_id, hdf5_err) + end subroutine write_attribute_integer + subroutine read_attribute_integer_1D(buffer, obj_id, name) integer, target, allocatable, intent(inout) :: buffer(:) integer(HID_T), intent(in) :: obj_id @@ -2271,6 +2426,66 @@ contains call h5tclose_f(memtype, hdf5_err) end subroutine read_attribute_string + subroutine read_attribute_string_1D(buffer, obj_id, name) + character(*), target, allocatable, intent(inout) :: buffer(:) + integer(HID_T), intent(in) :: obj_id + character(*), intent(in) :: name + + integer :: hdf5_err + integer(HID_T) :: space_id + integer(HID_T) :: attr_id + integer(HSIZE_T) :: dims(1) + integer(HSIZE_T) :: maxdims(1) + + call h5aopen_f(obj_id, trim(name), attr_id, hdf5_err) + + if (allocated(buffer)) then + dims(:) = shape(buffer) + else + call h5aget_space_f(attr_id, space_id, hdf5_err) + call h5sget_simple_extent_dims_f(space_id, dims, maxdims, hdf5_err) + allocate(buffer(dims(1))) + call h5sclose_f(space_id, hdf5_err) + end if + + call read_attribute_string_1D_explicit(attr_id, dims, buffer) + call h5aclose_f(attr_id, hdf5_err) + end subroutine read_attribute_string_1D + + subroutine read_attribute_string_1D_explicit(attr_id, dims, buffer) + integer(HID_T), intent(in) :: attr_id + integer(HSIZE_T), intent(in) :: dims(1) + character(*), target, intent(inout) :: buffer(dims(1)) + + integer :: hdf5_err + integer(HID_T) :: filetype + integer(HID_T) :: memtype + integer(SIZE_T) :: size + integer(SIZE_T) :: n + type(c_ptr) :: f_ptr + + ! Make sure buffer is large enough + call h5aget_type_f(attr_id, filetype, hdf5_err) + call h5tget_size_f(filetype, size, hdf5_err) + if (size > len(buffer(1)) + 1) then + call fatal_error("Character buffer is not long enough to & + &read HDF5 string array.") + end if + + ! Get datatype in memory based on Fortran character + n = len(buffer(1)) + call h5tcopy_f(H5T_FORTRAN_S1, memtype, hdf5_err) + call h5tset_size_f(memtype, n, hdf5_err) + + ! Get pointer to start of string + f_ptr = c_loc(buffer(1)(1:1)) + + call h5aread_f(attr_id, memtype, f_ptr, hdf5_err) + + call h5tclose_f(filetype, hdf5_err) + call h5tclose_f(memtype, hdf5_err) + end subroutine read_attribute_string_1D_explicit + subroutine get_shape(obj_id, dims) integer(HID_T), intent(in) :: obj_id integer(HSIZE_T), intent(out) :: dims(:) diff --git a/src/initialize.F90 b/src/initialize.F90 index 99adf967f0..2bcf2e01f2 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -4,7 +4,7 @@ module initialize use constants use dict_header, only: DictIntInt, ElemKeyValueII use set_header, only: SetInt - use energy_grid, only: logarithmic_grid, grid_method, unionized_grid + use energy_grid, only: logarithmic_grid, grid_method use error, only: fatal_error, warning use geometry, only: neighbor_lists, count_instance, calc_offsets, & maximum_levels @@ -17,7 +17,7 @@ module initialize use material_header, only: Material use mgxs_data, only: read_mgxs, create_macro_xs use output, only: title, header, print_version, write_message, & - print_usage, write_xs_summary, print_plot + print_usage, print_plot use random_lcg, only: initialize_prng use state_point, only: load_state_point use string, only: to_str, starts_with, ends_with, str_to_int @@ -111,20 +111,8 @@ contains if (run_mode /= MODE_PLOTTING) then ! Construct information needed for nuclear data if (run_CE) then - ! Set undefined cell temperatures to match the material data. - call lookup_material_temperatures() - - ! Construct unionized or log energy grid for cross-sections - select case (grid_method) - case (GRID_NUCLIDE) - continue - case (GRID_MAT_UNION) - call time_unionize%start() - call unionized_grid() - call time_unionize%stop() - case (GRID_LOGARITHM) - call logarithmic_grid() - end select + ! Construct log energy grid for cross-sections + call logarithmic_grid() else ! Create material macroscopic data for MGXS call time_read_xs%start() @@ -158,9 +146,6 @@ contains else ! Write summary information if (output_summary) call write_summary() - - ! Write cross section information - if (output_xs) call write_xs_summary() end if end if @@ -1005,57 +990,4 @@ contains end subroutine allocate_offsets -!=============================================================================== -! LOOKUP_MATERIAL_TEMPERATURES If any cells have undefined temperatures, try to -! find their temperatures from material data. -!=============================================================================== - - subroutine lookup_material_temperatures() - integer :: i, j, k - real(8) :: min_temp - logical :: warning_given - - warning_given = .false. - do i = 1, n_cells - ! Ignore non-normal cells and cells with defined temperature. - if (cells(i) % type /= CELL_NORMAL) cycle - if (cells(i) % sqrtkT(1) /= ERROR_REAL) cycle - - ! Set the number of temperatures equal to the number of materials. - deallocate(cells(i) % sqrtkT) - allocate(cells(i) % sqrtkT(size(cells(i) % material))) - - ! Check each of the cell materials for temperature data. - do j = 1, size(cells(i) % material) - ! Arbitrarily set void regions to 0K. - if (cells(i) % material(j) == MATERIAL_VOID) then - cells(i) % sqrtkT(j) = ZERO - cycle - end if - - associate (mat => materials(cells(i) % material(j))) - ! Find the temperature of the coldest nuclide. - min_temp = nuclides(mat % nuclide(1)) % kT - do k = 2, mat % n_nuclides - ! Warn the user if the nuclides don't have identical temperatues. - if (nuclides(mat % nuclide(k)) % kT /= min_temp & - .and. .not. warning_given .and. multipole_active) then - call warning("OpenMC cannot & - &identify the temperature of at least one cell. For the & - &purposes of multipole cross section evaluations, all cells & - &with unknown temperature will be set to the coldest & - &temperature found in the nuclear data for that cell's & - &material") - warning_given = .true. - end if - min_temp = min(min_temp, nuclides(mat % nuclide(k)) % kT) - end do - - ! Set the temperature for this cell instance. - cells(i) % sqrtkT(j) = sqrt(min_temp) - end associate - end do - end do - end subroutine lookup_material_temperatures - end module initialize diff --git a/src/input_xml.F90 b/src/input_xml.F90 index c46f00b666..eeeae865b6 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -2,6 +2,7 @@ module input_xml use hdf5 + use algorithm, only: find use cmfd_input, only: configure_cmfd use constants use dict_header, only: DictIntInt, ElemKeyValueCI @@ -23,7 +24,8 @@ module input_xml use set_header, only: SetChar use stl_vector, only: VectorInt, VectorReal, VectorChar use string, only: to_lower, to_str, str_to_int, str_to_real, & - starts_with, ends_with, tokenize, split_string + starts_with, ends_with, tokenize, split_string, & + zero_padded use tally_header, only: TallyObject use tally_filter use tally_initialize, only: add_tallies @@ -88,8 +90,10 @@ contains type(Node), pointer :: node_scatterer => null() type(Node), pointer :: node_trigger => null() type(Node), pointer :: node_keff_trigger => null() + type(Node), pointer :: node_vol => null() type(NodeList), pointer :: node_scat_list => null() type(NodeList), pointer :: node_source_list => null() + type(NodeList), pointer :: node_vol_list => null() ! Check if settings.xml exists filename = trim(path_input) // "settings.xml" @@ -357,26 +361,6 @@ contains ! Copy random number seed if specified if (check_for_node(doc, "seed")) call get_node_value(doc, "seed", seed) - ! Energy grid methods - if (check_for_node(doc, "energy_grid")) then - call get_node_value(doc, "energy_grid", temp_str) - else - temp_str = 'logarithm' - end if - select case (trim(temp_str)) - case ('nuclide') - grid_method = GRID_NUCLIDE - case ('material-union', 'union') - grid_method = GRID_MAT_UNION - if (trim(temp_str) == 'union') & - call warning('Energy grids will be unionized by material. Global& - & energy grid unionization is no longer an allowed option.') - case ('logarithm', 'logarithmic', 'log') - grid_method = GRID_LOGARITHM - case default - call fatal_error("Unknown energy grid method: " // trim(temp_str)) - end select - ! Number of bins for logarithmic grid if (check_for_node(doc, "log_grid_bins")) then call get_node_value(doc, "log_grid_bins", n_log_bins) @@ -976,14 +960,6 @@ contains trim(temp_str) == '0') output_summary = .false. end if - ! Check for cross sections option - if (check_for_node(node_output, "cross_sections")) then - call get_node_value(node_output, "cross_sections", temp_str) - temp_str = to_lower(temp_str) - if (trim(temp_str) == 'true' .or. & - trim(temp_str) == '1') output_xs = .true. - end if - ! Check for ASCII tallies output option if (check_for_node(node_output, "tallies")) then call get_node_value(node_output, "tallies", temp_str) @@ -1030,23 +1006,6 @@ contains nuclides_0K(i) % scheme) end if - ! check to make sure xs name for which method is applied is given - if (.not. check_for_node(node_scatterer, "xs_label")) then - call fatal_error("Must specify the temperature dependent name of & - &scatterer " // trim(to_str(i)) & - // " given in cross_sections.xml") - end if - call get_node_value(node_scatterer, "xs_label", & - nuclides_0K(i) % name) - - ! check to make sure 0K xs name for which method is applied is given - if (.not. check_for_node(node_scatterer, "xs_label_0K")) then - call fatal_error("Must specify the 0K name of scatterer " & - // trim(to_str(i)) // " given in cross_sections.xml") - end if - call get_node_value(node_scatterer, "xs_label_0K", & - nuclides_0K(i) % name_0K) - if (check_for_node(node_scatterer, "E_min")) then call get_node_value(node_scatterer, "E_min", & nuclides_0K(i) % E_min) @@ -1071,8 +1030,6 @@ contains nuclides_0K(i) % nuclide = trim(nuclides_0K(i) % nuclide) nuclides_0K(i) % scheme = to_lower(trim(nuclides_0K(i) % scheme)) - nuclides_0K(i) % name = trim(nuclides_0K(i) % name) - nuclides_0K(i) % name_0K = trim(nuclides_0K(i) % name_0K) end do else call fatal_error("No resonant scatterers are specified within the & @@ -1106,19 +1063,34 @@ contains end select end if - ! Check to see if windowed multipole functionality is requested - if (check_for_node(doc, "use_windowed_multipole")) then - call get_node_value(doc, "use_windowed_multipole", temp_str) + call get_node_list(doc, "volume_calc", node_vol_list) + n = get_list_size(node_vol_list) + allocate(volume_calcs(n)) + do i = 1, n + call get_list_item(node_vol_list, i, node_vol) + call volume_calcs(i) % from_xml(node_vol) + end do + + ! Get temperature settings + if (check_for_node(doc, "temperature_default")) then + call get_node_value(doc, "temperature_default", temperature_default) + end if + if (check_for_node(doc, "temperature_method")) then + call get_node_value(doc, "temperature_method", temp_str) select case (to_lower(temp_str)) - case ('true', '1') - multipole_active = .true. - case ('false', '0') - multipole_active = .false. + case ('nearest') + temperature_method = TEMPERATURE_NEAREST + case ('interpolation') + temperature_method = TEMPERATURE_INTERPOLATION + case ('multipole') + temperature_method = TEMPERATURE_MULTIPOLE case default - call fatal_error("Unrecognized value for in & - &settings.xml") + call fatal_error("Unknown temperature method: " // trim(temp_str)) end select end if + if (check_for_node(doc, "temperature_tolerance")) then + call get_node_value(doc, "temperature_tolerance", temperature_tolerance) + end if ! Close settings XML file call close_xmldoc(doc) @@ -2059,6 +2031,9 @@ contains integer :: i, j type(DictCharInt) :: library_dict type(Library), allocatable :: libraries(:) + type(VectorReal), allocatable :: nuc_temps(:) ! List of T to read for each nuclide + type(VectorReal), allocatable :: sab_temps(:) ! List of T to read for each S(a,b) + real(8), allocatable :: material_temps(:) if (run_CE) then call read_ce_cross_sections_xml(libraries) @@ -2076,21 +2051,27 @@ contains ! Check that 0K nuclides are listed in the cross_sections.xml file if (allocated(nuclides_0K)) then do i = 1, size(nuclides_0K) - if (.not. library_dict % has_key(to_lower(nuclides_0K(i) % name_0K))) then + if (.not. library_dict % has_key(to_lower(nuclides_0K(i) % nuclide))) then call fatal_error("Could not find resonant scatterer " & - // trim(nuclides_0K(i) % name_0K) & + // trim(nuclides_0K(i) % nuclide) & // " in cross_sections.xml file!") end if end do end if ! Parse data from materials.xml - call read_materials_xml(libraries, library_dict) + call read_materials_xml(libraries, library_dict, material_temps) + + ! Assign temperatures to cells that don't have temperatures already assigned + call assign_temperatures(material_temps) + + ! Determine desired temperatures for each nuclide and S(a,b) table + call get_temperatures(nuc_temps, sab_temps) ! Read continuous-energy cross sections if (run_CE .and. run_mode /= MODE_PLOTTING) then call time_read_xs%start() - call read_ce_cross_sections(libraries, library_dict) + call read_ce_cross_sections(libraries, library_dict, nuc_temps, sab_temps) call time_read_xs%stop() end if @@ -2101,9 +2082,10 @@ contains call library_dict % clear() end subroutine read_materials - subroutine read_materials_xml(libraries, library_dict) + subroutine read_materials_xml(libraries, library_dict, material_temps) type(Library), intent(in) :: libraries(:) type(DictCharInt), intent(inout) :: library_dict + real(8), allocatable, intent(out) :: material_temps(:) integer :: i ! loop index for materials integer :: j ! loop index for nuclides @@ -2149,22 +2131,16 @@ contains &exist!") end if - ! Initialize default cross section variable - default_xs = "" - ! Parse materials.xml file call open_xmldoc(doc, filename) - ! Copy default cross section if present - if (check_for_node(doc, "default_xs")) & - call get_node_value(doc, "default_xs", default_xs) - ! Get pointer to list of XML call get_node_list(doc, "material", node_mat_list) ! Allocate cells array n_materials = get_list_size(node_mat_list) allocate(materials(n_materials)) + allocate(material_temps(n_materials)) ! Initialize count for number of nuclides/S(a,b) tables index_nuclide = 0 @@ -2194,6 +2170,13 @@ contains call get_node_value(node_mat, "name", mat % name) end if + ! Get material default temperature + if (check_for_node(node_mat, "temperature")) then + call get_node_value(node_mat, "temperature", material_temps(i)) + else + material_temps(i) = ERROR_REAL + end if + ! ======================================================================= ! READ AND PARSE TAG @@ -2291,22 +2274,9 @@ contains // trim(to_str(mat % id))) end if - ! Check for cross section - if (.not. check_for_node(node_nuc, "xs")) then - if (default_xs == '') then - call fatal_error("No cross section specified for macroscopic data & - & in material " // trim(to_str(mat % id))) - else - name = to_lower(trim(default_xs)) - end if - end if - - ! store full name - call get_node_value(node_nuc, "name", temp_str) - if (check_for_node(node_nuc, "xs")) & - call get_node_value(node_nuc, "xs", name) - name = trim(temp_str) // "." // trim(name) - name = to_lower(name) + ! store nuclide name + call get_node_value(node_nuc, "name", name) + name = trim(name) ! save name and density to list call names % push_back(name) @@ -2335,16 +2305,6 @@ contains // trim(to_str(mat % id))) end if - ! Check for cross section - if (.not. check_for_node(node_nuc, "xs")) then - if (default_xs == '') then - call fatal_error("No cross section specified for nuclide in & - &material " // trim(to_str(mat % id))) - else - name = to_lower(trim(default_xs)) - end if - end if - ! Check enforced isotropic lab scattering if (run_CE) then if (check_for_node(node_nuc, "scattering")) then @@ -2362,11 +2322,9 @@ contains end if end if - ! store full name - call get_node_value(node_nuc, "name", temp_str) - if (check_for_node(node_nuc, "xs")) & - call get_node_value(node_nuc, "xs", name) - name = trim(temp_str) // "." // trim(name) + ! store nuclide name + call get_node_value(node_nuc, "name", name) + name = trim(name) ! save name and density to list call names % push_back(name) @@ -2414,18 +2372,6 @@ contains end if call get_node_value(node_ele, "name", name) - ! Check for cross section - if (check_for_node(node_ele, "xs")) then - call get_node_value(node_ele, "xs", temp_str) - else - if (default_xs == '') then - call fatal_error("No cross section specified for nuclide in & - &material " // trim(to_str(mat % id))) - else - temp_str = to_lower(trim(default_xs)) - end if - end if - ! Check if no atom/weight percents were specified or if both atom and ! weight percents were specified if (.not. check_for_node(node_ele, "ao") .and. & @@ -2444,7 +2390,7 @@ contains ! Expand element into naturally-occurring isotopes if (check_for_node(node_ele, "ao")) then call get_node_value(node_ele, "ao", temp_dble) - call expand_natural_element(name, temp_str, temp_dble, names, & + call expand_natural_element(name, temp_dble, names, & densities) else call fatal_error("The ability to expand a natural element based on & @@ -2571,14 +2517,11 @@ contains call get_list_item(node_sab_list, j, node_sab) ! Determine name of S(a,b) table - if (.not. check_for_node(node_sab, "name") .or. & - .not. check_for_node(node_sab, "xs")) then - call fatal_error("Need to specify and for S(a,b) & - &table.") + if (.not. check_for_node(node_sab, "name")) then + call fatal_error("Need to specify for S(a,b) table.") end if call get_node_value(node_sab, "name", name) - call get_node_value(node_sab, "xs", temp_str) - name = trim(name) // "." // trim(temp_str) + name = trim(name) mat % sab_names(j) = name ! Check that this nuclide is listed in the cross_sections.xml file @@ -3037,18 +2980,18 @@ contains // " specified on tally " // trim(to_str(t % id))) end if - ! Determine number of bins -- this is assuming that the tally is - ! a volume tally and not a surface current tally. If it is a - ! surface current tally, the number of bins will get reset later + ! Determine number of bins filt % n_bins = product(m % dimension) ! Store the index of the mesh filt % mesh = i_mesh end select + ! Set the filter index in the tally find_filter array t % find_filter(FILTER_MESH) = j case ('energy') + ! Allocate and declare the filter type allocate(EnergyFilter::t % filters(j) % obj) select type (filt => t % filters(j) % obj) @@ -3651,6 +3594,10 @@ contains t % score_bins(j) = SCORE_KAPPA_FISSION case ('inverse-velocity') t % score_bins(j) = SCORE_INVERSE_VELOCITY + case ('fission-q-prompt') + t % score_bins(j) = SCORE_FISS_Q_PROMPT + case ('fission-q-recoverable') + t % score_bins(j) = SCORE_FISS_Q_RECOV case ('current') t % score_bins(j) = SCORE_CURRENT t % type = TALLY_SURFACE_CURRENT @@ -3662,10 +3609,6 @@ contains &same tally as surface currents") end if - ! Since the number of bins for the mesh filter was already set - ! assuming it was a volume tally, we need to adjust the number - ! of bins - ! Get index of mesh filter k = t % find_filter(FILTER_MESH) @@ -3675,19 +3618,6 @@ contains &filter.") end if - ! Declare the type of the mesh filter - select type(filt => t % filters(k) % obj) - type is (MeshFilter) - - ! Get pointer to mesh - i_mesh = filt % mesh - m => meshes(i_mesh) - - ! We need to increase the dimension by one since we also need - ! currents coming into and out of the boundary mesh cells. - filt % n_bins = product(m % dimension + 1) - end select - ! Copy filters to temporary array allocate(filters(size(t % filters) + 1)) filters(1:size(t % filters)) = t % filters @@ -3701,13 +3631,15 @@ contains allocate(SurfaceFilter :: t % filters(n_filters) % obj) select type (filt => t % filters(size(t % filters)) % obj) type is (SurfaceFilter) - filt % n_bins = 2 * m % n_dimension - allocate(filt % surfaces(2 * m % n_dimension)) + filt % n_bins = 4 * m % n_dimension + allocate(filt % surfaces(4 * m % n_dimension)) if (m % n_dimension == 2) then - filt % surfaces = (/ IN_RIGHT, OUT_RIGHT, IN_FRONT, OUT_FRONT /) + filt % surfaces = (/ OUT_LEFT, OUT_RIGHT, OUT_BACK, OUT_FRONT, & + IN_LEFT, IN_RIGHT, IN_BACK, IN_FRONT /) elseif (m % n_dimension == 3) then - filt % surfaces = (/ IN_RIGHT, OUT_RIGHT, IN_FRONT, OUT_FRONT,& - IN_TOP, OUT_TOP /) + filt % surfaces = (/ OUT_LEFT, OUT_RIGHT, OUT_BACK, OUT_FRONT, & + OUT_BOTTOM, OUT_TOP, IN_LEFT, IN_RIGHT, IN_BACK, & + IN_FRONT, IN_BOTTOM, IN_TOP /) end if end select t % find_filter(FILTER_SURFACE) = size(t % filters) @@ -4765,9 +4697,8 @@ contains ! evaluations of particular isotopes don't exist. !=============================================================================== - subroutine expand_natural_element(name, xs, density, names, densities) + subroutine expand_natural_element(name, density, names, densities) character(*), intent(in) :: name - character(*), intent(in) :: xs real(8), intent(in) :: density type(VectorChar), intent(inout) :: names type(VectorReal), intent(inout) :: densities @@ -4778,669 +4709,669 @@ contains select case (to_lower(element_name)) case ('h') - call names % push_back('H1.' // xs) + call names % push_back('H1') call densities % push_back(density * 0.999885_8) - call names % push_back('H2.' // xs) + call names % push_back('H2') call densities % push_back(density * 0.000115_8) case ('he') - call names % push_back('He3.' // xs) + call names % push_back('He3') call densities % push_back(density * 0.00000134_8) - call names % push_back('He4.' // xs) + call names % push_back('He4') call densities % push_back(density * 0.99999866_8) case ('li') - call names % push_back('Li6.' // xs) + call names % push_back('Li6') call densities % push_back(density * 0.0759_8) - call names % push_back('Li7.' // xs) + call names % push_back('Li7') call densities % push_back(density * 0.9241_8) case ('be') - call names % push_back('Be9.' // xs) + call names % push_back('Be9') call densities % push_back(density) case ('b') - call names % push_back('B10.' // xs) + call names % push_back('B10') call densities % push_back(density * 0.199_8) - call names % push_back('B11.' // xs) + call names % push_back('B11') call densities % push_back(density * 0.801_8) case ('c') ! No evaluations split up Carbon into isotopes yet - call names % push_back('C0.' // xs) + call names % push_back('C0') call densities % push_back(density) case ('n') - call names % push_back('N14.' // xs) + call names % push_back('N14') call densities % push_back(density * 0.99636_8) - call names % push_back('N15.' // xs) + call names % push_back('N15') call densities % push_back(density * 0.00364_8) case ('o') if (default_expand == JEFF_32) then - call names % push_back('O16.' // xs) + call names % push_back('O16') call densities % push_back(density * 0.99757_8) - call names % push_back('O17.' // xs) + call names % push_back('O17') call densities % push_back(density * 0.00038_8) - call names % push_back('O18.' // xs) + call names % push_back('O18') call densities % push_back(density * 0.00205_8) elseif (default_expand >= JENDL_32 .and. default_expand <= JENDL_40) then - call names % push_back('O16.' // xs) + call names % push_back('O16') call densities % push_back(density) else - call names % push_back('O16.' // xs) + call names % push_back('O16') call densities % push_back(density * 0.99962_8) - call names % push_back('O17.' // xs) + call names % push_back('O17') call densities % push_back(density * 0.00038_8) end if case ('f') - call names % push_back('F19.' // xs) + call names % push_back('F19') call densities % push_back(density) case ('ne') - call names % push_back('Ne20.' // xs) + call names % push_back('Ne20') call densities % push_back(density * 0.9048_8) - call names % push_back('Ne21.' // xs) + call names % push_back('Ne21') call densities % push_back(density * 0.0027_8) - call names % push_back('Ne22.' // xs) + call names % push_back('Ne22') call densities % push_back(density * 0.0925_8) case ('na') - call names % push_back('Na23.' // xs) + call names % push_back('Na23') call densities % push_back(density) case ('mg') - call names % push_back('Mg24.' // xs) + call names % push_back('Mg24') call densities % push_back(density * 0.7899_8) - call names % push_back('Mg25.' // xs) + call names % push_back('Mg25') call densities % push_back(density * 0.1000_8) - call names % push_back('Mg26.' // xs) + call names % push_back('Mg26') call densities % push_back(density * 0.1101_8) case ('al') - call names % push_back('Al27.' // xs) + call names % push_back('Al27') call densities % push_back(density) case ('si') - call names % push_back('Si28.' // xs) + call names % push_back('Si28') call densities % push_back(density * 0.92223_8) - call names % push_back('Si29.' // xs) + call names % push_back('Si29') call densities % push_back(density * 0.04685_8) - call names % push_back('Si30.' // xs) + call names % push_back('Si30') call densities % push_back(density * 0.03092_8) case ('p') - call names % push_back('P31.' // xs) + call names % push_back('P31') call densities % push_back(density) case ('s') - call names % push_back('S32.' // xs) + call names % push_back('S32') call densities % push_back(density * 0.9499_8) - call names % push_back('S33.' // xs) + call names % push_back('S33') call densities % push_back(density * 0.0075_8) - call names % push_back('S34.' // xs) + call names % push_back('S34') call densities % push_back(density * 0.0425_8) - call names % push_back('S36.' // xs) + call names % push_back('S36') call densities % push_back(density * 0.0001_8) case ('cl') - call names % push_back('Cl35.' // xs) + call names % push_back('Cl35') call densities % push_back(density * 0.7576_8) - call names % push_back('Cl37.' // xs) + call names % push_back('Cl37') call densities % push_back(density * 0.2424_8) case ('ar') - call names % push_back('Ar36.' // xs) + call names % push_back('Ar36') call densities % push_back(density * 0.003336_8) - call names % push_back('Ar38.' // xs) + call names % push_back('Ar38') call densities % push_back(density * 0.000629_8) - call names % push_back('Ar40.' // xs) + call names % push_back('Ar40') call densities % push_back(density * 0.996035_8) case ('k') - call names % push_back('K39.' // xs) + call names % push_back('K39') call densities % push_back(density * 0.932581_8) - call names % push_back('K40.' // xs) + call names % push_back('K40') call densities % push_back(density * 0.000117_8) - call names % push_back('K41.' // xs) + call names % push_back('K41') call densities % push_back(density * 0.067302_8) case ('ca') - call names % push_back('Ca40.' // xs) + call names % push_back('Ca40') call densities % push_back(density * 0.96941_8) - call names % push_back('Ca42.' // xs) + call names % push_back('Ca42') call densities % push_back(density * 0.00647_8) - call names % push_back('Ca43.' // xs) + call names % push_back('Ca43') call densities % push_back(density * 0.00135_8) - call names % push_back('Ca44.' // xs) + call names % push_back('Ca44') call densities % push_back(density * 0.02086_8) - call names % push_back('Ca46.' // xs) + call names % push_back('Ca46') call densities % push_back(density * 0.00004_8) - call names % push_back('Ca48.' // xs) + call names % push_back('Ca48') call densities % push_back(density * 0.00187_8) case ('sc') - call names % push_back('Sc45.' // xs) + call names % push_back('Sc45') call densities % push_back(density) case ('ti') - call names % push_back('Ti46.' // xs) + call names % push_back('Ti46') call densities % push_back(density * 0.0825_8) - call names % push_back('Ti47.' // xs) + call names % push_back('Ti47') call densities % push_back(density * 0.0744_8) - call names % push_back('Ti48.' // xs) + call names % push_back('Ti48') call densities % push_back(density * 0.7372_8) - call names % push_back('Ti49.' // xs) + call names % push_back('Ti49') call densities % push_back(density * 0.0541_8) - call names % push_back('Ti50.' // xs) + call names % push_back('Ti50') call densities % push_back(density * 0.0518_8) case ('v') if (default_expand == ENDF_BVII0 .or. default_expand == JEFF_311 & .or. default_expand == JEFF_32 .or. & (default_expand >= JENDL_32 .and. default_expand <= JENDL_33)) then - call names % push_back('V0.' // xs) + call names % push_back('V0') call densities % push_back(density) else - call names % push_back('V50.' // xs) + call names % push_back('V50') call densities % push_back(density * 0.0025_8) - call names % push_back('V51.' // xs) + call names % push_back('V51') call densities % push_back(density * 0.9975_8) end if case ('cr') - call names % push_back('Cr50.' // xs) + call names % push_back('Cr50') call densities % push_back(density * 0.04345_8) - call names % push_back('Cr52.' // xs) + call names % push_back('Cr52') call densities % push_back(density * 0.83789_8) - call names % push_back('Cr53.' // xs) + call names % push_back('Cr53') call densities % push_back(density * 0.09501_8) - call names % push_back('Cr54.' // xs) + call names % push_back('Cr54') call densities % push_back(density * 0.02365_8) case ('mn') - call names % push_back('Mn55.' // xs) + call names % push_back('Mn55') call densities % push_back(density) case ('fe') - call names % push_back('Fe54.' // xs) + call names % push_back('Fe54') call densities % push_back(density * 0.05845_8) - call names % push_back('Fe56.' // xs) + call names % push_back('Fe56') call densities % push_back(density * 0.91754_8) - call names % push_back('Fe57.' // xs) + call names % push_back('Fe57') call densities % push_back(density * 0.02119_8) - call names % push_back('Fe58.' // xs) + call names % push_back('Fe58') call densities % push_back(density * 0.00282_8) case ('co') - call names % push_back('Co59.' // xs) + call names % push_back('Co59') call densities % push_back(density) case ('ni') - call names % push_back('Ni58.' // xs) + call names % push_back('Ni58') call densities % push_back(density * 0.68077_8) - call names % push_back('Ni60.' // xs) + call names % push_back('Ni60') call densities % push_back(density * 0.26223_8) - call names % push_back('Ni61.' // xs) + call names % push_back('Ni61') call densities % push_back(density * 0.011399_8) - call names % push_back('Ni62.' // xs) + call names % push_back('Ni62') call densities % push_back(density * 0.036346_8) - call names % push_back('Ni64.' // xs) + call names % push_back('Ni64') call densities % push_back(density * 0.009255_8) case ('cu') - call names % push_back('Cu63.' // xs) + call names % push_back('Cu63') call densities % push_back(density * 0.6915_8) - call names % push_back('Cu65.' // xs) + call names % push_back('Cu65') call densities % push_back(density * 0.3085_8) case ('zn') if (default_expand == ENDF_BVII0 .or. default_expand == & JEFF_311 .or. default_expand == JEFF_312) then - call names % push_back('Zn0.' // xs) + call names % push_back('Zn0') call densities % push_back(density) else - call names % push_back('Zn64.' // xs) + call names % push_back('Zn64') call densities % push_back(density * 0.4917_8) - call names % push_back('Zn66.' // xs) + call names % push_back('Zn66') call densities % push_back(density * 0.2773_8) - call names % push_back('Zn67.' // xs) + call names % push_back('Zn67') call densities % push_back(density * 0.0404_8) - call names % push_back('Zn68.' // xs) + call names % push_back('Zn68') call densities % push_back(density * 0.1845_8) - call names % push_back('Zn70.' // xs) + call names % push_back('Zn70') call densities % push_back(density * 0.0061_8) end if case ('ga') if (default_expand == JEFF_311 .or. default_expand == JEFF_312) then - call names % push_back('Ga0.' // xs) + call names % push_back('Ga0') call densities % push_back(density) else - call names % push_back('Ha69.' // xs) + call names % push_back('Ha69') call densities % push_back(density * 0.60108_8) - call names % push_back('Ga71.' // xs) + call names % push_back('Ga71') call densities % push_back(density * 0.39892_8) end if case ('ge') - call names % push_back('Ge70.' // xs) + call names % push_back('Ge70') call densities % push_back(density * 0.2057_8) - call names % push_back('Ge72.' // xs) + call names % push_back('Ge72') call densities % push_back(density * 0.2745_8) - call names % push_back('Ge73.' // xs) + call names % push_back('Ge73') call densities % push_back(density * 0.0775_8) - call names % push_back('Ge74.' // xs) + call names % push_back('Ge74') call densities % push_back(density * 0.3650_8) - call names % push_back('Ge76.' // xs) + call names % push_back('Ge76') call densities % push_back(density * 0.0773_8) case ('as') - call names % push_back('As75.' // xs) + call names % push_back('As75') call densities % push_back(density) case ('se') - call names % push_back('Se74.' // xs) + call names % push_back('Se74') call densities % push_back(density * 0.0089_8) - call names % push_back('Se76.' // xs) + call names % push_back('Se76') call densities % push_back(density * 0.0937_8) - call names % push_back('Se77.' // xs) + call names % push_back('Se77') call densities % push_back(density * 0.0763_8) - call names % push_back('Se78.' // xs) + call names % push_back('Se78') call densities % push_back(density * 0.2377_8) - call names % push_back('Se80.' // xs) + call names % push_back('Se80') call densities % push_back(density * 0.4961_8) - call names % push_back('Se82.' // xs) + call names % push_back('Se82') call densities % push_back(density * 0.0873_8) case ('br') - call names % push_back('Br79.' // xs) + call names % push_back('Br79') call densities % push_back(density * 0.5069_8) - call names % push_back('Br81.' // xs) + call names % push_back('Br81') call densities % push_back(density * 0.4931_8) case ('kr') - call names % push_back('Kr78.' // xs) + call names % push_back('Kr78') call densities % push_back(density * 0.00355_8) - call names % push_back('Kr80.' // xs) + call names % push_back('Kr80') call densities % push_back(density * 0.02286_8) - call names % push_back('Kr82.' // xs) + call names % push_back('Kr82') call densities % push_back(density * 0.11593_8) - call names % push_back('Kr83.' // xs) + call names % push_back('Kr83') call densities % push_back(density * 0.11500_8) - call names % push_back('Kr84.' // xs) + call names % push_back('Kr84') call densities % push_back(density * 0.56987_8) - call names % push_back('Kr86.' // xs) + call names % push_back('Kr86') call densities % push_back(density * 0.17279_8) case ('rb') - call names % push_back('Rb85.' // xs) + call names % push_back('Rb85') call densities % push_back(density * 0.7217_8) - call names % push_back('Rb87.' // xs) + call names % push_back('Rb87') call densities % push_back(density * 0.2783_8) case ('sr') - call names % push_back('Sr84.' // xs) + call names % push_back('Sr84') call densities % push_back(density * 0.0056_8) - call names % push_back('Sr86.' // xs) + call names % push_back('Sr86') call densities % push_back(density * 0.0986_8) - call names % push_back('Sr87.' // xs) + call names % push_back('Sr87') call densities % push_back(density * 0.0700_8) - call names % push_back('Sr88.' // xs) + call names % push_back('Sr88') call densities % push_back(density * 0.8258_8) case ('y') - call names % push_back('Y89.' // xs) + call names % push_back('Y89') call densities % push_back(density) case ('zr') - call names % push_back('Zr90.' // xs) + call names % push_back('Zr90') call densities % push_back(density * 0.5145_8) - call names % push_back('Zr91.' // xs) + call names % push_back('Zr91') call densities % push_back(density * 0.1122_8) - call names % push_back('Zr92.' // xs) + call names % push_back('Zr92') call densities % push_back(density * 0.1715_8) - call names % push_back('Zr94.' // xs) + call names % push_back('Zr94') call densities % push_back(density * 0.1738_8) - call names % push_back('Zr96.' // xs) + call names % push_back('Zr96') call densities % push_back(density * 0.0280_8) case ('nb') - call names % push_back('Nb93.' // xs) + call names % push_back('Nb93') call densities % push_back(density) case ('mo') - call names % push_back('Mo92.' // xs) + call names % push_back('Mo92') call densities % push_back(density * 0.1453_8) - call names % push_back('Mo94.' // xs) + call names % push_back('Mo94') call densities % push_back(density * 0.0915_8) - call names % push_back('Mo95.' // xs) + call names % push_back('Mo95') call densities % push_back(density * 0.1584_8) - call names % push_back('Mo96.' // xs) + call names % push_back('Mo96') call densities % push_back(density * 0.1667_8) - call names % push_back('Mo97.' // xs) + call names % push_back('Mo97') call densities % push_back(density * 0.0960_8) - call names % push_back('Mo98.' // xs) + call names % push_back('Mo98') call densities % push_back(density * 0.2439_8) - call names % push_back('Mo100.' // xs) + call names % push_back('Mo100') call densities % push_back(density * 0.0982_8) case ('ru') - call names % push_back('Ru96.' // xs) + call names % push_back('Ru96') call densities % push_back(density * 0.0554_8) - call names % push_back('Ru98.' // xs) + call names % push_back('Ru98') call densities % push_back(density * 0.0187_8) - call names % push_back('Ru99.' // xs) + call names % push_back('Ru99') call densities % push_back(density * 0.1276_8) - call names % push_back('Ru100.' // xs) + call names % push_back('Ru100') call densities % push_back(density * 0.1260_8) - call names % push_back('Ru101.' // xs) + call names % push_back('Ru101') call densities % push_back(density * 0.1706_8) - call names % push_back('Ru102.' // xs) + call names % push_back('Ru102') call densities % push_back(density * 0.3155_8) - call names % push_back('Ru104.' // xs) + call names % push_back('Ru104') call densities % push_back(density * 0.1862_8) case ('rh') - call names % push_back('Rh103.' // xs) + call names % push_back('Rh103') call densities % push_back(density) case ('pd') - call names % push_back('Pd102.' // xs) + call names % push_back('Pd102') call densities % push_back(density * 0.0102_8) - call names % push_back('Pd104.' // xs) + call names % push_back('Pd104') call densities % push_back(density * 0.1114_8) - call names % push_back('Pd105.' // xs) + call names % push_back('Pd105') call densities % push_back(density * 0.2233_8) - call names % push_back('Pd106.' // xs) + call names % push_back('Pd106') call densities % push_back(density * 0.2733_8) - call names % push_back('Pd108.' // xs) + call names % push_back('Pd108') call densities % push_back(density * 0.2646_8) - call names % push_back('Pd110.' // xs) + call names % push_back('Pd110') call densities % push_back(density * 0.1172_8) case ('ag') - call names % push_back('Ag107.' // xs) + call names % push_back('Ag107') call densities % push_back(density * 0.51839_8) - call names % push_back('Ag109.' // xs) + call names % push_back('Ag109') call densities % push_back(density * 0.48161_8) case ('cd') - call names % push_back('Cd106.' // xs) + call names % push_back('Cd106') call densities % push_back(density * 0.0125_8) - call names % push_back('Cd108.' // xs) + call names % push_back('Cd108') call densities % push_back(density * 0.0089_8) - call names % push_back('Cd110.' // xs) + call names % push_back('Cd110') call densities % push_back(density * 0.1249_8) - call names % push_back('Cd111.' // xs) + call names % push_back('Cd111') call densities % push_back(density * 0.1280_8) - call names % push_back('Cd112.' // xs) + call names % push_back('Cd112') call densities % push_back(density * 0.2413_8) - call names % push_back('Cd113.' // xs) + call names % push_back('Cd113') call densities % push_back(density * 0.1222_8) - call names % push_back('Cd114.' // xs) + call names % push_back('Cd114') call densities % push_back(density * 0.2873_8) - call names % push_back('Cd116.' // xs) + call names % push_back('Cd116') call densities % push_back(density * 0.0749_8) case ('in') - call names % push_back('In113.' // xs) + call names % push_back('In113') call densities % push_back(density * 0.0429_8) - call names % push_back('In115.' // xs) + call names % push_back('In115') call densities % push_back(density * 0.9571_8) case ('sn') - call names % push_back('Sn112.' // xs) + call names % push_back('Sn112') call densities % push_back(density * 0.0097_8) - call names % push_back('Sn114.' // xs) + call names % push_back('Sn114') call densities % push_back(density * 0.0066_8) - call names % push_back('Sn115.' // xs) + call names % push_back('Sn115') call densities % push_back(density * 0.0034_8) - call names % push_back('Sn116.' // xs) + call names % push_back('Sn116') call densities % push_back(density * 0.1454_8) - call names % push_back('Sn117.' // xs) + call names % push_back('Sn117') call densities % push_back(density * 0.0768_8) - call names % push_back('Sn118.' // xs) + call names % push_back('Sn118') call densities % push_back(density * 0.2422_8) - call names % push_back('Sn119.' // xs) + call names % push_back('Sn119') call densities % push_back(density * 0.0859_8) - call names % push_back('Sn120.' // xs) + call names % push_back('Sn120') call densities % push_back(density * 0.3258_8) - call names % push_back('Sn122.' // xs) + call names % push_back('Sn122') call densities % push_back(density * 0.0463_8) - call names % push_back('Sn124.' // xs) + call names % push_back('Sn124') call densities % push_back(density * 0.0579_8) case ('sb') - call names % push_back('Sb121.' // xs) + call names % push_back('Sb121') call densities % push_back(density * 0.5721_8) - call names % push_back('Sb123.' // xs) + call names % push_back('Sb123') call densities % push_back(density * 0.4279_8) case ('te') - call names % push_back('Te120.' // xs) + call names % push_back('Te120') call densities % push_back(density * 0.0009_8) - call names % push_back('Te122.' // xs) + call names % push_back('Te122') call densities % push_back(density * 0.0255_8) - call names % push_back('Te123.' // xs) + call names % push_back('Te123') call densities % push_back(density * 0.0089_8) - call names % push_back('Te124.' // xs) + call names % push_back('Te124') call densities % push_back(density * 0.0474_8) - call names % push_back('Te125.' // xs) + call names % push_back('Te125') call densities % push_back(density * 0.0707_8) - call names % push_back('Te126.' // xs) + call names % push_back('Te126') call densities % push_back(density * 0.1884_8) - call names % push_back('Te128.' // xs) + call names % push_back('Te128') call densities % push_back(density * 0.3174_8) - call names % push_back('Te130.' // xs) + call names % push_back('Te130') call densities % push_back(density * 0.3408_8) case ('i') - call names % push_back('I127.' // xs) + call names % push_back('I127') call densities % push_back(density) case ('xe') - call names % push_back('Xe124.' // xs) + call names % push_back('Xe124') call densities % push_back(density * 0.000952_8) - call names % push_back('Xe126.' // xs) + call names % push_back('Xe126') call densities % push_back(density * 0.000890_8) - call names % push_back('Xe128.' // xs) + call names % push_back('Xe128') call densities % push_back(density * 0.019102_8) - call names % push_back('Xe129.' // xs) + call names % push_back('Xe129') call densities % push_back(density * 0.264006_8) - call names % push_back('Xe130.' // xs) + call names % push_back('Xe130') call densities % push_back(density * 0.040710_8) - call names % push_back('Xe131.' // xs) + call names % push_back('Xe131') call densities % push_back(density * 0.212324_8) - call names % push_back('Xe132.' // xs) + call names % push_back('Xe132') call densities % push_back(density * 0.269086_8) - call names % push_back('Xe134.' // xs) + call names % push_back('Xe134') call densities % push_back(density * 0.104357_8) - call names % push_back('Xe136.' // xs) + call names % push_back('Xe136') call densities % push_back(density * 0.088573_8) case ('cs') - call names % push_back('Cs133.' // xs) + call names % push_back('Cs133') call densities % push_back(density) case ('ba') - call names % push_back('Ba130.' // xs) + call names % push_back('Ba130') call densities % push_back(density * 0.00106_8) - call names % push_back('Ba132.' // xs) + call names % push_back('Ba132') call densities % push_back(density * 0.00101_8) - call names % push_back('Ba134.' // xs) + call names % push_back('Ba134') call densities % push_back(density * 0.02417_8) - call names % push_back('Ba135.' // xs) + call names % push_back('Ba135') call densities % push_back(density * 0.06592_8) - call names % push_back('Ba136.' // xs) + call names % push_back('Ba136') call densities % push_back(density * 0.07854_8) - call names % push_back('Ba137.' // xs) + call names % push_back('Ba137') call densities % push_back(density * 0.11232_8) - call names % push_back('Ba138.' // xs) + call names % push_back('Ba138') call densities % push_back(density * 0.71698_8) case ('la') - call names % push_back('La138.' // xs) + call names % push_back('La138') call densities % push_back(density * 0.0008881_8) - call names % push_back('La139.' // xs) + call names % push_back('La139') call densities % push_back(density * 0.9991119_8) case ('ce') - call names % push_back('Ce136.' // xs) + call names % push_back('Ce136') call densities % push_back(density * 0.00185_8) - call names % push_back('Ce138.' // xs) + call names % push_back('Ce138') call densities % push_back(density * 0.00251_8) - call names % push_back('Ce140.' // xs) + call names % push_back('Ce140') call densities % push_back(density * 0.88450_8) - call names % push_back('Ce142.' // xs) + call names % push_back('Ce142') call densities % push_back(density * 0.11114_8) case ('pr') - call names % push_back('Pr141.' // xs) + call names % push_back('Pr141') call densities % push_back(density) case ('nd') - call names % push_back('Nd142.' // xs) + call names % push_back('Nd142') call densities % push_back(density * 0.27152_8) - call names % push_back('Nd143.' // xs) + call names % push_back('Nd143') call densities % push_back(density * 0.12174_8) - call names % push_back('Nd144.' // xs) + call names % push_back('Nd144') call densities % push_back(density * 0.23798_8) - call names % push_back('Nd145.' // xs) + call names % push_back('Nd145') call densities % push_back(density * 0.08293_8) - call names % push_back('Nd146.' // xs) + call names % push_back('Nd146') call densities % push_back(density * 0.17189_8) - call names % push_back('Nd148.' // xs) + call names % push_back('Nd148') call densities % push_back(density * 0.05756_8) - call names % push_back('Nd150.' // xs) + call names % push_back('Nd150') call densities % push_back(density * 0.05638_8) case ('sm') - call names % push_back('Sm144.' // xs) + call names % push_back('Sm144') call densities % push_back(density * 0.0307_8) - call names % push_back('Sm147.' // xs) + call names % push_back('Sm147') call densities % push_back(density * 0.1499_8) - call names % push_back('Sm148.' // xs) + call names % push_back('Sm148') call densities % push_back(density * 0.1124_8) - call names % push_back('Sm149.' // xs) + call names % push_back('Sm149') call densities % push_back(density * 0.1382_8) - call names % push_back('Sm150.' // xs) + call names % push_back('Sm150') call densities % push_back(density * 0.0738_8) - call names % push_back('Sm152.' // xs) + call names % push_back('Sm152') call densities % push_back(density * 0.2675_8) - call names % push_back('Sm154.' // xs) + call names % push_back('Sm154') call densities % push_back(density * 0.2275_8) case ('eu') - call names % push_back('Eu151.' // xs) + call names % push_back('Eu151') call densities % push_back(density * 0.4781_8) - call names % push_back('Eu153.' // xs) + call names % push_back('Eu153') call densities % push_back(density * 0.5219_8) case ('gd') - call names % push_back('Gd152.' // xs) + call names % push_back('Gd152') call densities % push_back(density * 0.0020_8) - call names % push_back('Gd154.' // xs) + call names % push_back('Gd154') call densities % push_back(density * 0.0218_8) - call names % push_back('Gd155.' // xs) + call names % push_back('Gd155') call densities % push_back(density * 0.1480_8) - call names % push_back('Gd156.' // xs) + call names % push_back('Gd156') call densities % push_back(density * 0.2047_8) - call names % push_back('Gd157.' // xs) + call names % push_back('Gd157') call densities % push_back(density * 0.1565_8) - call names % push_back('Gd158.' // xs) + call names % push_back('Gd158') call densities % push_back(density * 0.2484_8) - call names % push_back('Gd160.' // xs) + call names % push_back('Gd160') call densities % push_back(density * 0.2186_8) case ('tb') - call names % push_back('Tb159.' // xs) + call names % push_back('Tb159') call densities % push_back(density) case ('dy') - call names % push_back('Dy156.' // xs) + call names % push_back('Dy156') call densities % push_back(density * 0.00056_8) - call names % push_back('Dy158.' // xs) + call names % push_back('Dy158') call densities % push_back(density * 0.00095_8) - call names % push_back('Dy160.' // xs) + call names % push_back('Dy160') call densities % push_back(density * 0.02329_8) - call names % push_back('Dy161.' // xs) + call names % push_back('Dy161') call densities % push_back(density * 0.18889_8) - call names % push_back('Dy162.' // xs) + call names % push_back('Dy162') call densities % push_back(density * 0.25475_8) - call names % push_back('Dy163.' // xs) + call names % push_back('Dy163') call densities % push_back(density * 0.24896_8) - call names % push_back('Dy164.' // xs) + call names % push_back('Dy164') call densities % push_back(density * 0.28260_8) case ('ho') - call names % push_back('Ho165.' // xs) + call names % push_back('Ho165') call densities % push_back(density) case ('er') - call names % push_back('Er162.' // xs) + call names % push_back('Er162') call densities % push_back(density * 0.00139_8) - call names % push_back('Er164.' // xs) + call names % push_back('Er164') call densities % push_back(density * 0.01601_8) - call names % push_back('Er166.' // xs) + call names % push_back('Er166') call densities % push_back(density * 0.33503_8) - call names % push_back('Er167.' // xs) + call names % push_back('Er167') call densities % push_back(density * 0.22869_8) - call names % push_back('Er168.' // xs) + call names % push_back('Er168') call densities % push_back(density * 0.26978_8) - call names % push_back('Er170.' // xs) + call names % push_back('Er170') call densities % push_back(density * 0.14910_8) case ('tm') - call names % push_back('Tm169.' // xs) + call names % push_back('Tm169') call densities % push_back(density) case ('yb') - call names % push_back('Yb168.' // xs) + call names % push_back('Yb168') call densities % push_back(density * 0.00123_8) - call names % push_back('Yb170.' // xs) + call names % push_back('Yb170') call densities % push_back(density * 0.02982_8) - call names % push_back('Yb171.' // xs) + call names % push_back('Yb171') call densities % push_back(density * 0.1409_8) - call names % push_back('Yb172.' // xs) + call names % push_back('Yb172') call densities % push_back(density * 0.2168_8) - call names % push_back('Yb173.' // xs) + call names % push_back('Yb173') call densities % push_back(density * 0.16103_8) - call names % push_back('Yb174.' // xs) + call names % push_back('Yb174') call densities % push_back(density * 0.32026_8) - call names % push_back('Yb176.' // xs) + call names % push_back('Yb176') call densities % push_back(density * 0.12996_8) case ('lu') - call names % push_back('Lu175.' // xs) + call names % push_back('Lu175') call densities % push_back(density * 0.97401_8) - call names % push_back('Lu176.' // xs) + call names % push_back('Lu176') call densities % push_back(density * 0.02599_8) case ('hf') - call names % push_back('Hf174.' // xs) + call names % push_back('Hf174') call densities % push_back(density * 0.0016_8) - call names % push_back('Hf176.' // xs) + call names % push_back('Hf176') call densities % push_back(density * 0.0526_8) - call names % push_back('Hf177.' // xs) + call names % push_back('Hf177') call densities % push_back(density * 0.1860_8) - call names % push_back('Hf178.' // xs) + call names % push_back('Hf178') call densities % push_back(density * 0.2728_8) - call names % push_back('Hf179.' // xs) + call names % push_back('Hf179') call densities % push_back(density * 0.1362_8) - call names % push_back('Hf180.' // xs) + call names % push_back('Hf180') call densities % push_back(density * 0.3508_8) case ('ta') if (default_expand == ENDF_BVII0 .or. & (default_expand >= JEFF_311 .and. default_expand <= JEFF_312) .or. & (default_expand >= JENDL_32 .and. default_expand <= JENDL_40)) then - call names % push_back('Ta181.' // xs) + call names % push_back('Ta181') call densities % push_back(density) else - call names % push_back('Ta180.' // xs) + call names % push_back('Ta180') call densities % push_back(density * 0.0001201_8) - call names % push_back('Ta181.' // xs) + call names % push_back('Ta181') call densities % push_back(density * 0.9998799_8) end if @@ -5449,138 +5380,138 @@ contains .or. default_expand == JEFF_312 .or. & (default_expand >= JENDL_32 .and. default_expand <= JENDL_33)) then ! Combine W-180 with W-182 - call names % push_back('W182.' // xs) + call names % push_back('W182') call densities % push_back(density * 0.2662_8) - call names % push_back('W183.' // xs) + call names % push_back('W183') call densities % push_back(density * 0.1431_8) - call names % push_back('W184.' // xs) + call names % push_back('W184') call densities % push_back(density * 0.3064_8) - call names % push_back('W186.' // xs) + call names % push_back('W186') call densities % push_back(density * 0.2843_8) else - call names % push_back('W180.' // xs) + call names % push_back('W180') call densities % push_back(density * 0.0012_8) - call names % push_back('W182.' // xs) + call names % push_back('W182') call densities % push_back(density * 0.2650_8) - call names % push_back('W183.' // xs) + call names % push_back('W183') call densities % push_back(density * 0.1431_8) - call names % push_back('W184.' // xs) + call names % push_back('W184') call densities % push_back(density * 0.3064_8) - call names % push_back('W186.' // xs) + call names % push_back('W186') call densities % push_back(density * 0.2843_8) end if case ('re') - call names % push_back('Re185.' // xs) + call names % push_back('Re185') call densities % push_back(density * 0.3740_8) - call names % push_back('Re187.' // xs) + call names % push_back('Re187') call densities % push_back(density * 0.6260_8) case ('os') if (default_expand == JEFF_311 .or. default_expand == JEFF_312) then - call names % push_back('Os0.' // xs) + call names % push_back('Os0') call densities % push_back(density) else - call names % push_back('Os184.' // xs) + call names % push_back('Os184') call densities % push_back(density * 0.0002_8) - call names % push_back('Os186.' // xs) + call names % push_back('Os186') call densities % push_back(density * 0.0159_8) - call names % push_back('Os187.' // xs) + call names % push_back('Os187') call densities % push_back(density * 0.0196_8) - call names % push_back('Os188.' // xs) + call names % push_back('Os188') call densities % push_back(density * 0.1324_8) - call names % push_back('Os189.' // xs) + call names % push_back('Os189') call densities % push_back(density * 0.1615_8) - call names % push_back('Os190.' // xs) + call names % push_back('Os190') call densities % push_back(density * 0.2626_8) - call names % push_back('Os192.' // xs) + call names % push_back('Os192') call densities % push_back(density * 0.4078_8) end if case ('ir') - call names % push_back('Ir191.' // xs) + call names % push_back('Ir191') call densities % push_back(density * 0.373_8) - call names % push_back('Ir193.' // xs) + call names % push_back('Ir193') call densities % push_back(density * 0.627_8) case ('pt') if (default_expand == JEFF_311 .or. default_expand == JEFF_312) then - call names % push_back('Pt0.' // xs) + call names % push_back('Pt0') call densities % push_back(density) else - call names % push_back('Pt190.' // xs) + call names % push_back('Pt190') call densities % push_back(density * 0.00012_8) - call names % push_back('Pt192.' // xs) + call names % push_back('Pt192') call densities % push_back(density * 0.00782_8) - call names % push_back('Pt194.' // xs) + call names % push_back('Pt194') call densities % push_back(density * 0.3286_8) - call names % push_back('Pt195.' // xs) + call names % push_back('Pt195') call densities % push_back(density * 0.3378_8) - call names % push_back('Pt196.' // xs) + call names % push_back('Pt196') call densities % push_back(density * 0.2521_8) - call names % push_back('Pt198.' // xs) + call names % push_back('Pt198') call densities % push_back(density * 0.07356_8) end if case ('au') - call names % push_back('Au197.' // xs) + call names % push_back('Au197') call densities % push_back(density) case ('hg') - call names % push_back('Hg196.' // xs) + call names % push_back('Hg196') call densities % push_back(density * 0.0015_8) - call names % push_back('Hg198.' // xs) + call names % push_back('Hg198') call densities % push_back(density * 0.0997_8) - call names % push_back('Hg199.' // xs) + call names % push_back('Hg199') call densities % push_back(density * 0.1687_8) - call names % push_back('Hg200.' // xs) + call names % push_back('Hg200') call densities % push_back(density * 0.2310_8) - call names % push_back('Hg201.' // xs) + call names % push_back('Hg201') call densities % push_back(density * 0.1318_8) - call names % push_back('Hg202.' // xs) + call names % push_back('Hg202') call densities % push_back(density * 0.2986_8) - call names % push_back('Hg204.' // xs) + call names % push_back('Hg204') call densities % push_back(density * 0.0687_8) case ('tl') if (default_expand == JEFF_311 .or. default_expand == JEFF_312) then - call names % push_back('Tl0.' // xs) + call names % push_back('Tl0') call densities % push_back(density) else - call names % push_back('Tl203.' // xs) + call names % push_back('Tl203') call densities % push_back(density * 0.2952_8) - call names % push_back('Tl205.' // xs) + call names % push_back('Tl205') call densities % push_back(density * 0.7048_8) end if case ('pb') - call names % push_back('Pb204.' // xs) + call names % push_back('Pb204') call densities % push_back(density * 0.014_8) - call names % push_back('Pb206.' // xs) + call names % push_back('Pb206') call densities % push_back(density * 0.241_8) - call names % push_back('Pb207.' // xs) + call names % push_back('Pb207') call densities % push_back(density * 0.221_8) - call names % push_back('Pb208.' // xs) + call names % push_back('Pb208') call densities % push_back(density * 0.524_8) case ('bi') - call names % push_back('Bi209.' // xs) + call names % push_back('Bi209') call densities % push_back(density) case ('th') - call names % push_back('Th232.' // xs) + call names % push_back('Th232') call densities % push_back(density) case ('pa') - call names % push_back('Pa231.' // xs) + call names % push_back('Pa231') call densities % push_back(density) case ('u') - call names % push_back('U234.' // xs) + call names % push_back('U234') call densities % push_back(density * 0.000054_8) - call names % push_back('U235.' // xs) + call names % push_back('U235') call densities % push_back(density * 0.007204_8) - call names % push_back('U238.' // xs) + call names % push_back('U238') call densities % push_back(density * 0.992742_8) case default @@ -5765,10 +5696,10 @@ contains ASSIGN_SAB: do k = 1, size(mat % i_sab_tables) ! In order to know which nuclide the S(a,b) table applies to, we need ! to search through the list of nuclides for one which has a matching - ! zaid + ! name associate (sab => sab_tables(mat % i_sab_tables(k))) FIND_NUCLIDE: do j = 1, size(mat % nuclide) - if (any(sab % zaid == nuclides(mat % nuclide(j)) % zaid)) then + if (any(sab % nuclides == nuclides(mat % nuclide(j)) % name)) then mat % i_sab_nuclides(k) = j exit FIND_NUCLIDE end if @@ -5820,16 +5751,16 @@ contains end do end subroutine assign_sab_tables - subroutine read_ce_cross_sections(libraries, library_dict) + subroutine read_ce_cross_sections(libraries, library_dict, nuc_temps, sab_temps) type(Library), intent(in) :: libraries(:) type(DictCharInt), intent(inout) :: library_dict + type(VectorReal), intent(in) :: nuc_temps(:) + type(VectorReal), intent(in) :: sab_temps(:) integer :: i, j integer :: i_library integer :: i_nuclide integer :: i_sab - integer :: index_nuc_zaid ! index in nuclide ZAID - integer :: zaid ! ZAID of nuclide integer(HID_T) :: file_id integer(HID_T) :: group_id logical :: mp_found ! if windowed multipole libraries were found @@ -5842,8 +5773,6 @@ contains allocate(micro_xs(n_nuclides_total)) !$omp end parallel - index_nuc_zaid = 0 - ! Read cross sections do i = 1, size(materials) do j = 1, size(materials(i) % names) @@ -5859,7 +5788,8 @@ contains ! Read nuclide data from HDF5 file_id = file_open(libraries(i_library) % path, 'r') group_id = open_group(file_id, name) - call nuclides(i_nuclide) % from_hdf5(group_id) + call nuclides(i_nuclide) % from_hdf5(group_id, nuc_temps(i_nuclide), & + temperature_method, temperature_tolerance) call close_group(group_id) call file_close(file_id) @@ -5869,23 +5799,19 @@ contains ! Determine if minimum/maximum energy for this nuclide is greater/less ! than the previous - energy_min_neutron = max(energy_min_neutron, nuclides(i_nuclide) % energy(1)) - energy_max_neutron = min(energy_max_neutron, nuclides(i_nuclide) % energy(& - size(nuclides(i_nuclide) % energy))) + if (size(nuclides(i_nuclide) % grid) >= 1) then + energy_min_neutron = max(energy_min_neutron, & + nuclides(i_nuclide) % grid(1) % energy(1)) + energy_max_neutron = min(energy_max_neutron, nuclides(i_nuclide) % & + grid(1) % energy(size(nuclides(i_nuclide) % grid(1) % energy))) + end if ! Add name and alias to dictionary call already_read % add(name) - ! Construct dictionary mapping nuclide zaids to [1,N] -- used for - ! unresolved resonance probability tables - zaid = nuclides(i_nuclide) % zaid - if (.not. nuc_zaid_dict % has_key(zaid)) then - index_nuc_zaid = index_nuc_zaid + 1 - call nuc_zaid_dict % add_key(zaid, index_nuc_zaid) - end if - ! Read multipole file into the appropriate entry on the nuclides array - if (multipole_active) call read_multipole_data(i_nuclide) + if (temperature_method == TEMPERATURE_MULTIPOLE) & + call read_multipole_data(i_nuclide) end if ! Check if material is fissionable @@ -5913,7 +5839,8 @@ contains ! Read S(a,b) data from HDF5 file_id = file_open(libraries(i_library) % path, 'r') group_id = open_group(file_id, name) - call sab_tables(i_sab) % from_hdf5(group_id) + call sab_tables(i_sab) % from_hdf5(group_id, sab_temps(i_sab), & + temperature_tolerance) call close_group(group_id) call file_close(file_id) @@ -5923,14 +5850,13 @@ contains end do end do - n_nuc_zaid_total = index_nuc_zaid - ! Associate S(a,b) tables with specific nuclides call assign_sab_tables() ! Show which nuclide results in lowest energy for neutron transport do i = 1, size(nuclides) - if (nuclides(i) % energy(nuclides(i) % n_grid) == energy_max_neutron) then + if (nuclides(i) % grid(1) % energy(size(nuclides(i) % grid(1) % energy)) & + == energy_max_neutron) then call write_message("Maximum neutron transport energy: " // & trim(to_str(energy_max_neutron)) // " MeV for " // & trim(adjustl(nuclides(i) % name)), 6) @@ -5939,7 +5865,7 @@ contains end do ! If the user wants multipole, make sure we found a multipole library. - if (multipole_active) then + if (temperature_method == TEMPERATURE_MULTIPOLE) then mp_found = .false. do i = 1, size(nuclides) if (nuclides(i) % mp_present) then @@ -5955,6 +5881,107 @@ contains end subroutine read_ce_cross_sections +!=============================================================================== +! ASSIGN_TEMPERATURES If any cells have undefined temperatures, try to find +! their temperatures from material or global default temperatures +!=============================================================================== + + subroutine assign_temperatures(material_temps) + real(8), intent(in) :: material_temps(:) + + integer :: i, j + integer :: i_material + + do i = 1, n_cells + ! Ignore non-normal cells and cells with defined temperature. + if (cells(i) % material(1) == NONE) cycle + if (cells(i) % sqrtkT(1) /= ERROR_REAL) cycle + + ! Set the number of temperatures equal to the number of materials. + deallocate(cells(i) % sqrtkT) + allocate(cells(i) % sqrtkT(size(cells(i) % material))) + + ! Check each of the cell materials for temperature data. + do j = 1, size(cells(i) % material) + ! Arbitrarily set void regions to 0K. + if (cells(i) % material(j) == MATERIAL_VOID) then + cells(i) % sqrtkT(j) = ZERO + cycle + end if + + ! Use material default or global default temperature + i_material = material_dict % get_key(cells(i) % material(j)) + if (material_temps(i_material) /= ERROR_REAL) then + cells(i) % sqrtkT(j) = sqrt(K_BOLTZMANN * & + material_temps(i_material)) + else + cells(i) % sqrtkT(j) = sqrt(K_BOLTZMANN * temperature_default) + end if + end do + end do + end subroutine assign_temperatures + +!=============================================================================== +! GET_TEMPERATURES returns a list of temperatures that each nuclide/S(a,b) table +! appears at in the model. Later, this list is used to determine the actual +! temperatures to read (which may be different if interpolation is used) +!=============================================================================== + + subroutine get_temperatures(nuc_temps, sab_temps) + type(VectorReal), allocatable, intent(out) :: nuc_temps(:) + type(VectorReal), allocatable, intent(out) :: sab_temps(:) + + integer :: i, j, k + integer :: i_nuclide ! index in nuclides array + integer :: i_sab ! index in S(a,b) array + integer :: i_material + real(8) :: temperature ! temperature in Kelvin + + allocate(nuc_temps(n_nuclides_total)) + allocate(sab_temps(n_sab_tables)) + + do i = 1, size(cells) + do j = 1, size(cells(i) % material) + ! Skip any non-material cells and void materials + if (cells(i) % material(j) == NONE .or. & + cells(i) % material(j) == MATERIAL_VOID) cycle + + ! Get temperature of cell (rounding to nearest integer) + if (size(cells(i) % sqrtkT) > 1) then + temperature = cells(i) % sqrtkT(j)**2 / K_BOLTZMANN + else + temperature = cells(i) % sqrtkT(1)**2 / K_BOLTZMANN + end if + + i_material = material_dict % get_key(cells(i) % material(j)) + associate (mat => materials(i_material)) + NUC_NAMES_LOOP: do k = 1, size(mat % names) + ! Get index in nuc_temps array + i_nuclide = nuclide_dict % get_key(to_lower(mat % names(k))) + + ! Add temperature if it hasn't already been added + if (find(nuc_temps(i_nuclide), temperature) == -1) then + call nuc_temps(i_nuclide) % push_back(temperature) + end if + end do NUC_NAMES_LOOP + + if (mat % n_sab > 0) then + SAB_NAMES_LOOP: do k = 1, size(mat % sab_names) + ! Get index in nuc_temps array + i_sab = sab_dict % get_key(to_lower(mat % sab_names(k))) + + ! Add temperature if it hasn't already been added + if (find(sab_temps(i_sab), temperature) == -1) then + call sab_temps(i_sab) % push_back(temperature) + end if + end do SAB_NAMES_LOOP + end if + end associate + end do + end do + + end subroutine get_temperatures + !=============================================================================== ! READ_0K_ELASTIC_SCATTERING !=============================================================================== @@ -5971,18 +5998,20 @@ contains real(8) :: xs_cdf_sum character(MAX_WORD_LEN) :: name type(Nuclide) :: resonant_nuc + type(VectorReal) :: temperature + + call temperature % push_back(ZERO) do i = 1, size(nuclides_0K) - if (nuc % name == nuclides_0K(i) % name) then + if (nuc % name == nuclides_0K(i) % nuclide) then ! Copy basic information from settings.xml nuc % resonant = .true. - nuc % name_0K = trim(nuclides_0K(i) % name_0K) nuc % scheme = trim(nuclides_0K(i) % scheme) nuc % E_min = nuclides_0K(i) % E_min nuc % E_max = nuclides_0K(i) % E_max ! Get index in libraries array - name = nuc % name_0K + name = nuc % name i_library = library_dict % get_key(to_lower(name)) call write_message('Reading ' // trim(name) // ' 0K data from ' // & @@ -5991,13 +6020,14 @@ contains ! Read nuclide data from HDF5 file_id = file_open(libraries(i_library) % path, 'r') group_id = open_group(file_id, name) - call resonant_nuc % from_hdf5(group_id) + call resonant_nuc % from_hdf5(group_id, temperature, & + TEMPERATURE_NEAREST, 1000.0_8) call close_group(group_id) call file_close(file_id) ! Copy 0K energy grid and elastic scattering cross section - call move_alloc(TO=nuc % energy_0K, FROM=resonant_nuc % energy) - call move_alloc(TO=nuc % elastic_0K, FROM=resonant_nuc % elastic) + call move_alloc(TO=nuc % energy_0K, FROM=resonant_nuc % grid(1) % energy) + call move_alloc(TO=nuc % elastic_0K, FROM=resonant_nuc % sum_xs(1) % elastic) nuc % n_grid_0K = size(nuc % energy_0K) ! Build CDF for 0K elastic scattering @@ -6032,18 +6062,22 @@ contains integer, intent(in) :: i_table ! index in nuclides/sab_tables - integer :: i logical :: file_exists ! Does multipole library exist? character(7) :: readable ! Is multipole library readable? - character(6) :: zaid_string ! String of the ZAID - character(MAX_FILE_LEN+9) :: filename ! Path to multipole xs library + character(MAX_FILE_LEN) :: filename ! Path to multipole xs library ! For the time being, and I know this is a bit hacky, we just assume - ! that the file will be zaid.h5. + ! that the file will be ZZZAAAmM.h5. associate (nuc => nuclides(i_table)) - write(zaid_string, '(I6.6)') nuc % zaid - filename = trim(path_multipole) // zaid_string // ".h5" + if (nuc % metastable > 0) then + filename = trim(path_multipole) // trim(zero_padded(nuc % Z, 3)) // & + trim(zero_padded(nuc % A, 3)) // 'm' // & + trim(to_str(nuc % metastable)) // ".h5" + else + filename = trim(path_multipole) // trim(zero_padded(nuc % Z, 3)) // & + trim(zero_padded(nuc % A, 3)) // ".h5" + end if ! Check if Multipole library exists and is readable inquire(FILE=filename, EXIST=file_exists, READ=readable) @@ -6064,16 +6098,6 @@ contains call multipole_read(filename, nuc % multipole, i_table) nuc % mp_present = .true. - ! Recreate nu-fission cross section - if (nuc % fissionable) then - do i = 1, size(nuc % energy) - nuc % nu_fission(i) = nuc % nu(nuc % energy(i), EMISSION_TOTAL) * & - nuc % fission(i) - end do - else - nuc % nu_fission(:) = ZERO - end if - end associate end subroutine read_multipole_data diff --git a/src/material_header.F90 b/src/material_header.F90 index be4c860e22..772e3a415d 100644 --- a/src/material_header.F90 +++ b/src/material_header.F90 @@ -8,7 +8,7 @@ module material_header type Material integer :: id ! unique identifier - character(len=104) :: name = "" ! User-defined name + character(len=104) :: name = "" ! User-defined name integer :: n_nuclides ! number of nuclides integer, allocatable :: nuclide(:) ! index in nuclides array real(8) :: density ! total atom density in atom/b-cm diff --git a/src/mesh.F90 b/src/mesh.F90 index 0b227f4f5d..4a3def4282 100644 --- a/src/mesh.F90 +++ b/src/mesh.F90 @@ -1,14 +1,14 @@ module mesh - use constants - use global - use mesh_header - use search, only: binary_search - #ifdef MPI use message_passing #endif + use algorithm, only: binary_search + use constants + use global + use mesh_header + implicit none contains @@ -93,30 +93,21 @@ contains ! use in a TallyObject results array !=============================================================================== - pure function mesh_indices_to_bin(m, ijk, surface_current) result(bin) + pure function mesh_indices_to_bin(m, ijk) result(bin) type(RegularMesh), intent(in) :: m integer, intent(in) :: ijk(:) - logical, intent(in), optional :: surface_current integer :: bin + integer :: n_x ! number of mesh cells in x direction integer :: n_y ! number of mesh cells in y direction - integer :: n_z ! number of mesh cells in z direction - if (present(surface_current)) then - n_y = m % dimension(2) + 1 - else - n_y = m % dimension(2) - end if + n_x = m % dimension(1) + n_y = m % dimension(2) if (m % n_dimension == 2) then - bin = (ijk(1) - 1)*n_y + ijk(2) + bin = (ijk(2) - 1)*n_x + ijk(1) elseif (m % n_dimension == 3) then - if (present(surface_current)) then - n_z = m % dimension(3) + 1 - else - n_z = m % dimension(3) - end if - bin = (ijk(1) - 1)*n_y*n_z + (ijk(2) - 1)*n_z + ijk(3) + bin = (ijk(3) - 1)*n_y*n_x + (ijk(2) - 1)*n_x + ijk(1) end if end function mesh_indices_to_bin @@ -131,19 +122,19 @@ contains integer, intent(in) :: bin integer, intent(out) :: ijk(:) + integer :: n_x ! number of mesh cells in x direction integer :: n_y ! number of mesh cells in y direction - integer :: n_z ! number of mesh cells in z direction + n_x = m % dimension(1) n_y = m % dimension(2) if (m % n_dimension == 2) then - ijk(1) = (bin - 1)/n_y + 1 - ijk(2) = mod(bin - 1, n_y) + 1 + ijk(1) = mod(bin - 1, n_x) + 1 + ijk(2) = (bin - 1)/n_x + 1 else if (m % n_dimension == 3) then - n_z = m % dimension(3) - ijk(1) = (bin - 1)/(n_y*n_z) + 1 - ijk(2) = mod(bin - 1, n_y*n_z)/n_z + 1 - ijk(3) = mod(bin - 1, n_z) + 1 + ijk(1) = mod(bin - 1, n_x) + 1 + ijk(2) = mod(bin - 1, n_x*n_y)/n_x + 1 + ijk(3) = (bin - 1)/(n_x*n_y) + 1 end if end subroutine bin_to_mesh_indices diff --git a/src/mgxs_data.F90 b/src/mgxs_data.F90 index 491bd84091..05d6eb5ec6 100644 --- a/src/mgxs_data.F90 +++ b/src/mgxs_data.F90 @@ -89,7 +89,7 @@ contains end do ! ========================================================================== - ! READ ALL ACE CROSS SECTION TABLES + ! READ ALL MGXS CROSS SECTION TABLES ! Loop over all files MATERIAL_LOOP: do i = 1, n_materials diff --git a/src/mgxs_header.F90 b/src/mgxs_header.F90 index 06dd1e2138..9409398b3e 100644 --- a/src/mgxs_header.F90 +++ b/src/mgxs_header.F90 @@ -19,7 +19,6 @@ module mgxs_header type, abstract :: Mgxs character(len=104) :: name ! name of dataset, e.g. 92235.03c - integer :: zaid ! Z and A identifier, e.g. 92235 real(8) :: awr ! Atomic Weight Ratio real(8) :: kT ! temperature in MeV (k*T) @@ -29,7 +28,6 @@ module mgxs_header contains procedure(mgxs_init_file_), deferred :: init_file ! Initialize the data - procedure(mgxs_print_), deferred :: print ! Writes object info procedure(mgxs_get_xs_), deferred :: get_xs ! Get the requested xs procedure(mgxs_combine_), deferred :: combine ! initializes object ! Sample the outgoing energy from a fission event @@ -64,12 +62,6 @@ module mgxs_header integer, intent(in) :: max_order ! Maximum requested order end subroutine mgxs_init_file_ - subroutine mgxs_print_(this, unit) - import Mgxs - class(Mgxs),intent(in) :: this - integer, optional, intent(in) :: unit - end subroutine mgxs_print_ - pure function mgxs_get_xs_(this,xstype,gin,gout,uvw,mu) result(xs) import Mgxs class(Mgxs), intent(in) :: this @@ -150,7 +142,6 @@ module mgxs_header contains procedure :: init_file => mgxsiso_init_file ! Initialize Nuclidic MGXS Data - procedure :: print => mgxsiso_print ! Writes nuclide info procedure :: get_xs => mgxsiso_get_xs ! Gets Size of Data w/in Object procedure :: combine => mgxsiso_combine ! inits object procedure :: sample_fission_energy => mgxsiso_sample_fission_energy @@ -181,7 +172,6 @@ module mgxs_header contains procedure :: init_file => mgxsang_init_file ! Initialize Nuclidic MGXS Data - procedure :: print => mgxsang_print ! Writes nuclide info procedure :: get_xs => mgxsang_get_xs ! Gets Size of Data w/in Object procedure :: combine => mgxsang_combine ! inits object procedure :: sample_fission_energy => mgxsang_sample_fission_energy @@ -211,11 +201,6 @@ module mgxs_header else this % kT = ZERO end if - if (check_for_node(node_xsdata, "zaid")) then - call get_node_value(node_xsdata, "zaid", this % zaid) - else - this % zaid = 0 - end if if (check_for_node(node_xsdata, "awr")) then call get_node_value(node_xsdata, "awr", this % awr) else @@ -957,164 +942,6 @@ module mgxs_header end subroutine mgxsang_init_file -!=============================================================================== -! MGXS*_PRINT displays information about a continuous-energy neutron -! cross_section table and its reactions and secondary angle/energy distributions -!=============================================================================== - - subroutine mgxs_print(this, unit_) - class(Mgxs), intent(in) :: this - integer, intent(in) :: unit_ - - character(MAX_LINE_LEN) :: temp_str - - ! Basic nuclide information - write(unit_,*) 'MGXS Entry: ' // trim(this % name) - if (this % zaid > 0) then - write(unit_,*) ' ZAID = ' // trim(to_str(this % zaid)) - else if (this % zaid < 0) then - write(unit_,*) ' Material id = ' // trim(to_str(-this % zaid)) - end if - if (this % awr > ZERO) then - write(unit_,*) ' AWR = ' // trim(to_str(this % awr)) - end if - if (this % kT > ZERO) then - write(unit_,*) ' kT = ' // trim(to_str(this % kT)) - end if - if (this % scatt_type == ANGLE_LEGENDRE) then - temp_str = "Legendre" - write(unit_,*) ' Scattering Type = ' // trim(temp_str) - select type(this) - type is (MgxsIso) - temp_str = to_str(size(this % scatter % dist(1) % data,dim=1) - 1) - end select - write(unit_,*) ' Scattering Order = ' // trim(temp_str) - else if (this % scatt_type == ANGLE_HISTOGRAM) then - temp_str = "Histogram" - write(unit_,*) ' Scattering Type = ' // trim(temp_str) - select type(this) - type is (MgxsIso) - temp_str = to_str(size(this % scatter % dist(1) % data,dim=1)) - end select - write(unit_,*) ' Num. Distribution Bins = ' // trim(temp_str) - else if (this % scatt_type == ANGLE_TABULAR) then - temp_str = "Tabular" - write(unit_,*) ' Scattering Type = ' // trim(temp_str) - select type(this) - type is (MgxsIso) - temp_str = to_str(size(this % scatter % dist(1) % data,dim=1)) - end select - write(unit_,*) ' Num. Distribution Points = ' // trim(temp_str) - end if - write(unit_,*) ' Fissionable = ', this % fissionable - - end subroutine mgxs_print - - subroutine mgxsiso_print(this, unit) - - class(MgxsIso), intent(in) :: this - integer, optional, intent(in) :: unit - - integer :: unit_ ! unit to write to - integer :: size_total, size_scattmat, size_mgxs - integer :: gin - - ! set default unit for writing information - if (present(unit)) then - unit_ = unit - else - unit_ = OUTPUT_UNIT - end if - - ! Write Basic Nuclide Information - call mgxs_print(this, unit_) - - ! Determine size of mgxs and scattering matrices - size_scattmat = 0 - do gin = 1, size(this % scatter % energy) - size_scattmat = size_scattmat + & - 2 * size(this % scatter % energy(gin) % data) + & - size(this % scatter % dist(gin) % data) - end do - size_scattmat = size_scattmat + size(this % scatter % scattxs) - size_scattmat = size_scattmat * 8 - - size_mgxs = size(this % total) + size(this % absorption) + & - size(this % nu_fission) + size(this % k_fission) + & - size(this % fission) + size(this % chi) - size_mgxs = size_mgxs * 8 - - ! Calculate total memory - size_total = size_scattmat + size_mgxs - - ! Write memory used - write(unit_,*) ' Memory Requirements' - write(unit_,*) ' Cross sections = ' // trim(to_str(size_mgxs)) // ' bytes' - write(unit_,*) ' Scattering Matrices = ' // & - trim(to_str(size_scattmat)) // ' bytes' - write(unit_,*) ' Total = ' // trim(to_str(size_total)) // ' bytes' - - ! Blank line at end of nuclide - write(unit_,*) - - end subroutine mgxsiso_print - - subroutine mgxsang_print(this, unit) - - class(MgxsAngle), intent(in) :: this - integer, optional, intent(in) :: unit - - integer :: unit_ ! unit to write to - integer :: size_total, size_scattmat, size_mgxs - integer :: ipol, iazi, gin - - ! set default unit for writing information - if (present(unit)) then - unit_ = unit - else - unit_ = OUTPUT_UNIT - end if - - ! Write Basic Nuclide Information - call mgxs_print(this, unit_) - - write(unit_,*) ' # of Polar Angles = ' // trim(to_str(this % n_pol)) - write(unit_,*) ' # of Azimuthal Angles = ' // trim(to_str(this % n_azi)) - - ! Determine size of mgxs and scattering matrices - size_scattmat = 0 - do ipol = 1, this % n_pol - do iazi = 1, this % n_azi - do gin = 1, size(this % scatter(iazi, ipol) % obj % energy) - size_scattmat = size_scattmat + & - 2 * size(this % scatter(iazi, ipol) % obj % energy(gin) % data) + & - size(this % scatter(iazi, ipol) % obj % dist(gin) % data) - end do - size_scattmat = size_scattmat + & - size(this % scatter(iazi, ipol) % obj % scattxs) - end do - end do - size_scattmat = size_scattmat * 8 - - size_mgxs = size(this % total) + size(this % absorption) + & - size(this % nu_fission) + size(this % k_fission) + & - size(this % fission) + size(this % chi) - size_mgxs = size_mgxs * 8 - - ! Calculate total memory - size_total = size_scattmat + size_mgxs - - ! Write memory used - write(unit_,*) ' Memory Requirements' - write(unit_,*) ' Cross sections = ' // trim(to_str(size_mgxs)) // ' bytes' - write(unit_,*) ' Scattering Matrices = ' // & - trim(to_str(size_scattmat)) // ' bytes' - write(unit_,*) ' Total = ' // trim(to_str(size_total)) // ' bytes' - - ! Blank line at end of nuclide - write(unit_,*) - end subroutine mgxsang_print - !=============================================================================== ! MGXS*_GET_XS returns the requested data cross section data !=============================================================================== @@ -1319,7 +1146,6 @@ module mgxs_header else this % name = mat % name end if - this % zaid = -mat % id this % fissionable = mat % fissionable this % scatt_type = scatt_type diff --git a/src/multipole.F90 b/src/multipole.F90 index 770121b9d5..a099e50476 100644 --- a/src/multipole.F90 +++ b/src/multipole.F90 @@ -28,13 +28,8 @@ contains integer(HID_T) :: group_id ! Intermediate loading components - character(len=10) :: version - integer :: NMT - integer :: i, j - integer, allocatable :: MT(:) - logical :: accumulated_fission - character(len=24) :: MT_n ! Takes the form '/nuclide/reactions/MT???' integer :: is_fissionable + character(len=10) :: version associate (nuc => nuclides(i_table)) @@ -80,111 +75,8 @@ contains call read_dataset(multipole % curvefit, group_id, "curvefit") - ! Delete ACE pointwise data - call read_dataset(nuc % n_grid, group_id, "n_grid") - - deallocate(nuc % energy) - deallocate(nuc % total) - deallocate(nuc % elastic) - deallocate(nuc % fission) - deallocate(nuc % nu_fission) - deallocate(nuc % absorption) - - allocate(nuc % energy(nuc % n_grid)) - allocate(nuc % total(nuc % n_grid)) - allocate(nuc % elastic(nuc % n_grid)) - allocate(nuc % fission(nuc % n_grid)) - allocate(nuc % nu_fission(nuc % n_grid)) - allocate(nuc % absorption(nuc % n_grid)) - - nuc % total(:) = ZERO - nuc % absorption(:) = ZERO - nuc % fission(:) = ZERO - - ! Read in new energy axis (converting eV to MeV) - call read_dataset(nuc % energy, group_id, "energy_points") - nuc % energy = nuc % energy / 1.0e6_8 - - ! Get count and list of MT tables - call read_dataset(NMT, group_id, "MT_count") - allocate(MT(NMT)) - - call read_dataset(MT, group_id, "MT_list") - call close_group(group_id) - accumulated_fission = .false. - - ! Loop over each MT entry and load it into a reaction. - do i = 1, NMT - write(MT_n, '(A, I3.3)') '/nuclide/reactions/MT', MT(i) - - group_id = open_group(file_id, MT_n) - - ! Each MT needs to be treated slightly differently. - select case (MT(i)) - case(ELASTIC) - call read_dataset(nuc % elastic, group_id, "MT_sigma") - nuc % total(:) = nuc % total + nuc % elastic - case(N_FISSION) - call read_dataset(nuc % fission, group_id, "MT_sigma") - nuc % total(:) = nuc % total + nuc % fission - nuc % absorption(:) = nuc % absorption + nuc % fission - accumulated_fission = .true. - case default - ! Search through all of our secondary reactions - do j = 1, size(nuc % reactions) - if (nuc % reactions(j) % MT == MT(i)) then - ! Match found - - ! Individual Fission components exist, so remove the combined - ! fission cross section. - if ( (MT(i) == N_F .or. MT(i) == N_NF .or. MT(i) == N_2NF & - .or. MT(i) == N_3NF) .and. accumulated_fission) then - nuc % total(:) = nuc % total - nuc % fission - nuc % absorption(:) = nuc % absorption - nuc % fission - nuc % fission(:) = ZERO - accumulated_fission = .false. - end if - - deallocate(nuc % reactions(j) % sigma) - allocate(nuc % reactions(j) % sigma(nuc % n_grid)) - - call read_dataset(nuc % reactions(j) % sigma, & - group_id, "MT_sigma") - call read_dataset(nuc % reactions(j) % Q_value, & - group_id, "Q_value") - call read_dataset(nuc % reactions(j) % threshold, & - group_id, "threshold") - nuc % reactions(j) % threshold = 1 ! TODO: reconsider implications. - nuc % reactions(j) % Q_value = nuc % reactions(j) % Q_value & - / 1.0e6_8 - - ! Accumulate total - if (MT(i) /= N_LEVEL .and. MT(i) <= N_DA) then - nuc % total(:) = nuc % total + nuc % reactions(j) % sigma - end if - - ! Accumulate absorption - if (MT(i) >= N_GAMMA .and. MT(i) <= N_DA) then - nuc % absorption(:) = nuc % absorption & - + nuc % reactions(j) % sigma - end if - - ! Accumulate fission (if needed) - if ( (MT(i) == N_F .or. MT(i) == N_NF .or. MT(i) == N_2NF & - .or. MT(i) == N_3NF) ) then - nuc % fission(:) = nuc % fission + nuc % reactions(j) % sigma - nuc % absorption(:) = nuc % absorption & - + nuc % reactions(j) % sigma - end if - end if - end do - end select - - call close_group(group_id) - end do - ! Close file call file_close(file_id) diff --git a/src/nuclide_header.F90 b/src/nuclide_header.F90 index 8ff83482e5..1fbd691ee8 100644 --- a/src/nuclide_header.F90 +++ b/src/nuclide_header.F90 @@ -7,20 +7,21 @@ module nuclide_header h5lget_name_by_idx_f, H5_INDEX_NAME_F, H5_ITER_INC_F use h5lt, only: h5ltpath_valid_f + use algorithm, only: sort, find use constants use dict_header, only: DictIntInt use endf, only: reaction_name, is_fission, is_disappearance - use endf_header, only: Function1D, Constant1D, Polynomial, Tabulated1D + use endf_header, only: Function1D, Polynomial, Tabulated1D use error, only: fatal_error, warning use hdf5_interface, only: read_attribute, open_group, close_group, & - open_dataset, read_dataset, close_dataset, get_shape + open_dataset, read_dataset, close_dataset, get_shape, get_datasets use list_header, only: ListInt use math, only: evaluate_legendre use multipole_header, only: MultipoleArray use product_header, only: AngleEnergyContainer use reaction_header, only: Reaction use secondary_uncorrelated, only: UncorrelatedAngleEnergy - use stl_vector, only: VectorInt + use stl_vector, only: VectorInt, VectorReal use string use urr_header, only: UrrData use xml_interface @@ -32,29 +33,37 @@ module nuclide_header ! for continuous-energy neutron transport. !=============================================================================== - type :: Nuclide - ! Nuclide meta-data - character(20) :: name ! name of nuclide, e.g. U235.71c - integer :: zaid ! Z and A identifier, e.g. 92235 - integer :: metastable ! metastable state - real(8) :: awr ! Atomic Weight Ratio - real(8) :: kT ! temperature in MeV (k*T) - - ! Fission information - logical :: fissionable = .false. ! nuclide is fissionable? - - ! Energy grid information - integer :: n_grid ! # of nuclide grid points + type EnergyGrid integer, allocatable :: grid_index(:) ! log grid mapping indices real(8), allocatable :: energy(:) ! energy values corresponding to xs + end type EnergyGrid - ! Microscopic cross sections + type SumXS real(8), allocatable :: total(:) ! total cross section real(8), allocatable :: elastic(:) ! elastic scattering real(8), allocatable :: fission(:) ! fission real(8), allocatable :: nu_fission(:) ! neutron production real(8), allocatable :: absorption(:) ! absorption (MT > 100) real(8), allocatable :: heating(:) ! heating + end type SumXS + + type :: Nuclide + ! Nuclide meta-data + character(20) :: name ! name of nuclide, e.g. U235.71c + integer :: Z ! atomic number + integer :: A ! mass number + integer :: metastable ! metastable state + real(8) :: awr ! Atomic Weight Ratio + real(8), allocatable :: kTs(:) ! temperature in MeV (k*T) + + ! Fission information + logical :: fissionable = .false. ! nuclide is fissionable? + + ! Energy grid for each temperature + type(EnergyGrid), allocatable :: grid(:) + + ! Microscopic cross sections + type(SumXS), allocatable :: sum_xs(:) ! Resonance scattering info logical :: resonant = .false. ! resonant scatterer? @@ -77,7 +86,7 @@ module nuclide_header ! Unresolved resonance data logical :: urr_present = .false. integer :: urr_inelastic - type(UrrData), pointer :: urr_data => null() + type(UrrData), allocatable :: urr_data(:) ! Multipole data logical :: mp_present = .false. @@ -88,9 +97,12 @@ module nuclide_header type(DictIntInt) :: reaction_index ! map MT values to index in reactions ! array; used at tally-time + ! Fission energy release + class(Function1D), allocatable :: fission_q_prompt ! prompt neutrons, gammas + class(Function1D), allocatable :: fission_q_recov ! neutrons, gammas, betas + contains procedure :: clear => nuclide_clear - procedure :: print => nuclide_print procedure :: from_hdf5 => nuclide_from_hdf5 procedure :: nu => nuclide_nu procedure, private :: create_derived => nuclide_create_derived @@ -102,10 +114,8 @@ module nuclide_header !=============================================================================== type Nuclide0K - character(10) :: nuclide ! name of nuclide, e.g. U-238 + character(10) :: nuclide ! name of nuclide, e.g. U238 character(16) :: scheme = 'ares' ! target velocity sampling scheme - character(10) :: name ! name of nuclide, e.g. 92235.03c - character(10) :: name_0K ! name of 0K nuclide, e.g. 92235.00c real(8) :: E_min = 0.01e-6_8 ! lower cutoff energy for res scattering real(8) :: E_max = 1000.0e-6_8 ! upper cutoff energy for res scattering end type Nuclide0K @@ -129,6 +139,7 @@ module nuclide_header ! Information for S(a,b) use integer :: index_sab ! index in sab_tables (zero means no table) integer :: last_index_sab = 0 ! index in sab_tables last used by this nuclide + integer :: index_temp_sab ! temperature index for sab_tables real(8) :: elastic_sab ! microscopic elastic scattering on S(a,b) table ! Information for URR probability table use @@ -171,33 +182,43 @@ module nuclide_header subroutine nuclide_clear(this) class(Nuclide), intent(inout) :: this ! The Nuclide object to clear - if (associated(this % urr_data)) deallocate(this % urr_data) if (associated(this % multipole)) deallocate(this % multipole) end subroutine nuclide_clear - subroutine nuclide_from_hdf5(this, group_id) - class(Nuclide), intent(inout) :: this - integer(HID_T), intent(in) :: group_id + subroutine nuclide_from_hdf5(this, group_id, temperature, method, tolerance) + class(Nuclide), intent(inout) :: this + integer(HID_T), intent(in) :: group_id + type(VectorReal), intent(in) :: temperature ! list of desired temperatures + integer, intent(in) :: method + real(8), intent(in) :: tolerance integer :: i - integer :: Z - integer :: A integer :: storage_type integer :: max_corder integer :: n_links integer :: hdf5_err + integer :: i_closest + integer :: n_temperature integer(HID_T) :: urr_group, nu_group - integer(HID_T) :: energy_dset + integer(HID_T) :: energy_group, energy_dset + integer(HID_T) :: kT_group integer(HID_T) :: rxs_group integer(HID_T) :: rx_group integer(HID_T) :: total_nu + integer(HID_T) :: fer_group ! fission_energy_release group + integer(HID_T) :: fer_dset integer(SIZE_T) :: name_len, name_file_len integer(HSIZE_T) :: j integer(HSIZE_T) :: dims(1) - character(MAX_WORD_LEN) :: temp - type(VectorInt) :: MTs + character(MAX_WORD_LEN) :: temp_str + character(MAX_FILE_LEN), allocatable :: dset_names(:) + real(8), allocatable :: temps_available(:) ! temperatures available + real(8) :: temp_desired + real(8) :: temp_actual logical :: exists + type(VectorInt) :: MTs + type(VectorInt) :: temps_to_read ! Get name of nuclide from group name_len = len(this % name) @@ -206,29 +227,90 @@ module nuclide_header ! Get rid of leading '/' this % name = trim(this % name(2:)) - call read_attribute(Z, group_id, 'Z') - call read_attribute(A, group_id, 'A') + call read_attribute(this % Z, group_id, 'Z') + call read_attribute(this % A, group_id, 'A') call read_attribute(this % metastable, group_id, 'metastable') - this % zaid = 1000*Z + A + 400*this % metastable call read_attribute(this % awr, group_id, 'atomic_weight_ratio') - call read_attribute(this % kT, group_id, 'temperature') + kT_group = open_group(group_id, 'kTs') - ! Read energy grid - energy_dset = open_dataset(group_id, 'energy') - call get_shape(energy_dset, dims) - this % n_grid = int(dims(1), 4) - allocate(this % energy(this % n_grid)) - call read_dataset(this % energy, energy_dset) - call close_dataset(energy_dset) + ! Determine temperatures available + call get_datasets(kT_group, dset_names) + allocate(temps_available(size(dset_names))) + do i = 1, size(dset_names) + ! Read temperature value + call read_dataset(temps_available(i), kT_group, trim(dset_names(i))) + temps_available(i) = temps_available(i) / K_BOLTZMANN + end do + + select case (method) + case (TEMPERATURE_NEAREST) + ! Determine actual temperatures to read + TEMP_LOOP: do i = 1, temperature % size() + temp_desired = temperature % data(i) + i_closest = minloc(abs(temps_available - temp_desired), dim=1) + temp_actual = temps_available(i_closest) + if (abs(temp_actual - temp_desired) < tolerance) then + if (find(temps_to_read, nint(temp_actual)) == -1) then + call temps_to_read % push_back(nint(temp_actual)) + + ! Write warning for resonance scattering data if 0K is not available + if (abs(temp_actual - temp_desired) > 0 .and. temp_desired == 0) then + call warning(trim(this % name) // " does not contain 0K data & + &needed for resonance scattering options selected. Using & + &data at " // trim(to_str(nint(temp_actual))) // " K instead.") + end if + end if + else + call fatal_error("Nuclear data library does not contain cross sections & + &for " // trim(this % name) // " at or near " // & + trim(to_str(nint(temp_desired))) // " K.") + end if + end do TEMP_LOOP + + case (TEMPERATURE_INTERPOLATION) + ! TODO: Get bounding temperatures + call fatal_error("Temperature interpolation not yet implemented") + + case (TEMPERATURE_MULTIPOLE) + ! Add first available temperature + call temps_to_read % push_back(nint(temps_available(1))) + + end select + + ! Sort temperatures to read + call sort(temps_to_read) + + n_temperature = temps_to_read % size() + allocate(this % kTs(n_temperature)) + allocate(this % grid(n_temperature)) + + do i = 1, n_temperature + ! Get temperature as a string + temp_str = trim(to_str(temps_to_read % data(i))) // "K" + + ! Read exact temperature value + call read_dataset(this % kTs(i), kT_group, trim(temp_str)) + + ! Read energy grid + energy_group = open_group(group_id, 'energy') + energy_dset = open_dataset(energy_group, temp_str) + call get_shape(energy_dset, dims) + allocate(this % grid(i) % energy(int(dims(1), 4))) + call read_dataset(this % grid(i) % energy, energy_dset) + call close_dataset(energy_dset) + call close_group(energy_group) + end do + + call close_group(kT_group) ! Get MT values based on group names rxs_group = open_group(group_id, 'reactions') call h5gget_info_f(rxs_group, storage_type, n_links, max_corder, hdf5_err) do j = 0, n_links - 1 call h5lget_name_by_idx_f(rxs_group, ".", H5_INDEX_NAME_F, H5_ITER_INC_F, & - j, temp, hdf5_err, name_len) - if (starts_with(temp, "reaction_")) then - call MTs % push_back(int(str_to_int(temp(10:12)))) + j, temp_str, hdf5_err, name_len) + if (starts_with(temp_str, "reaction_")) then + call MTs % push_back(int(str_to_int(temp_str(10:12)))) end if end do @@ -237,7 +319,8 @@ module nuclide_header do i = 1, size(this % reactions) rx_group = open_group(rxs_group, 'reaction_' // trim(& zero_padded(MTs % data(i), 3))) - call this % reactions(i) % from_hdf5(rx_group) + + call this % reactions(i) % from_hdf5(rx_group, temps_to_read) call close_group(rx_group) end do call close_group(rxs_group) @@ -246,32 +329,42 @@ module nuclide_header call h5ltpath_valid_f(group_id, 'urr', .true., exists, hdf5_err) if (exists) then this % urr_present = .true. - allocate(this % urr_data) - urr_group = open_group(group_id, 'urr') - call this % urr_data % from_hdf5(urr_group) + allocate(this % urr_data(n_temperature)) + + do i = 1, n_temperature + ! Get temperature as a string + temp_str = trim(to_str(temps_to_read % data(i))) // "K" + + ! Read probability tables for i-th temperature + urr_group = open_group(group_id, 'urr/' // trim(temp_str)) + call this % urr_data(i) % from_hdf5(urr_group) + call close_group(urr_group) + + ! Check for negative values + if (any(this % urr_data(i) % prob < ZERO)) then + call warning("Negative value(s) found on probability table & + &for nuclide " // this % name // " at " // trim(temp_str)) + end if + end do ! if the inelastic competition flag indicates that the inelastic cross - ! section should be determined from a normal reaction cross section, we need - ! to get the index of the reaction - if (this % urr_data % inelastic_flag > 0) then - do i = 1, size(this % reactions) - if (this % reactions(i) % MT == this % urr_data % inelastic_flag) then - this % urr_inelastic = i + ! section should be determined from a normal reaction cross section, we + ! need to get the index of the reaction + if (n_temperature > 0) then + if (this % urr_data(1) % inelastic_flag > 0) then + do i = 1, size(this % reactions) + if (this % reactions(i) % MT == this % urr_data(1) % inelastic_flag) then + this % urr_inelastic = i + end if + end do + + ! Abort if no corresponding inelastic reaction was found + if (this % urr_inelastic == NONE) then + call fatal_error("Could not find inelastic reaction specified on & + &unresolved resonance probability table.") end if - end do - - ! Abort if no corresponding inelastic reaction was found - if (this % urr_inelastic == NONE) then - call fatal_error("Could not find inelastic reaction specified on & - &unresolved resonance probability table.") end if end if - - ! Check for negative values - if (any(this % urr_data % prob < ZERO)) then - call warning("Negative value(s) found on probability table & - &for nuclide " // this % name) - end if end if ! Check for nu-total @@ -281,13 +374,11 @@ module nuclide_header ! Read total nu data total_nu = open_dataset(nu_group, 'yield') - call read_attribute(temp, total_nu, 'type') - select case (temp) - case ('constant') - allocate(Constant1D :: this % total_nu) - case ('tabulated') + call read_attribute(temp_str, total_nu, 'type') + select case (temp_str) + case ('Tabulated1D') allocate(Tabulated1D :: this % total_nu) - case ('polynomial') + case ('Polynomial') allocate(Polynomial :: this % total_nu) end select call this % total_nu % from_hdf5(total_nu) @@ -296,6 +387,43 @@ module nuclide_header call close_group(nu_group) end if + ! Read fission energy release data if present + call h5ltpath_valid_f(group_id, 'fission_energy_release', .true., exists, & + hdf5_err) + if (exists) then + fer_group = open_group(group_id, 'fission_energy_release') + + ! Check to see if this is polynomial or tabulated data + fer_dset = open_dataset(fer_group, 'q_prompt') + call read_attribute(temp_str, fer_dset, 'type') + if (temp_str == 'Polynomial') then + ! Read the prompt Q-value + allocate(Polynomial :: this % fission_q_prompt) + call this % fission_q_prompt % from_hdf5(fer_dset) + call close_dataset(fer_dset) + + ! Read the recoverable energy Q-value + allocate(Polynomial :: this % fission_q_recov) + fer_dset = open_dataset(fer_group, 'q_recoverable') + call this % fission_q_recov % from_hdf5(fer_dset) + call close_dataset(fer_dset) + else if (temp_str == 'Tabulated1D') then + ! Read the prompt Q-value + allocate(Tabulated1D :: this % fission_q_prompt) + call this % fission_q_prompt % from_hdf5(fer_dset) + call close_dataset(fer_dset) + + ! Read the recoverable energy Q-value + allocate(Tabulated1D :: this % fission_q_recov) + fer_dset = open_dataset(fer_group, 'q_recoverable') + call this % fission_q_recov % from_hdf5(fer_dset) + call close_dataset(fer_dset) + else + call fatal_error('Unrecognized fission energy release format.') + end if + call close_group(fer_group) + end if + ! Create derived cross section data call this % create_derived() @@ -304,108 +432,125 @@ module nuclide_header subroutine nuclide_create_derived(this) class(Nuclide), intent(inout) :: this - integer :: i - integer :: j - integer :: k + integer :: i, j, k + integer :: t integer :: m integer :: n + integer :: n_grid integer :: i_fission - type(ListInt) :: MTs + integer :: n_temperature + type(VectorInt) :: MTs - ! Allocate and initialize derived cross sections - allocate(this % total(this % n_grid)) - allocate(this % elastic(this % n_grid)) - allocate(this % fission(this % n_grid)) - allocate(this % nu_fission(this % n_grid)) - allocate(this % absorption(this % n_grid)) - this % total(:) = ZERO - this % elastic(:) = ZERO - this % fission(:) = ZERO - this % nu_fission(:) = ZERO - this % absorption(:) = ZERO + n_temperature = size(this % kTs) + allocate(this % sum_xs(n_temperature)) + + do i = 1, n_temperature + ! Allocate and initialize derived cross sections + n_grid = size(this % grid(i) % energy) + allocate(this % sum_xs(i) % total(n_grid)) + allocate(this % sum_xs(i) % elastic(n_grid)) + allocate(this % sum_xs(i) % fission(n_grid)) + allocate(this % sum_xs(i) % nu_fission(n_grid)) + allocate(this % sum_xs(i) % absorption(n_grid)) + this % sum_xs(i) % total(:) = ZERO + this % sum_xs(i) % elastic(:) = ZERO + this % sum_xs(i) % fission(:) = ZERO + this % sum_xs(i) % nu_fission(:) = ZERO + this % sum_xs(i) % absorption(:) = ZERO + end do i_fission = 0 do i = 1, size(this % reactions) - call MTs % append(this % reactions(i) % MT) + call MTs % push_back(this % reactions(i) % MT) call this % reaction_index % add_key(this % reactions(i) % MT, i) associate (rx => this % reactions(i)) - j = rx % threshold - n = size(rx % sigma) - ! Skip total inelastic level scattering, gas production cross sections ! (MT=200+), etc. if (rx % MT == N_LEVEL .or. rx % MT == N_NONELASTIC) cycle if (rx % MT > N_5N2P .and. rx % MT < N_P0) cycle ! Skip level cross sections if total is available - if (rx % MT >= N_P0 .and. rx % MT <= N_PC .and. MTs % contains(N_P)) cycle - if (rx % MT >= N_D0 .and. rx % MT <= N_DC .and. MTs % contains(N_D)) cycle - if (rx % MT >= N_T0 .and. rx % MT <= N_TC .and. MTs % contains(N_T)) cycle - if (rx % MT >= N_3HE0 .and. rx % MT <= N_3HEC .and. MTs % contains(N_3HE)) cycle - if (rx % MT >= N_A0 .and. rx % MT <= N_AC .and. MTs % contains(N_A)) cycle - if (rx % MT >= N_2N0 .and. rx % MT <= N_2NC .and. MTs % contains(N_2N)) cycle + if (rx % MT >= N_P0 .and. rx % MT <= N_PC .and. find(MTs, N_P) /= -1) cycle + if (rx % MT >= N_D0 .and. rx % MT <= N_DC .and. find(MTs, N_D) /= -1) cycle + if (rx % MT >= N_T0 .and. rx % MT <= N_TC .and. find(MTs, N_T) /= -1) cycle + if (rx % MT >= N_3HE0 .and. rx % MT <= N_3HEC .and. find(MTs, N_3HE) /= -1) cycle + if (rx % MT >= N_A0 .and. rx % MT <= N_AC .and. find(MTs, N_A) /= -1) cycle + if (rx % MT >= N_2N0 .and. rx % MT <= N_2NC .and. find(MTs, N_2N) /= -1) cycle - ! Copy elastic - if (rx % MT == ELASTIC) this % elastic(:) = rx % sigma + do t = 1, n_temperature + j = rx % xs(t) % threshold + n = size(rx % xs(t) % value) - ! Add contribution to total cross section - this % total(j:j+n-1) = this % total(j:j+n-1) + rx % sigma + ! Copy elastic + if (rx % MT == ELASTIC) this % sum_xs(t) % elastic(:) = rx % xs(t) % value - ! Add contribution to absorption cross section - if (is_disappearance(rx % MT)) then - this % absorption(j:j+n-1) = this % absorption(j:j+n-1) + rx % sigma - end if + ! Add contribution to total cross section + this % sum_xs(t) % total(j:j+n-1) = this % sum_xs(t) % total(j:j+n-1) + & + rx % xs(t) % value - ! Information about fission reactions - if (rx % MT == N_FISSION) then - allocate(this % index_fission(1)) - elseif (rx % MT == N_F) then - allocate(this % index_fission(PARTIAL_FISSION_MAX)) - this % has_partial_fission = .true. - end if + ! Add contribution to absorption cross section + if (is_disappearance(rx % MT)) then + this % sum_xs(t) % absorption(j:j+n-1) = this % sum_xs(t) % & + absorption(j:j+n-1) + rx % xs(t) % value + end if - ! Add contribution to fission cross section - if (is_fission(rx % MT)) then - this % fissionable = .true. - this % fission(j:j+n-1) = this % fission(j:j+n-1) + rx % sigma - - ! Also need to add fission cross sections to absorption - this % absorption(j:j+n-1) = this % absorption(j:j+n-1) + rx % sigma - - ! If total fission reaction is present, there's no need to store the - ! reaction cross-section since it was copied to this % fission - if (rx % MT == N_FISSION) deallocate(rx % sigma) - - ! Keep track of this reaction for easy searching later - i_fission = i_fission + 1 - this % index_fission(i_fission) = i - this % n_fission = this % n_fission + 1 - - ! <<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<< - ! Before the secondary distribution refactor, when the angle/energy - ! distribution was uncorrelated, no angle was actually sampled. With - ! the refactor, an angle is always sampled for an uncorrelated - ! distribution even when no angle distribution exists in the ACE file - ! (isotropic is assumed). To preserve the RNG stream, we explicitly - ! mark fission reactions so that we avoid the angle sampling. - do k = 1, size(rx % products) - if (rx % products(k) % particle == NEUTRON) then - do m = 1, size(rx % products(k) % distribution) - associate (aedist => rx % products(k) % distribution(m) % obj) - select type (aedist) - type is (UncorrelatedAngleEnergy) - aedist % fission = .true. - end select - end associate - end do + ! Information about fission reactions + if (t == 1) then + if (rx % MT == N_FISSION) then + allocate(this % index_fission(1)) + elseif (rx % MT == N_F) then + allocate(this % index_fission(PARTIAL_FISSION_MAX)) + this % has_partial_fission = .true. end if - end do - ! <<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<<<< - end if - end associate - end do + end if + + ! Add contribution to fission cross section + if (is_fission(rx % MT)) then + this % fissionable = .true. + this % sum_xs(t) % fission(j:j+n-1) = this % sum_xs(t) % & + fission(j:j+n-1) + rx % xs(t) % value + + ! Also need to add fission cross sections to absorption + this % sum_xs(t) % absorption(j:j+n-1) = this % sum_xs(t) % & + absorption(j:j+n-1) + rx % xs(t) % value + + ! If total fission reaction is present, there's no need to store the + ! reaction cross-section since it was copied to this % fission + if (rx % MT == N_FISSION) deallocate(rx % xs(t) % value) + + ! Keep track of this reaction for easy searching later + if (t == 1) then + i_fission = i_fission + 1 + this % index_fission(i_fission) = i + this % n_fission = this % n_fission + 1 + + ! <<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<< + ! Before the secondary distribution refactor, when the angle/energy + ! distribution was uncorrelated, no angle was actually sampled. With + ! the refactor, an angle is always sampled for an uncorrelated + ! distribution even when no angle distribution exists in the ACE file + ! (isotropic is assumed). To preserve the RNG stream, we explicitly + ! mark fission reactions so that we avoid the angle sampling. + do k = 1, size(rx % products) + if (rx % products(k) % particle == NEUTRON) then + do m = 1, size(rx % products(k) % distribution) + associate (aedist => rx % products(k) % distribution(m) % obj) + select type (aedist) + type is (UncorrelatedAngleEnergy) + aedist % fission = .true. + end select + end associate + end do + end if + end do + ! <<<<<<<<<<<<<<<<<<<<<<<<<<<< REMOVE THIS <<<<<<<<<<<<<<<<<<<<<<<<< + end if + end if ! fission + end do ! temperature + end associate ! rx + end do ! reactions ! Determine number of delayed neutron precursors if (this % fissionable) then @@ -418,17 +563,16 @@ module nuclide_header end if ! Calculate nu-fission cross section - if (this % fissionable) then - do i = 1, size(this % energy) - this % nu_fission(i) = this % nu(this % energy(i), EMISSION_TOTAL) * & - this % fission(i) - end do - else - this % nu_fission(:) = ZERO - end if - - ! Clear MTs set - call MTs % clear() + do t = 1, n_temperature + if (this % fissionable) then + do i = 1, size(this % sum_xs(t) % fission) + this % sum_xs(t) % nu_fission(i) = this % nu(this % grid(t) % energy(i), & + EMISSION_TOTAL) * this % sum_xs(t) % fission(i) + end do + else + this % sum_xs(t) % nu_fission(:) = ZERO + end if + end do end subroutine nuclide_create_derived !=============================================================================== @@ -496,86 +640,4 @@ module nuclide_header end function nuclide_nu - -!=============================================================================== -! NUCLIDE*_PRINT displays information about a continuous-energy neutron -! cross_section table and its reactions and secondary angle/energy distributions -!=============================================================================== - - subroutine nuclide_print(this, unit) - class(Nuclide), intent(in) :: this - integer, intent(in), optional :: unit - - integer :: i ! loop index over nuclides - integer :: unit_ ! unit to write to - integer :: size_xs ! memory used for cross-sections (bytes) - integer :: size_urr ! memory used for probability tables (bytes) - - ! set default unit for writing information - if (present(unit)) then - unit_ = unit - else - unit_ = OUTPUT_UNIT - end if - - ! Initialize totals - size_urr = 0 - size_xs = 0 - - ! Basic nuclide information - write(unit_,*) 'Nuclide ' // trim(this % name) - write(unit_,*) ' zaid = ' // trim(to_str(this % zaid)) - write(unit_,*) ' awr = ' // trim(to_str(this % awr)) - write(unit_,*) ' kT = ' // trim(to_str(this % kT)) - write(unit_,*) ' # of grid points = ' // trim(to_str(this % n_grid)) - write(unit_,*) ' Fissionable = ', this % fissionable - write(unit_,*) ' # of fission reactions = ' // trim(to_str(this % n_fission)) - write(unit_,*) ' # of reactions = ' // trim(to_str(size(this % reactions))) - - ! Information on each reaction - write(unit_,*) ' Reaction Q-value COM IE' - do i = 1, size(this % reactions) - associate (rxn => this % reactions(i)) - write(unit_,'(3X,A11,1X,F8.3,3X,L1,3X,I6)') & - reaction_name(rxn % MT), rxn % Q_value, rxn % scatter_in_cm, & - rxn % threshold - - ! Accumulate data size - size_xs = size_xs + (this % n_grid - rxn%threshold + 1) * 8 - end associate - end do - - ! Add memory required for summary reactions (total, absorption, fission, - ! nu-fission) - size_xs = 8 * this % n_grid * 4 - - ! Write information about URR probability tables - size_urr = 0 - if (this % urr_present) then - associate(urr => this % urr_data) - write(unit_,*) ' Unresolved resonance probability table:' - write(unit_,*) ' # of energies = ' // trim(to_str(urr % n_energy)) - write(unit_,*) ' # of probabilities = ' // trim(to_str(urr % n_prob)) - write(unit_,*) ' Interpolation = ' // trim(to_str(urr % interp)) - write(unit_,*) ' Inelastic flag = ' // trim(to_str(urr % inelastic_flag)) - write(unit_,*) ' Absorption flag = ' // trim(to_str(urr % absorption_flag)) - write(unit_,*) ' Multiply by smooth? ', urr % multiply_smooth - write(unit_,*) ' Min energy = ', trim(to_str(urr % energy(1))) - write(unit_,*) ' Max energy = ', trim(to_str(urr % energy(urr % n_energy))) - - ! Calculate memory used by probability tables and add to total - size_urr = urr % n_energy * (urr % n_prob * 6 + 1) * 8 - end associate - end if - - ! Write memory used - write(unit_,*) ' Memory Requirements' - write(unit_,*) ' Cross sections = ' // trim(to_str(size_xs)) // ' bytes' - write(unit_,*) ' Probability Tables = ' // & - trim(to_str(size_urr)) // ' bytes' - - ! Blank line at end of nuclide - write(unit_,*) - end subroutine nuclide_print - end module nuclide_header diff --git a/src/output.F90 b/src/output.F90 index 9b9388fc74..ea729e8c2e 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -38,43 +38,56 @@ contains use omp_lib #endif - write(UNIT=OUTPUT_UNIT, FMT='(/11(A/))') & - ' .d88888b. 888b d888 .d8888b.', & - ' d88P" "Y88b 8888b d8888 d88P Y88b', & - ' 888 888 88888b.d88888 888 888', & - ' 888 888 88888b. .d88b. 88888b. 888Y88888P888 888 ', & - ' 888 888 888 "88b d8P Y8b 888 "88b 888 Y888P 888 888 ', & - ' 888 888 888 888 88888888 888 888 888 Y8P 888 888 888', & - ' Y88b. .d88P 888 d88P Y8b. 888 888 888 " 888 Y88b d88P', & - ' "Y88888P" 88888P" "Y8888 888 888 888 888 "Y8888P"', & - '__________________888______________________________________________________', & - ' 888', & - ' 888' + write(UNIT=OUTPUT_UNIT, FMT='(/23(A/))') & + ' %%%%%%%%%%%%%%%', & + ' %%%%%%%%%%%%%%%%%%%%%%%%', & + ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%', & + ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%', & + ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%', & + ' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%', & + ' %%%%%%%%%%%%%%%%%%%%%%%%', & + ' %%%%%%%%%%%%%%%%%%%%%%%%', & + ' ############### %%%%%%%%%%%%%%%%%%%%%%%%', & + ' ################## %%%%%%%%%%%%%%%%%%%%%%%', & + ' ################### %%%%%%%%%%%%%%%%%%%%%%%', & + ' #################### %%%%%%%%%%%%%%%%%%%%%%', & + ' ##################### %%%%%%%%%%%%%%%%%%%%%', & + ' ###################### %%%%%%%%%%%%%%%%%%%%', & + ' ####################### %%%%%%%%%%%%%%%%%%', & + ' ####################### %%%%%%%%%%%%%%%%%', & + ' ###################### %%%%%%%%%%%%%%%%%', & + ' #################### %%%%%%%%%%%%%%%%%', & + ' ################# %%%%%%%%%%%%%%%%%', & + ' ############### %%%%%%%%%%%%%%%%', & + ' ############ %%%%%%%%%%%%%%%', & + ' ######## %%%%%%%%%%%%%%', & + ' %%%%%%%%%%%' ! Write version information write(UNIT=OUTPUT_UNIT, FMT=*) & - ' Copyright: 2011-2016 Massachusetts Institute of Technology' + ' | The OpenMC Monte Carlo Code' write(UNIT=OUTPUT_UNIT, FMT=*) & - ' License: http://openmc.readthedocs.io/en/latest/license.html' - write(UNIT=OUTPUT_UNIT, FMT='(6X,"Version:",8X,I1,".",I1,".",I1)') & + ' Copyright | 2011-2016 Massachusetts Institute of Technology' + write(UNIT=OUTPUT_UNIT, FMT=*) & + ' License | http://openmc.readthedocs.io/en/latest/license.html' + write(UNIT=OUTPUT_UNIT, FMT='(11X,"Version | ",I1,".",I1,".",I1)') & VERSION_MAJOR, VERSION_MINOR, VERSION_RELEASE #ifdef GIT_SHA1 - write(UNIT=OUTPUT_UNIT, FMT='(6X,"Git SHA1:",7X,A)') GIT_SHA1 + write(UNIT=OUTPUT_UNIT, FMT='(10X,"Git SHA1 | ",A)') GIT_SHA1 #endif ! Write the date and time - write(UNIT=OUTPUT_UNIT, FMT='(6X,"Date/Time:",6X,A)') & - time_stamp() + write(UNIT=OUTPUT_UNIT, FMT='(9X,"Date/Time | ",A)') time_stamp() #ifdef MPI ! Write number of processors - write(UNIT=OUTPUT_UNIT, FMT='(6X,"MPI Processes:",2X,A)') & + write(UNIT=OUTPUT_UNIT, FMT='(5X,"MPI Processes | ",A)') & trim(to_str(n_procs)) #endif #ifdef _OPENMP ! Write number of OpenMP threads - write(UNIT=OUTPUT_UNIT, FMT='(6X,"OpenMP Threads:",1X,A)') & + write(UNIT=OUTPUT_UNIT, FMT='(4X,"OpenMP Threads | ",A)') & trim(to_str(omp_get_max_threads())) #endif @@ -317,57 +330,6 @@ contains end subroutine print_particle -!=============================================================================== -! WRITE_XS_SUMMARY writes information about each nuclide and S(a,b) table to a -! file called cross_sections.out. This file shows the list of reactions as well -! as information about their secondary angle/energy distributions, how much -! memory is consumed, thresholds, etc. -!=============================================================================== - - subroutine write_xs_summary() - - integer :: i ! loop index - integer :: unit_xs ! cross_sections.out file unit - character(MAX_FILE_LEN) :: path ! path of summary file - - ! Create filename for log file - path = trim(path_output) // "cross_sections.out" - - ! Open log file for writing - open(NEWUNIT=unit_xs, FILE=path, STATUS='replace', ACTION='write') - - if (run_CE) then - ! Write header - call header("CROSS SECTION TABLES", unit=unit_xs) - - NUCLIDE_LOOP: do i = 1, n_nuclides_total - ! Print information about nuclide - call nuclides(i) % print(unit=unit_xs) - end do NUCLIDE_LOOP - - SAB_TABLES_LOOP: do i = 1, n_sab_tables - ! Print information about S(a,b) table - call sab_tables(i) % print(unit=unit_xs) - end do SAB_TABLES_LOOP - else - ! Write header - call header("MGXS LIBRARY TABLES", unit=unit_xs) - NuclideMG_LOOP: do i = 1, n_nuclides_total - ! Print information about nuclide - call nuclides_mg(i) % obj % print(unit=unit_xs) - end do NuclideMG_LOOP - call header("MATERIAL MGXS TABLES", unit=unit_xs) - MATERIAL_LOOP: do i = 1, n_materials - ! Print information about Materials - call macro_xs(i) % obj % print(unit=unit_xs) - end do MATERIAL_LOOP - end if - - ! Close cross section summary file - close(unit_xs) - - end subroutine write_xs_summary - !=============================================================================== ! PRINT_COLUMNS displays a header listing what physical values will displayed ! below them @@ -776,6 +738,8 @@ contains score_names(abs(SCORE_DELAYED_NU_FISSION)) = "Delayed-Nu-Fission Rate" score_names(abs(SCORE_PROMPT_NU_FISSION)) = "Prompt-Nu-Fission Rate" score_names(abs(SCORE_INVERSE_VELOCITY)) = "Flux-Weighted Inverse Velocity" + score_names(abs(SCORE_FISS_Q_PROMPT)) = "Prompt fission power" + score_names(abs(SCORE_FISS_Q_RECOV)) = "Recoverable fission power" ! Create filename for tally output filename = trim(path_output) // "tallies.out" @@ -1032,121 +996,112 @@ contains matching_bins(i_filter_ein))) end if - ! Left Surface + ! Get the bin for this mesh cell matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, (/ i-1, j, k /) + 1, .true.) - matching_bins(i_filter_surf) = IN_RIGHT + mesh_indices_to_bin(m, (/ i, j, k /)) + + ! Left Surface + matching_bins(i_filter_surf) = OUT_LEFT filter_index = sum((matching_bins(1:size(t % filters)) - 1) & * t % stride) + 1 write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') & - "Outgoing Current to Left", & + "Outgoing Current on Left", & to_str(t % results(1,filter_index) % sum), & trim(to_str(t % results(1,filter_index) % sum_sq)) - matching_bins(i_filter_surf) = OUT_RIGHT + matching_bins(i_filter_surf) = IN_LEFT filter_index = sum((matching_bins(1:size(t % filters)) - 1) & * t % stride) + 1 write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') & - "Incoming Current from Left", & + "Incoming Current on Left", & to_str(t % results(1,filter_index) % sum), & trim(to_str(t % results(1,filter_index) % sum_sq)) ! Right Surface - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, (/ i, j, k /) + 1, .true.) - matching_bins(i_filter_surf) = IN_RIGHT - filter_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 - write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') & - "Incoming Current from Right", & - to_str(t % results(1,filter_index) % sum), & - trim(to_str(t % results(1,filter_index) % sum_sq)) - matching_bins(i_filter_surf) = OUT_RIGHT filter_index = sum((matching_bins(1:size(t % filters)) - 1) & * t % stride) + 1 write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') & - "Outgoing Current to Right", & + "Outgoing Current on Right", & + to_str(t % results(1,filter_index) % sum), & + trim(to_str(t % results(1,filter_index) % sum_sq)) + + matching_bins(i_filter_surf) = IN_RIGHT + filter_index = sum((matching_bins(1:size(t % filters)) - 1) & + * t % stride) + 1 + write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') & + "Incoming Current on Right", & to_str(t % results(1,filter_index) % sum), & trim(to_str(t % results(1,filter_index) % sum_sq)) ! Back Surface - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, (/ i, j-1, k /) + 1, .true.) - matching_bins(i_filter_surf) = IN_FRONT + matching_bins(i_filter_surf) = OUT_BACK filter_index = sum((matching_bins(1:size(t % filters)) - 1) & * t % stride) + 1 write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') & - "Outgoing Current to Back", & + "Outgoing Current on Back", & to_str(t % results(1,filter_index) % sum), & trim(to_str(t % results(1,filter_index) % sum_sq)) - matching_bins(i_filter_surf) = OUT_FRONT + matching_bins(i_filter_surf) = IN_BACK filter_index = sum((matching_bins(1:size(t % filters)) - 1) & * t % stride) + 1 write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') & - "Incoming Current from Back", & + "Incoming Current on Back", & to_str(t % results(1,filter_index) % sum), & trim(to_str(t % results(1,filter_index) % sum_sq)) ! Front Surface - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, (/ i, j, k /) + 1, .true.) - matching_bins(i_filter_surf) = IN_FRONT - filter_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 - write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') & - "Incoming Current from Front", & - to_str(t % results(1,filter_index) % sum), & - trim(to_str(t % results(1,filter_index) % sum_sq)) - matching_bins(i_filter_surf) = OUT_FRONT filter_index = sum((matching_bins(1:size(t % filters)) - 1) & * t % stride) + 1 write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') & - "Outgoing Current to Front", & + "Net Current on Front", & + to_str(t % results(1,filter_index) % sum), & + trim(to_str(t % results(1,filter_index) % sum_sq)) + + matching_bins(i_filter_surf) = IN_FRONT + filter_index = sum((matching_bins(1:size(t % filters)) - 1) & + * t % stride) + 1 + write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') & + "Net Current on Front", & to_str(t % results(1,filter_index) % sum), & trim(to_str(t % results(1,filter_index) % sum_sq)) ! Bottom Surface - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, (/ i, j, k-1 /) + 1, .true.) - matching_bins(i_filter_surf) = IN_TOP + matching_bins(i_filter_surf) = OUT_BOTTOM filter_index = sum((matching_bins(1:size(t % filters)) - 1) & * t % stride) + 1 write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') & - "Outgoing Current to Bottom", & + "Outgoing Current on Bottom", & to_str(t % results(1,filter_index) % sum), & trim(to_str(t % results(1,filter_index) % sum_sq)) - matching_bins(i_filter_surf) = OUT_TOP + matching_bins(i_filter_surf) = IN_BOTTOM filter_index = sum((matching_bins(1:size(t % filters)) - 1) & * t % stride) + 1 write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') & - "Incoming Current from Bottom", & + "Incoming Current on Bottom", & to_str(t % results(1,filter_index) % sum), & trim(to_str(t % results(1,filter_index) % sum_sq)) ! Top Surface - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, (/ i, j, k /) + 1, .true.) - matching_bins(i_filter_surf) = IN_TOP - filter_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 - write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') & - "Incoming Current from Top", & - to_str(t % results(1,filter_index) % sum), & - trim(to_str(t % results(1,filter_index) % sum_sq)) - matching_bins(i_filter_surf) = OUT_TOP filter_index = sum((matching_bins(1:size(t % filters)) - 1) & * t % stride) + 1 write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') & - "Outgoing Current to Top", & + "Outgoing Current on Top", & + to_str(t % results(1,filter_index) % sum), & + trim(to_str(t % results(1,filter_index) % sum_sq)) + + matching_bins(i_filter_surf) = IN_TOP + filter_index = sum((matching_bins(1:size(t % filters)) - 1) & + * t % stride) + 1 + write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') & + "Incoming Current on Top", & to_str(t % results(1,filter_index) % sum), & trim(to_str(t % results(1,filter_index) % sum_sq)) end do - end do end do end do diff --git a/src/particle_header.F90 b/src/particle_header.F90 index ee854aea37..53a503ce2e 100644 --- a/src/particle_header.F90 +++ b/src/particle_header.F90 @@ -88,6 +88,7 @@ module particle_header ! Temperature of the current cell real(8) :: sqrtkT ! sqrt(k_Boltzmann * temperature) in MeV + real(8) :: last_sqrtKT ! last temperature ! Statistical data integer :: n_collision ! # of collisions @@ -129,6 +130,7 @@ contains this % cell_born = NONE this % material = NONE this % last_material = NONE + this % last_sqrtkT = NONE this % wgt = ONE this % last_wgt = ONE this % absorb_wgt = ZERO diff --git a/src/physics.F90 b/src/physics.F90 index a9f2263955..23fb6f1df2 100644 --- a/src/physics.F90 +++ b/src/physics.F90 @@ -1,5 +1,6 @@ module physics + use algorithm, only: binary_search use constants use cross_section, only: elastic_xs_0K use endf, only: reaction_name @@ -15,7 +16,6 @@ module physics use physics_common use random_lcg, only: prn, advance_prn_seed, prn_set_stream use reaction_header, only: Reaction - use search, only: binary_search use secondary_uncorrelated, only: UncorrelatedAngleEnergy use string, only: to_str @@ -59,7 +59,7 @@ contains ! Advance URR seed stream 'N' times after energy changes if (p % E /= p % last_E) then call prn_set_stream(STREAM_URR_PTABLE) - call advance_prn_seed(n_nuc_zaid_total) + call advance_prn_seed(size(nuclides, kind=8)) call prn_set_stream(STREAM_TRACKING) endif @@ -200,6 +200,7 @@ contains integer :: i integer :: i_grid + integer :: i_temp real(8) :: f real(8) :: prob real(8) :: cutoff @@ -219,6 +220,7 @@ contains end if ! Get grid index and interpolatoin factor and sample fission cdf + i_temp = micro_xs(i_nuclide) % index_temp i_grid = micro_xs(i_nuclide) % index_grid f = micro_xs(i_nuclide) % interp_factor cutoff = prn() * micro_xs(i_nuclide) % fission @@ -229,13 +231,13 @@ contains FISSION_REACTION_LOOP: do i = 1, nuc % n_fission i_reaction = nuc % index_fission(i) - associate (rxn => nuc % reactions(i_reaction)) + associate (xs => nuc % reactions(i_reaction) % xs(i_temp)) ! if energy is below threshold for this reaction, skip it - if (i_grid < rxn % threshold) cycle + if (i_grid < xs % threshold) cycle ! add to cumulative probability - prob = prob + ((ONE - f)*rxn%sigma(i_grid - rxn%threshold + 1) & - + f*(rxn%sigma(i_grid - rxn%threshold + 2))) + prob = prob + ((ONE - f) * xs % value(i_grid - xs % threshold + 1) & + + f*(xs % value(i_grid - xs % threshold + 2))) end associate ! Create fission bank sites if fission occurs @@ -294,6 +296,7 @@ contains integer, intent(in) :: i_nuc_mat integer :: i + integer :: i_temp integer :: i_grid real(8) :: f real(8) :: prob @@ -301,6 +304,7 @@ contains real(8) :: uvw_new(3) ! outgoing uvw for iso-in-lab scattering real(8) :: uvw_old(3) ! incoming uvw for iso-in-lab scattering real(8) :: phi ! azimuthal angle for iso-in-lab scattering + real(8) :: kT ! temperature in MeV type(Nuclide), pointer :: nuc ! copy incoming direction @@ -308,6 +312,7 @@ contains ! Get pointer to nuclide and grid index/interpolation factor nuc => nuclides(i_nuclide) + i_temp = micro_xs(i_nuclide) % index_temp i_grid = micro_xs(i_nuclide) % index_grid f = micro_xs(i_nuclide) % interp_factor @@ -328,8 +333,15 @@ contains p % E, p % coord(1) % uvw, p % mu) else + ! Determine temperature + if (temperature_method == TEMPERATURE_MULTIPOLE) then + kT = p % sqrtkT**2 + else + kT = nuc % kTs(micro_xs(i_nuclide) % index_temp) + end if + ! Perform collision physics for elastic scattering - call elastic_scatter(i_nuclide, nuc % reactions(1), & + call elastic_scatter(i_nuclide, nuc % reactions(1), kT, & p % E, p % coord(1) % uvw, p % mu, p % wgt) end if @@ -352,22 +364,24 @@ contains &// trim(nuc % name)) end if - associate (rxn => nuc % reactions(i)) + associate (rx => nuc % reactions(i)) ! Skip fission reactions - if (rxn % MT == N_FISSION .or. rxn % MT == N_F .or. rxn % MT == N_NF & - .or. rxn % MT == N_2NF .or. rxn % MT == N_3NF) cycle + if (rx % MT == N_FISSION .or. rx % MT == N_F .or. rx % MT == N_NF & + .or. rx % MT == N_2NF .or. rx % MT == N_3NF) cycle ! some materials have gas production cross sections with MT > 200 that ! are duplicates. Also MT=4 is total level inelastic scattering which ! should be skipped - if (rxn % MT >= 200 .or. rxn % MT == N_LEVEL) cycle + if (rx % MT >= 200 .or. rx % MT == N_LEVEL) cycle - ! if energy is below threshold for this reaction, skip it - if (i_grid < rxn % threshold) cycle + associate (xs => rx % xs(i_temp)) + ! if energy is below threshold for this reaction, skip it + if (i_grid < xs % threshold) cycle - ! add to cumulative probability - prob = prob + ((ONE - f)*rxn%sigma(i_grid - rxn%threshold + 1) & - + f*(rxn%sigma(i_grid - rxn%threshold + 2))) + ! add to cumulative probability + prob = prob + ((ONE - f)*xs % value(i_grid - xs % threshold + 1) & + + f*(xs % value(i_grid - xs % threshold + 2))) + end associate end associate end do @@ -401,9 +415,10 @@ contains ! target. !=============================================================================== - subroutine elastic_scatter(i_nuclide, rxn, E, uvw, mu_lab, wgt) + subroutine elastic_scatter(i_nuclide, rxn, kT, E, uvw, mu_lab, wgt) integer, intent(in) :: i_nuclide type(Reaction), intent(in) :: rxn + real(8), intent(in) :: kT ! temperature in MeV real(8), intent(inout) :: E real(8), intent(inout) :: uvw(3) real(8), intent(out) :: mu_lab @@ -430,7 +445,7 @@ contains ! Sample velocity of target nucleus if (.not. micro_xs(i_nuclide) % use_ptable) then call sample_target_velocity(nuc, v_t, E, uvw, v_n, wgt, & - & micro_xs(i_nuclide) % elastic) + micro_xs(i_nuclide) % elastic, kT) else v_t = ZERO end if @@ -494,6 +509,7 @@ contains integer :: i ! incoming energy bin integer :: j ! outgoing energy bin integer :: k ! outgoing cosine bin + integer :: i_temp ! temperature index integer :: n_energy_out ! number of outgoing energy bins real(8) :: f ! interpolation factor real(8) :: r ! used for skewed sampling & continuous @@ -502,7 +518,6 @@ contains real(8) :: mu_ijk ! outgoing cosine k for E_in(i) and E_out(j) real(8) :: mu_i1jk ! outgoing cosine k for E_in(i+1) and E_out(j) real(8) :: prob ! probability for sampling Bragg edge - type(SAlphaBeta), pointer :: sab ! Following are needed only for SAB_SECONDARY_CONT scattering integer :: l ! sampled incoming E bin (is i or i + 1) real(8) :: E_i_1, E_i_J ! endpoints on outgoing grid i @@ -514,213 +529,216 @@ contains real(8) :: frac ! interpolation factor on outgoing energy real(8) :: r1 ! RNG for outgoing energy + i_temp = micro_xs(i_nuclide) % index_temp_sab + ! Get pointer to S(a,b) table - sab => sab_tables(i_sab) + associate (sab => sab_tables(i_sab) % data(i_temp)) - ! Determine whether inelastic or elastic scattering will occur - if (prn() < micro_xs(i_nuclide) % elastic_sab / & - micro_xs(i_nuclide) % elastic) then - ! elastic scattering + ! Determine whether inelastic or elastic scattering will occur + if (prn() < micro_xs(i_nuclide) % elastic_sab / & + micro_xs(i_nuclide) % elastic) then + ! elastic scattering - ! Get index and interpolation factor for elastic grid - if (E < sab % elastic_e_in(1)) then - i = 1 - f = ZERO - else - i = binary_search(sab % elastic_e_in, sab % n_elastic_e_in, E) - f = (E - sab%elastic_e_in(i)) / & - (sab%elastic_e_in(i+1) - sab%elastic_e_in(i)) - end if - - ! Select treatment based on elastic mode - if (sab % elastic_mode == SAB_ELASTIC_DISCRETE) then - ! With this treatment, we interpolate between two discrete cosines - ! corresponding to neighboring incoming energies. This is used for - ! data derived in the incoherent approximation - - ! Sample outgoing cosine bin - k = 1 + int(prn() * sab % n_elastic_mu) - - ! Determine outgoing cosine corresponding to E_in(i) and E_in(i+1) - mu_ijk = sab % elastic_mu(k,i) - mu_i1jk = sab % elastic_mu(k,i+1) - - ! Cosine of angle between incoming and outgoing neutron - mu = (1 - f)*mu_ijk + f*mu_i1jk - - elseif (sab % elastic_mode == SAB_ELASTIC_EXACT) then - ! This treatment is used for data derived in the coherent - ! approximation, i.e. for crystalline structures that have Bragg - ! edges. - - ! Sample a Bragg edge between 1 and i - prob = prn() * sab % elastic_P(i+1) - if (prob < sab % elastic_P(1)) then - k = 1 + ! Get index and interpolation factor for elastic grid + if (E < sab % elastic_e_in(1)) then + i = 1 + f = ZERO else - k = binary_search(sab % elastic_P(1:i+1), i+1, prob) + i = binary_search(sab % elastic_e_in, sab % n_elastic_e_in, E) + f = (E - sab%elastic_e_in(i)) / & + (sab%elastic_e_in(i+1) - sab%elastic_e_in(i)) end if - ! Characteristic scattering cosine for this Bragg edge - mu = ONE - TWO*sab % elastic_e_in(k) / E + ! Select treatment based on elastic mode + if (sab % elastic_mode == SAB_ELASTIC_DISCRETE) then + ! With this treatment, we interpolate between two discrete cosines + ! corresponding to neighboring incoming energies. This is used for + ! data derived in the incoherent approximation - end if + ! Sample outgoing cosine bin + k = 1 + int(prn() * sab % n_elastic_mu) - ! Outgoing energy is same as incoming energy -- no need to do anything + ! Determine outgoing cosine corresponding to E_in(i) and E_in(i+1) + mu_ijk = sab % elastic_mu(k,i) + mu_i1jk = sab % elastic_mu(k,i+1) - else - ! Perform inelastic calculations + ! Cosine of angle between incoming and outgoing neutron + mu = (1 - f)*mu_ijk + f*mu_i1jk - ! Get index and interpolation factor for inelastic grid - if (E < sab % inelastic_e_in(1)) then - i = 1 - f = ZERO - else - i = binary_search(sab % inelastic_e_in, sab % n_inelastic_e_in, E) - f = (E - sab%inelastic_e_in(i)) / & - (sab%inelastic_e_in(i+1) - sab%inelastic_e_in(i)) - end if + elseif (sab % elastic_mode == SAB_ELASTIC_EXACT) then + ! This treatment is used for data derived in the coherent + ! approximation, i.e. for crystalline structures that have Bragg + ! edges. - ! Now that we have an incoming energy bin, we need to determine the - ! outgoing energy bin. This will depend on the "secondary energy - ! mode". If the mode is 0, then the outgoing energy bin is chosen from a - ! set of equally-likely bins. If the mode is 1, then the first - ! two and last two bins are skewed to have lower probabilities than the - ! other bins (0.1 for the first and last bins and 0.4 for the second and - ! second to last bins, relative to a normal bin probability of 1). - ! Finally, if the mode is 2, then a continuous distribution (with - ! accompanying PDF and CDF is utilized) - - if ((sab % secondary_mode == SAB_SECONDARY_EQUAL) .or. & - (sab % secondary_mode == SAB_SECONDARY_SKEWED)) then - if (sab % secondary_mode == SAB_SECONDARY_EQUAL) then - ! All bins equally likely - - j = 1 + int(prn() * sab % n_inelastic_e_out) - elseif (sab % secondary_mode == SAB_SECONDARY_SKEWED) then - ! Distribution skewed away from edge points - - ! Determine number of outgoing energy and angle bins - n_energy_out = sab % n_inelastic_e_out - - r = prn() * (n_energy_out - 3) - if (r > ONE) then - ! equally likely N-4 middle bins - j = int(r) + 2 - elseif (r > 0.6_8) then - ! second to last bin has relative probability of 0.4 - j = n_energy_out - 1 - elseif (r > HALF) then - ! last bin has relative probability of 0.1 - j = n_energy_out - elseif (r > 0.1_8) then - ! second bin has relative probability of 0.4 - j = 2 + ! Sample a Bragg edge between 1 and i + prob = prn() * sab % elastic_P(i+1) + if (prob < sab % elastic_P(1)) then + k = 1 else - ! first bin has relative probability of 0.1 - j = 1 + k = binary_search(sab % elastic_P(1:i+1), i+1, prob) end if + + ! Characteristic scattering cosine for this Bragg edge + mu = ONE - TWO*sab % elastic_e_in(k) / E + end if - ! Determine outgoing energy corresponding to E_in(i) and E_in(i+1) - E_ij = sab % inelastic_e_out(j,i) - E_i1j = sab % inelastic_e_out(j,i+1) - - ! Outgoing energy - E = (1 - f)*E_ij + f*E_i1j - - ! Sample outgoing cosine bin - k = 1 + int(prn() * sab % n_inelastic_mu) - - ! Determine outgoing cosine corresponding to E_in(i) and E_in(i+1) - mu_ijk = sab % inelastic_mu(k,j,i) - mu_i1jk = sab % inelastic_mu(k,j,i+1) - - ! Cosine of angle between incoming and outgoing neutron - mu = (1 - f)*mu_ijk + f*mu_i1jk - - else if (sab % secondary_mode == SAB_SECONDARY_CONT) then - ! Continuous secondary energy - this is to be similar to - ! Law 61 interpolation on outgoing energy - - ! Sample between ith and (i+1)th bin - r = prn() - if (f > r) then - l = i + 1 - else - l = i - end if - - ! Determine endpoints on grid i - n_energy_out = sab % inelastic_data(i) % n_e_out - E_i_1 = sab % inelastic_data(i) % e_out(1) - E_i_J = sab % inelastic_data(i) % e_out(n_energy_out) - - ! Determine endpoints on grid i + 1 - n_energy_out = sab % inelastic_data(i + 1) % n_e_out - E_i1_1 = sab % inelastic_data(i + 1) % e_out(1) - E_i1_J = sab % inelastic_data(i + 1) % e_out(n_energy_out) - - E_1 = E_i_1 + f * (E_i1_1 - E_i_1) - E_J = E_i_J + f * (E_i1_J - E_i_J) - - ! Determine outgoing energy bin - ! (First reset n_energy_out to the right value) - n_energy_out = sab % inelastic_data(l) % n_e_out - r1 = prn() - c_j = sab % inelastic_data(l) % e_out_cdf(1) - do j = 1, n_energy_out - 1 - c_j1 = sab % inelastic_data(l) % e_out_cdf(j + 1) - if (r1 < c_j1) exit - c_j = c_j1 - end do - - ! check to make sure k is <= n_energy_out - 1 - j = min(j, n_energy_out - 1) - - ! Get the data to interpolate between - E_l_j = sab % inelastic_data(l) % e_out(j) - p_l_j = sab % inelastic_data(l) % e_out_pdf(j) - - ! Next part assumes linear-linear interpolation in standard - E_l_j1 = sab % inelastic_data(l) % e_out(j + 1) - p_l_j1 = sab % inelastic_data(l) % e_out_pdf(j + 1) - - ! Find secondary energy (variable E) - frac = (p_l_j1 - p_l_j) / (E_l_j1 - E_l_j) - if (frac == ZERO) then - E = E_l_j + (r1 - c_j) / p_l_j - else - E = E_l_j + (sqrt(max(ZERO, p_l_j * p_l_j + & - TWO * frac * (r1 - c_j))) - p_l_j) / frac - end if - - ! Now interpolate between incident energy bins i and i + 1 - if (l == i) then - E = E_1 + (E - E_i_1) * (E_J - E_1) / (E_i_J - E_i_1) - else - E = E_1 + (E - E_i1_1) * (E_J - E_1) / (E_i1_J - E_i1_1) - end if - - ! Find angular distribution for closest outgoing energy bin - if (r1 - c_j < c_j1 - r1) then - j = j - else - j = j + 1 - end if - - ! Sample outgoing cosine bin - k = 1 + int(prn() * sab % n_inelastic_mu) - - ! Will use mu from the randomly chosen incoming and closest outgoing - ! energy bins - mu = sab % inelastic_data(l) % mu(k, j) + ! Outgoing energy is same as incoming energy -- no need to do anything else - call fatal_error("Invalid secondary energy mode on S(a,b) table " & - &// trim(sab % name)) - end if ! (inelastic secondary energy treatment) - end if ! (elastic or inelastic) + ! Perform inelastic calculations + + ! Get index and interpolation factor for inelastic grid + if (E < sab % inelastic_e_in(1)) then + i = 1 + f = ZERO + else + i = binary_search(sab % inelastic_e_in, sab % n_inelastic_e_in, E) + f = (E - sab%inelastic_e_in(i)) / & + (sab%inelastic_e_in(i+1) - sab%inelastic_e_in(i)) + end if + + ! Now that we have an incoming energy bin, we need to determine the + ! outgoing energy bin. This will depend on the "secondary energy + ! mode". If the mode is 0, then the outgoing energy bin is chosen from a + ! set of equally-likely bins. If the mode is 1, then the first + ! two and last two bins are skewed to have lower probabilities than the + ! other bins (0.1 for the first and last bins and 0.4 for the second and + ! second to last bins, relative to a normal bin probability of 1). + ! Finally, if the mode is 2, then a continuous distribution (with + ! accompanying PDF and CDF is utilized) + + if ((sab_tables(i_sab) % secondary_mode == SAB_SECONDARY_EQUAL) .or. & + (sab_tables(i_sab) % secondary_mode == SAB_SECONDARY_SKEWED)) then + if (sab_tables(i_sab) % secondary_mode == SAB_SECONDARY_EQUAL) then + ! All bins equally likely + + j = 1 + int(prn() * sab % n_inelastic_e_out) + elseif (sab_tables(i_sab) % secondary_mode == SAB_SECONDARY_SKEWED) then + ! Distribution skewed away from edge points + + ! Determine number of outgoing energy and angle bins + n_energy_out = sab % n_inelastic_e_out + + r = prn() * (n_energy_out - 3) + if (r > ONE) then + ! equally likely N-4 middle bins + j = int(r) + 2 + elseif (r > 0.6_8) then + ! second to last bin has relative probability of 0.4 + j = n_energy_out - 1 + elseif (r > HALF) then + ! last bin has relative probability of 0.1 + j = n_energy_out + elseif (r > 0.1_8) then + ! second bin has relative probability of 0.4 + j = 2 + else + ! first bin has relative probability of 0.1 + j = 1 + end if + end if + + ! Determine outgoing energy corresponding to E_in(i) and E_in(i+1) + E_ij = sab % inelastic_e_out(j,i) + E_i1j = sab % inelastic_e_out(j,i+1) + + ! Outgoing energy + E = (1 - f)*E_ij + f*E_i1j + + ! Sample outgoing cosine bin + k = 1 + int(prn() * sab % n_inelastic_mu) + + ! Determine outgoing cosine corresponding to E_in(i) and E_in(i+1) + mu_ijk = sab % inelastic_mu(k,j,i) + mu_i1jk = sab % inelastic_mu(k,j,i+1) + + ! Cosine of angle between incoming and outgoing neutron + mu = (1 - f)*mu_ijk + f*mu_i1jk + + else if (sab_tables(i_sab) % secondary_mode == SAB_SECONDARY_CONT) then + ! Continuous secondary energy - this is to be similar to + ! Law 61 interpolation on outgoing energy + + ! Sample between ith and (i+1)th bin + r = prn() + if (f > r) then + l = i + 1 + else + l = i + end if + + ! Determine endpoints on grid i + n_energy_out = sab % inelastic_data(i) % n_e_out + E_i_1 = sab % inelastic_data(i) % e_out(1) + E_i_J = sab % inelastic_data(i) % e_out(n_energy_out) + + ! Determine endpoints on grid i + 1 + n_energy_out = sab % inelastic_data(i + 1) % n_e_out + E_i1_1 = sab % inelastic_data(i + 1) % e_out(1) + E_i1_J = sab % inelastic_data(i + 1) % e_out(n_energy_out) + + E_1 = E_i_1 + f * (E_i1_1 - E_i_1) + E_J = E_i_J + f * (E_i1_J - E_i_J) + + ! Determine outgoing energy bin + ! (First reset n_energy_out to the right value) + n_energy_out = sab % inelastic_data(l) % n_e_out + r1 = prn() + c_j = sab % inelastic_data(l) % e_out_cdf(1) + do j = 1, n_energy_out - 1 + c_j1 = sab % inelastic_data(l) % e_out_cdf(j + 1) + if (r1 < c_j1) exit + c_j = c_j1 + end do + + ! check to make sure k is <= n_energy_out - 1 + j = min(j, n_energy_out - 1) + + ! Get the data to interpolate between + E_l_j = sab % inelastic_data(l) % e_out(j) + p_l_j = sab % inelastic_data(l) % e_out_pdf(j) + + ! Next part assumes linear-linear interpolation in standard + E_l_j1 = sab % inelastic_data(l) % e_out(j + 1) + p_l_j1 = sab % inelastic_data(l) % e_out_pdf(j + 1) + + ! Find secondary energy (variable E) + frac = (p_l_j1 - p_l_j) / (E_l_j1 - E_l_j) + if (frac == ZERO) then + E = E_l_j + (r1 - c_j) / p_l_j + else + E = E_l_j + (sqrt(max(ZERO, p_l_j * p_l_j + & + TWO * frac * (r1 - c_j))) - p_l_j) / frac + end if + + ! Now interpolate between incident energy bins i and i + 1 + if (l == i) then + E = E_1 + (E - E_i_1) * (E_J - E_1) / (E_i_J - E_i_1) + else + E = E_1 + (E - E_i1_1) * (E_J - E_1) / (E_i1_J - E_i1_1) + end if + + ! Find angular distribution for closest outgoing energy bin + if (r1 - c_j < c_j1 - r1) then + j = j + else + j = j + 1 + end if + + ! Sample outgoing cosine bin + k = 1 + int(prn() * sab % n_inelastic_mu) + + ! Will use mu from the randomly chosen incoming and closest outgoing + ! energy bins + mu = sab % inelastic_data(l) % mu(k, j) + + else + call fatal_error("Invalid secondary energy mode on S(a,b) table " & + // trim(sab_tables(i_sab) % name)) + end if ! (inelastic secondary energy treatment) + end if ! (elastic or inelastic) + end associate ! Because of floating-point roundoff, it may be possible for mu to be ! outside of the range [-1,1). In these cases, we just set mu to exactly @@ -741,19 +759,19 @@ contains ! implemented here. !=============================================================================== - subroutine sample_target_velocity(nuc, v_target, E, uvw, v_neut, wgt, xs_eff) + subroutine sample_target_velocity(nuc, v_target, E, uvw, v_neut, wgt, xs_eff, kT) type(Nuclide), intent(in) :: nuc ! target nuclide at temperature T real(8), intent(out) :: v_target(3) ! target velocity - real(8), intent(in) :: v_neut(3) ! neutron velocity real(8), intent(in) :: E ! particle energy real(8), intent(in) :: uvw(3) ! direction cosines + real(8), intent(in) :: v_neut(3) ! neutron velocity real(8), intent(inout) :: wgt ! particle weight + real(8), intent(in) :: xs_eff ! effective elastic xs at temperature T + real(8), intent(in) :: kT ! equilibrium temperature of target in MeV real(8) :: awr ! target/neutron mass ratio - real(8) :: kT ! equilibrium temperature of target in MeV real(8) :: E_rel ! trial relative energy real(8) :: xs_0K ! 0K xs at E_rel - real(8) :: xs_eff ! effective elastic xs at temperature T real(8) :: wcf ! weight correction factor real(8) :: E_red ! reduced energy (same as used by Cullen in SIGMA1) real(8) :: E_low ! lowest practical relative energy @@ -782,7 +800,6 @@ contains character(80) :: sampling_scheme ! method of target velocity sampling - kT = nuc % kT awr = nuc % awr ! check if nuclide is a resonant scatterer @@ -817,12 +834,12 @@ contains case ('cxs') ! sample target velocity with the constant cross section (cxs) approx. - call sample_cxs_target_velocity(nuc, v_target, E, uvw) + call sample_cxs_target_velocity(nuc, v_target, E, uvw, kT) case ('wcm') ! sample target velocity with the constant cross section (cxs) approx. - call sample_cxs_target_velocity(nuc, v_target, E, uvw) + call sample_cxs_target_velocity(nuc, v_target, E, uvw, kT) ! adjust weight as prescribed by the weight correction method (wcm) E_rel = dot_product((v_neut - v_target), (v_neut - v_target)) @@ -874,7 +891,7 @@ contains do ! sample target velocity with the constant cross section (cxs) approx. - call sample_cxs_target_velocity(nuc, v_target, E, uvw) + call sample_cxs_target_velocity(nuc, v_target, E, uvw, kT) ! perform Doppler broadening rejection correction (dbrc) E_rel = dot_product((v_neut - v_target), (v_neut - v_target)) @@ -986,13 +1003,13 @@ contains ! can be found in FRA-TM-123. !=============================================================================== - subroutine sample_cxs_target_velocity(nuc, v_target, E, uvw) + subroutine sample_cxs_target_velocity(nuc, v_target, E, uvw, kT) type(Nuclide), intent(in) :: nuc ! target nuclide at temperature real(8), intent(out) :: v_target(3) real(8), intent(in) :: E real(8), intent(in) :: uvw(3) + real(8), intent(in) :: kT ! equilibrium temperature of target in MeV - real(8) :: kT ! equilibrium temperature of target in MeV real(8) :: awr ! target/neutron mass ratio real(8) :: alpha ! probability of sampling f2 over f1 real(8) :: mu ! cosine of angle between neutron and target vel @@ -1004,7 +1021,6 @@ contains real(8) :: beta_vt_sq ! (beta * speed of target)^2 real(8) :: vt ! speed of target - kT = nuc % kT awr = nuc % awr beta_vn = sqrt(awr * E / kT) diff --git a/src/product_header.F90 b/src/product_header.F90 index f20adf0d40..a69929473d 100644 --- a/src/product_header.F90 +++ b/src/product_header.F90 @@ -5,7 +5,7 @@ module product_header use angleenergy_header, only: AngleEnergyContainer use constants, only: ZERO, MAX_WORD_LEN, EMISSION_PROMPT, EMISSION_DELAYED, & EMISSION_TOTAL, NEUTRON, PHOTON - use endf_header, only: Tabulated1D, Function1D, Constant1D, Polynomial + use endf_header, only: Tabulated1D, Function1D, Polynomial use hdf5_interface, only: read_attribute, open_group, close_group, & open_dataset, close_dataset, read_dataset use random_lcg, only: prn @@ -109,11 +109,9 @@ contains yield = open_dataset(group_id, 'yield') call read_attribute(temp, yield, 'type') select case (temp) - case ('constant') - allocate(Constant1D :: this % yield) - case ('tabulated') + case ('Tabulated1D') allocate(Tabulated1D :: this % yield) - case ('polynomial') + case ('Polynomial') allocate(Polynomial :: this % yield) end select call this % yield % from_hdf5(yield) diff --git a/src/random_lcg.F90 b/src/random_lcg.F90 index 08f1034ab7..287bbba6d9 100644 --- a/src/random_lcg.F90 +++ b/src/random_lcg.F90 @@ -29,7 +29,6 @@ module random_lcg public :: set_particle_seed public :: advance_prn_seed public :: prn_set_stream - public :: STREAM_TRACKING, STREAM_TALLIES contains diff --git a/src/reaction_header.F90 b/src/reaction_header.F90 index 055dcb3923..a7896e9ff3 100644 --- a/src/reaction_header.F90 +++ b/src/reaction_header.F90 @@ -7,6 +7,7 @@ module reaction_header use hdf5_interface, only: read_attribute, open_group, close_group, & open_dataset, read_dataset, close_dataset, get_shape use product_header, only: ReactionProduct + use stl_vector, only: VectorInt use string, only: to_str, starts_with implicit none @@ -16,12 +17,16 @@ module reaction_header ! distributions for a single reaction in a continuous-energy ACE-format table !=============================================================================== + type TemperatureXS + integer :: threshold ! Energy grid index of threshold + real(8), allocatable :: value(:) ! Cross section values + end type TemperatureXS + type Reaction integer :: MT ! ENDF MT value real(8) :: Q_value ! Reaction Q value - integer :: threshold ! Energy grid index of threshold logical :: scatter_in_cm ! scattering system in center-of-mass? - real(8), allocatable :: sigma(:) ! Cross section values + type(TemperatureXS), allocatable :: xs(:) type(ReactionProduct), allocatable :: products(:) contains procedure :: from_hdf5 => reaction_from_hdf5 @@ -29,9 +34,10 @@ module reaction_header contains - subroutine reaction_from_hdf5(this, group_id) + subroutine reaction_from_hdf5(this, group_id, temperatures) class(Reaction), intent(inout) :: this integer(HID_T), intent(in) :: group_id + type(VectorInt), intent(in) :: temperatures integer :: i integer :: cm @@ -41,24 +47,31 @@ contains integer :: n_links integer :: hdf5_err integer(HID_T) :: pgroup - integer(HID_T) :: xs + integer(HID_T) :: xs, temp_group integer(SIZE_T) :: name_len integer(HSIZE_T) :: dims(1) integer(HSIZE_T) :: j character(MAX_WORD_LEN) :: name + character(MAX_WORD_LEN) :: temp_str ! temperature dataset name, e.g. '294K' call read_attribute(this % Q_value, group_id, 'Q_value') call read_attribute(this % MT, group_id, 'mt') - call read_attribute(this % threshold, group_id, 'threshold_idx') call read_attribute(cm, group_id, 'center_of_mass') this % scatter_in_cm = (cm == 1) - ! Read cross section - xs = open_dataset(group_id, 'xs') - call get_shape(xs, dims) - allocate(this % sigma(dims(1))) - call read_dataset(this % sigma, xs) - call close_dataset(xs) + ! Read cross section and threshold_idx data + allocate(this % xs(temperatures % size())) + do i = 1, temperatures % size() + temp_str = trim(to_str(temperatures % data(i))) // "K" + temp_group = open_group(group_id, temp_str) + xs = open_dataset(temp_group, 'xs') + call read_attribute(this % xs(i) % threshold, xs, 'threshold_idx') + call get_shape(xs, dims) + allocate(this % xs(i) % value(dims(1))) + call read_dataset(this % xs(i) % value, xs) + call close_dataset(xs) + call close_group(temp_group) + end do ! Determine number of products call h5gget_info_f(group_id, storage_type, n_links, max_corder, hdf5_err) diff --git a/src/relaxng/materials.rnc b/src/relaxng/materials.rnc index 1b5b7c705a..c5f4efd6f3 100644 --- a/src/relaxng/materials.rnc +++ b/src/relaxng/materials.rnc @@ -4,6 +4,8 @@ element materials { (element name { xsd:string { maxLength="52" } } | attribute name { xsd:string { maxLength="52" } })? & + element temperature { xsd:double }? & + element density { (element value { xsd:double } | attribute value { xsd:double })? & (element units { xsd:string { maxLength = "10" } } | @@ -12,8 +14,6 @@ element materials { element nuclide { (element name { xsd:string } | attribute name { xsd:string }) & - (element xs { xsd:string { maxLength = "5" } } | - attribute xs { xsd:string { maxLength = "5" } })? & (element scattering { ( "data" | "iso-in-lab" ) } | attribute scattering { ( "data" | "iso-in-lab" ) })? & ( @@ -24,16 +24,12 @@ element materials { element macroscopic { (element name { xsd:string } | - attribute name { xsd:string }) & - (element xs { xsd:string { maxLength = "5" } } | - attribute xs { xsd:string { maxLength = "5" } }) + attribute name { xsd:string }) }* & element element { (element name { xsd:string { maxLength = "2" } } | attribute name { xsd:string { maxLength = "2" } }) & - (element xs { xsd:string { maxLength = "5" } } | - attribute xs { xsd:string { maxLength = "5" } })? & (element scattering { ( "data" | "iso-in-lab" ) } | attribute scattering { ( "data" | "iso-in-lab" ) })? & ( @@ -43,11 +39,7 @@ element materials { }* & element sab { - (element name { xsd:string } | attribute name { xsd:string }) & - (element xs { xsd:string { maxLength = "5" } } | - attribute xs { xsd:string { maxLength = "5" } })? + (element name { xsd:string } | attribute name { xsd:string }) }* - }+ & - - element default_xs { xsd:string { maxLength = "5" } }? + }+ } diff --git a/src/relaxng/materials.rng b/src/relaxng/materials.rng index e93f201655..3c92dc94a4 100644 --- a/src/relaxng/materials.rng +++ b/src/relaxng/materials.rng @@ -1,248 +1,186 @@ - - - - + + + + + + + + + + + + - - + + + 52 + - - + + + 52 + - + + + + + + + + + + + + + + + + + + - + - 52 + 10 - + - 52 + 10 - - + + + + + + + + + + + + - - + + + data + iso-in-lab + - - + + + data + iso-in-lab + - - - 10 - - - - - 10 - - + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + 2 + + + + + 2 + + + + - - + + + data + iso-in-lab + - - + + + data + iso-in-lab + - - - - - 5 - - - - - 5 - - - - - - - - - data - iso-in-lab - - - - - data - iso-in-lab - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + - - - 5 - + + - - - 5 - + + - - - - - - - - - - 2 - - - - - 2 - - - - - - - - 5 - - - - - 5 - - - - - - - - - data - iso-in-lab - - - - - data - iso-in-lab - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 - - - - - 5 - - - - - - - - - - - - - - 5 - - - - + + + + + + + + + + + + + + + + + + + diff --git a/src/relaxng/settings.rnc b/src/relaxng/settings.rnc index 46950c63fb..70550a40f7 100644 --- a/src/relaxng/settings.rnc +++ b/src/relaxng/settings.rnc @@ -128,6 +128,12 @@ element settings { element survival_biasing { xsd:boolean }? & + element temperature_default { xsd:double }? & + + element temperature_method { xsd:string }? & + + element temperature_tolerance { xsd:double }? & + element threads { xsd:positiveInteger }? & element trace { list { xsd:positiveInteger+ } }? & @@ -142,6 +148,19 @@ element settings { element verbosity { xsd:positiveInteger }? & + element volume_calc { + (element domain_type { xsd:string } | + attribute domain_type { xsd:string }) & + (element domain_ids { list { xsd:integer+ } } | + attribute domain_ids { list { xsd:integer+ } }) & + (element samples { xsd:positiveInteger } | + attribute samples { xsd:positiveInteger }) & + (element lower_left { list { xsd:double+ } } | + attribute lower_left { list { xsd:double+ } }) & + (element upper_right { list { xsd:double+ } } | + attribute upper_right { list { xsd:double+ } }) + }* & + element uniform_fs{ (element dimension { list { xsd:positiveInteger+ } } | attribute dimension { list { xsd:positiveInteger+ } }) & @@ -157,10 +176,6 @@ element settings { attribute nuclide { xsd:string { maxLength = "12" } }) & (element method { xsd:string { maxLength = "16" } } | attribute method { xsd:string { maxLength = "16" } }) & - (element xs_label { xsd:string { maxLength = "12" } } | - attribute xs_label { xsd:string { maxLength = "12" } }) & - (element xs_label_0K { xsd:string { maxLength = "12" } } | - attribute xs_label_0K { xsd:string { maxLength = "12" } }) & (element E_min { xsd:double } | attribute E_min { xsd:double }) & (element E_max { xsd:double } | diff --git a/src/relaxng/settings.rng b/src/relaxng/settings.rng index 0b50f79699..246c78e68d 100644 --- a/src/relaxng/settings.rng +++ b/src/relaxng/settings.rng @@ -565,6 +565,21 @@ + + + + + + + + + + + + + + + @@ -625,6 +640,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -708,30 +793,6 @@ - - - - 12 - - - - - 12 - - - - - - - 12 - - - - - 12 - - - diff --git a/src/sab_header.F90 b/src/sab_header.F90 index 3e9e18fab3..147643065a 100644 --- a/src/sab_header.F90 +++ b/src/sab_header.F90 @@ -2,14 +2,18 @@ module sab_header use, intrinsic :: ISO_FORTRAN_ENV + use algorithm, only: find, sort use constants + use dict_header, only: DictIntInt use distribution_univariate, only: Tabular - use hdf5, only: HID_T, HSIZE_T - use h5lt, only: h5ltpath_valid_f + use error, only: warning, fatal_error + use hdf5, only: HID_T, HSIZE_T, SIZE_T + use h5lt, only: h5ltpath_valid_f, h5iget_name_f use hdf5_interface, only: read_attribute, get_shape, open_group, close_group, & - open_dataset, read_dataset, close_dataset + open_dataset, read_dataset, close_dataset, get_datasets use secondary_correlated, only: CorrelatedAngleEnergy - use string, only: to_str + use stl_vector, only: VectorInt, VectorReal + use string, only: to_str, str_to_int implicit none @@ -32,13 +36,7 @@ module sab_header ! of light isotopes such as water, graphite, Be, etc !=============================================================================== - type SAlphaBeta - character(100) :: name ! name of table, e.g. lwtr.10t - real(8) :: awr ! weight of nucleus in neutron masses - real(8) :: kT ! temperature in MeV (k*T) - integer :: n_zaid ! Number of valid zaids - integer, allocatable :: zaid(:) ! List of valid Z and A identifiers, e.g. 6012 - + type SabData ! threshold for S(a,b) treatment (usually ~4 eV) real(8) :: threshold_inelastic real(8) :: threshold_elastic = ZERO @@ -47,7 +45,6 @@ module sab_header integer :: n_inelastic_e_in ! # of incoming E for inelastic integer :: n_inelastic_e_out ! # of outgoing E for inelastic integer :: n_inelastic_mu ! # of outgoing angles for inelastic - integer :: secondary_mode ! secondary mode (equal/skewed/continuous) real(8), allocatable :: inelastic_e_in(:) real(8), allocatable :: inelastic_sigma(:) ! The following are used only if secondary_mode is 0 or 1 @@ -66,104 +63,41 @@ module sab_header real(8), allocatable :: elastic_e_in(:) real(8), allocatable :: elastic_P(:) real(8), allocatable :: elastic_mu(:,:) + end type SabData + + type SAlphaBeta + character(100) :: name ! name of table, e.g. lwtr.10t + real(8) :: awr ! weight of nucleus in neutron masses + real(8), allocatable :: kTs(:) ! temperatures in MeV (k*T) + character(10), allocatable :: nuclides(:) ! List of valid nuclides + integer :: secondary_mode ! secondary mode (equal/skewed/continuous) + + ! cross sections and distributions at each temperature + type(SabData), allocatable :: data(:) contains - procedure :: print => salphabeta_print procedure :: from_hdf5 => salphabeta_from_hdf5 end type SAlphaBeta contains -!=============================================================================== -! PRINT_SAB_TABLE displays information about a S(a,b) table containing data -! describing thermal scattering from bound materials such as hydrogen in water. -!=============================================================================== - - subroutine salphabeta_print(this, unit) - class(SAlphaBeta), intent(in) :: this - integer, intent(in), optional :: unit - - integer :: size_sab ! memory used by S(a,b) table - integer :: unit_ ! unit to write to - integer :: i ! Loop counter for parsing through this % zaid - integer :: char_count ! Counter for the number of characters on a line - - ! set default unit for writing information - if (present(unit)) then - unit_ = unit - else - unit_ = OUTPUT_UNIT - end if - - ! Basic S(a,b) table information - write(unit_,*) 'S(a,b) Table ' // trim(this % name) - write(unit_,'(A)',advance="no") ' zaids = ' - ! Initialize the counter based on the above string - char_count = 11 - do i = 1, this % n_zaid - ! Deal with a line thats too long - if (char_count >= 73) then ! 73 = 80 - (5 ZAID chars + 1 space + 1 comma) - ! End the line - write(unit_,*) "" - ! Add 11 leading blanks - write(unit_,'(A)', advance="no") " " - ! reset the counter to 11 - char_count = 11 - end if - if (i < this % n_zaid) then - ! Include a comma - write(unit_,'(A)',advance="no") trim(to_str(this % zaid(i))) // ", " - char_count = char_count + len(trim(to_str(this % zaid(i)))) + 2 - else - ! Don't include a comma, since we are all done - write(unit_,'(A)',advance="no") trim(to_str(this % zaid(i))) - end if - - end do - write(unit_,*) "" ! Move to next line - write(unit_,*) ' awr = ' // trim(to_str(this % awr)) - write(unit_,*) ' kT = ' // trim(to_str(this % kT)) - - ! Inelastic data - write(unit_,*) ' # of Incoming Energies (Inelastic) = ' // & - trim(to_str(this % n_inelastic_e_in)) - write(unit_,*) ' # of Outgoing Energies (Inelastic) = ' // & - trim(to_str(this % n_inelastic_e_out)) - write(unit_,*) ' # of Outgoing Angles (Inelastic) = ' // & - trim(to_str(this % n_inelastic_mu)) - write(unit_,*) ' Threshold for Inelastic = ' // & - trim(to_str(this % threshold_inelastic)) - - ! Elastic data - if (this % n_elastic_e_in > 0) then - write(unit_,*) ' # of Incoming Energies (Elastic) = ' // & - trim(to_str(this % n_elastic_e_in)) - write(unit_,*) ' # of Outgoing Angles (Elastic) = ' // & - trim(to_str(this % n_elastic_mu)) - write(unit_,*) ' Threshold for Elastic = ' // & - trim(to_str(this % threshold_elastic)) - end if - - ! Determine memory used by S(a,b) table and write out - size_sab = 8 * (this % n_inelastic_e_in * (2 + this % n_inelastic_e_out * & - (1 + this % n_inelastic_mu)) + this % n_elastic_e_in * & - (2 + this % n_elastic_mu)) - write(unit_,*) ' Memory Used = ' // trim(to_str(size_sab)) // ' bytes' - - ! Blank line at end - write(unit_,*) - - end subroutine salphabeta_print - - subroutine salphabeta_from_hdf5(this, group_id) + subroutine salphabeta_from_hdf5(this, group_id, temperature, tolerance) class(SAlphaBeta), intent(inout) :: this integer(HID_T), intent(in) :: group_id + type(VectorReal), intent(in) :: temperature ! list of temperatures + real(8), intent(in) :: tolerance integer :: i, j + integer :: t integer :: n_energy, n_energy_out, n_mu + integer :: i_closest + integer :: n_temperature integer :: hdf5_err + integer(SIZE_T) :: name_len, name_file_len + integer(HID_T) :: T_group integer(HID_T) :: elastic_group integer(HID_T) :: inelastic_group integer(HID_T) :: dset_id + integer(HID_T) :: kT_group integer(HSIZE_T) :: dims2(2) integer(HSIZE_T) :: dims3(3) real(8), allocatable :: temp(:,:) @@ -171,143 +105,210 @@ contains logical :: exists type(CorrelatedAngleEnergy) :: correlated_dist + character(MAX_WORD_LEN) :: temp_str + character(MAX_FILE_LEN), allocatable :: dset_names(:) + real(8), allocatable :: temps_available(:) ! temperatures available + real(8) :: temp_desired + real(8) :: temp_actual + type(VectorInt) :: temps_to_read + + ! Get name of table from group + name_len = len(this % name) + call h5iget_name_f(group_id, this % name, name_len, name_file_len, hdf5_err) + + ! Get rid of leading '/' + this % name = trim(this % name(2:)) + call read_attribute(this % awr, group_id, 'atomic_weight_ratio') - call read_attribute(this % kT, group_id, 'temperature') - call read_attribute(this % zaid, group_id, 'zaids') - this % n_zaid = size(this % zaid) + call read_attribute(this % nuclides, group_id, 'nuclides') + call read_attribute(type, group_id, 'secondary_mode') + select case (type) + case ('equal') + this % secondary_mode = SAB_SECONDARY_EQUAL + case ('skewed') + this % secondary_mode = SAB_SECONDARY_SKEWED + case ('continuous') + this % secondary_mode = SAB_SECONDARY_CONT + end select - ! Coherent elastic data - call h5ltpath_valid_f(group_id, 'elastic', .true., exists, hdf5_err) - if (exists) then - ! Read cross section data - elastic_group = open_group(group_id, 'elastic') - dset_id = open_dataset(elastic_group, 'xs') - call read_attribute(type, dset_id, 'type') - call get_shape(dset_id, dims2) - allocate(temp(dims2(1), dims2(2))) - call read_dataset(temp, dset_id) - call close_dataset(dset_id) + ! Read temperatures + kT_group = open_group(group_id, 'kTs') - ! Set cross section data and type - this % n_elastic_e_in = int(dims2(1), 4) - allocate(this % elastic_e_in(this % n_elastic_e_in)) - allocate(this % elastic_P(this % n_elastic_e_in)) - this % elastic_e_in(:) = temp(:, 1) - this % elastic_P(:) = temp(:, 2) - select case (type) - case ('tab1') - this % elastic_mode = SAB_ELASTIC_DISCRETE - case ('bragg') - this % elastic_mode = SAB_ELASTIC_EXACT - end select - deallocate(temp) + ! Determine temperatures available + call get_datasets(kT_group, dset_names) + allocate(temps_available(size(dset_names))) + do i = 1, size(dset_names) + ! Read temperature value + call read_dataset(temps_available(i), kT_group, trim(dset_names(i))) + temps_available(i) = temps_available(i) / K_BOLTZMANN + end do - ! Set elastic threshold - this % threshold_elastic = this % elastic_e_in(this % n_elastic_e_in) - - ! Read angle distribution - if (this % elastic_mode /= SAB_ELASTIC_EXACT) then - dset_id = open_dataset(elastic_group, 'mu_out') - call get_shape(dset_id, dims2) - this % n_elastic_mu = int(dims2(1), 4) - allocate(this % elastic_mu(dims2(1), dims2(2))) - call read_dataset(this % elastic_mu, dset_id) - call close_dataset(dset_id) + ! Determine actual temperatures to read + TEMP_LOOP: do i = 1, temperature % size() + temp_desired = temperature % data(i) + i_closest = minloc(abs(temps_available - temp_desired), dim=1) + temp_actual = temps_available(i_closest) + if (abs(temp_actual - temp_desired) < tolerance) then + if (find(temps_to_read, nint(temp_actual)) == -1) then + call temps_to_read % push_back(nint(temp_actual)) + end if + else + call fatal_error("Nuclear data library does not contain cross sections & + &for " // trim(this % name) // " at or near " // & + trim(to_str(nint(temp_desired))) // " K.") end if + end do TEMP_LOOP - call close_group(elastic_group) - end if + ! TODO: If using interpolation, add a block to add bounding temperatures for + ! each - ! Inelastic data - call h5ltpath_valid_f(group_id, 'inelastic', .true., exists, hdf5_err) - if (exists) then - ! Read type of inelastic data - inelastic_group = open_group(group_id, 'inelastic') - call read_attribute(type, inelastic_group, 'secondary_mode') - select case (type) - case ('equal') - this % secondary_mode = SAB_SECONDARY_EQUAL - case ('skewed') - this % secondary_mode = SAB_SECONDARY_SKEWED - case ('continuous') - this % secondary_mode = SAB_SECONDARY_CONT - end select + ! Sort temperatures to read + call sort(temps_to_read) - ! Read cross section data - dset_id = open_dataset(inelastic_group, 'xs') - call get_shape(dset_id, dims2) - allocate(temp(dims2(1), dims2(2))) - call read_dataset(temp, dset_id) - call close_dataset(dset_id) + n_temperature = temps_to_read % size() + allocate(this % kTs(n_temperature)) + allocate(this % data(n_temperature)) - ! Set cross section data - this % n_inelastic_e_in = int(dims2(1), 4) - allocate(this % inelastic_e_in(this % n_inelastic_e_in)) - allocate(this % inelastic_sigma(this % n_inelastic_e_in)) - this % inelastic_e_in(:) = temp(:, 1) - this % inelastic_sigma(:) = temp(:, 2) - deallocate(temp) + do t = 1, n_temperature + ! Get temperature as a string + temp_str = trim(to_str(temps_to_read % data(t))) // "K" - ! Set inelastic threshold - this % threshold_inelastic = this % inelastic_e_in(this % n_inelastic_e_in) + ! Read exact temperature value + call read_dataset(this % kTs(t), kT_group, temp_str) - if (this % secondary_mode /= SAB_SECONDARY_CONT) then - ! Read energy distribution - dset_id = open_dataset(inelastic_group, 'energy_out') + ! Open group for temperature i + T_group = open_group(group_id, temp_str) + + ! Coherent elastic data + call h5ltpath_valid_f(T_group, 'elastic', .true., exists, hdf5_err) + if (exists) then + ! Read cross section data + elastic_group = open_group(T_group, 'elastic') + dset_id = open_dataset(elastic_group, 'xs') + call read_attribute(type, dset_id, 'type') call get_shape(dset_id, dims2) - this % n_inelastic_e_out = int(dims2(1), 4) - allocate(this % inelastic_e_out(dims2(1), dims2(2))) - call read_dataset(this % inelastic_e_out, dset_id) + allocate(temp(dims2(1), dims2(2))) + call read_dataset(temp, dset_id) call close_dataset(dset_id) + ! Set cross section data and type + this % data(t) % n_elastic_e_in = int(dims2(1), 4) + allocate(this % data(t) % elastic_e_in(this % data(t) % n_elastic_e_in)) + allocate(this % data(t) % elastic_P(this % data(t) % n_elastic_e_in)) + this % data(t) % elastic_e_in(:) = temp(:, 1) + this % data(t) % elastic_P(:) = temp(:, 2) + select case (type) + case ('tab1') + this % data(t) % elastic_mode = SAB_ELASTIC_DISCRETE + case ('bragg') + this % data(t) % elastic_mode = SAB_ELASTIC_EXACT + end select + deallocate(temp) + + ! Set elastic threshold + this % data(t) % threshold_elastic = this % data(t) % elastic_e_in(& + this % data(t) % n_elastic_e_in) + ! Read angle distribution - dset_id = open_dataset(inelastic_group, 'mu_out') - call get_shape(dset_id, dims3) - this % n_inelastic_mu = int(dims3(1), 4) - allocate(this % inelastic_mu(dims3(1), dims3(2), dims3(3))) - call read_dataset(this % inelastic_mu, dset_id) - call close_dataset(dset_id) - else - ! Read correlated angle-energy distribution - call correlated_dist % from_hdf5(inelastic_group) + if (this % data(t) % elastic_mode /= SAB_ELASTIC_EXACT) then + dset_id = open_dataset(elastic_group, 'mu_out') + call get_shape(dset_id, dims2) + this % data(t) % n_elastic_mu = int(dims2(1), 4) + allocate(this % data(t) % elastic_mu(dims2(1), dims2(2))) + call read_dataset(this % data(t) % elastic_mu, dset_id) + call close_dataset(dset_id) + end if - ! Convert to S(a,b) native format - n_energy = size(correlated_dist % energy) - allocate(this % inelastic_data(n_energy)) - do i = 1, n_energy - associate (edist => correlated_dist % distribution(i)) - ! Get number of outgoing energies for incoming energy i - n_energy_out = size(edist % e_out) - this % inelastic_data(i) % n_e_out = n_energy_out - allocate(this % inelastic_data(i) % e_out(n_energy_out)) - allocate(this % inelastic_data(i) % e_out_pdf(n_energy_out)) - allocate(this % inelastic_data(i) % e_out_cdf(n_energy_out)) - - ! Copy outgoing energy distribution - this % inelastic_data(i) % e_out(:) = edist % e_out - this % inelastic_data(i) % e_out_pdf(:) = edist % p - this % inelastic_data(i) % e_out_cdf(:) = edist % c - - do j = 1, n_energy_out - select type (adist => edist % angle(j) % obj) - type is (Tabular) - ! On first pass, allocate space for angles - if (j == 1) then - n_mu = size(adist % x) - this % n_inelastic_mu = n_mu - allocate(this % inelastic_data(i) % mu(n_mu, n_energy_out)) - end if - - ! Copy outgoing angles - this % inelastic_data(i) % mu(:, j) = adist % x - end select - end do - end associate - end do + call close_group(elastic_group) end if - call close_group(inelastic_group) - end if + ! Inelastic data + call h5ltpath_valid_f(T_group, 'inelastic', .true., exists, hdf5_err) + if (exists) then + ! Read type of inelastic data + inelastic_group = open_group(T_group, 'inelastic') + + ! Read cross section data + dset_id = open_dataset(inelastic_group, 'xs') + call get_shape(dset_id, dims2) + allocate(temp(dims2(1), dims2(2))) + call read_dataset(temp, dset_id) + call close_dataset(dset_id) + + ! Set cross section data + this % data(t) % n_inelastic_e_in = int(dims2(1), 4) + allocate(this % data(t) % inelastic_e_in(this % data(t) % n_inelastic_e_in)) + allocate(this % data(t) % inelastic_sigma(this % data(t) % n_inelastic_e_in)) + this % data(t) % inelastic_e_in(:) = temp(:, 1) + this % data(t) % inelastic_sigma(:) = temp(:, 2) + deallocate(temp) + + ! Set inelastic threshold + this % data(t) % threshold_inelastic = this % data(t) % inelastic_e_in(& + this % data(t) % n_inelastic_e_in) + + if (this % secondary_mode /= SAB_SECONDARY_CONT) then + ! Read energy distribution + dset_id = open_dataset(inelastic_group, 'energy_out') + call get_shape(dset_id, dims2) + this % data(t) % n_inelastic_e_out = int(dims2(1), 4) + allocate(this % data(t) % inelastic_e_out(dims2(1), dims2(2))) + call read_dataset(this % data(t) % inelastic_e_out, dset_id) + call close_dataset(dset_id) + + ! Read angle distribution + dset_id = open_dataset(inelastic_group, 'mu_out') + call get_shape(dset_id, dims3) + this % data(t) % n_inelastic_mu = int(dims3(1), 4) + allocate(this % data(t) % inelastic_mu(dims3(1), dims3(2), dims3(3))) + call read_dataset(this % data(t) % inelastic_mu, dset_id) + call close_dataset(dset_id) + else + ! Read correlated angle-energy distribution + call correlated_dist % from_hdf5(inelastic_group) + + ! Convert to S(a,b) native format + n_energy = size(correlated_dist % energy) + allocate(this % data(t) % inelastic_data(n_energy)) + do i = 1, n_energy + associate (edist => correlated_dist % distribution(i)) + ! Get number of outgoing energies for incoming energy i + n_energy_out = size(edist % e_out) + this % data(t) % inelastic_data(i) % n_e_out = n_energy_out + allocate(this % data(t) % inelastic_data(i) % e_out(n_energy_out)) + allocate(this % data(t) % inelastic_data(i) % e_out_pdf(n_energy_out)) + allocate(this % data(t) % inelastic_data(i) % e_out_cdf(n_energy_out)) + + ! Copy outgoing energy distribution + this % data(t) % inelastic_data(i) % e_out(:) = edist % e_out + this % data(t) % inelastic_data(i) % e_out_pdf(:) = edist % p + this % data(t) % inelastic_data(i) % e_out_cdf(:) = edist % c + + do j = 1, n_energy_out + select type (adist => edist % angle(j) % obj) + type is (Tabular) + ! On first pass, allocate space for angles + if (j == 1) then + n_mu = size(adist % x) + this % data(t) % n_inelastic_mu = n_mu + allocate(this % data(t) % inelastic_data(i) % mu(& + n_mu, n_energy_out)) + end if + + ! Copy outgoing angles + this % data(t) % inelastic_data(i) % mu(:, j) = adist % x + end select + end do + end associate + end do + end if + + call close_group(inelastic_group) + end if + call close_group(T_group) + end do + + call close_group(kT_group) end subroutine salphabeta_from_hdf5 end module sab_header diff --git a/src/scattdata_header.F90 b/src/scattdata_header.F90 index 2066b36b92..d4643a0721 100644 --- a/src/scattdata_header.F90 +++ b/src/scattdata_header.F90 @@ -1,10 +1,10 @@ module scattdata_header + use algorithm, only: binary_search use constants use error, only: fatal_error use math use random_lcg, only: prn - use search, only: binary_search implicit none diff --git a/src/search.F90 b/src/search.F90 deleted file mode 100644 index f338105f4d..0000000000 --- a/src/search.F90 +++ /dev/null @@ -1,143 +0,0 @@ -module search - - use constants - - implicit none - - integer, parameter :: MAX_ITERATION = 64 - - interface binary_search - module procedure binary_search_real, binary_search_int4, binary_search_int8 - end interface binary_search - -contains - -!=============================================================================== -! BINARY_SEARCH performs a binary search of an array to find where a specific -! value lies in the array. This is used extensively for energy grid searching -!=============================================================================== - - pure function binary_search_real(array, n, val) result(array_index) - - integer, intent(in) :: n - real(8), intent(in) :: array(n) - real(8), intent(in) :: val - integer :: array_index - - integer :: L - integer :: R - integer :: n_iteration - - L = 1 - R = n - - if (val < array(L) .or. val > array(R)) then - array_index = -1 - return - end if - - n_iteration = 0 - do while (R - L > 1) - ! Find values at midpoint - array_index = L + (R - L)/2 - if (val >= array(array_index)) then - L = array_index - else - R = array_index - end if - - ! check for large number of iterations - n_iteration = n_iteration + 1 - if (n_iteration == MAX_ITERATION) then - array_index = -2 - return - end if - end do - - array_index = L - - end function binary_search_real - - pure function binary_search_int4(array, n, val) result(array_index) - - integer, intent(in) :: n - integer, intent(in) :: array(n) - integer, intent(in) :: val - integer :: array_index - - integer :: L - integer :: R - integer :: n_iteration - - L = 1 - R = n - - if (val < array(L) .or. val > array(R)) then - array_index = -1 - return - end if - - n_iteration = 0 - do while (R - L > 1) - ! Find values at midpoint - array_index = L + (R - L)/2 - if (val >= array(array_index)) then - L = array_index - else - R = array_index - end if - - ! check for large number of iterations - n_iteration = n_iteration + 1 - if (n_iteration == MAX_ITERATION) then - array_index = -2 - return - end if - end do - - array_index = L - - end function binary_search_int4 - - pure function binary_search_int8(array, n, val) result(array_index) - - integer, intent(in) :: n - integer(8), intent(in) :: array(n) - integer(8), intent(in) :: val - integer :: array_index - - integer :: L - integer :: R - integer :: n_iteration - - L = 1 - R = n - - if (val < array(L) .or. val > array(R)) then - array_index = -1 - return - end if - - n_iteration = 0 - do while (R - L > 1) - ! Find values at midpoint - array_index = L + (R - L)/2 - if (val >= array(array_index)) then - L = array_index - else - R = array_index - end if - - ! check for large number of iterations - n_iteration = n_iteration + 1 - if (n_iteration == MAX_ITERATION) then - array_index = -2 - return - end if - end do - - array_index = L - - end function binary_search_int8 - -end module search diff --git a/src/secondary_correlated.F90 b/src/secondary_correlated.F90 index e163fdcc24..a0e203f33d 100644 --- a/src/secondary_correlated.F90 +++ b/src/secondary_correlated.F90 @@ -2,13 +2,13 @@ module secondary_correlated use hdf5, only: HID_T, HSIZE_T + use algorithm, only: binary_search use angleenergy_header, only: AngleEnergy use constants, only: ZERO, ONE, HALF, TWO, HISTOGRAM, LINEAR_LINEAR use distribution_univariate, only: DistributionContainer, Tabular use hdf5_interface, only: get_shape, read_attribute, open_dataset, & read_dataset, close_dataset use random_lcg, only: prn - use search, only: binary_search !=============================================================================== ! CORRELATEDANGLEENERGY represents a correlated angle-energy distribution. This diff --git a/src/secondary_kalbach.F90 b/src/secondary_kalbach.F90 index 4b5e690b5d..f963cff3ff 100644 --- a/src/secondary_kalbach.F90 +++ b/src/secondary_kalbach.F90 @@ -2,12 +2,12 @@ module secondary_kalbach use hdf5, only: HID_T, HSIZE_T + use algorithm, only: binary_search use angleenergy_header, only: AngleEnergy use constants, only: ZERO, HALF, ONE, TWO, HISTOGRAM, LINEAR_LINEAR use hdf5_interface, only: read_attribute, read_dataset, open_dataset, & close_dataset, get_shape use random_lcg, only: prn - use search, only: binary_search !=============================================================================== ! KalbachMann represents a correlated angle-energy distribution with the angular diff --git a/src/simulation.F90 b/src/simulation.F90 index 3321dc70fa..f59ce371cc 100644 --- a/src/simulation.F90 +++ b/src/simulation.F90 @@ -24,6 +24,7 @@ module simulation reset_result use trigger, only: check_triggers use tracking, only: transport + use volume_calc, only: run_volume_calculations implicit none private @@ -42,6 +43,9 @@ contains type(Particle) :: p integer(8) :: i_work + ! Volume calculations + if (size(volume_calcs) > 0) call run_volume_calculations() + if (.not. restart_run) call initialize_source() ! Display header diff --git a/src/source.F90 b/src/source.F90 index 194c8c6add..9aeccde156 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -1,5 +1,11 @@ module source + use hdf5, only: HID_T +#ifdef MPI + use message_passing +#endif + + use algorithm, only: binary_search use bank_header, only: Bank use constants use distribution_univariate, only: Discrete @@ -12,17 +18,10 @@ module source use output, only: write_message use particle_header, only: Particle use random_lcg, only: prn, set_particle_seed, prn_set_stream - use search, only: binary_search use string, only: to_str use math use state_point, only: read_source_bank, write_source_bank -#ifdef MPI - use message_passing -#endif - - use hdf5, only: HID_T - implicit none contains @@ -107,7 +106,8 @@ contains real(8) :: r(3) ! sampled coordinates logical :: found ! Does the source particle exist within geometry? type(Particle) :: p ! Temporary particle for using find_cell - integer, save :: num_resamples = 0 ! Number of resamples encountered + integer, save :: n_accept = 0 ! Number of samples accepted + integer, save :: n_reject = 0 ! Number of samples rejected ! Set weight to one by default site % wgt = ONE @@ -143,13 +143,6 @@ contains ! Now search to see if location exists in geometry call find_cell(p, found) - if (.not. found) then - num_resamples = num_resamples + 1 - if (num_resamples == MAX_EXTSRC_RESAMPLES) then - call fatal_error("Maximum number of external source spatial & - &resamples reached!") - end if - end if ! Check if spatial site is in fissionable material select type (space => external_source(i) % space) @@ -162,8 +155,21 @@ contains end if end if end select + + ! Check for rejection + if (.not. found) then + n_reject = n_reject + 1 + if (n_reject >= EXTSRC_REJECT_THRESHOLD .and. & + real(n_accept, 8)/n_reject <= EXTSRC_REJECT_FRACTION) then + call fatal_error("More than 95% of external source sites sampled & + &were rejected. Please check your external source definition.") + end if + end if end do + ! Increment number of accepted samples + n_accept = n_accept + 1 + call p % clear() ! Sample angle diff --git a/src/state_point.F90 b/src/state_point.F90 index abe034897a..39532652f1 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -51,7 +51,7 @@ contains integer(HID_T) :: file_id integer(HID_T) :: cmfd_group, tallies_group, tally_group, meshes_group, & mesh_group, filter_group, runtime_group - character(20), allocatable :: str_array(:) + character(MAX_WORD_LEN), allocatable :: str_array(:) character(MAX_FILE_LEN) :: filename type(RegularMesh), pointer :: meshp type(TallyObject), pointer :: tally diff --git a/src/stl_vector.F90 b/src/stl_vector.F90 index c7f2246ff8..06f487dc1e 100644 --- a/src/stl_vector.F90 +++ b/src/stl_vector.F90 @@ -114,6 +114,11 @@ contains ! Since integer is trivially destructible, we only need to set size to zero ! and can leave capacity as is this%size_ = 0 + if (allocated(this % data)) then + this%capacity_ = size(this % data) + else + this%capacity_ = 0 + end if end subroutine clear_int subroutine initialize_fill_int(this, n, val) @@ -249,6 +254,11 @@ contains ! Since real is trivially destructible, we only need to set size to zero and ! can leave capacity as is this%size_ = 0 + if (allocated(this % data)) then + this%capacity_ = size(this % data) + else + this%capacity_ = 0 + end if end subroutine clear_real subroutine initialize_fill_real(this, n, val) @@ -384,6 +394,11 @@ contains ! Since char is trivially destructible, we only need to set size to zero and ! can leave capacity as is this%size_ = 0 + if (allocated(this % data)) then + this%capacity_ = size(this % data) + else + this%capacity_ = 0 + end if end subroutine clear_char subroutine initialize_fill_char(this, n, val) diff --git a/src/summary.F90 b/src/summary.F90 index b02336d97e..cc0c517588 100644 --- a/src/summary.F90 +++ b/src/summary.F90 @@ -115,36 +115,31 @@ contains integer :: i character(12), allocatable :: nucnames(:) real(8), allocatable :: awrs(:) - integer, allocatable :: zaids(:) ! Write useful data from nuclide objects nuclide_group = create_group(file_id, "nuclides") call write_dataset(nuclide_group, "n_nuclides_total", n_nuclides_total) - ! Build array of nuclide names, awrs, and zaids + ! Build array of nuclide names and awrs allocate(nucnames(n_nuclides_total)) allocate(awrs(n_nuclides_total)) - allocate(zaids(n_nuclides_total)) do i = 1, n_nuclides_total if (run_CE) then nucnames(i) = nuclides(i) % name awrs(i) = nuclides(i) % awr - zaids(i) = nuclides(i) % zaid else nucnames(i) = nuclides_MG(i) % obj % name awrs(i) = nuclides_MG(i) % obj % awr - zaids(i) = nuclides_MG(i) % obj % zaid end if end do - ! Write nuclide names, awrs and zaids + ! Write nuclide names and awrs call write_dataset(nuclide_group, "names", nucnames) call write_dataset(nuclide_group, "awrs", awrs) - call write_dataset(nuclide_group, "zaids", zaids) call close_group(nuclide_group) - deallocate(nucnames, awrs, zaids) + deallocate(nucnames, awrs) end subroutine write_nuclides @@ -527,10 +522,10 @@ contains call write_dataset(material_group, "index", i) ! Write name for this material - call write_dataset(material_group, "name", m%name) + call write_dataset(material_group, "name", m % name) ! Write atom density with units - call write_dataset(material_group, "atom_density", m%density) + call write_dataset(material_group, "atom_density", m % density) call write_attribute_string(material_group, "atom_density", "units", & "atom/b-cm") @@ -572,7 +567,6 @@ contains integer(HID_T), intent(in) :: file_id integer :: i, j, k - integer :: i_xs integer :: n_order ! loop index for moment orders integer :: nm_order ! loop index for Ynm moment orders integer(HID_T) :: tallies_group @@ -635,12 +629,7 @@ contains allocate(str_array(t%n_nuclide_bins)) NUCLIDE_LOOP: do j = 1, t%n_nuclide_bins if (t%nuclide_bins(j) > 0) then - i_xs = index(nuclides(t%nuclide_bins(j))%name, '.') - if (i_xs > 0) then - str_array(j) = nuclides(t%nuclide_bins(j))%name(1 : i_xs-1) - else - str_array(j) = nuclides(t%nuclide_bins(j))%name - end if + str_array(j) = nuclides(t % nuclide_bins(j)) % name else str_array(j) = 'total' end if diff --git a/src/tally.F90 b/src/tally.F90 index ec46a61940..922d2496e5 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -1,7 +1,11 @@ module tally +#ifdef MPI + use message_passing +#endif + + use algorithm, only: binary_search use constants - use endf_header, only: Constant1D use error, only: fatal_error use geometry_header use global @@ -12,15 +16,10 @@ module tally use mesh_header, only: RegularMesh use output, only: header use particle_header, only: LocalCoord, Particle - use search, only: binary_search use string, only: to_str use tally_header, only: TallyResult use tally_filter -#ifdef MPI - use message_passing -#endif - implicit none integer :: position(N_FILTER_TYPES - 3) = 0 ! Tally map positioning array @@ -89,6 +88,7 @@ contains integer :: l ! loop index for nuclides in material integer :: m ! loop index for reactions integer :: q ! loop index for scoring bins + integer :: i_temp ! temperature index integer :: i_nuc ! index in nuclides array (from material) integer :: i_energy ! index in nuclide energy grid integer :: score_bin ! scoring bin, e.g. SCORE_FLUX @@ -247,24 +247,17 @@ contains ! reaction with neutrons in the exit channel if (p % event_MT == ELASTIC .or. p % event_MT == N_LEVEL .or. & (p % event_MT >= N_N1 .and. p % event_MT <= N_NC)) then - ! Don't waste time on very common reactions we know have multiplicities - ! of one. + ! Don't waste time on very common reactions we know have + ! multiplicities of one. score = p % last_wgt * flux else - m = nuclides(p%event_nuclide)%reaction_index% & + m = nuclides(p % event_nuclide) % reaction_index % & get_key(p % event_MT) ! Get yield and apply to score - associate (rxn => nuclides(p%event_nuclide)%reactions(m)) - select type (yield => rxn % products(1) % yield) - type is (Constant1D) - ! Grab the yield from the reaction - score = p % last_wgt * yield % y * flux - class default - ! the yield was already incorporated in to p % wgt per the - ! scattering routine - score = p % wgt * flux - end select + associate (rxn => nuclides(p % event_nuclide) % reactions(m)) + score = p % last_wgt * flux & + * rxn % products(1) % yield % evaluate(p % last_E) end associate end if @@ -289,16 +282,9 @@ contains get_key(p % event_MT) ! Get yield and apply to score - associate (rxn => nuclides(p%event_nuclide)%reactions(m)) - select type (yield => rxn % products(1) % yield) - type is (Constant1D) - ! Grab the yield from the reaction - score = p % last_wgt * yield % y * flux - class default - ! the yield was already incorporated in to p % wgt per the - ! scattering routine - score = p % wgt * flux - end select + associate (rxn => nuclides(p % event_nuclide) % reactions(m)) + score = p % last_wgt * flux & + * rxn % products(1) % yield % evaluate(p % last_E) end associate end if @@ -324,15 +310,8 @@ contains ! Get yield and apply to score associate (rxn => nuclides(p%event_nuclide)%reactions(m)) - select type (yield => rxn % products(1) % yield) - type is (Constant1D) - ! Grab the yield from the reaction - score = p % last_wgt * yield % y * flux - class default - ! the yield was already incorporated in to p % wgt per the - ! scattering routine - score = p % wgt * flux - end select + score = p % last_wgt * flux & + * rxn % products(1) % yield % evaluate(p % last_E) end associate end if @@ -703,14 +682,14 @@ contains if (survival_biasing) then ! No fission events occur if survival biasing is on -- need to ! calculate fraction of absorptions that would have resulted in - ! fission scale by kappa-fission - associate (nuc => nuclides(p%event_nuclide)) - if (micro_xs(p%event_nuclide)%absorption > ZERO .and. & - nuc%fissionable) then - score = p%absorb_wgt * & - nuc%reactions(nuc%index_fission(1))%Q_value * & - micro_xs(p%event_nuclide)%fission / & - micro_xs(p%event_nuclide)%absorption * flux + ! fission scaled by kappa-fission + associate (nuc => nuclides(p % event_nuclide)) + if (micro_xs(p % event_nuclide) % absorption > ZERO .and. & + nuc % fissionable) then + score = p % absorb_wgt * & + nuc % reactions(nuc % index_fission(1)) % Q_value * & + micro_xs(p % event_nuclide) % fission / & + micro_xs(p % event_nuclide) % absorption * flux end if end associate else @@ -719,12 +698,12 @@ contains ! All fission events will contribute, so again we can use ! particle's weight entering the collision as the estimate for ! the fission energy production rate - associate (nuc => nuclides(p%event_nuclide)) - if (nuc%fissionable) then - score = p%last_wgt * & - nuc%reactions(nuc%index_fission(1))%Q_value * & - micro_xs(p%event_nuclide)%fission / & - micro_xs(p%event_nuclide)%absorption * flux + associate (nuc => nuclides(p % event_nuclide)) + if (nuc % fissionable) then + score = p % last_wgt * & + nuc % reactions(nuc % index_fission(1)) % Q_value * & + micro_xs(p % event_nuclide) % fission / & + micro_xs(p % event_nuclide) % absorption * flux end if end associate end if @@ -732,22 +711,23 @@ contains else if (i_nuclide > 0) then associate (nuc => nuclides(i_nuclide)) - if (nuc%fissionable) then - score = nuc%reactions(nuc%index_fission(1))%Q_value * & - micro_xs(i_nuclide)%fission * atom_density * flux + if (nuc % fissionable) then + score = nuc % reactions(nuc % index_fission(1)) % Q_value * & + micro_xs(i_nuclide) % fission * atom_density * flux end if end associate else - do l = 1, materials(p%material)%n_nuclides + do l = 1, materials(p % material) % n_nuclides ! Determine atom density and index of nuclide - atom_density_ = materials(p%material)%atom_density(l) - i_nuc = materials(p%material)%nuclide(l) + atom_density_ = materials(p % material) % atom_density(l) + i_nuc = materials(p % material) % nuclide(l) ! If nuclide is fissionable, accumulate kappa fission associate(nuc => nuclides(i_nuc)) if (nuc % fissionable) then - score = score + nuc%reactions(nuc%index_fission(1))%Q_value * & - micro_xs(i_nuc)%fission * atom_density_ * flux + score = score + & + nuc % reactions(nuc % index_fission(1)) % Q_value * & + micro_xs(i_nuc) % fission * atom_density_ * flux end if end associate end do @@ -772,6 +752,123 @@ contains end if end if + case (SCORE_FISS_Q_PROMPT) + if (t % estimator == ESTIMATOR_ANALOG) then + if (survival_biasing) then + ! No fission events occur if survival biasing is on -- need to + ! calculate fraction of absorptions that would have resulted in + ! fission scaled by Q-value + associate (nuc => nuclides(p % event_nuclide)) + if (micro_xs(p % event_nuclide) % absorption > ZERO .and. & + allocated(nuc % fission_q_prompt)) then + score = p % absorb_wgt & + * nuc % fission_q_prompt % evaluate(p % last_E) & + * micro_xs(p % event_nuclide) % fission & + / micro_xs(p % event_nuclide) % absorption * flux + end if + end associate + else + ! Skip any non-absorption events + if (p % event == EVENT_SCATTER) cycle SCORE_LOOP + ! All fission events will contribute, so again we can use + ! particle's weight entering the collision as the estimate for + ! the fission energy production rate + associate (nuc => nuclides(p % event_nuclide)) + if (allocated(nuc % fission_q_prompt)) then + score = p % last_wgt & + * nuc % fission_q_prompt % evaluate(p % last_E) & + * micro_xs(p % event_nuclide) % fission & + / micro_xs(p % event_nuclide) % absorption * flux + end if + end associate + end if + + else + if (t % estimator == ESTIMATOR_COLLISION) then + E = p % last_E + else + E = p % E + end if + + if (i_nuclide > 0) then + if (allocated(nuclides(i_nuclide) % fission_q_prompt)) then + score = micro_xs(i_nuclide) % fission * atom_density * flux & + * nuclides(i_nuclide) % fission_q_prompt % evaluate(E) + else + score = ZERO + end if + else + score = ZERO + do l = 1, materials(p % material) % n_nuclides + atom_density_ = materials(p % material) % atom_density(l) + i_nuc = materials(p % material) % nuclide(l) + if (allocated(nuclides(i_nuc) % fission_q_prompt)) then + score = score + micro_xs(i_nuc) % fission * atom_density_ & + * flux & + * nuclides(i_nuc) % fission_q_prompt % evaluate(E) + end if + end do + end if + end if + + case (SCORE_FISS_Q_RECOV) + if (t % estimator == ESTIMATOR_ANALOG) then + if (survival_biasing) then + ! No fission events occur if survival biasing is on -- need to + ! calculate fraction of absorptions that would have resulted in + ! fission scaled by Q-value + associate (nuc => nuclides(p % event_nuclide)) + if (micro_xs(p % event_nuclide) % absorption > ZERO .and. & + allocated(nuc % fission_q_recov)) then + score = p % absorb_wgt & + * nuc % fission_q_recov % evaluate(p % last_E) & + * micro_xs(p % event_nuclide) % fission & + / micro_xs(p % event_nuclide) % absorption * flux + end if + end associate + else + ! Skip any non-absorption events + if (p % event == EVENT_SCATTER) cycle SCORE_LOOP + ! All fission events will contribute, so again we can use + ! particle's weight entering the collision as the estimate for + ! the fission energy production rate + associate (nuc => nuclides(p % event_nuclide)) + if (allocated(nuc % fission_q_recov)) then + score = p % last_wgt & + * nuc % fission_q_recov % evaluate(p % last_E) & + * micro_xs(p % event_nuclide) % fission & + / micro_xs(p % event_nuclide) % absorption * flux + end if + end associate + end if + + else + if (t % estimator == ESTIMATOR_COLLISION) then + E = p % last_E + else + E = p % E + end if + + if (i_nuclide > 0) then + if (allocated(nuclides(i_nuclide) % fission_q_recov)) then + score = micro_xs(i_nuclide) % fission * atom_density * flux & + * nuclides(i_nuclide) % fission_q_recov % evaluate(E) + else + score = ZERO + end if + else + score = ZERO + do l = 1, materials(p % material) % n_nuclides + atom_density_ = materials(p % material) % atom_density(l) + i_nuc = materials(p % material) % nuclide(l) + if (allocated(nuclides(i_nuc) % fission_q_recov)) then + score = score + micro_xs(i_nuc) % fission * atom_density_ & + * flux * nuclides(i_nuc) % fission_q_recov % evaluate(E) + end if + end do + end if + end if + case default if (t % estimator == ESTIMATOR_ANALOG) then ! Any other score is assumed to be a MT number. Thus, we just need @@ -791,16 +888,18 @@ contains if (i_nuclide > 0) then if (nuclides(i_nuclide)%reaction_index%has_key(score_bin)) then m = nuclides(i_nuclide)%reaction_index%get_key(score_bin) - associate (rxn => nuclides(i_nuclide) % reactions(m)) - ! Retrieve index on nuclide energy grid and interpolation - ! factor - i_energy = micro_xs(i_nuclide) % index_grid - f = micro_xs(i_nuclide) % interp_factor - if (i_energy >= rxn % threshold) then - score = ((ONE - f) * rxn % sigma(i_energy - & - rxn%threshold + 1) + f * rxn % sigma(i_energy - & - rxn%threshold + 2)) * atom_density * flux + ! Retrieve temperature and energy grid index and interpolation + ! factor + i_temp = micro_xs(i_nuclide) % index_temp + i_energy = micro_xs(i_nuclide) % index_grid + f = micro_xs(i_nuclide) % interp_factor + + associate (xs => nuclides(i_nuclide) % reactions(m) % xs(i_temp)) + if (i_energy >= xs % threshold) then + score = ((ONE - f) * xs % value(i_energy - & + xs % threshold + 1) + f * xs % value(i_energy - & + xs % threshold + 2)) * atom_density * flux end if end associate end if @@ -815,15 +914,18 @@ contains if (nuclides(i_nuc)%reaction_index%has_key(score_bin)) then m = nuclides(i_nuc)%reaction_index%get_key(score_bin) - associate (rxn => nuclides(i_nuc) % reactions(m)) - ! Retrieve index on nuclide energy grid and interpolation - ! factor - i_energy = micro_xs(i_nuc) % index_grid - f = micro_xs(i_nuc) % interp_factor - if (i_energy >= rxn % threshold) then - score = score + ((ONE - f) * rxn % sigma(i_energy - & - rxn%threshold + 1) + f * rxn % sigma(i_energy - & - rxn%threshold + 2)) * atom_density_ * flux + + ! Retrieve temperature and energy grid index and interpolation + ! factor + i_temp = micro_xs(i_nuc) % index_temp + i_energy = micro_xs(i_nuc) % index_grid + f = micro_xs(i_nuc) % interp_factor + + associate (xs => nuclides(i_nuc) % reactions(m) % xs(i_temp)) + if (i_energy >= xs % threshold) then + score = score + ((ONE - f) * xs % value(i_energy - & + xs % threshold + 1) + f * xs % value(i_energy - & + xs % threshold + 2)) * atom_density_ * flux end if end associate end if @@ -2224,13 +2326,16 @@ contains integer :: i integer :: i_tally integer :: j ! loop indices - integer :: k ! loop indices + integer :: d1 ! dimension index + integer :: d2 ! dimension index + integer :: d3 ! dimension index integer :: ijk0(3) ! indices of starting coordinates integer :: ijk1(3) ! indices of ending coordinates integer :: n_cross ! number of surface crossings integer :: filter_index ! index of scoring bin integer :: i_filter_mesh ! index of mesh filter in filters array integer :: i_filter_surf ! index of surface filter in filters + integer :: i_filter_energy ! index of energy filter in filters real(8) :: uvw(3) ! cosine of angle of particle real(8) :: xyz0(3) ! starting/intermediate coordinates real(8) :: xyz1(3) ! ending coordinates of particle @@ -2240,9 +2345,6 @@ contains real(8) :: filt_score ! score applied by filters logical :: start_in_mesh ! particle's starting xyz in mesh? logical :: end_in_mesh ! particle's ending xyz in mesh? - logical :: x_same ! same starting/ending x index (i) - logical :: y_same ! same starting/ending y index (j) - logical :: z_same ! same starting/ending z index (k) type(TallyObject), pointer :: t type(RegularMesh), pointer :: m @@ -2255,9 +2357,10 @@ contains i_tally = active_current_tallies % get_item(i) t => tallies(i_tally) - ! Get index for mesh and surface filters + ! Get index for mesh, surface, and energy filters i_filter_mesh = t % find_filter(FILTER_MESH) i_filter_surf = t % find_filter(FILTER_SURFACE) + i_filter_energy = t % find_filter(FILTER_ENERGYIN) ! Get pointer to mesh select type(filt => t % filters(i_filter_mesh) % obj) @@ -2269,7 +2372,7 @@ contains call get_mesh_indices(m, xyz0, ijk0(:m % n_dimension), start_in_mesh) call get_mesh_indices(m, xyz1, ijk1(:m % n_dimension), end_in_mesh) - ! Check to if start or end is in mesh -- if not, check if track still + ! Check to see if start or end is in mesh -- if not, check if track still ! intersects with mesh if ((.not. start_in_mesh) .and. (.not. end_in_mesh)) then if (m % n_dimension == 2) then @@ -2290,238 +2393,122 @@ contains ! Determine incoming energy bin. We need to tell the energy filter this ! is a tracklength tally so it uses the pre-collision energy. - j = t % find_filter(FILTER_ENERGYIN) - if (j > 0) then - call t % filters(i) % obj % get_next_bin(p, ESTIMATOR_TRACKLENGTH, & - & NO_BIN_FOUND, matching_bins(j), filt_score) - if (matching_bins(j) == NO_BIN_FOUND) cycle + if (i_filter_energy > 0) then + call t % filters(i_filter_energy) % obj % get_next_bin(p, & + ESTIMATOR_TRACKLENGTH, NO_BIN_FOUND, & + matching_bins(i_filter_energy), filt_score) + if (matching_bins(i_filter_energy) == NO_BIN_FOUND) cycle end if - ! ======================================================================= - ! SPECIAL CASES WHERE TWO INDICES ARE THE SAME - - x_same = (ijk0(1) == ijk1(1)) - y_same = (ijk0(2) == ijk1(2)) - z_same = (ijk0(3) == ijk1(3)) - - if (x_same .and. y_same) then - ! Only z crossings - if (uvw(3) > 0) then - do j = ijk0(3), ijk1(3) - 1 - ijk0(3) = j - if (all(ijk0 >= 0) .and. all(ijk0 <= m % dimension)) then - matching_bins(i_filter_surf) = OUT_TOP - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, ijk0 + 1, .true.) - filter_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 -!$omp atomic - t % results(1, filter_index) % value = & - t % results(1, filter_index) % value + p % wgt - end if - end do - else - do j = ijk0(3) - 1, ijk1(3), -1 - ijk0(3) = j - if (all(ijk0 >= 0) .and. all(ijk0 <= m % dimension)) then - matching_bins(i_filter_surf) = IN_TOP - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, ijk0 + 1, .true.) - filter_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 -!$omp atomic - t % results(1, filter_index) % value = & - t % results(1, filter_index) % value + p % wgt - end if - end do - end if - cycle - elseif (x_same .and. z_same) then - ! Only y crossings - if (uvw(2) > 0) then - do j = ijk0(2), ijk1(2) - 1 - ijk0(2) = j - if (all(ijk0 >= 0) .and. all(ijk0 <= m % dimension)) then - matching_bins(i_filter_surf) = OUT_FRONT - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, ijk0 + 1, .true.) - filter_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 -!$omp atomic - t % results(1, filter_index) % value = & - t % results(1, filter_index) % value + p % wgt - end if - end do - else - do j = ijk0(2) - 1, ijk1(2), -1 - ijk0(2) = j - if (all(ijk0 >= 0) .and. all(ijk0 <= m % dimension)) then - matching_bins(i_filter_surf) = IN_FRONT - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, ijk0 + 1, .true.) - filter_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 -!$omp atomic - t % results(1, filter_index) % value = & - t % results(1, filter_index) % value + p % wgt - end if - end do - end if - cycle - elseif (y_same .and. z_same) then - ! Only x crossings - if (uvw(1) > 0) then - do j = ijk0(1), ijk1(1) - 1 - ijk0(1) = j - if (all(ijk0 >= 0) .and. all(ijk0 <= m % dimension)) then - matching_bins(i_filter_surf) = OUT_RIGHT - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, ijk0 + 1, .true.) - filter_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 -!$omp atomic - t % results(1, filter_index) % value = & - t % results(1, filter_index) % value + p % wgt - end if - end do - else - do j = ijk0(1) - 1, ijk1(1), -1 - ijk0(1) = j - if (all(ijk0 >= 0) .and. all(ijk0 <= m % dimension)) then - matching_bins(i_filter_surf) = IN_RIGHT - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, ijk0 + 1, .true.) - filter_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 -!$omp atomic - t % results(1, filter_index) % value = & - t % results(1, filter_index) % value + p % wgt - end if - end do - end if - cycle - end if - - ! ======================================================================= - ! GENERIC CASE - ! Bounding coordinates - do j = 1, 3 - if (uvw(j) > 0) then - xyz_cross(j) = m % lower_left(j) + ijk0(j) * m % width(j) + do d1 = 1, 3 + if (uvw(d1) > 0) then + xyz_cross(d1) = m % lower_left(d1) + ijk0(d1) * m % width(d1) else - xyz_cross(j) = m % lower_left(j) + (ijk0(j) - 1) * m % width(j) + xyz_cross(d1) = m % lower_left(d1) + (ijk0(d1) - 1) * m % width(d1) end if end do - do k = 1, n_cross + do j = 1, n_cross ! Reset scoring bin index matching_bins(i_filter_surf) = 0 ! Calculate distance to each bounding surface. We need to treat ! special case where the cosine of the angle is zero since this would ! result in a divide-by-zero. - - do j = 1, 3 - if (uvw(j) == 0) then - d(j) = INFINITY + do d1 = 1, 3 + if (uvw(d1) == 0) then + d(d1) = INFINITY else - d(j) = (xyz_cross(j) - xyz0(j))/uvw(j) + d(d1) = (xyz_cross(d1) - xyz0(d1))/uvw(d1) end if end do ! Determine the closest bounding surface of the mesh cell by - ! calculating the minimum distance - + ! calculating the minimum distance. Then use the minimum distance and + ! direction of the particle to determine which surface was crossed. distance = minval(d) - ! Now use the minimum distance and diretion of the particle to - ! determine which surface was crossed + ! Loop over the dimensions + do d1 = 1, 3 - if (distance == d(1)) then - if (uvw(1) > 0) then - ! Crossing into right mesh cell -- this is treated as outgoing - ! current from (i,j,k) - if (all(ijk0 >= 0) .and. all(ijk0 <= m % dimension)) then - matching_bins(i_filter_surf) = OUT_RIGHT - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, ijk0 + 1, .true.) - end if - ijk0(1) = ijk0(1) + 1 - xyz_cross(1) = xyz_cross(1) + m % width(1) - else - ! Crossing into left mesh cell -- this is treated as incoming - ! current in (i-1,j,k) - ijk0(1) = ijk0(1) - 1 - xyz_cross(1) = xyz_cross(1) - m % width(1) - if (all(ijk0 >= 0) .and. all(ijk0 <= m % dimension)) then - matching_bins(i_filter_surf) = IN_RIGHT - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, ijk0 + 1, .true.) - end if - end if - elseif (distance == d(2)) then - if (uvw(2) > 0) then - ! Crossing into front mesh cell -- this is treated as outgoing - ! current in (i,j,k) - if (all(ijk0 >= 0) .and. all(ijk0 <= m % dimension)) then - matching_bins(i_filter_surf) = OUT_FRONT - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, ijk0 + 1, .true.) - end if - ijk0(2) = ijk0(2) + 1 - xyz_cross(2) = xyz_cross(2) + m % width(2) - else - ! Crossing into back mesh cell -- this is treated as incoming - ! current in (i,j-1,k) - ijk0(2) = ijk0(2) - 1 - xyz_cross(2) = xyz_cross(2) - m % width(2) - if (all(ijk0 >= 0) .and. all(ijk0 <= m % dimension)) then - matching_bins(i_filter_surf) = IN_FRONT - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, ijk0 + 1, .true.) - end if - end if - else if (distance == d(3)) then - if (uvw(3) > 0) then - ! Crossing into top mesh cell -- this is treated as outgoing - ! current in (i,j,k) - if (all(ijk0 >= 0) .and. all(ijk0 <= m % dimension)) then - matching_bins(i_filter_surf) = OUT_TOP - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, ijk0 + 1, .true.) - end if - ijk0(3) = ijk0(3) + 1 - xyz_cross(3) = xyz_cross(3) + m % width(3) - else - ! Crossing into bottom mesh cell -- this is treated as incoming - ! current in (i,j,k-1) - ijk0(3) = ijk0(3) - 1 - xyz_cross(3) = xyz_cross(3) - m % width(3) - if (all(ijk0 >= 0) .and. all(ijk0 <= m % dimension)) then - matching_bins(i_filter_surf) = IN_TOP - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, ijk0 + 1, .true.) - end if - end if - end if + ! Get the other dimensions + d2 = mod(d1, 3) + 1 + d3 = mod(d1 + 1, 3) + 1 - ! Determine scoring index - if (matching_bins(i_filter_surf) > 0) then - filter_index = sum((matching_bins(1:size(t % filters)) - 1) & - * t % stride) + 1 + ! Check whether distance is the shortest distance + if (distance == d(d1)) then - ! Check for errors - if (filter_index <= 0 .or. filter_index > & - t % total_filter_bins) then - call fatal_error("Score index outside range.") - end if + ! Check whether particle is moving in positive d1 direction + if (uvw(d1) > 0) then - ! Add to surface current tally + ! Outward current on d1 max surface + if (all(ijk0 >= 1) .and. all(ijk0 <= m % dimension)) then + matching_bins(i_filter_surf) = d1 * 2 + matching_bins(i_filter_mesh) = & + mesh_indices_to_bin(m, ijk0) + filter_index = sum((matching_bins(1:size(t % filters)) - 1) & + * t % stride) + 1 !$omp atomic - t % results(1, filter_index) % value = & - t % results(1, filter_index) % value + p % wgt - end if + t % results(1, filter_index) % value = & + t % results(1, filter_index) % value + p % wgt + end if + + ! Inward current on d1 min surface + if (ijk0(d1) >= 0 .and. ijk0(d1) < m % dimension(d1) .and. & + ijk0(d2) >= 1 .and. ijk0(d2) <= m % dimension(d2) .and. & + ijk0(d3) >= 1 .and. ijk0(d3) <= m % dimension(d3)) then + ijk0(d1) = ijk0(d1) + 1 + matching_bins(i_filter_surf) = d1 * 2 + 5 + matching_bins(i_filter_mesh) = & + mesh_indices_to_bin(m, ijk0) + filter_index = sum((matching_bins(1:size(t % filters)) - 1) & + * t % stride) + 1 +!$omp atomic + t % results(1, filter_index) % value = & + t % results(1, filter_index) % value + p % wgt + ijk0(d1) = ijk0(d1) - 1 + end if + + ijk0(d1) = ijk0(d1) + 1 + xyz_cross(d1) = xyz_cross(d1) + m % width(d1) + + ! The particle is moving in the negative d1 direction + else + + ! Outward current on d1 min surface + if (all(ijk0 >= 1) .and. all(ijk0 <= m % dimension)) then + matching_bins(i_filter_surf) = d1 * 2 - 1 + matching_bins(i_filter_mesh) = & + mesh_indices_to_bin(m, ijk0) + filter_index = sum((matching_bins(1:size(t % filters)) - 1) & + * t % stride) + 1 +!$omp atomic + t % results(1, filter_index) % value = & + t % results(1, filter_index) % value + p % wgt + end if + + ! Inward current on d1 max surface + if (ijk0(d1) > 1 .and. ijk0(d1) <= m % dimension(d1) + 1 .and. & + ijk0(d2) >= 1 .and. ijk0(d2) <= m % dimension(d2) .and. & + ijk0(d3) >= 1 .and. ijk0(d3) <= m % dimension(d3)) then + ijk0(d1) = ijk0(d1) - 1 + matching_bins(i_filter_surf) = d1 * 2 + 6 + matching_bins(i_filter_mesh) = & + mesh_indices_to_bin(m, ijk0) + filter_index = sum((matching_bins(1:size(t % filters)) - 1) & + * t % stride) + 1 +!$omp atomic + t % results(1, filter_index) % value = & + t % results(1, filter_index) % value + p % wgt + ijk0(d1) = ijk0(d1) + 1 + end if + + ijk0(d1) = ijk0(d1) - 1 + xyz_cross(d1) = xyz_cross(d1) - m % width(d1) + end if + end if + end do ! Calculate new coordinates xyz0 = xyz0 + distance * uvw diff --git a/src/tally_filter.F90 b/src/tally_filter.F90 index c0e1c88534..bd568e29ae 100644 --- a/src/tally_filter.F90 +++ b/src/tally_filter.F90 @@ -1,5 +1,6 @@ module tally_filter + use algorithm, only: binary_search use constants, only: ONE, NO_BIN_FOUND, FP_PRECISION use dict_header, only: DictIntInt use geometry_header, only: BASE_UNIVERSE, RectLattice, HexLattice @@ -10,7 +11,6 @@ module tally_filter get_mesh_indices, mesh_indices_to_bin, & mesh_intersects_2d, mesh_intersects_3d use particle_header, only: Particle - use search, only: binary_search use string, only: to_str use tally_filter_header, only: TallyFilter, TallyFilterContainer @@ -295,8 +295,12 @@ contains search_iter = 0 do while (any(ijk0(:m % n_dimension) < 1) & .or. any(ijk0(:m % n_dimension) > m % dimension)) - if (search_iter == MAX_SEARCH_ITER) call fatal_error("Failed to & - &find a mesh intersection on a tally mesh filter.") + if (search_iter == MAX_SEARCH_ITER) then + call warning("Failed to find a mesh intersection on a tally mesh & + &filter.") + next_bin = NO_BIN_FOUND + return + end if do j = 1, m % n_dimension if (abs(uvw(j)) < FP_PRECISION) then @@ -315,6 +319,8 @@ contains else ijk0(j) = ijk0(j) - 1 end if + + search_iter = search_iter + 1 end do distance = d(j) xyz0 = xyz0 + distance * uvw diff --git a/src/tracking.F90 b/src/tracking.F90 index 69fb78c354..f2613146e4 100644 --- a/src/tracking.F90 +++ b/src/tracking.F90 @@ -84,9 +84,10 @@ contains ! Calculate microscopic and macroscopic cross sections if (run_CE) then - ! If the material is the same as the last material and the energy of the - ! particle hasn't changed, we don't need to lookup cross sections again. - if (p % material /= p % last_material) call calculate_xs(p) + ! If the material is the same as the last material and the temperature + ! hasn't changed, we don't need to lookup cross sections again. + if (p % material /= p % last_material .or. & + p % sqrtkT /= p % last_sqrtkT) call calculate_xs(p) else ! Since the MGXS can be angle dependent, this needs to be done ! After every collision for the MGXS mode diff --git a/src/trigger.F90 b/src/trigger.F90 index 2fd0e2a121..4af03a2dea 100644 --- a/src/trigger.F90 +++ b/src/trigger.F90 @@ -328,10 +328,11 @@ contains matching_bins(i_filter_ein) = l end if - ! Left Surface matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, (/ i-1, j, k /) + 1, .true.) - matching_bins(i_filter_surf) = IN_RIGHT + mesh_indices_to_bin(m, (/ i, j, k /)) + + ! Left Surface + matching_bins(i_filter_surf) = OUT_LEFT filter_index = & sum((matching_bins(1:size(t % filters)) - 1) * t % stride) + 1 call get_trigger_uncertainty(std_dev, rel_err, 1, filter_index, t) @@ -343,33 +344,7 @@ contains end if trigger % variance = std_dev**2 - matching_bins(i_filter_surf) = OUT_RIGHT - filter_index = & - sum((matching_bins(1:size(t % filters)) - 1) * t % stride) + 1 - call get_trigger_uncertainty(std_dev, rel_err, 1, filter_index, t) - if (trigger % std_dev < std_dev) then - trigger % std_dev = std_dev - end if - if (trigger % rel_err < rel_err) then - trigger % rel_err = rel_err - end if - trigger % variance = trigger % std_dev**2 - ! Right Surface - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, (/ i, j, k /) + 1, .true.) - matching_bins(i_filter_surf) = IN_RIGHT - filter_index = & - sum((matching_bins(1:size(t % filters)) - 1) * t % stride) + 1 - call get_trigger_uncertainty(std_dev, rel_err, 1, filter_index, t) - if (trigger % std_dev < std_dev) then - trigger % std_dev = std_dev - end if - if (trigger % rel_err < rel_err) then - trigger % rel_err = rel_err - end if - trigger % variance = trigger % std_dev**2 - matching_bins(i_filter_surf) = OUT_RIGHT filter_index = & sum((matching_bins(1:size(t % filters)) - 1) * t % stride) + 1 @@ -383,22 +358,7 @@ contains trigger % variance = trigger % std_dev**2 ! Back Surface - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, (/ i, j-1, k /) + 1, .true.) - matching_bins(i_filter_surf) = IN_FRONT - filter_index = & - sum((matching_bins(1:size(t % filters)) - 1) * t % stride) + 1 - call get_trigger_uncertainty(std_dev, rel_err, 1, filter_index, t) - if (trigger % std_dev < std_dev) then - trigger % std_dev = std_dev - end if - if (trigger % rel_err < rel_err) then - trigger % rel_err = rel_err - end if - trigger % variance = trigger % std_dev**2 - - - matching_bins(i_filter_surf) = OUT_FRONT + matching_bins(i_filter_surf) = OUT_BACK filter_index = & sum((matching_bins(1:size(t % filters)) - 1) * t % stride) + 1 call get_trigger_uncertainty(std_dev, rel_err, 1, filter_index, t) @@ -411,20 +371,6 @@ contains trigger % variance = trigger % std_dev**2 ! Front Surface - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, (/ i, j, k /) + 1, .true.) - matching_bins(i_filter_surf) = IN_FRONT - filter_index = & - sum((matching_bins(1:size(t % filters)) - 1) * t % stride) + 1 - call get_trigger_uncertainty(std_dev, rel_err, 1, filter_index, t) - if (trigger % std_dev < std_dev) then - trigger % std_dev = std_dev - end if - if (trigger % rel_err < rel_err) then - trigger % rel_err = rel_err - end if - trigger % variance = trigger % std_dev**2 - matching_bins(i_filter_surf) = OUT_FRONT filter_index = & sum((matching_bins(1:size(t % filters)) - 1) * t % stride) + 1 @@ -438,21 +384,7 @@ contains trigger % variance = trigger % std_dev**2 ! Bottom Surface - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, (/ i, j, k-1 /) + 1, .true.) - matching_bins(i_filter_surf) = IN_TOP - filter_index = & - sum((matching_bins(1:size(t % filters)) - 1) * t % stride) + 1 - call get_trigger_uncertainty(std_dev, rel_err, 1, filter_index, t) - if (trigger % std_dev < std_dev) then - trigger % std_dev = std_dev - end if - if (trigger % rel_err < rel_err) then - trigger % rel_err = rel_err - end if - trigger % variance = trigger % std_dev**2 - - matching_bins(i_filter_surf) = OUT_TOP + matching_bins(i_filter_surf) = OUT_BOTTOM filter_index = & sum((matching_bins(1:size(t % filters)) - 1) * t % stride) + 1 call get_trigger_uncertainty(std_dev, rel_err, 1, filter_index, t) @@ -465,20 +397,6 @@ contains trigger % variance = trigger % std_dev**2 ! Top Surface - matching_bins(i_filter_mesh) = & - mesh_indices_to_bin(m, (/ i, j, k /) + 1, .true.) - matching_bins(i_filter_surf) = IN_TOP - filter_index = & - sum((matching_bins(1:size(t % filters)) - 1) * t % stride) + 1 - call get_trigger_uncertainty(std_dev, rel_err, 1, filter_index, t) - if (trigger % std_dev < std_dev) then - trigger % std_dev = std_dev - end if - if (trigger % rel_err < rel_err) then - trigger % rel_err = rel_err - end if - trigger % variance = trigger % std_dev**2 - matching_bins(i_filter_surf) = OUT_TOP filter_index = & sum((matching_bins(1:size(t % filters)) - 1) * t % stride) + 1 diff --git a/src/volume_calc.F90 b/src/volume_calc.F90 new file mode 100644 index 0000000000..22647c4da9 --- /dev/null +++ b/src/volume_calc.F90 @@ -0,0 +1,475 @@ +module volume_calc + + use hdf5, only: HID_T +#ifdef _OPENMP + use omp_lib +#endif + + use constants + use geometry, only: find_cell + use global + use hdf5_interface, only: file_create, file_close, write_attribute, & + create_group, close_group, write_dataset, write_attribute_string + use output, only: write_message, header + use message_passing + use particle_header, only: Particle + use random_lcg, only: prn, prn_set_stream, set_particle_seed + use stl_vector, only: VectorInt, VectorReal + use timer_header, only: Timer + use volume_header + + implicit none + private + + public :: run_volume_calculations + +contains + +!=============================================================================== +! RUN_VOLUME_CALCULATIONS runs each of the stochastic volume calculations that +! the user has specified and writes results to HDF5 files +!=============================================================================== + + subroutine run_volume_calculations() + integer :: i, j + integer :: n + real(8), allocatable :: volume(:,:) ! volume mean/stdev in each domain + character(10) :: domain_type + character(MAX_FILE_LEN) :: filename ! filename for HDF5 file + type(Timer) :: time_volume ! timer for volume calculation + type(VectorInt), allocatable :: nuclide_vec(:) ! indices in nuclides array + type(VectorReal), allocatable :: atoms_vec(:) ! total # of atoms of each nuclide + type(VectorReal), allocatable :: uncertainty_vec(:) ! uncertainty of total # of atoms + + if (master) then + call header("STOCHASTIC VOLUME CALCULATION", level=1) + call time_volume % start() + end if + + do i = 1, size(volume_calcs) + n = size(volume_calcs(i) % domain_id) + allocate(nuclide_vec(n)) + allocate(atoms_vec(n), uncertainty_vec(n)) + allocate(volume(2,n)) + + if (master) then + call write_message("Running volume calculation " // trim(to_str(i)) & + // "...") + end if + + call get_volume(volume_calcs(i), volume, nuclide_vec, atoms_vec, & + uncertainty_vec) + + if (master) then + select case (volume_calcs(i) % domain_type) + case (FILTER_CELL) + domain_type = ' Cell' + case (FILTER_MATERIAL) + domain_type = ' Material' + case (FILTER_UNIVERSE) + domain_type = ' Universe' + end select + + ! Display domain volumes + do j = 1, size(volume_calcs(i) % domain_id) + call write_message(trim(domain_type) // " " // trim(to_str(& + volume_calcs(i) % domain_id(j))) // ": " // trim(to_str(& + volume(1,j))) // " +/- " // trim(to_str(volume(2,j))) // " cm^3") + end do + call write_message("") + + filename = trim(path_output) // 'volume_' // trim(to_str(i)) // '.h5' + call write_volume(volume_calcs(i), filename, volume, nuclide_vec, & + atoms_vec, uncertainty_vec) + end if + + deallocate(nuclide_vec, atoms_vec, uncertainty_vec, volume) + end do + + ! Show elapsed time + if (master) then + call time_volume % stop() + call write_message("Elapsed time: " // trim(to_str(time_volume % & + get_value())) // " s") + end if + end subroutine run_volume_calculations + +!=============================================================================== +! GET_VOLUME stochastically determines the volume of a set of domains along with +! the average number densities of nuclides within the domain +!=============================================================================== + + subroutine get_volume(this, volume, nuclide_vec, atoms_vec, uncertainty_vec) + type(VolumeCalculation), intent(in) :: this + real(8), intent(out) :: volume(:,:) ! volume mean/stdev in each domain + type(VectorInt), intent(out) :: nuclide_vec(:) ! indices in nuclides array + type(VectorReal), intent(out) :: atoms_vec(:) ! total # of atoms of each nuclide + type(VectorReal), intent(out) :: uncertainty_vec(:) ! uncertainty of total # of atoms + + ! Variables that are private to each thread + integer(8) :: i + integer :: j, k + integer :: i_domain ! index in domain_id array + integer :: i_material ! index in materials array + integer :: level ! local coordinate level + integer :: n_mat(size(this % domain_id)) ! Number of materials for each domain + integer, allocatable :: indices(:,:) ! List of material indices for each domain + integer, allocatable :: hits(:,:) ! Number of hits for each material in each domain + logical :: found_cell + type(Particle) :: p + + ! Shared variables + integer :: i_start, i_end ! Starting/ending sample for each process + type(VectorInt) :: master_indices(size(this % domain_id)) + type(VectorInt) :: master_hits(size(this % domain_id)) + + ! Variables used outside of parallel region + integer :: i_nuclide ! index in nuclides array + integer :: total_hits ! total hits for a single domain (summed over materials) + integer :: min_samples ! minimum number of samples per process + integer :: remainder ! leftover samples from uneven divide +#ifdef MPI + integer :: m ! index over materials + integer :: n ! number of materials + integer, allocatable :: data(:) ! array used to send number of hits +#endif + real(8) :: f ! fraction of hits + real(8) :: var_f ! variance of fraction of hits + real(8) :: volume_sample ! total volume of sampled region + real(8) :: atoms(2, size(nuclides)) + + ! Divide work over MPI processes + min_samples = this % samples / n_procs + remainder = mod(this % samples, n_procs) + if (rank < remainder) then + i_start = (min_samples + 1)*rank + i_end = i_start + min_samples + else + i_start = (min_samples + 1)*remainder + (rank - remainder)*min_samples + i_end = i_start + min_samples - 1 + end if + + call p % initialize() + +!$omp parallel private(i, j, k, i_domain, i_material, level, found_cell, & +!$omp& indices, hits, n_mat) firstprivate(p) + + ! Create space for material indices and number of hits for each + allocate(indices(size(this % domain_id), 8)) + allocate(hits(size(this % domain_id), 8)) + n_mat(:) = 0 + + call prn_set_stream(STREAM_VOLUME) + + ! ========================================================================== + ! SAMPLES LOCATIONS AND COUNT HITS + +!$omp do + SAMPLE_LOOP: do i = i_start, i_end + call set_particle_seed(i) + + p % n_coord = 1 + p % coord(1) % xyz(1) = this % lower_left(1) + prn()*(& + this % upper_right(1) - this % lower_left(1)) + p % coord(1) % xyz(2) = this % lower_left(2) + prn()*(& + this % upper_right(2) - this % lower_left(2)) + p % coord(1) % xyz(3) = this % lower_left(3) + prn()*(& + this % upper_right(3) - this % lower_left(3)) + p % coord(1) % uvw(:) = [HALF, HALF, HALF] + + ! If this location is not in the geometry at all, move on to the next + ! block + call find_cell(p, found_cell) + if (.not. found_cell) cycle + + if (this % domain_type == FILTER_MATERIAL) then + i_material = p % material + do i_domain = 1, size(this % domain_id) + if (i_material == materials(i_domain) % id) then + call check_hit(i_domain, i_material, indices, hits, n_mat) + end if + end do + + elseif (this % domain_type == FILTER_CELL) THEN + do level = 1, p % n_coord + do i_domain = 1, size(this % domain_id) + if (cells(p % coord(level) % cell) % id == this % domain_id(i_domain)) then + i_material = p % material + call check_hit(i_domain, i_material, indices, hits, n_mat) + end if + end do + end do + + elseif (this % domain_type == FILTER_UNIVERSE) then + do level = 1, p % n_coord + do i_domain = 1, size(this % domain_id) + if (universes(p % coord(level) % universe) % id == & + this % domain_id(i_domain)) then + i_material = p % material + call check_hit(i_domain, i_material, indices, hits, n_mat) + end if + end do + end do + + end if + end do SAMPLE_LOOP +!$omp end do + + ! ========================================================================== + ! REDUCE HITS ONTO MASTER THREAD + + ! At this point, each thread has its own pair of index/hits lists and we now + ! need to reduce them. OpenMP is not nearly smart enough to do this on its + ! own, so we have to manually reduce them. + +#ifdef _OPENMP +!$omp do ordered schedule(static) + THREAD_LOOP: do i = 1, omp_get_num_threads() +!$omp ordered + do i_domain = 1, size(this % domain_id) + INDEX_LOOP: do j = 1, n_mat(i_domain) + ! Check if this material has been added to the master list and if so, + ! accumulate the number of hits + do k = 1, master_indices(i_domain) % size() + if (indices(i_domain, j) == master_indices(i_domain) % data(k)) then + master_hits(i_domain) % data(k) = & + master_hits(i_domain) % data(k) + hits(i_domain, j) + cycle INDEX_LOOP + end if + end do + + ! If we made it here, this means the material hasn't yet been added to + ! the master list, so add an entry to both the master indices and master + ! hits lists + call master_indices(i_domain) % push_back(indices(i_domain, j)) + call master_hits(i_domain) % push_back(hits(i_domain, j)) + end do INDEX_LOOP + end do +!$omp end ordered + end do THREAD_LOOP +!$omp end do +#else + do i_domain = 1, size(this % domain_id) + do j = 1, n_mat(i_domain) + call master_indices(i_domain) % push_back(indices(i_domain, j)) + call master_hits(i_domain) % push_back(hits(i_domain, j)) + end do + end do +#endif + + call prn_set_stream(STREAM_TRACKING) +!$omp end parallel + + ! ========================================================================== + ! REDUCE HITS ONTO MASTER PROCESS + + volume_sample = product(this % upper_right - this % lower_left) + + do i_domain = 1, size(this % domain_id) + atoms(:, :) = ZERO + total_hits = 0 + + if (master) then +#ifdef MPI + do j = 1, n_procs - 1 + call MPI_RECV(n, 1, MPI_INTEGER, j, 0, MPI_COMM_WORLD, & + MPI_STATUS_IGNORE, mpi_err) + + allocate(data(2*n)) + call MPI_RECV(data, 2*n, MPI_INTEGER, j, 1, MPI_COMM_WORLD, & + MPI_STATUS_IGNORE, mpi_err) + do k = 0, n - 1 + do m = 1, master_indices(i_domain) % size() + if (data(2*k + 1) == master_indices(i_domain) % data(m)) then + master_hits(i_domain) % data(m) = master_hits(i_domain) % data(m) + & + data(2*k + 2) + end if + end do + end do + deallocate(data) + end do +#endif + + do j = 1, master_indices(i_domain) % size() + total_hits = total_hits + master_hits(i_domain) % data(j) + f = real(master_hits(i_domain) % data(j), 8) / this % samples + var_f = f*(ONE - f) / this % samples + + i_material = master_indices(i_domain) % data(j) + if (i_material == MATERIAL_VOID) cycle + + associate (mat => materials(i_material)) + do k = 1, size(mat % nuclide) + ! Accumulate nuclide density + i_nuclide = mat % nuclide(k) + atoms(1, i_nuclide) = atoms(1, i_nuclide) + & + mat % atom_density(k) * f + atoms(2, i_nuclide) = atoms(2, i_nuclide) + & + mat % atom_density(k)**2 * var_f + end do + end associate + end do + + ! Determine volume + volume(1, i_domain) = real(total_hits, 8) / this % samples * volume_sample + volume(2, i_domain) = sqrt(volume(1, i_domain) * (volume_sample - & + volume(1, i_domain)) / this % samples) + + ! Determine total number of atoms. At this point, we have values in + ! atoms/b-cm. To get to atoms we multiple by 10^24 V. + do j = 1, size(atoms, 2) + atoms(1, j) = 1.0e24_8 * volume_sample * atoms(1, j) + atoms(2, j) = 1.0e24_8 * volume_sample * sqrt(atoms(2, j)) + end do + + ! Convert full arrays to vectors + do j = 1, size(nuclides) + if (atoms(1, j) > ZERO) then + call nuclide_vec(i_domain) % push_back(j) + call atoms_vec(i_domain) % push_back(atoms(1, j)) + call uncertainty_vec(i_domain) % push_back(atoms(2, j)) + end if + end do + + else +#ifdef MPI + n = master_indices(i_domain) % size() + allocate(data(2*n)) + do k = 0, n - 1 + data(2*k + 1) = master_indices(i_domain) % data(k + 1) + data(2*k + 2) = master_hits(i_domain) % data(k + 1) + end do + + call MPI_SEND(n, 1, MPI_INTEGER, 0, 0, MPI_COMM_WORLD, mpi_err) + call MPI_SEND(data, 2*n, MPI_INTEGER, 0, 1, MPI_COMM_WORLD, mpi_err) + deallocate(data) +#endif + end if + end do + + contains + + !=========================================================================== + ! CHECK_HIT is an internal subroutine that checks for whether a material has + ! already been hit for a given domain. If not, it increases the list size by + ! one (taking care of re-allocation if needed). + !=========================================================================== + + subroutine check_hit(i_domain, i_material, indices, hits, n_mat) + integer :: i_domain + integer :: i_material + integer, allocatable :: indices(:,:) + integer, allocatable :: hits(:,:) + integer :: n_mat(:) + + integer, allocatable :: temp(:,:) + logical :: already_hit + integer :: j, k, nm + + ! Check if we've already had a hit in this material and if so, + ! simply add one + already_hit = .false. + nm = n_mat(i_domain) + do j = 1, nm + if (indices(i_domain, j) == i_material) then + hits(i_domain, j) = hits(i_domain, j) + 1 + already_hit = .true. + end if + end do + + if (.not. already_hit) then + ! If we make it here, that means we haven't yet had a hit in this + ! material. First check if the indices and hits arrays are large enough + ! and if not, double them. + if (nm == size(indices, 2)) then + k = 2*size(indices, 2) + allocate(temp(size(this % domain_id), k)) + temp(:, 1:nm) = indices(:, 1:nm) + call move_alloc(FROM=temp, TO=indices) + + allocate(temp(size(this % domain_id), k)) + temp(:, 1:nm) = hits(:, 1:nm) + call move_alloc(FROM=temp, TO=indices) + end if + + ! Add an entry to both the indices list and the hits list + n_mat(i_domain) = n_mat(i_domain) + 1 + indices(i_domain, n_mat(i_domain)) = i_material + hits(i_domain, n_mat(i_domain)) = 1 + end if + end subroutine check_hit + + end subroutine get_volume + +!=============================================================================== +! WRITE_VOLUME writes the results of a single stochastic volume calculation to +! an HDF5 file +!=============================================================================== + + subroutine write_volume(this, filename, volume, nuclide_vec, atoms_vec, & + uncertainty_vec) + type(VolumeCalculation), intent(in) :: this + character(*), intent(in) :: filename ! filename for HDF5 file + real(8), intent(in) :: volume(:,:) ! volume mean/stdev in each domain + type(VectorInt), intent(in) :: nuclide_vec(:) ! indices in nuclides array + type(VectorReal), intent(in) :: atoms_vec(:) ! total # of atoms of each nuclide + type(VectorReal), intent(in) :: uncertainty_vec(:) ! uncertainty of total # of atoms + + integer :: i, j + integer :: n + integer(HID_T) :: file_id + integer(HID_T) :: group_id + real(8), allocatable :: atom_data(:,:) ! mean/stdev of total # of atoms for + ! each nuclide + character(MAX_WORD_LEN), allocatable :: nucnames(:) ! names of nuclides + + ! Create HDF5 file + file_id = file_create(filename) + + ! Write basic metadata + select case (this % domain_type) + case (FILTER_CELL) + call write_attribute_string(file_id, ".", "domain_type", "cell") + case (FILTER_MATERIAL) + call write_attribute_string(file_id, ".", "domain_type", "material") + case (FILTER_UNIVERSE) + call write_attribute_string(file_id, ".", "domain_type", "universe") + end select + call write_attribute(file_id, "samples", this % samples) + call write_attribute(file_id, "lower_left", this % lower_left) + call write_attribute(file_id, "upper_right", this % upper_right) + + do i = 1, size(this % domain_id) + group_id = create_group(file_id, "domain_" // trim(to_str(& + this % domain_id(i)))) + + ! Write volume for domain + call write_dataset(group_id, "volume", volume(:, i)) + + ! Create array of nuclide names from the vector + n = nuclide_vec(i) % size() + if (n > 0) then + allocate(nucnames(n)) + do j = 1, n + nucnames(j) = nuclides(nuclide_vec(i) % data(j)) % name + end do + + ! Create array of total # of atoms with uncertainty for each nuclide + allocate(atom_data(2, n)) + atom_data(1, :) = atoms_vec(i) % data(1:n) + atom_data(2, :) = uncertainty_vec(i) % data(1:n) + + ! Write results + call write_dataset(group_id, "nuclides", nucnames) + call write_dataset(group_id, "atoms", atom_data) + + deallocate(nucnames) + deallocate(atom_data) + end if + + call close_group(group_id) + end do + call file_close(file_id) + end subroutine write_volume + +end module volume_calc diff --git a/src/volume_header.F90 b/src/volume_header.F90 new file mode 100644 index 0000000000..c70345f155 --- /dev/null +++ b/src/volume_header.F90 @@ -0,0 +1,59 @@ +module volume_header + + use constants, only: FILTER_CELL, FILTER_MATERIAL, FILTER_UNIVERSE + use error, only: fatal_error + use xml_interface + + implicit none + + type VolumeCalculation + integer :: domain_type + integer, allocatable :: domain_id(:) + real(8) :: lower_left(3) + real(8) :: upper_right(3) + integer :: samples + contains + procedure :: from_xml => volume_from_xml + end type VolumeCalculation + +contains + + subroutine volume_from_xml(this, node_vol) + class(VolumeCalculation), intent(out) :: this + type(Node), pointer :: node_vol + + integer :: num_domains + character(10) :: temp_str + + ! Check domain type + call get_node_value(node_vol, "domain_type", temp_str) + select case (temp_str) + case ('cell') + this % domain_type = FILTER_CELL + case ('material') + this % domain_type = FILTER_MATERIAL + case ('universe') + this % domain_type = FILTER_UNIVERSE + case default + call fatal_error("Unrecognized domain type for stochastic volume & + &calculation: " // trim(temp_str)) + end select + + ! Read cell IDs + if (check_for_node(node_vol, "domain_ids")) then + num_domains = get_arraysize_integer(node_vol, "domain_ids") + else + call fatal_error("Must specify at least one cell for a volume calculation") + end if + allocate(this % domain_id(num_domains)) + call get_node_array(node_vol, "domain_ids", this % domain_id) + + ! Read lower-left and upper-right bounding coordinates + call get_node_array(node_vol, "lower_left", this % lower_left) + call get_node_array(node_vol, "upper_right", this % upper_right) + + ! Read number of samples + call get_node_value(node_vol, "samples", this % samples) + end subroutine volume_from_xml + +end module volume_header diff --git a/tests/1d_mgxs.xml b/tests/1d_mgxs.xml index 33b20464b6..8704b49ad4 100644 --- a/tests/1d_mgxs.xml +++ b/tests/1d_mgxs.xml @@ -4,8 +4,8 @@ 0.0000000E+00 2.0000000E+01 - uo2_iso.71c - uo2_iso.71c + uo2_iso + uo2_iso 2.5300000E-08 5 true @@ -44,8 +44,8 @@ - clad_iso.71c - clad_iso.71c + clad_iso + clad_iso 2.5300000E-08 5 false @@ -75,8 +75,8 @@ - lwtr_iso.71c - lwtr_iso.71c + lwtr_iso + lwtr_iso 2.5300000E-08 5 false @@ -106,8 +106,8 @@ - uo2_iso_mu.71c - uo2_iso_mu.71c + uo2_iso_mu + uo2_iso_mu 2.5300000E-08 32 true @@ -199,8 +199,8 @@ - clad_iso_mu.71c - clad_iso_mu.71c + clad_iso_mu + clad_iso_mu 2.5300000E-08 32 false @@ -283,8 +283,8 @@ - lwtr_iso_mu.71c - lwtr_iso_mu.71c + lwtr_iso_mu + lwtr_iso_mu 2.5300000E-08 32 false @@ -367,8 +367,8 @@ - uo2_ang.71c - uo2_ang.71c + uo2_ang + uo2_ang 2.5300000E-08 5 true @@ -1246,8 +1246,8 @@ - clad_ang.71c - clad_ang.71c + clad_ang + clad_ang 2.5300000E-08 5 false @@ -1930,8 +1930,8 @@ - lwtr_ang.71c - lwtr_ang.71c + lwtr_ang + lwtr_ang 2.5300000E-08 5 false @@ -2614,8 +2614,8 @@ - uo2_ang_mu.71c - uo2_ang_mu.71c + uo2_ang_mu + uo2_ang_mu 2.5300000E-08 32 true @@ -5158,8 +5158,8 @@ - clad_ang_mu.71c - clad_ang_mu.71c + clad_ang_mu + clad_ang_mu 2.5300000E-08 32 false @@ -7507,8 +7507,8 @@ - lwtr_ang_mu.71c - lwtr_ang_mu.71c + lwtr_ang_mu + lwtr_ang_mu 2.5300000E-08 32 false diff --git a/tests/input_set.py b/tests/input_set.py index 827484022d..94576acf0d 100644 --- a/tests/input_set.py +++ b/tests/input_set.py @@ -2,6 +2,7 @@ import openmc from openmc.source import Source from openmc.stats import Box +import numpy as np class InputSet(object): def __init__(self): @@ -73,7 +74,7 @@ class InputSet(object): cold_water.add_nuclide("O16", 1.0) cold_water.add_nuclide("B10", 6.490e-4) cold_water.add_nuclide("B11", 2.689e-3) - cold_water.add_s_alpha_beta('c_H_in_H2O', '71t') + cold_water.add_s_alpha_beta('c_H_in_H2O') hot_water = openmc.Material(name='Hot borated water', material_id=4) hot_water.set_density('atom/b-cm', 0.06614) @@ -81,7 +82,7 @@ class InputSet(object): hot_water.add_nuclide("O16", 1.0) hot_water.add_nuclide("B10", 6.490e-4) hot_water.add_nuclide("B11", 2.689e-3) - hot_water.add_s_alpha_beta('c_H_in_H2O', '71t') + hot_water.add_s_alpha_beta('c_H_in_H2O') rpv_steel = openmc.Material(name='Reactor pressure vessel steel', material_id=5) @@ -138,7 +139,7 @@ class InputSet(object): lower_rad_ref.add_nuclide("Cr52", 0.145407678031, 'wo') lower_rad_ref.add_nuclide("Cr53", 0.016806340306, 'wo') lower_rad_ref.add_nuclide("Cr54", 0.004261520857, 'wo') - lower_rad_ref.add_s_alpha_beta('c_H_in_H2O', '71t') + lower_rad_ref.add_s_alpha_beta('c_H_in_H2O') upper_rad_ref = openmc.Material(name='Upper radial reflector /' 'Top plate region', material_id=7) @@ -164,7 +165,7 @@ class InputSet(object): upper_rad_ref.add_nuclide("Cr52", 0.146766614995, 'wo') upper_rad_ref.add_nuclide("Cr53", 0.01696340737, 'wo') upper_rad_ref.add_nuclide("Cr54", 0.004301347765, 'wo') - upper_rad_ref.add_s_alpha_beta('c_H_in_H2O', '71t') + upper_rad_ref.add_s_alpha_beta('c_H_in_H2O') bot_plate = openmc.Material(name='Bottom plate region', material_id=8) bot_plate.set_density('g/cm3', 7.184) @@ -189,7 +190,7 @@ class InputSet(object): bot_plate.add_nuclide("Cr52", 0.157390026871, 'wo') bot_plate.add_nuclide("Cr53", 0.018191270146, 'wo') bot_plate.add_nuclide("Cr54", 0.004612692337, 'wo') - bot_plate.add_s_alpha_beta('c_H_in_H2O', '71t') + bot_plate.add_s_alpha_beta('c_H_in_H2O') bot_nozzle = openmc.Material(name='Bottom nozzle region', material_id=9) @@ -215,7 +216,7 @@ class InputSet(object): bot_nozzle.add_nuclide("Cr52", 0.124142524198, 'wo') bot_nozzle.add_nuclide("Cr53", 0.014348496148, 'wo') bot_nozzle.add_nuclide("Cr54", 0.003638294506, 'wo') - bot_nozzle.add_s_alpha_beta('c_H_in_H2O', '71t') + bot_nozzle.add_s_alpha_beta('c_H_in_H2O') top_nozzle = openmc.Material(name='Top nozzle region', material_id=10) top_nozzle.set_density('g/cm3', 1.746) @@ -240,7 +241,7 @@ class InputSet(object): top_nozzle.add_nuclide("Cr52", 0.107931450781, 'wo') top_nozzle.add_nuclide("Cr53", 0.012474806806, 'wo') top_nozzle.add_nuclide("Cr54", 0.003163190107, 'wo') - top_nozzle.add_s_alpha_beta('c_H_in_H2O', '71t') + top_nozzle.add_s_alpha_beta('c_H_in_H2O') top_fa = openmc.Material(name='Top of fuel assemblies', material_id=11) top_fa.set_density('g/cm3', 3.044) @@ -253,7 +254,7 @@ class InputSet(object): top_fa.add_nuclide("Zr92", 0.14759527104, 'wo') top_fa.add_nuclide("Zr94", 0.15280552077, 'wo') top_fa.add_nuclide("Zr96", 0.02511169542, 'wo') - top_fa.add_s_alpha_beta('c_H_in_H2O', '71t') + top_fa.add_s_alpha_beta('c_H_in_H2O') bot_fa = openmc.Material(name='Bottom of fuel assemblies', material_id=12) @@ -267,10 +268,9 @@ class InputSet(object): bot_fa.add_nuclide("Zr92", 0.1274914944, 'wo') bot_fa.add_nuclide("Zr94", 0.1319920622, 'wo') bot_fa.add_nuclide("Zr96", 0.0216912612, 'wo') - bot_fa.add_s_alpha_beta('c_H_in_H2O', '71t') + bot_fa.add_s_alpha_beta('c_H_in_H2O') # Define the materials file. - self.materials.default_xs = '71c' self.materials += (fuel, clad, cold_water, hot_water, rpv_steel, lower_rad_ref, upper_rad_ref, bot_plate, bot_nozzle, top_nozzle, top_fa, bot_fa) @@ -611,10 +611,9 @@ class PinCellInputSet(object): hot_water.add_nuclide("O16", 2.4672e-2) hot_water.add_nuclide("B10", 8.0042e-6) hot_water.add_nuclide("B11", 3.2218e-5) - hot_water.add_s_alpha_beta('c_H_in_H2O', '71t') + hot_water.add_s_alpha_beta('c_H_in_H2O') # Define the materials file. - self.materials.default_xs = '71c' self.materials += (fuel, clad, hot_water) # Instantiate ZCylinder surfaces @@ -673,26 +672,176 @@ class PinCellInputSet(object): self.plots.add_plot(plot) +class AssemblyInputSet(object): + def __init__(self): + self.settings = openmc.Settings() + self.materials = openmc.Materials() + self.geometry = openmc.Geometry() + self.tallies = None + self.plots = None + + def export(self): + self.settings.export_to_xml() + self.materials.export_to_xml() + self.geometry.export_to_xml() + if self.tallies is not None: + self.tallies.export_to_xml() + if self.plots is not None: + self.plots.export_to_xml() + + def build_default_materials_and_geometry(self): + # Define materials. + fuel = openmc.Material(name='Fuel') + fuel.set_density('g/cm3', 10.29769) + fuel.add_nuclide("U234", 4.4843e-6) + fuel.add_nuclide("U235", 5.5815e-4) + fuel.add_nuclide("U238", 2.2408e-2) + fuel.add_nuclide("O16", 4.5829e-2) + + clad = openmc.Material(name='Cladding') + clad.set_density('g/cm3', 6.55) + clad.add_nuclide("Zr90", 2.1827e-2) + clad.add_nuclide("Zr91", 4.7600e-3) + clad.add_nuclide("Zr92", 7.2758e-3) + clad.add_nuclide("Zr94", 7.3734e-3) + clad.add_nuclide("Zr96", 1.1879e-3) + + hot_water = openmc.Material(name='Hot borated water') + hot_water.set_density('g/cm3', 0.740582) + hot_water.add_nuclide("H1", 4.9457e-2) + hot_water.add_nuclide("O16", 2.4672e-2) + hot_water.add_nuclide("B10", 8.0042e-6) + hot_water.add_nuclide("B11", 3.2218e-5) + hot_water.add_s_alpha_beta('c_H_in_H2O') + + # Define the materials file. + self.materials += (fuel, clad, hot_water) + + # Instantiate ZCylinder surfaces + fuel_or = openmc.ZCylinder(x0=0, y0=0, R=0.39218, name='Fuel OR') + clad_or = openmc.ZCylinder(x0=0, y0=0, R=0.45720, name='Clad OR') + + # Create boundary planes to surround the geometry + min_x = openmc.XPlane(x0=-10.71, boundary_type='reflective') + max_x = openmc.XPlane(x0=+10.71, boundary_type='reflective') + min_y = openmc.YPlane(y0=-10.71, boundary_type='reflective') + max_y = openmc.YPlane(y0=+10.71, boundary_type='reflective') + + # Create a Universe to encapsulate a fuel pin + fuel_pin_universe = openmc.Universe(name='Fuel Pin') + + # Create fuel Cell + fuel_cell = openmc.Cell(name='fuel') + fuel_cell.fill = fuel + fuel_cell.region = -fuel_or + fuel_pin_universe.add_cell(fuel_cell) + + # Create a clad Cell + clad_cell = openmc.Cell(name='clad') + clad_cell.fill = clad + clad_cell.region = +fuel_or & -clad_or + fuel_pin_universe.add_cell(clad_cell) + + # Create a moderator Cell + hot_water_cell = openmc.Cell(name='hot water') + hot_water_cell.fill = hot_water + hot_water_cell.region = +clad_or + fuel_pin_universe.add_cell(hot_water_cell) + + # Create a Universe to encapsulate a control rod guide tube + guide_tube_universe = openmc.Universe(name='Guide Tube') + + # Create guide tube inner Cell + gt_inner_cell = openmc.Cell(name='guide tube inner water') + gt_inner_cell.fill = hot_water + gt_inner_cell.region = -fuel_or + guide_tube_universe.add_cell(gt_inner_cell) + + # Create a clad Cell + gt_clad_cell = openmc.Cell(name='guide tube clad') + gt_clad_cell.fill = clad + gt_clad_cell.region = +fuel_or & -clad_or + guide_tube_universe.add_cell(gt_clad_cell) + + # Create a guide tube outer Cell + gt_outer_cell = openmc.Cell(name='guide tube outer water') + gt_outer_cell.fill = hot_water + gt_outer_cell.region = +clad_or + guide_tube_universe.add_cell(gt_outer_cell) + + # Create fuel assembly Lattice + assembly = openmc.RectLattice(name='Fuel Assembly') + assembly.pitch = (1.26, 1.26) + assembly.lower_left = [-1.26 * 17. / 2.0] * 2 + + # Create array indices for guide tube locations in lattice + template_x = np.array([5, 8, 11, 3, 13, 2, 5, 8, 11, 14, 2, 5, 8, + 11, 14, 2, 5, 8, 11, 14, 3, 13, 5, 8, 11]) + template_y = np.array([2, 2, 2, 3, 3, 5, 5, 5, 5, 5, 8, 8, 8, 8, + 8, 11, 11, 11, 11, 11, 13, 13, 14, 14, 14]) + + # Initialize an empty 17x17 array of the lattice universes + universes = np.empty((17, 17), dtype=openmc.Universe) + + # Fill the array with the fuel pin and guide tube universes + universes[:,:] = fuel_pin_universe + universes[template_x, template_y] = guide_tube_universe + + # Store the array of universes in the lattice + assembly.universes = universes + + # Create root Cell + root_cell = openmc.Cell(name='root cell') + root_cell.fill = assembly + + # Add boundary planes + root_cell.region = +min_x & -max_x & +min_y & -max_y + + # Create root Universe + root_universe = openmc.Universe(universe_id=0, name='root universe') + root_universe.add_cell(root_cell) + + # Instantiate a Geometry, register the root Universe, and export to XML + self.geometry.root_universe = root_universe + + def build_default_settings(self): + self.settings.batches = 10 + self.settings.inactive = 5 + self.settings.particles = 100 + self.settings.source = Source(space=Box([-10.71, -10.71, -1], + [10.71, 10.71, 1], + only_fissionable=True)) + + def build_defualt_plots(self): + plot = openmc.Plot() + plot.filename = 'mat' + plot.origin = (0.0, 0.0, 0) + plot.width = (21.42, 21.42) + plot.pixels = (300, 300) + plot.color = 'mat' + + self.plots.add_plot(plot) + + class MGInputSet(InputSet): def build_default_materials_and_geometry(self): # Define materials needed for 1D/1G slab problem - uo2_data = openmc.Macroscopic('uo2_iso', '71c') + uo2_data = openmc.Macroscopic('uo2_iso') uo2 = openmc.Material(name='UO2', material_id=1) uo2.set_density('macro', 1.0) uo2.add_macroscopic(uo2_data) - clad_data = openmc.Macroscopic('clad_ang_mu', '71c') + clad_data = openmc.Macroscopic('clad_ang_mu') clad = openmc.Material(name='Clad', material_id=2) clad.set_density('macro', 1.0) clad.add_macroscopic(clad_data) - water_data = openmc.Macroscopic('lwtr_iso_mu', '71c') + water_data = openmc.Macroscopic('lwtr_iso_mu') water = openmc.Material(name='LWTR', material_id=3) water.set_density('macro', 1.0) water.add_macroscopic(water_data) # Define the materials file. - self.materials.default_xs = '71c' self.materials += (uo2, clad, water) # Define surfaces. diff --git a/tests/test_asymmetric_lattice/inputs_true.dat b/tests/test_asymmetric_lattice/inputs_true.dat index d503a3a0bb..9d278724f8 100644 --- a/tests/test_asymmetric_lattice/inputs_true.dat +++ b/tests/test_asymmetric_lattice/inputs_true.dat @@ -1 +1 @@ -a55899cd2ed0a8ec5d44003139da639f87f5f03ee76b2d6577db6a8c2014849e4277f8e68fa874ac6795e4cbc4eb6e4031d726cafe6e663e84787d1ecd8e7f86 \ No newline at end of file +dfb59bace10a91bb7ffc871d8ee87e91d94754bb8bb002ac6088f80fe0f480741c0489f74b753fc37158d0ff0f1368739ea60638b42083791311eefeac79168e \ No newline at end of file diff --git a/tests/test_cmfd_feed/materials.xml b/tests/test_cmfd_feed/materials.xml index 8f32169d92..70580e3a8d 100644 --- a/tests/test_cmfd_feed/materials.xml +++ b/tests/test_cmfd_feed/materials.xml @@ -1,12 +1,12 @@ - + - - - + + + diff --git a/tests/test_cmfd_feed/results_true.dat b/tests/test_cmfd_feed/results_true.dat index 4579fa5459..5fb87e5a3d 100644 --- a/tests/test_cmfd_feed/results_true.dat +++ b/tests/test_cmfd_feed/results_true.dat @@ -124,92 +124,8 @@ tally 3: 1.020705E+00 5.413570E-02 tally 4: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 3.049469E+00 4.677325E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.514939E+00 -1.528899E+00 2.770358E+00 3.879191E-01 0.000000E+00 @@ -222,6 +138,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +5.514939E+00 +1.528899E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -230,34 +148,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.294002E+00 -2.675589E+00 +5.514939E+00 +1.528899E+00 5.032131E+00 1.275040E+00 0.000000E+00 @@ -268,6 +160,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +2.770358E+00 +3.879191E-01 +7.294002E+00 +2.675589E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -276,36 +172,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.668860E+00 -3.776102E+00 +7.294002E+00 +2.675589E+00 7.036008E+00 2.490719E+00 0.000000E+00 @@ -316,6 +184,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +5.032131E+00 +1.275040E+00 +8.668860E+00 +3.776102E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -324,36 +196,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.345868E+00 -4.380719E+00 +8.668860E+00 +3.776102E+00 8.352414E+00 3.501945E+00 0.000000E+00 @@ -364,6 +208,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +7.036008E+00 +2.490719E+00 +9.345868E+00 +4.380719E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -372,36 +220,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.223771E+00 -4.270119E+00 +9.345868E+00 +4.380719E+00 9.093766E+00 4.158282E+00 0.000000E+00 @@ -412,6 +232,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +8.352414E+00 +3.501945E+00 +9.223771E+00 +4.270119E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -420,36 +244,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.530966E+00 -3.651778E+00 +9.223771E+00 +4.270119E+00 9.219150E+00 4.264346E+00 0.000000E+00 @@ -460,6 +256,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +9.093766E+00 +4.158282E+00 +8.530966E+00 +3.651778E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -468,36 +268,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.204424E+00 -2.604203E+00 +8.530966E+00 +3.651778E+00 8.690373E+00 3.785262E+00 0.000000E+00 @@ -508,6 +280,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +9.219150E+00 +4.264346E+00 +7.204424E+00 +2.604203E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -516,36 +292,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.326721E+00 -1.426975E+00 +7.204424E+00 +2.604203E+00 7.513640E+00 2.833028E+00 0.000000E+00 @@ -556,6 +304,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +8.690373E+00 +3.785262E+00 +5.326721E+00 +1.426975E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -564,6 +316,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +5.326721E+00 +1.426975E+00 +5.661144E+00 +1.607138E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -572,18 +328,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +7.513640E+00 +2.833028E+00 +2.847310E+00 +4.090440E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -594,6 +342,16 @@ tally 4: 0.000000E+00 2.847310E+00 4.090440E-01 +3.025812E+00 +4.597241E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 5.661144E+00 1.607138E+00 0.000000E+00 @@ -642,8 +400,778 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -3.025812E+00 -4.597241E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/tests/test_cmfd_nofeed/materials.xml b/tests/test_cmfd_nofeed/materials.xml index 8f32169d92..70580e3a8d 100644 --- a/tests/test_cmfd_nofeed/materials.xml +++ b/tests/test_cmfd_nofeed/materials.xml @@ -1,12 +1,12 @@ - + - - - + + + diff --git a/tests/test_cmfd_nofeed/results_true.dat b/tests/test_cmfd_nofeed/results_true.dat index d8a17d676b..91da28751f 100644 --- a/tests/test_cmfd_nofeed/results_true.dat +++ b/tests/test_cmfd_nofeed/results_true.dat @@ -124,92 +124,8 @@ tally 3: 9.213728E-01 4.422001E-02 tally 4: -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 3.090000E+00 4.810640E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.555000E+00 -1.551579E+00 2.833000E+00 4.078910E-01 0.000000E+00 @@ -222,6 +138,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +5.555000E+00 +1.551579E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -230,34 +148,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.271000E+00 -2.659755E+00 +5.555000E+00 +1.551579E+00 5.095000E+00 1.310819E+00 0.000000E+00 @@ -268,6 +160,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +2.833000E+00 +4.078910E-01 +7.271000E+00 +2.659755E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -276,36 +172,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.577000E+00 -3.703215E+00 +7.271000E+00 +2.659755E+00 7.026000E+00 2.486552E+00 0.000000E+00 @@ -316,6 +184,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +5.095000E+00 +1.310819E+00 +8.577000E+00 +3.703215E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -324,36 +196,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.393000E+00 -4.422429E+00 +8.577000E+00 +3.703215E+00 8.572000E+00 3.680852E+00 0.000000E+00 @@ -364,6 +208,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +7.026000E+00 +2.486552E+00 +9.393000E+00 +4.422429E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -372,36 +220,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.265000E+00 -4.305625E+00 +9.393000E+00 +4.422429E+00 9.261000E+00 4.304411E+00 0.000000E+00 @@ -412,6 +232,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +8.572000E+00 +3.680852E+00 +9.265000E+00 +4.305625E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -420,36 +244,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.535000E+00 -3.659395E+00 +9.265000E+00 +4.305625E+00 9.303000E+00 4.350791E+00 0.000000E+00 @@ -460,6 +256,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +9.261000E+00 +4.304411E+00 +8.535000E+00 +3.659395E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -468,36 +268,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.104000E+00 -2.544182E+00 +8.535000E+00 +3.659395E+00 8.693000E+00 3.799545E+00 0.000000E+00 @@ -508,6 +280,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +9.303000E+00 +4.350791E+00 +7.104000E+00 +2.544182E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -516,36 +292,8 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.168000E+00 -1.344390E+00 +7.104000E+00 +2.544182E+00 7.334000E+00 2.700052E+00 0.000000E+00 @@ -556,6 +304,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +8.693000E+00 +3.799545E+00 +5.168000E+00 +1.344390E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -564,6 +316,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 +5.168000E+00 +1.344390E+00 +5.416000E+00 +1.471086E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -572,18 +328,10 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +7.334000E+00 +2.700052E+00 +2.724000E+00 +3.745680E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -594,6 +342,16 @@ tally 4: 0.000000E+00 2.724000E+00 3.745680E-01 +2.960000E+00 +4.397840E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 5.416000E+00 1.471086E+00 0.000000E+00 @@ -642,8 +400,778 @@ tally 4: 0.000000E+00 0.000000E+00 0.000000E+00 -2.960000E+00 -4.397840E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/tests/test_complex_cell/materials.xml b/tests/test_complex_cell/materials.xml index a9e69b8bc6..6edf0a5f9c 100644 --- a/tests/test_complex_cell/materials.xml +++ b/tests/test_complex_cell/materials.xml @@ -1,8 +1,6 @@ - 71c - diff --git a/tests/test_confidence_intervals/materials.xml b/tests/test_confidence_intervals/materials.xml index 23d7f969db..0965c8783c 100644 --- a/tests/test_confidence_intervals/materials.xml +++ b/tests/test_confidence_intervals/materials.xml @@ -2,8 +2,9 @@ + 294 - + diff --git a/tests/test_density/materials.xml b/tests/test_density/materials.xml index c474c5c65c..7b49233ed7 100644 --- a/tests/test_density/materials.xml +++ b/tests/test_density/materials.xml @@ -3,24 +3,24 @@ - + - + - + - - - + + + diff --git a/tests/test_distribmat/inputs_true.dat b/tests/test_distribmat/inputs_true.dat index 1212a28e59..d21da2f894 100644 --- a/tests/test_distribmat/inputs_true.dat +++ b/tests/test_distribmat/inputs_true.dat @@ -1 +1 @@ -46df57157980545d90b482acfb01f525b84c0e623fa93a5d9c08a65723d677ef1c092360219a3c7fcf5110c6ba32f1eacbd5c5eaed40be4bfe154f302400c0a4 \ No newline at end of file +6ae54c198e7659503d297e40be746a5bd72b35909fceed4b3ef357876b781946c0ea5021342556ef21f4034fa9e42b2c6014077c0efd3459dc063e6da4b12b59 \ No newline at end of file diff --git a/tests/test_distribmat/test_distribmat.py b/tests/test_distribmat/test_distribmat.py index a8d013996e..ec19176c49 100644 --- a/tests/test_distribmat/test_distribmat.py +++ b/tests/test_distribmat/test_distribmat.py @@ -29,7 +29,6 @@ class DistribmatTestHarness(PyAPITestHarness): light_fuel.add_nuclide('U235', 1.0) mats_file = openmc.Materials([moderator, dense_fuel, light_fuel]) - mats_file.default_xs = '71c' mats_file.export_to_xml() diff --git a/tests/test_eigenvalue_genperbatch/materials.xml b/tests/test_eigenvalue_genperbatch/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_eigenvalue_genperbatch/materials.xml +++ b/tests/test_eigenvalue_genperbatch/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_eigenvalue_no_inactive/materials.xml b/tests/test_eigenvalue_no_inactive/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_eigenvalue_no_inactive/materials.xml +++ b/tests/test_eigenvalue_no_inactive/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_energy_grid/materials.xml b/tests/test_energy_grid/materials.xml index ed9b38d901..87a3b8fe1c 100644 --- a/tests/test_energy_grid/materials.xml +++ b/tests/test_energy_grid/materials.xml @@ -3,9 +3,9 @@ - - - + + + diff --git a/tests/test_energy_grid/settings.xml b/tests/test_energy_grid/settings.xml index f925356a91..1e4b5937b8 100644 --- a/tests/test_energy_grid/settings.xml +++ b/tests/test_energy_grid/settings.xml @@ -1,7 +1,7 @@ - nuclide + 20000 10 diff --git a/tests/test_energy_laws/materials.xml b/tests/test_energy_laws/materials.xml index c70e071cff..e63f4018c3 100644 --- a/tests/test_energy_laws/materials.xml +++ b/tests/test_energy_laws/materials.xml @@ -1,6 +1,5 @@ - 71c diff --git a/tests/test_entropy/materials.xml b/tests/test_entropy/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_entropy/materials.xml +++ b/tests/test_entropy/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_filter_distribcell/case-1/materials.xml b/tests/test_filter_distribcell/case-1/materials.xml index 891cc9fd0e..e7108b477f 100644 --- a/tests/test_filter_distribcell/case-1/materials.xml +++ b/tests/test_filter_distribcell/case-1/materials.xml @@ -1,8 +1,6 @@ - 71c - diff --git a/tests/test_filter_distribcell/case-2/materials.xml b/tests/test_filter_distribcell/case-2/materials.xml index 891cc9fd0e..794d410a32 100644 --- a/tests/test_filter_distribcell/case-2/materials.xml +++ b/tests/test_filter_distribcell/case-2/materials.xml @@ -1,9 +1,6 @@ - 71c - - diff --git a/tests/test_filter_distribcell/case-3/materials.xml b/tests/test_filter_distribcell/case-3/materials.xml index 6a5916a837..5889122717 100644 --- a/tests/test_filter_distribcell/case-3/materials.xml +++ b/tests/test_filter_distribcell/case-3/materials.xml @@ -1,8 +1,6 @@ - 71c - diff --git a/tests/test_filter_distribcell/case-4/materials.xml b/tests/test_filter_distribcell/case-4/materials.xml index ab9f8688ed..2eb744fe64 100644 --- a/tests/test_filter_distribcell/case-4/materials.xml +++ b/tests/test_filter_distribcell/case-4/materials.xml @@ -1,18 +1,19 @@ - 71c - - - + + + - - - - - + + + + + + - - - + + + + diff --git a/tests/test_filter_mesh_2d/materials.xml b/tests/test_filter_mesh_2d/materials.xml index f5a9e61bea..8021f5f99e 100644 --- a/tests/test_filter_mesh_2d/materials.xml +++ b/tests/test_filter_mesh_2d/materials.xml @@ -1,8 +1,6 @@ - 71c - @@ -59,7 +57,7 @@ - + @@ -69,7 +67,7 @@ - + @@ -128,7 +126,7 @@ - + @@ -155,7 +153,7 @@ - + @@ -182,7 +180,7 @@ - + @@ -209,7 +207,7 @@ - + @@ -236,7 +234,7 @@ - + @@ -251,7 +249,7 @@ - + @@ -266,7 +264,7 @@ - + diff --git a/tests/test_filter_mesh_2d/results_true.dat b/tests/test_filter_mesh_2d/results_true.dat index f4c5979526..e223464e5d 100644 --- a/tests/test_filter_mesh_2d/results_true.dat +++ b/tests/test_filter_mesh_2d/results_true.dat @@ -19,6 +19,82 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.486634E-01 +2.561523E-02 +5.574899E-01 +1.049542E-01 +7.713789E-01 +2.948263E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.149324E-01 +1.320945E-02 +2.001407E+00 +1.600000E+00 +9.572791E-01 +8.942065E-01 +0.000000E+00 +0.000000E+00 +2.501129E-02 +6.255649E-04 +1.484996E-01 +2.205214E-02 +3.079994E-03 +9.486363E-06 +1.090478E+00 +5.381842E-01 +4.235354E+00 +5.638989E+00 +3.267703E-01 +4.763836E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.465048E-02 +3.049063E-04 +7.159080E-01 +2.988090E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.984785E-01 +1.486414E-01 +9.889831E-01 +3.657975E-01 +1.492571E+00 +6.318792E-01 +6.314497E-01 +1.552199E-01 +2.034493E+00 +1.162774E+00 +1.252153E+00 +4.563949E-01 +3.452042E-02 +1.191659E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -39,6 +115,186 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.251028E-01 +1.306358E-02 +2.850134E+00 +2.250972E+00 +2.083542E+00 +1.599782E+00 +3.417016E+00 +2.972256E+00 +1.533605E+00 +8.644495E-01 +1.962807E-01 +2.410165E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.131352E-01 +6.756111E-02 +2.677440E+00 +2.382024E+00 +5.709899E+00 +7.095076E+00 +4.663027E+00 +5.641430E+00 +1.357567E+00 +4.362757E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.473499E-01 +1.206520E-01 +5.299733E-01 +2.205463E-01 +4.425042E-01 +5.854257E-02 +9.831996E-01 +4.846833E-01 +8.393183E-03 +7.044551E-05 +4.457483E-01 +5.194318E-02 +1.194169E+00 +4.790398E-01 +1.261505E+00 +7.705206E-01 +2.356462E-01 +3.082678E-02 +3.679762E-01 +1.354065E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.597805E-01 +1.297695E-02 +1.349846E+00 +6.808561E-01 +2.237774E+00 +1.109643E+00 +4.237107E-01 +6.002592E-02 +0.000000E+00 +0.000000E+00 +5.424180E-02 +2.942173E-03 +1.420269E-01 +2.017163E-02 +1.954689E+00 +9.874394E-01 +1.380025E+00 +4.289689E-01 +5.043842E-02 +2.544034E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.438568E-01 +1.597365E-02 +6.874433E-01 +2.287801E-01 +7.495196E-01 +1.939234E-01 +8.922533E-01 +2.835397E-01 +7.462571E-02 +5.568996E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.449729E-01 +2.101714E-02 +1.876891E-01 +1.675278E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.002118E-02 +4.902965E-03 +8.612279E-02 +5.910825E-03 +5.651386E-01 +1.286874E-01 +3.804197E-01 +1.225870E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.355899E-02 +5.550260E-04 +3.214464E-01 +1.033278E-01 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -55,456 +311,200 @@ tally 1: 0.000000E+00 1.474078E-01 2.172907E-02 +5.128548E-01 +1.258296E-01 +9.004671E-01 +2.791173E-01 +5.729905E-01 +2.680764E-01 +1.009880E-01 +9.392497E-03 +3.174349E-01 +1.007649E-01 +2.560771E-01 +6.557550E-02 +3.571813E-02 +1.275785E-03 +2.222160E-02 +4.937996E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 6.386562E-02 4.078817E-03 +1.379070E+00 +4.300261E-01 +6.485841E+00 +1.046238E+01 +5.509254E-01 +1.200498E-01 +2.424177E+00 +1.613025E+00 +1.260449E+00 +5.881747E-01 +9.262861E-03 +8.580060E-05 +6.588191E-01 +2.543824E-01 +2.028040E-01 +4.112944E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.040956E+00 +3.089102E-01 +6.743595E+00 +1.135216E+01 +1.494910E+00 +6.327940E-01 +2.226123E+00 +1.203763E+00 +3.147407E+00 +3.333589E+00 +2.505905E-01 +6.279558E-02 +4.171440E-01 +8.701395E-02 +1.417427E+00 +9.671327E-01 +1.398153E-01 +1.954832E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 2.905797E-02 8.443654E-04 -7.532560E-03 -5.673946E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.149324E-01 -1.320945E-02 -2.465048E-02 -3.049063E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.002118E-02 -4.902965E-03 -5.128548E-01 -1.258296E-01 -1.379070E+00 -4.300261E-01 -1.040956E+00 -3.089102E-01 1.237157E+00 6.284409E-01 -9.539296E-01 -5.206980E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.001407E+00 -1.600000E+00 -7.159080E-01 -2.988090E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.473499E-01 -1.206520E-01 -1.597805E-01 -1.297695E-02 -1.438568E-01 -1.597365E-02 -8.612279E-02 -5.910825E-03 -9.004671E-01 -2.791173E-01 -6.485841E+00 -1.046238E+01 -6.743595E+00 -1.135216E+01 7.681046E-01 1.896252E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.572791E-01 -8.942065E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.299733E-01 -2.205463E-01 -1.349846E+00 -6.808561E-01 -6.874433E-01 -2.287801E-01 -5.651386E-01 -1.286874E-01 -5.729905E-01 -2.680764E-01 -5.509254E-01 -1.200498E-01 -1.494910E+00 -6.327940E-01 2.444256E-01 2.804968E-02 -6.927475E-01 -2.317744E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.425042E-01 -5.854257E-02 -2.237774E+00 -1.109643E+00 -7.495196E-01 -1.939234E-01 -3.804197E-01 -1.225870E-01 -1.009880E-01 -9.392497E-03 -2.424177E+00 -1.613025E+00 -2.226123E+00 -1.203763E+00 1.939766E+00 1.132042E+00 -3.953753E-01 -1.420303E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.501129E-02 -6.255649E-04 -3.984785E-01 -1.486414E-01 -1.251028E-01 -1.306358E-02 -0.000000E+00 -0.000000E+00 -9.831996E-01 -4.846833E-01 -4.237107E-01 -6.002592E-02 -8.922533E-01 -2.835397E-01 -0.000000E+00 -0.000000E+00 -3.174349E-01 -1.007649E-01 -1.260449E+00 -5.881747E-01 -3.147407E+00 -3.333589E+00 2.021896E+00 1.425606E+00 -1.377786E-01 -1.716503E-02 -3.011069E-02 -9.066538E-04 -0.000000E+00 -0.000000E+00 -5.118696E-02 -2.620104E-03 -0.000000E+00 -0.000000E+00 -1.484996E-01 -2.205214E-02 -9.889831E-01 -3.657975E-01 -2.850134E+00 -2.250972E+00 -4.131352E-01 -6.756111E-02 -8.393183E-03 -7.044551E-05 -0.000000E+00 -0.000000E+00 -7.462571E-02 -5.568996E-03 -0.000000E+00 -0.000000E+00 -2.560771E-01 -6.557550E-02 -9.262861E-03 -8.580060E-05 -2.505905E-01 -6.279558E-02 5.136552E-01 2.638417E-01 -1.441275E+00 -5.086865E-01 -2.913901E+00 -1.841912E+00 -6.978650E-01 -2.584000E-01 -1.451562E-02 -2.107031E-04 -0.000000E+00 -0.000000E+00 -3.079994E-03 -9.486363E-06 -1.492571E+00 -6.318792E-01 -2.083542E+00 -1.599782E+00 -2.677440E+00 -2.382024E+00 -4.457483E-01 -5.194318E-02 -5.424180E-02 -2.942173E-03 -0.000000E+00 -0.000000E+00 -2.355899E-02 -5.550260E-04 -3.571813E-02 -1.275785E-03 -6.588191E-01 -2.543824E-01 -4.171440E-01 -8.701395E-02 7.735493E-01 1.575534E-01 -4.033076E-01 -5.492660E-02 -4.513270E+00 -5.611449E+00 -1.653243E+00 -8.369762E-01 -1.045336E-01 -1.092727E-02 -2.486634E-01 -2.561523E-02 -1.090478E+00 -5.381842E-01 -6.314497E-01 -1.552199E-01 -3.417016E+00 -2.972256E+00 -5.709899E+00 -7.095076E+00 -1.194169E+00 -4.790398E-01 -1.420269E-01 -2.017163E-02 -0.000000E+00 -0.000000E+00 -3.214464E-01 -1.033278E-01 -2.222160E-02 -4.937996E-04 -2.028040E-01 -4.112944E-02 -1.417427E+00 -9.671327E-01 1.453489E+00 6.697189E-01 -8.534416E-01 -2.290345E-01 -5.367404E+00 -6.853344E+00 -1.237276E+00 -4.961691E-01 -5.835684E-02 -3.405521E-03 -5.574899E-01 -1.049542E-01 -4.235354E+00 -5.638989E+00 -2.034493E+00 -1.162774E+00 -1.533605E+00 -8.644495E-01 -4.663027E+00 -5.641430E+00 -1.261505E+00 -7.705206E-01 -1.954689E+00 -9.874394E-01 -1.449729E-01 -2.101714E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.398153E-01 -1.954832E-02 5.089636E-01 8.836228E-02 -1.422521E+00 -6.953668E-01 -1.137705E+00 -5.670907E-01 -3.521780E-01 -6.575561E-02 -0.000000E+00 -0.000000E+00 -7.713789E-01 -2.948263E-01 -3.267703E-01 -4.763836E-02 -1.252153E+00 -4.563949E-01 -1.962807E-01 -2.410165E-02 -1.357567E+00 -4.362757E-01 -2.356462E-01 -3.082678E-02 -1.380025E+00 -4.289689E-01 -1.876891E-01 -1.675278E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.940736E-01 -2.763730E-02 -6.059470E-02 -3.671718E-03 -3.479381E-01 -1.210609E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.452042E-02 -1.191659E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.679762E-01 -1.354065E-01 -5.043842E-02 -2.544034E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1.678278E-01 2.097037E-02 -5.312751E-02 -1.423243E-03 -3.374418E-01 -1.138670E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 5.208007E-01 2.057626E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.532560E-03 +5.673946E-05 +9.539296E-01 +5.206980E-01 +0.000000E+00 +0.000000E+00 +6.927475E-01 +2.317744E-01 +3.953753E-01 +1.420303E-01 +1.377786E-01 +1.716503E-02 +1.441275E+00 +5.086865E-01 +4.033076E-01 +5.492660E-02 +8.534416E-01 +2.290345E-01 +1.422521E+00 +6.953668E-01 +1.940736E-01 +2.763730E-02 +0.000000E+00 +0.000000E+00 +5.312751E-02 +1.423243E-03 1.050464E+00 5.524605E-01 +5.214580E-02 +2.719184E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.011069E-02 +9.066538E-04 +2.913901E+00 +1.841912E+00 +4.513270E+00 +5.611449E+00 +5.367404E+00 +6.853344E+00 +1.137705E+00 +5.670907E-01 +6.059470E-02 +3.671718E-03 +0.000000E+00 +0.000000E+00 +3.374418E-01 +1.138670E-01 7.171591E-02 5.143172E-03 0.000000E+00 @@ -525,24 +525,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.214580E-02 -2.719184E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +6.978650E-01 +2.584000E-01 +1.653243E+00 +8.369762E-01 +1.237276E+00 +4.961691E-01 +3.521780E-01 +6.575561E-02 +3.479381E-01 +1.210609E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -565,6 +557,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.118696E-02 +2.620104E-03 +1.451562E-02 +2.107031E-04 +1.045336E-01 +1.092727E-02 +5.835684E-02 +3.405521E-03 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/tests/test_filter_mesh_3d/materials.xml b/tests/test_filter_mesh_3d/materials.xml index f5a9e61bea..8021f5f99e 100644 --- a/tests/test_filter_mesh_3d/materials.xml +++ b/tests/test_filter_mesh_3d/materials.xml @@ -1,8 +1,6 @@ - 71c - @@ -59,7 +57,7 @@ - + @@ -69,7 +67,7 @@ - + @@ -128,7 +126,7 @@ - + @@ -155,7 +153,7 @@ - + @@ -182,7 +180,7 @@ - + @@ -209,7 +207,7 @@ - + @@ -236,7 +234,7 @@ - + @@ -251,7 +249,7 @@ - + @@ -266,7 +264,7 @@ - + diff --git a/tests/test_filter_mesh_3d/results_true.dat b/tests/test_filter_mesh_3d/results_true.dat index 88a5228278..44cd1bcc8c 100644 --- a/tests/test_filter_mesh_3d/results_true.dat +++ b/tests/test_filter_mesh_3d/results_true.dat @@ -19,6 +19,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.784067E-02 +1.431916E-03 +5.718522E-03 +3.270150E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -51,6 +55,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.373020E-01 +2.296999E-01 +1.235293E-01 +1.096341E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -81,6 +89,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.646162E-01 +2.722494E-02 +3.297202E-01 +5.369813E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -111,6 +123,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.327761E-01 +1.698166E-02 +4.895403E-02 +2.396497E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -581,6 +597,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.013954E-02 +4.056009E-04 +1.244176E-01 +1.547973E-02 +6.200444E-02 +3.844551E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -609,6 +631,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.919075E-02 +1.535915E-03 +1.076125E+00 +3.620665E-01 +1.895015E-01 +3.591083E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -637,6 +665,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.532992E-02 +5.674596E-03 +2.779035E-01 +3.159893E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -865,6 +897,2854 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.849679E-01 +3.421312E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.562052E-01 +1.041492E-01 +9.262861E-03 +8.580060E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.680080E-01 +7.239472E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.211417E-01 +1.467532E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.308558E-02 +1.856368E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.785033E-03 +6.060673E-05 +2.958840E-01 +7.992999E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.470259E-01 +3.094098E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.606674E-02 +7.407483E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.650200E-01 +7.121133E-02 +1.853335E-01 +3.434852E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.409446E-02 +1.944321E-03 +4.226996E-01 +1.360325E-01 +0.000000E+00 +0.000000E+00 +1.324670E-01 +1.754750E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.729718E-01 +2.991925E-02 +8.563908E-02 +4.712912E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.039507E-02 +3.647564E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.254527E-01 +1.810100E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.309308E-01 +5.812760E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.162108E+00 +5.854785E-01 +1.144903E+00 +4.944036E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.206585E-01 +1.455847E-02 +5.987372E-02 +2.032332E-03 +1.257462E-01 +1.456033E-02 +2.157774E-03 +4.655990E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.358169E-02 +5.560962E-04 +1.892565E-01 +3.581801E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.668276E-01 +2.783144E-02 +1.382909E-01 +1.912437E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.553405E-01 +1.453017E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.089221E-02 +2.590017E-03 +2.384503E+00 +1.209500E+00 +4.612134E-01 +1.063957E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.032011E-01 +1.065047E-02 +2.762615E-01 +3.559292E-02 +1.771223E-02 +3.137232E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.465169E-02 +6.077057E-04 +2.812104E-01 +7.907926E-02 +7.317899E-02 +5.355165E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.994456E-02 +8.966764E-04 +9.597166E-01 +3.206571E-01 +2.946064E-02 +8.679293E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.391190E-01 +2.413267E-02 +0.000000E+00 +0.000000E+00 +3.630182E-02 +1.317822E-03 +7.945599E-03 +6.313254E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.640780E-01 +1.059726E-01 +7.558522E-01 +3.387696E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.753697E-01 +3.075454E-02 +9.929647E-02 +9.859789E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.755790E-03 +3.082798E-06 +6.310707E-02 +2.175394E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.071175E-01 +5.415795E-02 +3.663834E-02 +8.107316E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.678545E-02 +1.353169E-03 +4.196949E-01 +8.821556E-02 +6.573174E-01 +3.473163E-01 +1.432122E-01 +1.520012E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.642655E-02 +9.273189E-03 +5.463078E-01 +1.319680E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.214217E-01 +2.168033E-02 +1.223027E-01 +1.495794E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.415665E-01 +2.918471E-02 +8.969160E-01 +4.355459E-01 +1.358408E-01 +1.019608E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.149703E+00 +3.989107E-01 +8.078002E-01 +1.757558E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.449729E-01 +2.101714E-02 +1.354717E-01 +9.718740E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.977770E-03 +9.955590E-05 +3.164476E-01 +5.280988E-02 +1.124256E-01 +1.263950E-02 +1.739446E-01 +3.025673E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.565669E-02 +2.451318E-04 +3.823223E-01 +4.488260E-02 +1.508419E-01 +2.275329E-02 +6.960539E-02 +4.844911E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.052674E-02 +8.195092E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.022426E-01 +9.085949E-03 +2.615062E-01 +3.533945E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.322470E-02 +3.984732E-03 +1.034037E-01 +3.976885E-03 +5.731061E-01 +1.428980E-01 +1.115403E+00 +3.834871E-01 +1.574353E-01 +2.355445E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.580128E-01 +9.575996E-02 +9.766238E-01 +3.187064E-01 +1.641852E+00 +9.021844E-01 +5.073845E-01 +9.507188E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.348043E-02 +2.860156E-03 +2.874488E-01 +4.930982E-02 +1.164369E-01 +1.355756E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.165841E-02 +1.735423E-03 +8.832720E-02 +7.801694E-03 +8.209316E-02 +3.505893E-03 +3.679762E-01 +1.354065E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.049861E-01 +1.599684E-01 +5.722246E-01 +9.204135E-02 +3.727350E-02 +1.389314E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.221740E-02 +2.726657E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.125733E-01 +1.267274E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.396029E-01 +6.352573E-02 +2.073790E+00 +1.188596E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.200689E-01 +2.392978E-01 +4.156041E+00 +4.315163E+00 +2.887905E-01 +4.216084E-02 +3.721224E-03 +1.384751E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.998387E-02 +7.936690E-03 +3.050953E-01 +3.658881E-02 +0.000000E+00 +0.000000E+00 +1.426667E-01 +2.035380E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.137535E-02 +2.639427E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.742414E-01 +7.520835E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.027660E-02 +1.056086E-04 +8.945207E-02 +4.272339E-03 +4.274862E-02 +1.827445E-03 +2.729010E-01 +4.130164E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.011069E-02 +9.066538E-04 +4.871561E-01 +9.900028E-02 +2.263564E+00 +1.440716E+00 +2.844653E+00 +1.857026E+00 +4.871086E-01 +1.359461E-01 +3.788668E-02 +1.435401E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.290530E-02 +1.295592E-03 +2.593320E-01 +3.729386E-02 +2.357411E-01 +2.637254E-02 +8.896790E-03 +7.915287E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.316492E-02 +1.733152E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -899,10 +3779,10 @@ tally 1: 0.000000E+00 1.083669E-01 1.174340E-02 -3.904088E-02 -1.524190E-03 -0.000000E+00 -0.000000E+00 +2.623543E-01 +4.112454E-02 +3.364085E-01 +6.085429E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -933,6 +3813,16 @@ tally 1: 0.000000E+00 6.386562E-02 4.078817E-03 +5.669837E-01 +1.209384E-01 +9.609431E-01 +2.621642E-01 +8.878742E-02 +7.053770E-03 +2.075806E-02 +4.308970E-04 +4.751513E-01 +1.205013E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -957,26 +3847,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +1.748649E-01 +1.584562E-02 +1.009424E+00 +3.060875E-01 +4.015408E-01 +7.884715E-02 +7.406533E-02 +5.485672E-03 +8.567983E-02 +7.341033E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1001,22 +3881,22 @@ tally 1: 0.000000E+00 2.905797E-02 8.443654E-04 +1.089115E+00 +5.614559E-01 +1.622477E-01 +1.848987E-02 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +6.715405E-02 +4.509666E-03 +1.001959E-01 +1.003923E-02 +2.054517E-01 +4.221041E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1035,6 +3915,8 @@ tally 1: 0.000000E+00 7.532560E-03 5.673946E-05 +6.796882E-01 +2.348838E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1043,6 +3925,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +7.510694E-01 +2.592974E-01 +1.074496E-01 +1.154542E-02 +7.434457E-03 +5.527115E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1071,8 +3959,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.399012E+00 +6.326649E-01 +6.206466E-01 +1.107636E-01 +3.432563E-02 +1.076561E-03 0.000000E+00 0.000000E+00 +2.270802E-02 +5.156541E-04 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1097,8 +3993,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +4.262772E-01 +9.802530E-02 +8.510644E-02 +4.903433E-03 +5.896045E-03 +3.476335E-05 0.000000E+00 0.000000E+00 +4.847729E-02 +2.350047E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1127,6 +4031,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.835684E-02 +3.405521E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1223,6 +4129,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.508012E-02 +1.230615E-03 +1.429072E-01 +2.042247E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1253,46 +4163,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.306116E-02 -1.705939E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +1.491740E-02 +2.225288E-04 +2.985580E-01 +4.742470E-02 +2.715682E-01 +6.930003E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1323,6 +4199,10 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.046129E-01 +1.094386E-02 +3.355127E-01 +7.824603E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1469,16 +4349,26 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.465169E-02 -6.077057E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.623543E-01 -4.112454E-02 +0.000000E+00 +0.000000E+00 +3.904088E-02 +1.524190E-03 2.258489E-01 5.100771E-02 +8.236284E-02 +4.869311E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1501,18 +4391,4616 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.729718E-01 -2.991925E-02 -2.994456E-02 -8.966764E-04 -9.977770E-03 -9.955590E-05 -4.396029E-01 -6.352573E-02 -5.669837E-01 -1.209384E-01 1.423672E-01 1.771243E-02 +4.350509E-01 +1.399885E-01 +0.000000E+00 +0.000000E+00 +8.573314E-01 +2.242082E-01 +2.686970E-01 +3.401364E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.330296E+00 +6.633075E-01 +1.754088E+00 +8.632560E-01 +1.701984E-01 +2.896749E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.805840E-02 +2.309610E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.091381E-02 +5.028768E-03 +0.000000E+00 +0.000000E+00 +4.465012E-01 +1.993633E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.811100E-01 +3.280084E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.954942E-01 +1.916582E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.582984E-01 +2.505838E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.905640E-01 +8.442745E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.016991E-02 +1.613622E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.209188E-02 +1.029889E-03 +1.711788E+00 +1.416936E+00 +1.685770E-02 +2.841820E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.728851E-03 +7.619284E-05 +1.524559E+00 +7.117855E-01 +2.225245E+00 +1.498774E+00 +1.375452E-01 +1.835673E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.457483E-01 +5.194318E-02 +4.628619E-01 +9.960982E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.424180E-02 +2.942173E-03 +1.420269E-01 +2.017163E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.267546E-01 +2.900091E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.862835E-02 +3.470153E-04 +7.547884E-04 +5.697055E-07 +8.039207E-02 +6.462885E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.085624E-02 +1.178580E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.460448E-01 +2.132907E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.385333E-02 +1.919148E-04 +4.750552E-01 +9.493583E-02 +4.475531E-02 +2.003038E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.582575E-01 +2.504545E-02 +7.244018E-01 +2.009724E-01 +1.675068E+00 +7.021248E-01 +1.548403E-01 +2.397552E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.325684E-01 +5.701948E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.326035E-02 +1.758368E-04 +1.155931E-01 +1.336177E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.309870E-02 +1.095524E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.215622E-02 +4.908983E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.890902E-02 +1.513911E-03 +1.333296E-03 +1.777678E-06 +5.545269E-01 +1.316670E-01 +9.183632E-01 +2.857440E-01 +3.452042E-02 +1.191659E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.009713E-01 +3.766430E-02 +4.064749E-01 +9.731066E-02 +7.510889E-01 +3.262838E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.834594E-02 +3.365736E-04 +5.221919E-01 +2.558641E-01 +6.058351E-02 +1.850615E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.075776E-01 +1.157294E-02 +1.408841E-01 +9.930494E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.324866E-01 +1.755269E-02 +2.157489E-01 +2.724501E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.362142E-01 +5.579715E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.171591E-02 +5.143172E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.079994E-03 +9.486363E-06 +2.573597E-01 +5.360516E-02 +7.663116E-02 +5.274654E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.522719E-01 +2.318672E-02 +1.234218E+00 +4.999181E-01 +6.053656E-02 +3.664676E-03 +3.866882E-01 +1.202701E-01 +4.069831E-03 +1.656352E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.099509E-01 +6.290302E-02 +5.245828E-01 +7.576335E-02 +5.521306E-01 +1.121121E-01 +1.518297E-01 +1.402100E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.298371E-01 +1.330104E-02 +1.431856E-01 +2.050213E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.602120E-02 +1.297527E-03 +1.614711E-02 +2.607292E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.367392E-03 +1.869762E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.028040E-01 +4.112944E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.876735E-02 +3.142665E-04 +1.266345E+00 +7.682954E-01 +1.355863E-01 +1.838365E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.894914E-01 +7.732641E-02 +7.546765E-01 +2.070654E-01 +1.481609E-01 +2.195167E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.589438E-01 +2.060098E-02 +4.924729E-01 +2.024222E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.693310E-02 +6.692041E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.901092E-02 +8.416334E-04 +6.926635E-01 +2.428256E-01 +5.214580E-02 +2.719184E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.067391E-01 +1.139323E-02 +2.330690E-01 +5.432115E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.631683E-01 +1.318912E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.948898E-01 +3.798204E-02 +1.473267E-01 +2.170516E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.021145E-01 +1.042738E-02 +5.996351E-01 +1.076802E-01 +7.003137E-01 +2.735252E-01 +3.750187E-01 +1.153951E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.054694E-02 +4.221768E-04 +9.531928E-02 +6.215764E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.231222E-02 +9.616114E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.315614E-02 +2.242266E-03 +9.974406E-01 +3.947626E-01 +6.997755E-01 +1.672455E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.613314E-01 +2.177882E-02 +0.000000E+00 +0.000000E+00 +9.028974E-02 +4.229429E-03 +7.462571E-02 +5.568996E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.683052E-03 +9.376150E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.228981E-03 +1.788428E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.883980E-03 +7.892509E-05 +2.832772E-02 +8.024597E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.591875E-02 +1.290157E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.993460E-03 +3.592156E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.374400E-01 +1.888975E-02 +1.770925E-01 +1.577698E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.699969E-01 +4.178442E-02 +7.084057E-01 +1.536166E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.118696E-02 +2.620104E-03 +1.451562E-02 +2.107031E-04 +5.751275E-02 +3.307717E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.397100E-02 +5.746090E-04 +1.165202E-01 +6.930471E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.230381E-02 +2.735689E-03 +4.899885E-02 +2.400887E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.526715E-02 +2.330858E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.241176E-01 +9.055699E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.715160E-01 +1.827795E-02 +3.979721E-01 +1.307262E-01 +2.136983E-01 +4.566698E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.699789E-01 +1.099867E-01 +2.906510E-01 +2.666266E-02 +4.420414E-02 +1.954006E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.974266E-02 +4.864039E-03 +3.006400E-01 +3.566201E-02 +9.975381E-01 +3.048346E-01 +1.525008E-01 +1.765369E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.896367E-02 +1.518168E-03 +4.750135E-01 +1.508282E-01 +6.670089E-01 +1.688817E-01 +8.019636E-01 +2.406005E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.396759E-03 +5.744454E-06 +3.936907E-01 +7.202022E-02 +3.707367E-01 +1.159281E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.355899E-02 +5.550260E-04 +2.878871E-01 +8.287897E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.524618E-01 +6.373694E-02 +1.453317E-02 +2.112130E-04 +2.222160E-02 +4.937996E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.015914E-02 +2.515940E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.266086E-02 +6.832818E-03 +1.019759E-02 +1.039909E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.927144E-03 +8.568173E-06 +8.685372E-02 +7.543569E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.206602E-02 +8.744271E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.590867E-03 +2.530859E-06 +5.000909E-01 +1.141659E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.702083E-02 +2.210958E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.667122E-01 +1.609363E-02 +2.882401E-01 +4.938325E-02 +1.186127E-01 +1.335481E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.802912E-01 +1.787062E-01 +2.509994E-01 +3.312022E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.071904E-01 +2.889953E-02 +3.636704E-02 +1.322562E-03 +4.636650E-02 +2.149852E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.023202E+00 +7.786623E-01 +3.230798E-01 +3.896399E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.698392E-01 +1.770322E-02 +1.047304E-01 +5.484511E-03 +0.000000E+00 +0.000000E+00 +9.764118E-02 +9.533800E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.319541E-03 +2.829752E-05 +1.034262E-01 +6.886191E-03 +4.038686E-02 +1.631098E-03 +9.389954E-01 +4.408852E-01 +8.393183E-03 +7.044551E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.176521E-02 +2.679637E-03 +5.390926E-01 +9.312562E-02 +2.712099E-01 +3.687123E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.048931E-01 +7.753447E-03 +5.109842E-02 +1.598239E-03 +8.251077E-02 +3.717992E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.372603E-02 +5.869219E-03 +1.714479E-01 +1.505049E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.355929E-02 +1.126226E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.615369E-03 +1.307089E-05 +2.118496E-02 +4.488027E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.411503E-04 +2.928436E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.972802E-01 +2.058844E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.619416E-02 +6.961721E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.164981E-01 +1.357181E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.682268E-01 +7.194562E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.786607E-02 +3.191964E-04 +2.870320E-01 +4.518339E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.501129E-02 +6.255649E-04 +1.484996E-01 +2.205214E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.907152E-02 +7.933735E-03 +1.077088E-01 +1.160118E-02 +0.000000E+00 +0.000000E+00 +1.962851E-01 +3.852783E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.978887E-01 +2.156289E-01 +2.621971E-01 +4.860489E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +7.630962E-02 +2.320465E-03 +9.867531E-02 +9.736817E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.420304E-01 +1.169848E-01 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.688171E-02 +7.226262E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1529,24 +9017,24 @@ tally 1: 0.000000E+00 1.722215E-02 2.966024E-04 +1.480967E+00 +5.223269E-01 +1.561576E-01 +2.112454E-02 +3.978837E-01 +1.583114E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +1.137979E-02 +1.294997E-04 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -1.565669E-02 -2.451318E-04 -8.200689E-01 -2.392978E-01 -1.748649E-01 -1.584562E-02 -0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1563,24 +9051,18 @@ tally 1: 0.000000E+00 3.036511E-02 9.220402E-04 +3.308084E-01 +5.110266E-02 +5.595964E-02 +2.146289E-03 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.998387E-02 -7.936690E-03 -1.089115E+00 -5.614559E-01 -4.805840E-02 -2.309610E-03 +1.219441E-01 +1.487035E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1603,16 +9085,22 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.373673E-02 +4.377147E-03 +7.403983E-02 +3.220776E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 -2.742414E-01 -7.520835E-02 -6.796882E-01 -2.348838E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -1803,582 +9291,6 @@ tally 1: 0.000000E+00 3.448095E-01 5.774877E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.033873E-01 -2.672168E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.319541E-03 -2.829752E-05 -3.420304E-01 -1.169848E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.315614E-02 -2.242266E-03 -6.974266E-02 -4.864039E-03 -0.000000E+00 -0.000000E+00 -2.688171E-02 -7.226262E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.896367E-02 -1.518168E-03 -1.048931E-01 -7.753447E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.396759E-03 -5.744454E-06 -8.372603E-02 -5.869219E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.409446E-02 -1.944321E-03 -2.812104E-01 -7.907926E-02 -0.000000E+00 -0.000000E+00 -1.125733E-01 -1.267274E-02 -3.364085E-01 -6.085429E-02 -8.236284E-02 -4.869311E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.381770E-02 -1.919990E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.563908E-02 -4.712912E-03 -9.597166E-01 -3.206571E-01 -3.164476E-01 -5.280988E-02 -2.073790E+00 -1.188596E+00 -9.609431E-01 -2.621642E-01 -4.350509E-01 -1.399885E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.411503E-04 -2.928436E-07 -1.480967E+00 -5.223269E-01 -1.727443E-01 -1.798769E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.254527E-01 -1.810100E-01 -2.391190E-01 -2.413267E-02 -3.823223E-01 -4.488260E-02 -4.156041E+00 -4.315163E+00 -1.009424E+00 -3.060875E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.308084E-01 -5.110266E-02 -2.004281E-01 -2.595071E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.052674E-02 -8.195092E-03 -3.050953E-01 -3.658881E-02 -1.622477E-01 -1.848987E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.164981E-01 -1.357181E-02 -9.373673E-02 -4.377147E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 1.370265E-01 1.583751E-02 0.000000E+00 @@ -2409,10 +9321,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.306116E-02 +1.705939E-04 +6.033873E-01 +2.672168E-01 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 +3.094070E-01 +8.793386E-02 +4.867319E-01 +8.396510E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2443,6 +9363,12 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.251028E-01 +1.306358E-02 +2.410067E-01 +5.808423E-02 +4.089938E-03 +9.542099E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2505,14 +9431,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.602120E-02 -1.297527E-03 -2.054694E-02 -4.221768E-04 -3.699789E-01 -1.099867E-01 -1.034262E-01 -6.886191E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2541,12 +9459,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -9.974406E-01 -3.947626E-01 -3.006400E-01 -3.566201E-02 -5.176521E-02 -2.679637E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2575,12 +9487,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.613314E-01 -2.177882E-02 -4.750135E-01 -1.508282E-01 -5.109842E-02 -1.598239E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2611,10 +9517,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.936907E-01 -7.202022E-02 -1.714479E-01 -1.505049E-02 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2623,10 +9525,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -4.226996E-01 -1.360325E-01 -7.317899E-02 -5.355165E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2651,22 +9549,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.381770E-02 +1.919990E-03 7.711190E-02 5.946245E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.946064E-02 -8.679293E-04 -1.124256E-01 -1.263950E-02 -0.000000E+00 -0.000000E+00 -8.878742E-02 -7.053770E-03 +1.009880E-01 +9.392497E-03 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2683,24 +9583,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.561576E-01 -2.112454E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.727443E-01 +1.798769E-02 1.640942E-01 2.692690E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.508419E-01 -2.275329E-02 -2.887905E-01 -4.216084E-02 -4.015408E-01 -7.884715E-02 +7.475045E-01 +2.090484E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2717,10 +9617,24 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.595964E-02 -2.146289E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.004281E-01 +2.595071E-02 3.159701E-01 3.538768E-02 +5.329778E-01 +1.118275E-01 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2751,16 +9665,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -7.403983E-02 -3.220776E-03 1.220497E-01 1.051103E-02 0.000000E+00 0.000000E+00 -4.308558E-02 -1.856368E-03 -1.206585E-01 -1.455847E-02 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2789,582 +9701,6 @@ tally 1: 0.000000E+00 5.069737E-01 1.407934E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.614711E-02 -2.607292E-04 -9.531928E-02 -6.215764E-03 -2.906510E-01 -2.666266E-02 -4.038686E-02 -1.631098E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.367392E-03 -1.869762E-06 -6.997755E-01 -1.672455E-01 -9.975381E-01 -3.048346E-01 -5.390926E-01 -9.312562E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.670089E-01 -1.688817E-01 -8.251077E-02 -3.717992E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.683052E-03 -9.376150E-05 -3.707367E-01 -1.159281E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.009880E-01 -9.392497E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.739446E-01 -3.025673E-02 -0.000000E+00 -0.000000E+00 -2.075806E-02 -4.308970E-04 -8.573314E-01 -2.242082E-01 -2.267546E-01 -2.900091E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.978837E-01 -1.583114E-01 -7.475045E-01 -2.090484E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.630182E-02 -1.317822E-03 -6.960539E-02 -4.844911E-03 -3.721224E-03 -1.384751E-05 -7.406533E-02 -5.485672E-03 -1.330296E+00 -6.633075E-01 -1.862835E-02 -3.470153E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.329778E-01 -1.118275E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.162108E+00 -5.854785E-01 -5.640780E-01 -1.059726E-01 -0.000000E+00 -0.000000E+00 -1.426667E-01 -2.035380E-02 -0.000000E+00 -0.000000E+00 -7.091381E-02 -5.028768E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.987372E-02 -2.032332E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 7.471872E-02 5.582887E-03 0.000000E+00 @@ -3491,6339 +9827,3 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.501129E-02 -6.255649E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.907152E-02 -7.933735E-03 -3.094070E-01 -8.793386E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.251028E-01 -1.306358E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.420414E-02 -1.954006E-03 -9.389954E-01 -4.408852E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.525008E-01 -1.765369E-02 -2.712099E-01 -3.687123E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.028974E-02 -4.229429E-03 -8.019636E-01 -2.406005E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.849679E-01 -3.421312E-02 -1.324670E-01 -1.754750E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.562052E-01 -1.041492E-01 -6.039507E-02 -3.647564E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.751513E-01 -1.205013E-01 -2.686970E-01 -3.401364E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.680080E-01 -7.239472E-02 -9.309308E-01 -5.812760E-01 -7.945599E-03 -6.313254E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.567983E-02 -7.341033E-03 -1.754088E+00 -8.632560E-01 -7.547884E-04 -5.697055E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.211417E-01 -1.467532E-02 -1.144903E+00 -4.944036E-01 -7.558522E-01 -3.387696E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.257462E-01 -1.456033E-02 -1.755790E-03 -3.082798E-06 -0.000000E+00 -0.000000E+00 -1.027660E-02 -1.056086E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.011069E-02 -9.066538E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.118696E-02 -2.620104E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.484996E-01 -2.205214E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.508012E-02 -1.230615E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.522719E-01 -2.318672E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.071904E-01 -2.889953E-02 -1.077088E-01 -1.160118E-02 -4.867319E-01 -8.396510E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.491740E-02 -2.225288E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.099509E-01 -6.290302E-02 -3.631683E-01 -1.318912E-01 -0.000000E+00 -0.000000E+00 -1.023202E+00 -7.786623E-01 -7.978887E-01 -2.156289E-01 -2.410067E-01 -5.808423E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.728851E-03 -7.619284E-05 -1.582575E-01 -2.504545E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.698392E-01 -1.770322E-02 -7.630962E-02 -2.320465E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.393183E-03 -7.044551E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.462571E-02 -5.568996E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.524618E-01 -6.373694E-02 -3.615369E-03 -1.307089E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.262861E-03 -8.580060E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.701984E-01 -2.896749E-02 -8.039207E-02 -6.462885E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.715405E-02 -4.509666E-03 -4.465012E-01 -1.993633E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.157774E-03 -4.655990E-06 -6.310707E-02 -2.175394E-03 -8.322470E-02 -3.984732E-03 -8.945207E-02 -4.272339E-03 -7.510694E-01 -2.592974E-01 -1.811100E-01 -3.280084E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.927144E-03 -8.568173E-06 -2.682268E-01 -7.194562E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.678545E-02 -1.353169E-03 -3.580128E-01 -9.575996E-02 -4.871561E-01 -9.900028E-02 -1.399012E+00 -6.326649E-01 -4.954942E-01 -1.916582E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.374400E-01 -1.888975E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.262772E-01 -9.802530E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.699969E-01 -4.178442E-02 -1.590867E-03 -2.530859E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.451562E-02 -2.107031E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.079994E-03 -9.486363E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.429072E-01 -2.042247E-02 -4.016991E-02 -1.613622E-03 -0.000000E+00 -0.000000E+00 -3.890902E-02 -1.513911E-03 -1.234218E+00 -4.999181E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.636704E-02 -1.322562E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.985580E-01 -4.742470E-02 -3.209188E-02 -1.029889E-03 -1.385333E-02 -1.919148E-04 -2.009713E-01 -3.766430E-02 -5.245828E-01 -7.576335E-02 -0.000000E+00 -0.000000E+00 -4.241176E-01 -9.055699E-02 -3.230798E-01 -3.896399E-02 -2.621971E-01 -4.860489E-02 -4.089938E-03 -9.542099E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.046129E-01 -1.094386E-02 -1.524559E+00 -7.117855E-01 -7.244018E-01 -2.009724E-01 -1.834594E-02 -3.365736E-04 -0.000000E+00 -0.000000E+00 -1.021145E-01 -1.042738E-02 -0.000000E+00 -0.000000E+00 -1.047304E-01 -5.484511E-03 -9.867531E-02 -9.736817E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.457483E-01 -5.194318E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.424180E-02 -2.942173E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.355899E-02 -5.550260E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.453317E-02 -2.112130E-04 -2.118496E-02 -4.488027E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.015914E-02 -2.515940E-03 -5.972802E-01 -2.058844E-01 -1.137979E-02 -1.294997E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.075776E-01 -1.157294E-02 -1.876735E-02 -3.142665E-04 -0.000000E+00 -0.000000E+00 -8.266086E-02 -6.832818E-03 -8.619416E-02 -6.961721E-03 -1.219441E-01 -1.487035E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.137535E-02 -2.639427E-03 -1.001959E-01 -1.003923E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.324866E-01 -1.755269E-02 -4.894914E-01 -7.732641E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.034037E-01 -3.976885E-03 -4.274862E-02 -1.827445E-03 -1.074496E-01 -1.154542E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.693310E-02 -6.692041E-04 -3.591875E-02 -1.290157E-03 -8.685372E-02 -7.543569E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.358169E-02 -5.560962E-04 -4.196949E-01 -8.821556E-02 -9.766238E-01 -3.187064E-01 -2.263564E+00 -1.440716E+00 -6.206466E-01 -1.107636E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.770925E-01 -1.577698E-02 -3.206602E-02 -8.744271E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.668276E-01 -2.783144E-02 -9.642655E-02 -9.273189E-03 -5.348043E-02 -2.860156E-03 -4.290530E-02 -1.295592E-03 -8.510644E-02 -4.903433E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.084057E-01 -1.536166E-01 -5.000909E-01 -1.141659E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.751275E-02 -3.307717E-03 -4.702083E-02 -2.210958E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.784067E-02 -1.431916E-03 -2.013954E-02 -4.056009E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.397100E-02 -5.746090E-04 -1.667122E-01 -1.609363E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.919075E-02 -1.535915E-03 -7.785033E-03 -6.060673E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.573597E-01 -5.360516E-02 -1.067391E-01 -1.139323E-02 -5.230381E-02 -2.735689E-03 -5.802912E-01 -1.787062E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.532992E-02 -5.674596E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.333296E-03 -1.777678E-06 -6.053656E-02 -3.664676E-03 -0.000000E+00 -0.000000E+00 -1.526715E-02 -2.330858E-04 -4.636650E-02 -2.149852E-03 -1.962851E-01 -3.852783E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.715682E-01 -6.930003E-02 -1.711788E+00 -1.416936E+00 -4.750552E-01 -9.493583E-02 -4.064749E-01 -9.731066E-02 -5.521306E-01 -1.121121E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.089221E-02 -2.590017E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.355127E-01 -7.824603E-02 -2.225245E+00 -1.498774E+00 -1.675068E+00 -7.021248E-01 -5.221919E-01 -2.558641E-01 -1.298371E-01 -1.330104E-02 -5.996351E-01 -1.076802E-01 -1.715160E-01 -1.827795E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.032011E-01 -1.065047E-02 -2.415665E-01 -2.918471E-02 -4.165841E-02 -1.735423E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.628619E-01 -9.960982E-02 -3.325684E-01 -5.701948E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.231222E-02 -9.616114E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.420269E-01 -2.017163E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.878871E-01 -8.287897E-02 -3.355929E-02 -1.126226E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.222160E-02 -4.937996E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.028040E-01 -4.112944E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.408841E-01 -9.930494E-03 -1.266345E+00 -7.682954E-01 -0.000000E+00 -0.000000E+00 -1.019759E-02 -1.039909E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.753697E-01 -3.075454E-02 -1.022426E-01 -9.085949E-03 -0.000000E+00 -0.000000E+00 -2.054517E-01 -4.221041E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.157489E-01 -2.724501E-02 -7.546765E-01 -2.070654E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.731061E-01 -1.428980E-01 -2.729010E-01 -4.130164E-02 -7.434457E-03 -5.527115E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.892565E-01 -3.581801E-02 -6.573174E-01 -3.473163E-01 -1.641852E+00 -9.021844E-01 -2.844653E+00 -1.857026E+00 -3.432563E-02 -1.076561E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.382909E-01 -1.912437E-02 -5.463078E-01 -1.319680E-01 -2.874488E-01 -4.930982E-02 -2.593320E-01 -3.729386E-02 -5.896045E-03 -3.476335E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.835684E-02 -3.405521E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.718522E-03 -3.270150E-05 -1.244176E-01 -1.547973E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.165202E-01 -6.930471E-03 -2.882401E-01 -4.938325E-02 -1.786607E-02 -3.191964E-04 -0.000000E+00 -0.000000E+00 -7.373020E-01 -2.296999E-01 -1.076125E+00 -3.620665E-01 -2.958840E-01 -7.992999E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.215622E-02 -4.908983E-04 -7.663116E-02 -5.274654E-03 -2.330690E-01 -5.432115E-02 -4.899885E-02 -2.400887E-03 -2.509994E-01 -3.312022E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.646162E-01 -2.722494E-02 -2.779035E-01 -3.159893E-02 -2.470259E-01 -3.094098E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.545269E-01 -1.316670E-01 -3.866882E-01 -1.202701E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.327761E-01 -1.698166E-02 -0.000000E+00 -0.000000E+00 -8.606674E-02 -7.407483E-03 -1.553405E-01 -1.453017E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.685770E-02 -2.841820E-04 -4.475531E-02 -2.003038E-03 -7.510889E-01 -3.262838E-01 -1.518297E-01 -1.402100E-02 -1.948898E-01 -3.798204E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.650200E-01 -7.121133E-02 -2.384503E+00 -1.209500E+00 -2.214217E-01 -2.168033E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.375452E-01 -1.835673E-02 -1.548403E-01 -2.397552E-02 -6.058351E-02 -1.850615E-03 -1.431856E-01 -2.050213E-02 -7.003137E-01 -2.735252E-01 -3.979721E-01 -1.307262E-01 -9.764118E-02 -9.533800E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.762615E-01 -3.559292E-02 -8.969160E-01 -4.355459E-01 -8.832720E-02 -7.801694E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.149703E+00 -3.989107E-01 -8.049861E-01 -1.599684E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.449729E-01 -2.101714E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.355863E-01 -1.838365E-02 -4.228981E-03 -1.788428E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.929647E-02 -9.859789E-03 -2.615062E-01 -3.533945E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.481609E-01 -2.195167E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.071175E-01 -5.415795E-02 -1.115403E+00 -3.834871E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.432122E-01 -1.520012E-02 -5.073845E-01 -9.507188E-02 -4.871086E-01 -1.359461E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.164369E-01 -1.355756E-02 -2.357411E-01 -2.637254E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.200444E-02 -3.844551E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.186127E-01 -1.335481E-02 -2.870320E-01 -4.518339E-02 -0.000000E+00 -0.000000E+00 -1.235293E-01 -1.096341E-02 -1.895015E-01 -3.591083E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.297202E-01 -5.369813E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.183632E-01 -2.857440E-01 -4.069831E-03 -1.656352E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.895403E-02 -2.396497E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.473267E-01 -2.170516E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.853335E-01 -3.434852E-02 -4.612134E-01 -1.063957E-01 -1.223027E-01 -1.495794E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.750187E-01 -1.153951E-01 -2.136983E-01 -4.566698E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.771223E-02 -3.137232E-04 -1.358408E-01 -1.019608E-02 -8.209316E-02 -3.505893E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.078002E-01 -1.757558E-01 -5.722246E-01 -9.204135E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.354717E-01 -9.718740E-03 -5.221740E-02 -2.726657E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.663834E-02 -8.107316E-04 -1.574353E-01 -2.355445E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.788668E-02 -1.435401E-03 -2.270802E-02 -5.156541E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.896790E-03 -7.915287E-05 -4.847729E-02 -2.350047E-03 -2.905640E-01 -8.442745E-02 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.452042E-02 -1.191659E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.679762E-01 -1.354065E-01 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.727350E-02 -1.389314E-03 -1.316492E-02 -1.733152E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.589438E-01 -2.060098E-02 -8.883980E-03 -7.892509E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.085624E-02 -1.178580E-04 -1.326035E-02 -1.758368E-04 -0.000000E+00 -0.000000E+00 -2.901092E-02 -8.416334E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.582984E-01 -2.505838E-02 -1.460448E-01 -2.132907E-02 -3.309870E-02 -1.095524E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.924729E-01 -2.024222E-01 -2.832772E-02 -8.024597E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.155931E-01 -1.336177E-02 -2.362142E-01 -5.579715E-02 -6.926635E-01 -2.428256E-01 -5.993460E-03 -3.592156E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -7.171591E-02 -5.143172E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.214580E-02 -2.719184E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 diff --git a/tests/test_fixed_source/materials.xml b/tests/test_fixed_source/materials.xml index 6c52b25015..6e4249da32 100644 --- a/tests/test_fixed_source/materials.xml +++ b/tests/test_fixed_source/materials.xml @@ -3,8 +3,8 @@ - - + + diff --git a/tests/test_fixed_source/settings.xml b/tests/test_fixed_source/settings.xml index 8a0ddb251e..1e9b85d5a8 100644 --- a/tests/test_fixed_source/settings.xml +++ b/tests/test_fixed_source/settings.xml @@ -6,6 +6,8 @@ 100 + 294 + diff --git a/tests/test_infinite_cell/materials.xml b/tests/test_infinite_cell/materials.xml index 1c2d649420..6acd8df74b 100644 --- a/tests/test_infinite_cell/materials.xml +++ b/tests/test_infinite_cell/materials.xml @@ -3,12 +3,12 @@ - + - + diff --git a/tests/test_iso_in_lab/inputs_true.dat b/tests/test_iso_in_lab/inputs_true.dat index 34f522872e..310bccb139 100644 --- a/tests/test_iso_in_lab/inputs_true.dat +++ b/tests/test_iso_in_lab/inputs_true.dat @@ -1 +1 @@ -c05fdb7815ccc1dcd2f260429b9139ad96ad4a7d1643e2bb938e3cd61268451363538ef4e41c5eaf73a64dbace43b2bd4489d5ff012a33104c2c1d6fa61146eb \ No newline at end of file +4b3d0270a479e65579b305d1c2339b76971790bc7371c685efa6e2d341980fec301cf0859c34796ae04ae98aa01ab8b4905a8d8a3a916895c36d82ca6b58fb39 \ No newline at end of file diff --git a/tests/test_lattice/materials.xml b/tests/test_lattice/materials.xml index 67240c4c9d..971f5c5480 100644 --- a/tests/test_lattice/materials.xml +++ b/tests/test_lattice/materials.xml @@ -10,8 +10,6 @@ =============================================================== --> - 71c - @@ -27,7 +25,7 @@ - + @@ -37,7 +35,7 @@ - + @@ -75,7 +73,7 @@ - + @@ -88,9 +86,9 @@ - + - + @@ -128,7 +126,7 @@ - + diff --git a/tests/test_lattice_hex/materials.xml b/tests/test_lattice_hex/materials.xml index 92d10fa815..c7649fcf9a 100644 --- a/tests/test_lattice_hex/materials.xml +++ b/tests/test_lattice_hex/materials.xml @@ -1,42 +1,42 @@ - + - - - + + + - + - - - + + + - + - - - - - + + + + + - + - - - - - - - + + + + + + + diff --git a/tests/test_lattice_mixed/materials.xml b/tests/test_lattice_mixed/materials.xml index 92d10fa815..c7649fcf9a 100644 --- a/tests/test_lattice_mixed/materials.xml +++ b/tests/test_lattice_mixed/materials.xml @@ -1,42 +1,42 @@ - + - - - + + + - + - - - + + + - + - - - - - + + + + + - + - - - - - - - + + + + + + + diff --git a/tests/test_lattice_multiple/materials.xml b/tests/test_lattice_multiple/materials.xml index f5a9e61bea..8021f5f99e 100644 --- a/tests/test_lattice_multiple/materials.xml +++ b/tests/test_lattice_multiple/materials.xml @@ -1,8 +1,6 @@ - 71c - @@ -59,7 +57,7 @@ - + @@ -69,7 +67,7 @@ - + @@ -128,7 +126,7 @@ - + @@ -155,7 +153,7 @@ - + @@ -182,7 +180,7 @@ - + @@ -209,7 +207,7 @@ - + @@ -236,7 +234,7 @@ - + @@ -251,7 +249,7 @@ - + @@ -266,7 +264,7 @@ - + diff --git a/tests/test_mg_basic/inputs_true.dat b/tests/test_mg_basic/inputs_true.dat index 3f83de7600..fad74ca827 100644 --- a/tests/test_mg_basic/inputs_true.dat +++ b/tests/test_mg_basic/inputs_true.dat @@ -1 +1 @@ -2fdba76bad058eec6e43657692ef759de79c934076067d4ec5c9f2bdb131877e001f67e16b16bb14889e5e0a1ba84c780979b9d6772573aa6f82d979774c2af8 \ No newline at end of file +e843dbee8b989142d68e78f7a3e83309a9982c0127974ba4b6a58c823ce298e8fffc8828b48aa696f045818a2a80ef4003f5a191f33aacef7d7dd72c950855a6 \ No newline at end of file diff --git a/tests/test_mg_max_order/inputs_true.dat b/tests/test_mg_max_order/inputs_true.dat index 63bdaab03e..d827cfaa49 100644 --- a/tests/test_mg_max_order/inputs_true.dat +++ b/tests/test_mg_max_order/inputs_true.dat @@ -1 +1 @@ -60a35864ad71646309d7f1687ba0826d4d53a5b2e8babf73614362645205484bad3c0e7bf605ec0b11cadf58474b2e3d0a97bf2d9297f9118682c37ff0269afd \ No newline at end of file +7d508b1f3a2661566b8e8cb76fee61aecb96e8b60d633b06f13c4600bd854ea3366cdebd033c0a71ffb8adb90a9aeb64fe5ac0ef3235260921f5689c93e54305 \ No newline at end of file diff --git a/tests/test_mg_max_order/test_mg_max_order.py b/tests/test_mg_max_order/test_mg_max_order.py index 088f6914ba..da699316ca 100644 --- a/tests/test_mg_max_order/test_mg_max_order.py +++ b/tests/test_mg_max_order/test_mg_max_order.py @@ -10,23 +10,22 @@ import openmc class MGNuclideInputSet(MGInputSet): def build_default_materials_and_geometry(self): # Define materials needed for 1D/1G slab problem - uo2_data = openmc.Macroscopic('uo2_iso', '71c') + uo2_data = openmc.Macroscopic('uo2_iso') uo2 = openmc.Material(name='UO2', material_id=1) uo2.set_density('macro', 1.0) uo2.add_macroscopic(uo2_data) - clad_data = openmc.Macroscopic('clad_iso', '71c') + clad_data = openmc.Macroscopic('clad_iso') clad = openmc.Material(name='Clad', material_id=2) clad.set_density('macro', 1.0) clad.add_macroscopic(clad_data) - water_data = openmc.Macroscopic('lwtr_iso', '71c') + water_data = openmc.Macroscopic('lwtr_iso') water = openmc.Material(name='LWTR', material_id=3) water.set_density('macro', 1.0) water.add_macroscopic(water_data) # Define the materials file. - self.materials.default_xs = '71c' self.materials += (uo2, clad, water) # Define surfaces. diff --git a/tests/test_mg_nuclide/inputs_true.dat b/tests/test_mg_nuclide/inputs_true.dat index e0af3352b2..18811f2854 100644 --- a/tests/test_mg_nuclide/inputs_true.dat +++ b/tests/test_mg_nuclide/inputs_true.dat @@ -1 +1 @@ -0efba3dd7882fdd38756d0a8f01ff00d7a1abdaab6430b3f090f3339e552448453bbb733852b6bd6ff09608d923c282f168320f942fc2eb3a45610873c588734 \ No newline at end of file +be296da93031694b2915e1a10e3e6fd663d612cdd29a84745e3ccb0065c088b4bcda45f6919962f6ee784efe52ebe178bf7d3ce019859637ae57c2da1e240a04 \ No newline at end of file diff --git a/tests/test_mg_tallies/inputs_true.dat b/tests/test_mg_tallies/inputs_true.dat index 41bbd2136e..e1f3385a43 100644 --- a/tests/test_mg_tallies/inputs_true.dat +++ b/tests/test_mg_tallies/inputs_true.dat @@ -1 +1 @@ -6c437c3f9281c52a80a9b166971aa0f5db7ff8b6cf65c79b6d7bf294fad30cc7044f6a665cd9059f8580441bcbb581f7152ff5bccbc21fbcc407847ea6fe3306 \ No newline at end of file +b607875dcaecb7110e396a62100182818b8b2853ec9921194b7ab00d6156373b01394ad8bd729babf7d258e6d9c599f6944c6857cd9d2f65ea98e245ee3cf010 \ No newline at end of file diff --git a/tests/test_mg_tallies/results_true.dat b/tests/test_mg_tallies/results_true.dat index 4a654639af..cb0498e511 100644 --- a/tests/test_mg_tallies/results_true.dat +++ b/tests/test_mg_tallies/results_true.dat @@ -11,166 +11,6 @@ tally 1: 3.574150E-04 9.366009E-02 2.196850E-03 -2.410307E+00 -1.211320E+00 -7.104710E-02 -1.056830E-03 -3.619111E+00 -2.712466E+00 -3.046789E-02 -2.019483E-04 -7.553639E-02 -1.241275E-03 -2.616860E+00 -1.407243E+00 -7.221083E-02 -1.059301E-03 -3.719840E+00 -2.827103E+00 -2.963219E-02 -1.775955E-04 -7.346451E-02 -1.091590E-03 -2.383417E+00 -1.171863E+00 -6.968054E-02 -9.924374E-04 -3.486989E+00 -2.493855E+00 -2.962148E-02 -1.817051E-04 -7.343795E-02 -1.116850E-03 -2.177844E+00 -9.998272E-01 -6.808817E-02 -9.543925E-04 -3.302614E+00 -2.268097E+00 -3.001326E-02 -1.847730E-04 -7.440926E-02 -1.135706E-03 -2.585363E+00 -1.416531E+00 -7.208386E-02 -1.068367E-03 -3.721777E+00 -2.868016E+00 -2.981132E-02 -1.871051E-04 -7.390860E-02 -1.150041E-03 -2.740199E+00 -1.663131E+00 -8.719535E-02 -1.596752E-03 -4.146740E+00 -3.682203E+00 -3.870935E-02 -3.136109E-04 -9.596871E-02 -1.927608E-03 -2.212799E+00 -1.000035E+00 -7.449165E-02 -1.135538E-03 -3.466616E+00 -2.419923E+00 -3.399202E-02 -2.463541E-04 -8.427346E-02 -1.514215E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 2.099094E+00 8.919271E-01 7.540489E-02 @@ -181,166 +21,6 @@ tally 1: 2.711517E-04 8.768256E-02 1.666633E-03 -2.413065E+00 -1.186499E+00 -7.505466E-02 -1.154624E-03 -3.609948E+00 -2.664048E+00 -3.294274E-02 -2.242161E-04 -8.167207E-02 -1.378144E-03 -2.536174E+00 -1.301621E+00 -7.790327E-02 -1.242427E-03 -3.836384E+00 -2.980367E+00 -3.409705E-02 -2.443384E-04 -8.453386E-02 -1.501825E-03 -2.666159E+00 -1.492268E+00 -7.417343E-02 -1.141120E-03 -3.912196E+00 -3.186439E+00 -3.075257E-02 -1.953163E-04 -7.624217E-02 -1.200511E-03 -2.459342E+00 -1.286534E+00 -6.409323E-02 -8.519553E-04 -3.511461E+00 -2.568245E+00 -2.550853E-02 -1.387171E-04 -6.324108E-02 -8.526242E-04 -3.227353E+00 -2.189454E+00 -8.161989E-02 -1.366996E-03 -4.465292E+00 -4.143037E+00 -3.169508E-02 -2.069605E-04 -7.857885E-02 -1.272082E-03 -3.006650E+00 -1.972749E+00 -8.846181E-02 -1.643195E-03 -4.449165E+00 -4.222523E+00 -3.779771E-02 -2.999515E-04 -9.370858E-02 -1.843651E-03 -2.591189E+00 -1.530310E+00 -7.305643E-02 -1.114250E-03 -3.732882E+00 -3.031120E+00 -3.039294E-02 -1.919600E-04 -7.535057E-02 -1.179882E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 2.667561E+00 1.528159E+00 6.981409E-02 @@ -351,166 +31,6 @@ tally 1: 1.628195E-04 6.863038E-02 1.000769E-03 -2.579691E+00 -1.399684E+00 -7.252523E-02 -1.085979E-03 -3.762646E+00 -2.966415E+00 -3.021298E-02 -1.872587E-04 -7.490441E-02 -1.150985E-03 -2.326398E+00 -1.111745E+00 -6.380790E-02 -8.422824E-04 -3.373074E+00 -2.338678E+00 -2.619114E-02 -1.463613E-04 -6.493342E-02 -8.996094E-04 -2.689651E+00 -1.483190E+00 -8.007622E-02 -1.328579E-03 -4.015410E+00 -3.294872E+00 -3.443210E-02 -2.525628E-04 -8.536450E-02 -1.552377E-03 -2.712538E+00 -1.496273E+00 -7.040893E-02 -1.033599E-03 -3.801423E+00 -2.967673E+00 -2.785218E-02 -1.687241E-04 -6.905150E-02 -1.037062E-03 -3.101358E+00 -2.022582E+00 -8.316566E-02 -1.469875E-03 -4.433641E+00 -4.167950E+00 -3.363316E-02 -2.428472E-04 -8.338377E-02 -1.492660E-03 -2.669269E+00 -1.482479E+00 -7.250461E-02 -1.097959E-03 -3.815372E+00 -3.039000E+00 -2.952621E-02 -1.837209E-04 -7.320176E-02 -1.129240E-03 -2.719836E+00 -1.670890E+00 -8.176774E-02 -1.472662E-03 -4.030045E+00 -3.607044E+00 -3.530219E-02 -2.721266E-04 -8.752165E-02 -1.672625E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 2.643152E+00 1.461242E+00 7.777503E-02 @@ -521,166 +41,6 @@ tally 1: 2.353505E-04 8.228231E-02 1.446581E-03 -2.707136E+00 -1.528526E+00 -7.153411E-02 -1.046460E-03 -3.793295E+00 -2.976791E+00 -2.857458E-02 -1.671752E-04 -7.084247E-02 -1.027542E-03 -2.745209E+00 -1.561299E+00 -7.557988E-02 -1.164281E-03 -3.914803E+00 -3.154166E+00 -3.099509E-02 -1.948889E-04 -7.684344E-02 -1.197884E-03 -3.141608E+00 -2.000672E+00 -8.238823E-02 -1.366316E-03 -4.442048E+00 -3.976219E+00 -3.282615E-02 -2.177028E-04 -8.138301E-02 -1.338110E-03 -3.078971E+00 -1.928690E+00 -8.927133E-02 -1.655293E-03 -4.508330E+00 -4.154031E+00 -3.778191E-02 -3.038622E-04 -9.366939E-02 -1.867688E-03 -3.342682E+00 -2.353374E+00 -9.542381E-02 -1.892530E-03 -4.916807E+00 -5.068483E+00 -4.010858E-02 -3.330650E-04 -9.943770E-02 -2.047183E-03 -2.906350E+00 -1.760817E+00 -8.559496E-02 -1.527401E-03 -4.338708E+00 -3.888336E+00 -3.663301E-02 -2.834528E-04 -9.082102E-02 -1.742242E-03 -2.201534E+00 -1.026489E+00 -7.361463E-02 -1.156634E-03 -3.444005E+00 -2.510736E+00 -3.352726E-02 -2.491193E-04 -8.312121E-02 -1.531211E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 2.379478E+00 1.220072E+00 7.149541E-02 @@ -691,166 +51,6 @@ tally 1: 1.953397E-04 7.681538E-02 1.200655E-03 -3.155079E+00 -2.066218E+00 -9.171950E-02 -1.711836E-03 -4.700403E+00 -4.503318E+00 -3.904100E-02 -3.167906E-04 -9.679096E-02 -1.947152E-03 -2.737388E+00 -1.515779E+00 -7.304714E-02 -1.077128E-03 -3.854064E+00 -2.996781E+00 -2.937470E-02 -1.746013E-04 -7.282614E-02 -1.073187E-03 -3.294568E+00 -2.201280E+00 -8.370459E-02 -1.449531E-03 -4.567777E+00 -4.247816E+00 -3.258414E-02 -2.266289E-04 -8.078302E-02 -1.392974E-03 -3.040055E+00 -1.908677E+00 -8.543146E-02 -1.469528E-03 -4.395363E+00 -3.943052E+00 -3.551022E-02 -2.539139E-04 -8.803740E-02 -1.560681E-03 -2.733720E+00 -1.608810E+00 -7.575232E-02 -1.234497E-03 -3.955386E+00 -3.353987E+00 -3.126476E-02 -2.114507E-04 -7.751200E-02 -1.299681E-03 -2.633801E+00 -1.566751E+00 -7.851898E-02 -1.276803E-03 -3.867974E+00 -3.237952E+00 -3.370851E-02 -2.331450E-04 -8.357057E-02 -1.433025E-03 -2.649820E+00 -1.500516E+00 -6.849773E-02 -9.733415E-04 -3.744876E+00 -2.926356E+00 -2.706771E-02 -1.530408E-04 -6.710661E-02 -9.406650E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 3.128432E+00 2.123023E+00 8.683081E-02 @@ -861,166 +61,6 @@ tally 1: 2.733665E-04 8.913952E-02 1.680246E-03 -2.955891E+00 -1.796192E+00 -8.526700E-02 -1.464085E-03 -4.355866E+00 -3.839684E+00 -3.605221E-02 -2.663621E-04 -8.938111E-02 -1.637194E-03 -2.731962E+00 -1.617682E+00 -7.685258E-02 -1.239175E-03 -4.057901E+00 -3.505399E+00 -3.210546E-02 -2.150275E-04 -7.959627E-02 -1.321666E-03 -3.058734E+00 -1.911285E+00 -8.780153E-02 -1.572171E-03 -4.531361E+00 -4.177302E+00 -3.703146E-02 -2.828466E-04 -9.180888E-02 -1.738516E-03 -2.854688E+00 -1.652859E+00 -8.501906E-02 -1.459424E-03 -4.215336E+00 -3.600073E+00 -3.650039E-02 -2.691434E-04 -9.049224E-02 -1.654289E-03 -2.532385E+00 -1.341692E+00 -7.908024E-02 -1.289149E-03 -3.816608E+00 -3.020090E+00 -3.480705E-02 -2.494950E-04 -8.629409E-02 -1.533520E-03 -2.946914E+00 -1.857842E+00 -7.586572E-02 -1.217999E-03 -4.089763E+00 -3.522165E+00 -2.980738E-02 -1.901498E-04 -7.389883E-02 -1.168755E-03 -2.788908E+00 -1.667764E+00 -7.477958E-02 -1.148212E-03 -4.029335E+00 -3.403340E+00 -3.033277E-02 -1.914118E-04 -7.520139E-02 -1.176512E-03 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 3.320603E+00 2.324411E+00 9.169756E-02 @@ -1031,166 +71,6 @@ tally 1: 3.050758E-04 9.372640E-02 1.875147E-03 -3.157638E+00 -2.088634E+00 -8.917486E-02 -1.627414E-03 -4.530493E+00 -4.262890E+00 -3.711278E-02 -2.791427E-04 -9.201048E-02 -1.715750E-03 -2.826797E+00 -1.654653E+00 -8.798649E-02 -1.562942E-03 -4.238099E+00 -3.671654E+00 -3.864939E-02 -3.007708E-04 -9.582007E-02 -1.848687E-03 -2.639291E+00 -1.470166E+00 -8.380168E-02 -1.469150E-03 -3.995402E+00 -3.337545E+00 -3.720130E-02 -2.907469E-04 -9.222996E-02 -1.787075E-03 -2.563883E+00 -1.375196E+00 -8.901196E-02 -1.610331E-03 -4.042903E+00 -3.361278E+00 -4.116155E-02 -3.428545E-04 -1.020482E-01 -2.107354E-03 -2.651467E+00 -1.472579E+00 -7.547436E-02 -1.201468E-03 -3.877983E+00 -3.154531E+00 -3.166886E-02 -2.150564E-04 -7.851384E-02 -1.321843E-03 -2.884789E+00 -1.801722E+00 -7.517555E-02 -1.168857E-03 -4.085136E+00 -3.522983E+00 -2.985774E-02 -1.859368E-04 -7.402368E-02 -1.142860E-03 -2.810664E+00 -1.609682E+00 -6.917229E-02 -9.875658E-04 -3.854296E+00 -3.029615E+00 -2.634304E-02 -1.483398E-04 -6.531000E-02 -9.117703E-04 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 3.709821E+00 2.847102E+00 1.037249E-01 @@ -1201,6 +81,166 @@ tally 1: 3.964777E-04 1.065039E-01 2.436949E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.410307E+00 +1.211320E+00 +7.104710E-02 +1.056830E-03 +3.619111E+00 +2.712466E+00 +3.046789E-02 +2.019483E-04 +7.553639E-02 +1.241275E-03 +2.413065E+00 +1.186499E+00 +7.505466E-02 +1.154624E-03 +3.609948E+00 +2.664048E+00 +3.294274E-02 +2.242161E-04 +8.167207E-02 +1.378144E-03 +2.579691E+00 +1.399684E+00 +7.252523E-02 +1.085979E-03 +3.762646E+00 +2.966415E+00 +3.021298E-02 +1.872587E-04 +7.490441E-02 +1.150985E-03 +2.707136E+00 +1.528526E+00 +7.153411E-02 +1.046460E-03 +3.793295E+00 +2.976791E+00 +2.857458E-02 +1.671752E-04 +7.084247E-02 +1.027542E-03 +3.155079E+00 +2.066218E+00 +9.171950E-02 +1.711836E-03 +4.700403E+00 +4.503318E+00 +3.904100E-02 +3.167906E-04 +9.679096E-02 +1.947152E-03 +2.955891E+00 +1.796192E+00 +8.526700E-02 +1.464085E-03 +4.355866E+00 +3.839684E+00 +3.605221E-02 +2.663621E-04 +8.938111E-02 +1.637194E-03 +3.157638E+00 +2.088634E+00 +8.917486E-02 +1.627414E-03 +4.530493E+00 +4.262890E+00 +3.711278E-02 +2.791427E-04 +9.201048E-02 +1.715750E-03 3.237824E+00 2.159909E+00 9.708289E-02 @@ -1211,6 +251,166 @@ tally 1: 3.503645E-04 1.036145E-01 2.153514E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.616860E+00 +1.407243E+00 +7.221083E-02 +1.059301E-03 +3.719840E+00 +2.827103E+00 +2.963219E-02 +1.775955E-04 +7.346451E-02 +1.091590E-03 +2.536174E+00 +1.301621E+00 +7.790327E-02 +1.242427E-03 +3.836384E+00 +2.980367E+00 +3.409705E-02 +2.443384E-04 +8.453386E-02 +1.501825E-03 +2.326398E+00 +1.111745E+00 +6.380790E-02 +8.422824E-04 +3.373074E+00 +2.338678E+00 +2.619114E-02 +1.463613E-04 +6.493342E-02 +8.996094E-04 +2.745209E+00 +1.561299E+00 +7.557988E-02 +1.164281E-03 +3.914803E+00 +3.154166E+00 +3.099509E-02 +1.948889E-04 +7.684344E-02 +1.197884E-03 +2.737388E+00 +1.515779E+00 +7.304714E-02 +1.077128E-03 +3.854064E+00 +2.996781E+00 +2.937470E-02 +1.746013E-04 +7.282614E-02 +1.073187E-03 +2.731962E+00 +1.617682E+00 +7.685258E-02 +1.239175E-03 +4.057901E+00 +3.505399E+00 +3.210546E-02 +2.150275E-04 +7.959627E-02 +1.321666E-03 +2.826797E+00 +1.654653E+00 +8.798649E-02 +1.562942E-03 +4.238099E+00 +3.671654E+00 +3.864939E-02 +3.007708E-04 +9.582007E-02 +1.848687E-03 2.503072E+00 1.321745E+00 6.623202E-02 @@ -1221,6 +421,166 @@ tally 1: 1.469478E-04 6.579875E-02 9.032144E-04 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.383417E+00 +1.171863E+00 +6.968054E-02 +9.924374E-04 +3.486989E+00 +2.493855E+00 +2.962148E-02 +1.817051E-04 +7.343795E-02 +1.116850E-03 +2.666159E+00 +1.492268E+00 +7.417343E-02 +1.141120E-03 +3.912196E+00 +3.186439E+00 +3.075257E-02 +1.953163E-04 +7.624217E-02 +1.200511E-03 +2.689651E+00 +1.483190E+00 +8.007622E-02 +1.328579E-03 +4.015410E+00 +3.294872E+00 +3.443210E-02 +2.525628E-04 +8.536450E-02 +1.552377E-03 +3.141608E+00 +2.000672E+00 +8.238823E-02 +1.366316E-03 +4.442048E+00 +3.976219E+00 +3.282615E-02 +2.177028E-04 +8.138301E-02 +1.338110E-03 +3.294568E+00 +2.201280E+00 +8.370459E-02 +1.449531E-03 +4.567777E+00 +4.247816E+00 +3.258414E-02 +2.266289E-04 +8.078302E-02 +1.392974E-03 +3.058734E+00 +1.911285E+00 +8.780153E-02 +1.572171E-03 +4.531361E+00 +4.177302E+00 +3.703146E-02 +2.828466E-04 +9.180888E-02 +1.738516E-03 +2.639291E+00 +1.470166E+00 +8.380168E-02 +1.469150E-03 +3.995402E+00 +3.337545E+00 +3.720130E-02 +2.907469E-04 +9.222996E-02 +1.787075E-03 2.360183E+00 1.196310E+00 7.336179E-02 @@ -1231,6 +591,166 @@ tally 1: 2.218615E-04 7.989359E-02 1.363671E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.177844E+00 +9.998272E-01 +6.808817E-02 +9.543925E-04 +3.302614E+00 +2.268097E+00 +3.001326E-02 +1.847730E-04 +7.440926E-02 +1.135706E-03 +2.459342E+00 +1.286534E+00 +6.409323E-02 +8.519553E-04 +3.511461E+00 +2.568245E+00 +2.550853E-02 +1.387171E-04 +6.324108E-02 +8.526242E-04 +2.712538E+00 +1.496273E+00 +7.040893E-02 +1.033599E-03 +3.801423E+00 +2.967673E+00 +2.785218E-02 +1.687241E-04 +6.905150E-02 +1.037062E-03 +3.078971E+00 +1.928690E+00 +8.927133E-02 +1.655293E-03 +4.508330E+00 +4.154031E+00 +3.778191E-02 +3.038622E-04 +9.366939E-02 +1.867688E-03 +3.040055E+00 +1.908677E+00 +8.543146E-02 +1.469528E-03 +4.395363E+00 +3.943052E+00 +3.551022E-02 +2.539139E-04 +8.803740E-02 +1.560681E-03 +2.854688E+00 +1.652859E+00 +8.501906E-02 +1.459424E-03 +4.215336E+00 +3.600073E+00 +3.650039E-02 +2.691434E-04 +9.049224E-02 +1.654289E-03 +2.563883E+00 +1.375196E+00 +8.901196E-02 +1.610331E-03 +4.042903E+00 +3.361278E+00 +4.116155E-02 +3.428545E-04 +1.020482E-01 +2.107354E-03 2.353136E+00 1.260383E+00 7.514099E-02 @@ -1241,6 +761,166 @@ tally 1: 2.280172E-04 8.303643E-02 1.401507E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.585363E+00 +1.416531E+00 +7.208386E-02 +1.068367E-03 +3.721777E+00 +2.868016E+00 +2.981132E-02 +1.871051E-04 +7.390860E-02 +1.150041E-03 +3.227353E+00 +2.189454E+00 +8.161989E-02 +1.366996E-03 +4.465292E+00 +4.143037E+00 +3.169508E-02 +2.069605E-04 +7.857885E-02 +1.272082E-03 +3.101358E+00 +2.022582E+00 +8.316566E-02 +1.469875E-03 +4.433641E+00 +4.167950E+00 +3.363316E-02 +2.428472E-04 +8.338377E-02 +1.492660E-03 +3.342682E+00 +2.353374E+00 +9.542381E-02 +1.892530E-03 +4.916807E+00 +5.068483E+00 +4.010858E-02 +3.330650E-04 +9.943770E-02 +2.047183E-03 +2.733720E+00 +1.608810E+00 +7.575232E-02 +1.234497E-03 +3.955386E+00 +3.353987E+00 +3.126476E-02 +2.114507E-04 +7.751200E-02 +1.299681E-03 +2.532385E+00 +1.341692E+00 +7.908024E-02 +1.289149E-03 +3.816608E+00 +3.020090E+00 +3.480705E-02 +2.494950E-04 +8.629409E-02 +1.533520E-03 +2.651467E+00 +1.472579E+00 +7.547436E-02 +1.201468E-03 +3.877983E+00 +3.154531E+00 +3.166886E-02 +2.150564E-04 +7.851384E-02 +1.321843E-03 2.404559E+00 1.241962E+00 6.952417E-02 @@ -1251,6 +931,166 @@ tally 1: 1.929942E-04 7.306514E-02 1.186238E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.740199E+00 +1.663131E+00 +8.719535E-02 +1.596752E-03 +4.146740E+00 +3.682203E+00 +3.870935E-02 +3.136109E-04 +9.596871E-02 +1.927608E-03 +3.006650E+00 +1.972749E+00 +8.846181E-02 +1.643195E-03 +4.449165E+00 +4.222523E+00 +3.779771E-02 +2.999515E-04 +9.370858E-02 +1.843651E-03 +2.669269E+00 +1.482479E+00 +7.250461E-02 +1.097959E-03 +3.815372E+00 +3.039000E+00 +2.952621E-02 +1.837209E-04 +7.320176E-02 +1.129240E-03 +2.906350E+00 +1.760817E+00 +8.559496E-02 +1.527401E-03 +4.338708E+00 +3.888336E+00 +3.663301E-02 +2.834528E-04 +9.082102E-02 +1.742242E-03 +2.633801E+00 +1.566751E+00 +7.851898E-02 +1.276803E-03 +3.867974E+00 +3.237952E+00 +3.370851E-02 +2.331450E-04 +8.357057E-02 +1.433025E-03 +2.946914E+00 +1.857842E+00 +7.586572E-02 +1.217999E-03 +4.089763E+00 +3.522165E+00 +2.980738E-02 +1.901498E-04 +7.389883E-02 +1.168755E-03 +2.884789E+00 +1.801722E+00 +7.517555E-02 +1.168857E-03 +4.085136E+00 +3.522983E+00 +2.985774E-02 +1.859368E-04 +7.402368E-02 +1.142860E-03 2.740499E+00 1.588007E+00 7.592011E-02 @@ -1261,6 +1101,166 @@ tally 1: 2.121705E-04 7.770960E-02 1.304106E-03 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.212799E+00 +1.000035E+00 +7.449165E-02 +1.135538E-03 +3.466616E+00 +2.419923E+00 +3.399202E-02 +2.463541E-04 +8.427346E-02 +1.514215E-03 +2.591189E+00 +1.530310E+00 +7.305643E-02 +1.114250E-03 +3.732882E+00 +3.031120E+00 +3.039294E-02 +1.919600E-04 +7.535057E-02 +1.179882E-03 +2.719836E+00 +1.670890E+00 +8.176774E-02 +1.472662E-03 +4.030045E+00 +3.607044E+00 +3.530219E-02 +2.721266E-04 +8.752165E-02 +1.672625E-03 +2.201534E+00 +1.026489E+00 +7.361463E-02 +1.156634E-03 +3.444005E+00 +2.510736E+00 +3.352726E-02 +2.491193E-04 +8.312121E-02 +1.531211E-03 +2.649820E+00 +1.500516E+00 +6.849773E-02 +9.733415E-04 +3.744876E+00 +2.926356E+00 +2.706771E-02 +1.530408E-04 +6.710661E-02 +9.406650E-04 +2.788908E+00 +1.667764E+00 +7.477958E-02 +1.148212E-03 +4.029335E+00 +3.403340E+00 +3.033277E-02 +1.914118E-04 +7.520139E-02 +1.176512E-03 +2.810664E+00 +1.609682E+00 +6.917229E-02 +9.875658E-04 +3.854296E+00 +3.029615E+00 +2.634304E-02 +1.483398E-04 +6.531000E-02 +9.117703E-04 2.647586E+00 1.416013E+00 7.421099E-02 diff --git a/tests/test_mgxs_library_ce_to_mg/inputs_true.dat b/tests/test_mgxs_library_ce_to_mg/inputs_true.dat index 332c2df5fd..7b30f91223 100644 --- a/tests/test_mgxs_library_ce_to_mg/inputs_true.dat +++ b/tests/test_mgxs_library_ce_to_mg/inputs_true.dat @@ -1 +1 @@ -fb9c9180f692198548ca14543b29a8b623b382a19932999b2140ca4dd440f2102ba2fdbcb500ede3b8829aa85e1b4498151d280f1422d2d6b1bb5789aff34d71 \ No newline at end of file +5c35e26926a43abf3ddcf782b09d96ce82d447a7db9ee9994c0aa811e431f8c06c11ce022c2a6ccf8d5f79f1cdedee2e8c20ca6d1e7cc5129ebcfae9568b2f87 \ No newline at end of file diff --git a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py index 0f7cba4a87..baa54b018b 100644 --- a/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py +++ b/tests/test_mgxs_library_ce_to_mg/test_mgxs_library_ce_to_mg.py @@ -83,6 +83,7 @@ class MGXSTestHarness(PyAPITestHarness): returncode = openmc.run(openmc_exec=self._opts.exe) def _cleanup(self): + return super(MGXSTestHarness, self)._cleanup() f = os.path.join(os.getcwd(), 'mgxs.xml') if os.path.exists(f): diff --git a/tests/test_mgxs_library_condense/inputs_true.dat b/tests/test_mgxs_library_condense/inputs_true.dat index 0c648376e8..328d68b05f 100644 --- a/tests/test_mgxs_library_condense/inputs_true.dat +++ b/tests/test_mgxs_library_condense/inputs_true.dat @@ -1 +1 @@ -e2cdca7ea5b3532050af5b12fac26d7ef212d2696bb1b73cdd00929b2243c40d100ad02438c7b090555b49815d0de6c48cf1b4ebf437a48bc80c2d2b4bad292e \ No newline at end of file +2b2a2f5778b03f87d20fa6da96cc19db0489f69d4d5f0cac02dd407fd8e53a082081bfef35c4310cb2e0651254766d499e89279e711fd6fd93f913c964855839 \ No newline at end of file diff --git a/tests/test_mgxs_library_condense/results_true.dat b/tests/test_mgxs_library_condense/results_true.dat index ae768cbe67..d1a964a860 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -40,6 +40,27 @@ 0 10000 1 total 4.996730e-07 3.650635e-08 material group in nuclide mean std. dev. 0 10000 1 total 0.090004 0.006367 + material delayedgroup group in nuclide mean std. dev. +0 10000 1 1 total 0.000021 0.000001 +1 10000 2 1 total 0.000110 0.000008 +2 10000 3 1 total 0.000107 0.000007 +3 10000 4 1 total 0.000249 0.000017 +4 10000 5 1 total 0.000112 0.000007 +5 10000 6 1 total 0.000046 0.000003 + material delayedgroup group out nuclide mean std. dev. +0 10000 1 1 total 0.0 0.000000 +1 10000 2 1 total 1.0 0.869128 +2 10000 3 1 total 1.0 1.414214 +3 10000 4 1 total 1.0 0.360359 +4 10000 5 1 total 0.0 0.000000 +5 10000 6 1 total 0.0 0.000000 + material delayedgroup group in nuclide mean std. dev. +0 10000 1 1 total 0.000227 0.000020 +1 10000 2 1 total 0.001214 0.000108 +2 10000 3 1 total 0.001184 0.000104 +3 10000 4 1 total 0.002752 0.000240 +4 10000 5 1 total 0.001231 0.000105 +5 10000 6 1 total 0.000512 0.000044 material group in nuclide mean std. dev. 0 10001 1 total 0.311594 0.013793 material group in nuclide mean std. dev. @@ -82,6 +103,27 @@ 0 10001 1 total 5.454760e-07 4.949800e-08 material group in nuclide mean std. dev. 0 10001 1 total 0.0 0.0 + material delayedgroup group in nuclide mean std. dev. +0 10001 1 1 total 0.0 0.0 +1 10001 2 1 total 0.0 0.0 +2 10001 3 1 total 0.0 0.0 +3 10001 4 1 total 0.0 0.0 +4 10001 5 1 total 0.0 0.0 +5 10001 6 1 total 0.0 0.0 + material delayedgroup group out nuclide mean std. dev. +0 10001 1 1 total 0.0 0.0 +1 10001 2 1 total 0.0 0.0 +2 10001 3 1 total 0.0 0.0 +3 10001 4 1 total 0.0 0.0 +4 10001 5 1 total 0.0 0.0 +5 10001 6 1 total 0.0 0.0 + material delayedgroup group in nuclide mean std. dev. +0 10001 1 1 total 0.0 0.0 +1 10001 2 1 total 0.0 0.0 +2 10001 3 1 total 0.0 0.0 +3 10001 4 1 total 0.0 0.0 +4 10001 5 1 total 0.0 0.0 +5 10001 6 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 10002 1 total 0.904999 0.043964 material group in nuclide mean std. dev. @@ -124,3 +166,24 @@ 0 10002 1 total 5.773006e-07 5.322132e-08 material group in nuclide mean std. dev. 0 10002 1 total 0.0 0.0 + material delayedgroup group in nuclide mean std. dev. +0 10002 1 1 total 0.0 0.0 +1 10002 2 1 total 0.0 0.0 +2 10002 3 1 total 0.0 0.0 +3 10002 4 1 total 0.0 0.0 +4 10002 5 1 total 0.0 0.0 +5 10002 6 1 total 0.0 0.0 + material delayedgroup group out nuclide mean std. dev. +0 10002 1 1 total 0.0 0.0 +1 10002 2 1 total 0.0 0.0 +2 10002 3 1 total 0.0 0.0 +3 10002 4 1 total 0.0 0.0 +4 10002 5 1 total 0.0 0.0 +5 10002 6 1 total 0.0 0.0 + material delayedgroup group in nuclide mean std. dev. +0 10002 1 1 total 0.0 0.0 +1 10002 2 1 total 0.0 0.0 +2 10002 3 1 total 0.0 0.0 +3 10002 4 1 total 0.0 0.0 +4 10002 5 1 total 0.0 0.0 +5 10002 6 1 total 0.0 0.0 diff --git a/tests/test_mgxs_library_condense/test_mgxs_library_condense.py b/tests/test_mgxs_library_condense/test_mgxs_library_condense.py index 5571b59f2e..d3f2bc08e8 100644 --- a/tests/test_mgxs_library_condense/test_mgxs_library_condense.py +++ b/tests/test_mgxs_library_condense/test_mgxs_library_condense.py @@ -23,12 +23,18 @@ class MGXSTestHarness(PyAPITestHarness): energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, 20.]) + # Initialize a six-delayed-group structure + delayed_groups = list(range(1,7)) + # Initialize MGXS Library for a few cross section types self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = False + # Test all MGXS types - self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES + self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES + \ + openmc.mgxs.MDGXS_TYPES self.mgxs_lib.energy_groups = energy_groups + self.mgxs_lib.delayed_groups = delayed_groups self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'material' self.mgxs_lib.build_library() diff --git a/tests/test_mgxs_library_distribcell/inputs_true.dat b/tests/test_mgxs_library_distribcell/inputs_true.dat index 055ce35a57..67509bd510 100644 --- a/tests/test_mgxs_library_distribcell/inputs_true.dat +++ b/tests/test_mgxs_library_distribcell/inputs_true.dat @@ -1 +1 @@ -2d948f3b12293294eaeca231a3df9d51195379e8bb38dd3e68d3bc512a7d08ed52a1109054ca381684ec127268710f6d6e9210ac8154c9b379608e996627624a \ No newline at end of file +ad427594bd8a68ad35382bc34b5932e7c78480b6e327caf63782d563fd6e6e5fb4e7b0dfd9094394a5db092f789c473dbb08cb6b3d0c0296edcfc247dbe95d6f \ No newline at end of file diff --git a/tests/test_mgxs_library_distribcell/results_true.dat b/tests/test_mgxs_library_distribcell/results_true.dat index c21ca09e99..5a996c8fa9 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,42 +1,63 @@ avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 1.145934 0.553822 +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.457353 0.010474 avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.718919 0.520644 +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.405649 0.015784 avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.718919 0.520644 +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.405641 0.015787 avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.019762 0.010629 +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.066556 0.00251 avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.019762 0.010629 - avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 - avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 - avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.028979 0.002712 avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 1.126172 0.54344 +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.037577 0.001487 avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 1.142547 0.570131 +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.092377 0.003628 + avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 7.276707 0.287579 + avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.390797 0.008717 + avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.387332 0.014241 avg(distribcell) group in group out nuclide moment mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P0 1.142547 0.570131 -1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P1 0.447381 0.216322 -2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P2 0.141202 0.066504 -3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P3 0.039228 0.024621 +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P0 0.387009 0.014230 +1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P1 0.047179 0.004923 +2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P2 0.015713 0.003654 +3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P3 0.005378 0.003137 avg(distribcell) group in group out nuclide moment mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P0 1.142547 0.570131 -1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P1 0.447381 0.216322 -2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P2 0.141202 0.066504 -3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P3 0.039228 0.024621 - avg(distribcell) group in group out nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 1.0 0.529717 - avg(distribcell) group in group out nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.0 0.0 +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P0 0.387332 0.014241 +1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P1 0.047187 0.004933 +2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P2 0.015727 0.003654 +3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total P3 0.005387 0.003141 + avg(distribcell) group in group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 1.000834 0.037242 + avg(distribcell) group in group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.094516 0.0059 avg(distribcell) group out nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 1.0 0.080455 avg(distribcell) group out nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 - avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.000001 6.946255e-07 - avg(distribcell) group in nuclide mean std. dev. -0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.0 0.0 +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 1.0 0.080541 + avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 5.139437e-07 2.133314e-08 + avg(distribcell) group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 total 0.091725 0.003604 + avg(distribcell) delayedgroup group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.000021 8.253907e-07 +1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 2 1 total 0.000112 4.284000e-06 +2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 3 1 total 0.000109 4.105197e-06 +3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 4 1 total 0.000252 9.271420e-06 +4 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 5 1 total 0.000112 3.888625e-06 +5 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 6 1 total 0.000047 1.625563e-06 + avg(distribcell) delayedgroup group out nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.0 0.000000 +1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 2 1 total 1.0 1.414214 +2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 3 1 total 1.0 1.414214 +3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 4 1 total 0.0 0.000000 +4 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 5 1 total 0.0 0.000000 +5 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 6 1 total 1.0 1.414214 + avg(distribcell) delayedgroup group in nuclide mean std. dev. +0 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 1 1 total 0.000227 0.000012 +1 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 2 1 total 0.001209 0.000061 +2 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 3 1 total 0.001177 0.000059 +3 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 4 1 total 0.002727 0.000135 +4 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 5 1 total 0.001210 0.000058 +5 (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,... 6 1 total 0.000504 0.000024 diff --git a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py index 30593e54b5..940985d916 100644 --- a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py +++ b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py @@ -6,29 +6,39 @@ import glob import hashlib sys.path.insert(0, os.pardir) from testing_harness import PyAPITestHarness +from input_set import AssemblyInputSet import openmc import openmc.mgxs class MGXSTestHarness(PyAPITestHarness): def _build_inputs(self): + # Set the input set to use the pincell model + self._input_set = AssemblyInputSet() + # Generate inputs using parent class routine super(MGXSTestHarness, self)._build_inputs() # Initialize a one-group structure energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 20.]) + # Initialize a six-delayed-group structure + delayed_groups = list(range(1,7)) + # Initialize MGXS Library for a few cross section types # for one material-filled cell in the geometry self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = False + # Test all MGXS types - self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES + self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES + \ + openmc.mgxs.MDGXS_TYPES self.mgxs_lib.energy_groups = energy_groups + self.mgxs_lib.delayed_groups = delayed_groups self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'distribcell' - material_cells = self.mgxs_lib.openmc_geometry.get_all_material_cells() - self.mgxs_lib.domains = [material_cells[-1]] + cells = self.mgxs_lib.openmc_geometry.get_all_material_cells() + self.mgxs_lib.domains = [c for c in cells if c.name == 'fuel'] self.mgxs_lib.build_library() # Initialize a tallies file diff --git a/tests/test_mgxs_library_hdf5/inputs_true.dat b/tests/test_mgxs_library_hdf5/inputs_true.dat index 0c648376e8..328d68b05f 100644 --- a/tests/test_mgxs_library_hdf5/inputs_true.dat +++ b/tests/test_mgxs_library_hdf5/inputs_true.dat @@ -1 +1 @@ -e2cdca7ea5b3532050af5b12fac26d7ef212d2696bb1b73cdd00929b2243c40d100ad02438c7b090555b49815d0de6c48cf1b4ebf437a48bc80c2d2b4bad292e \ No newline at end of file +2b2a2f5778b03f87d20fa6da96cc19db0489f69d4d5f0cac02dd407fd8e53a082081bfef35c4310cb2e0651254766d499e89279e711fd6fd93f913c964855839 \ No newline at end of file diff --git a/tests/test_mgxs_library_hdf5/results_true.dat b/tests/test_mgxs_library_hdf5/results_true.dat index b2bd28f279..3108573b35 100644 --- a/tests/test_mgxs_library_hdf5/results_true.dat +++ b/tests/test_mgxs_library_hdf5/results_true.dat @@ -72,6 +72,45 @@ domain=10000 type=inverse-velocity domain=10000 type=prompt-nu-fission [ 0.01923922 0.46671903] [ 0.00130951 0.04141087] +domain=10000 type=delayed-nu-fission +[[ 2.29808234e-05 1.06974158e-04] + [ 1.43606337e-04 5.52167907e-04] + [ 1.51382216e-04 5.27147681e-04] + [ 7.42603178e-05 2.22018043e-04] + [ 4.14908454e-05 9.10244403e-05] + [ 1.70016000e-05 3.81298119e-05]] +[[ 1.66363133e-06 9.49156242e-06] + [ 1.05907806e-05 4.89925426e-05] + [ 1.12671238e-05 4.67725567e-05] + [ 5.22610273e-06 1.87563195e-05] + [ 2.99830766e-06 7.68984041e-06] + [ 1.22654684e-06 3.22124663e-06]] +domain=10000 type=chi-delayed +[[ 0. 0.] + [ 1. 0.] + [ 1. 0.] + [ 1. 0.] + [ 0. 0.] + [ 0. 0.]] +[[ 0. 0. ] + [ 0.86912776 0. ] + [ 1.41421356 0. ] + [ 0.36035904 0. ] + [ 0. 0. ] + [ 0. 0. ]] +domain=10000 type=beta +[[ 4.89188107e-05 2.27713711e-04] + [ 3.05691886e-04 1.17538858e-03] + [ 3.22244241e-04 1.12212853e-03] + [ 3.82159891e-03 1.14255357e-02] + [ 2.13520995e-03 4.68431744e-03] + [ 8.74939644e-04 1.96224379e-03]] +[[ 4.67388620e-06 2.46946810e-05] + [ 2.95223877e-05 1.27466393e-04] + [ 3.12885004e-05 1.21690543e-04] + [ 3.21434855e-04 1.09939816e-03] + [ 1.82980497e-04 4.50738567e-04] + [ 7.48899920e-05 1.88812772e-04]] domain=10001 type=total [ 0.31373767 0.3008214 ] [ 0.0155819 0.02805245] @@ -146,6 +185,45 @@ domain=10001 type=inverse-velocity domain=10001 type=prompt-nu-fission [ 0. 0.] [ 0. 0.] +domain=10001 type=delayed-nu-fission +[[ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.]] +[[ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.]] +domain=10001 type=chi-delayed +[[ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.]] +[[ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.]] +domain=10001 type=beta +[[ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.]] +[[ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.]] domain=10002 type=total [ 0.66457226 2.05238401] [ 0.03121475 0.22434291] @@ -220,3 +298,42 @@ domain=10002 type=inverse-velocity domain=10002 type=prompt-nu-fission [ 0. 0.] [ 0. 0.] +domain=10002 type=delayed-nu-fission +[[ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.]] +[[ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.]] +domain=10002 type=chi-delayed +[[ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.]] +[[ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.]] +domain=10002 type=beta +[[ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.]] +[[ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.] + [ 0. 0.]] diff --git a/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py b/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py index 000a1f8cb9..b4d7e5dbbe 100644 --- a/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py +++ b/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py @@ -24,12 +24,18 @@ class MGXSTestHarness(PyAPITestHarness): energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, 20.]) + # Initialize a six-delayed-group structure + delayed_groups = list(range(1,7)) + # Initialize MGXS Library for a few cross section types self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = False + # Test all MGXS types - self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES + self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES + \ + openmc.mgxs.MDGXS_TYPES self.mgxs_lib.energy_groups = energy_groups + self.mgxs_lib.delayed_groups = delayed_groups self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'material' self.mgxs_lib.build_library() diff --git a/tests/test_mgxs_library_mesh/inputs_true.dat b/tests/test_mgxs_library_mesh/inputs_true.dat index e036b49a26..9e2bc06f18 100644 --- a/tests/test_mgxs_library_mesh/inputs_true.dat +++ b/tests/test_mgxs_library_mesh/inputs_true.dat @@ -1 +1 @@ -a4cd030bea212e45fdb159e75a7fb3d1947e9bf3d0384ac5d37a72298d67dcfdd1b9eb5c6af8ac6e5983bd5b47de9c17a2ea472b467b7222a4909ee070bf1ca3 \ No newline at end of file +68c7695d7ae0367c59155eab05d3fe859cae895170f2cd32d4463af340a9a2035be16221b1eda8e2a1132bfe1b8163ca8d964fb1b23274c232fb10fd88274aea \ No newline at end of file diff --git a/tests/test_mgxs_library_mesh/results_true.dat b/tests/test_mgxs_library_mesh/results_true.dat index 03019cfd3d..b6656d67b4 100644 --- a/tests/test_mgxs_library_mesh/results_true.dat +++ b/tests/test_mgxs_library_mesh/results_true.dat @@ -1,62 +1,62 @@ mesh 1 group in nuclide mean std. dev. x y z 0 1 1 1 1 total 0.640786 0.044177 -1 1 2 1 1 total 0.660597 0.128423 -2 2 1 1 1 total 0.615276 0.104046 +1 1 2 1 1 total 0.615276 0.104046 +2 2 1 1 1 total 0.660597 0.128423 3 2 2 1 1 total 0.646999 0.186709 mesh 1 group in nuclide mean std. dev. x y z 0 1 1 1 1 total 0.36665 0.048814 -1 1 2 1 1 total 0.40784 0.096486 -2 2 1 1 1 total 0.36356 0.074111 +1 1 2 1 1 total 0.36356 0.074111 +2 2 1 1 1 total 0.40784 0.096486 3 2 2 1 1 total 0.41456 0.160443 mesh 1 group in nuclide mean std. dev. x y z 0 1 1 1 1 total 0.366650 0.048814 -1 1 2 1 1 total 0.407840 0.096486 -2 2 1 1 1 total 0.363560 0.074111 +1 1 2 1 1 total 0.363560 0.074111 +2 2 1 1 1 total 0.407840 0.096486 3 2 2 1 1 total 0.414593 0.160436 mesh 1 group in nuclide mean std. dev. x y z 0 1 1 1 1 total 0.025749 0.002863 -1 1 2 1 1 total 0.028400 0.005275 -2 2 1 1 1 total 0.022988 0.004099 +1 1 2 1 1 total 0.022988 0.004099 +2 2 1 1 1 total 0.028400 0.005275 3 2 2 1 1 total 0.027589 0.010350 mesh 1 group in nuclide mean std. dev. x y z 0 1 1 1 1 total 0.015861 0.002876 -1 1 2 1 1 total 0.017280 0.004371 -2 2 1 1 1 total 0.014403 0.003542 +1 1 2 1 1 total 0.014403 0.003542 +2 2 1 1 1 total 0.017280 0.004371 3 2 2 1 1 total 0.018061 0.010110 mesh 1 group in nuclide mean std. dev. x y z 0 1 1 1 1 total 0.009888 0.001077 -1 1 2 1 1 total 0.011121 0.002456 -2 2 1 1 1 total 0.008585 0.001552 +1 1 2 1 1 total 0.008585 0.001552 +2 2 1 1 1 total 0.011121 0.002456 3 2 2 1 1 total 0.009527 0.003659 mesh 1 group in nuclide mean std. dev. x y z 0 1 1 1 1 total 0.026065 0.002907 -1 1 2 1 1 total 0.029084 0.006430 -2 2 1 1 1 total 0.022596 0.004062 +1 1 2 1 1 total 0.022596 0.004062 +2 2 1 1 1 total 0.029084 0.006430 3 2 2 1 1 total 0.025066 0.009687 mesh 1 group in nuclide mean std. dev. x y z 0 1 1 1 1 total 1.938476 0.211550 -1 1 2 1 1 total 2.177360 0.480780 -2 2 1 1 1 total 1.682799 0.303764 +1 1 2 1 1 total 1.682799 0.303764 +2 2 1 1 1 total 2.177360 0.480780 3 2 2 1 1 total 1.864890 0.715661 mesh 1 group in nuclide mean std. dev. x y z 0 1 1 1 1 total 0.615037 0.041754 -1 1 2 1 1 total 0.632196 0.123878 -2 2 1 1 1 total 0.592288 0.100439 +1 1 2 1 1 total 0.592288 0.100439 +2 2 1 1 1 total 0.632196 0.123878 3 2 2 1 1 total 0.619410 0.177190 mesh 1 group in nuclide mean std. dev. x y z 0 1 1 1 1 total 0.584014 0.054315 -1 1 2 1 1 total 0.622514 0.111323 -2 2 1 1 1 total 0.587256 0.084833 +1 1 2 1 1 total 0.587256 0.084833 +2 2 1 1 1 total 0.622514 0.111323 3 2 2 1 1 total 0.613792 0.168612 mesh 1 group in group out nuclide moment mean std. dev. x y z @@ -64,14 +64,14 @@ 1 1 1 1 1 1 total P1 0.243427 0.025488 2 1 1 1 1 1 total P2 0.089236 0.007357 3 1 1 1 1 1 total P3 0.008994 0.005768 -4 1 2 1 1 1 total P0 0.622514 0.111323 -5 1 2 1 1 1 total P1 0.239376 0.042594 -6 1 2 1 1 1 total P2 0.088386 0.017200 -7 1 2 1 1 1 total P3 -0.001243 0.005639 -8 2 1 1 1 1 total P0 0.587256 0.084833 -9 2 1 1 1 1 total P1 0.245120 0.041033 -10 2 1 1 1 1 total P2 0.086784 0.016255 -11 2 1 1 1 1 total P3 0.008660 0.004755 +4 1 2 1 1 1 total P0 0.587256 0.084833 +5 1 2 1 1 1 total P1 0.245120 0.041033 +6 1 2 1 1 1 total P2 0.086784 0.016255 +7 1 2 1 1 1 total P3 0.008660 0.004755 +8 2 1 1 1 1 total P0 0.622514 0.111323 +9 2 1 1 1 1 total P1 0.239376 0.042594 +10 2 1 1 1 1 total P2 0.088386 0.017200 +11 2 1 1 1 1 total P3 -0.001243 0.005639 12 2 2 1 1 1 total P0 0.612950 0.167940 13 2 2 1 1 1 total P1 0.226176 0.061882 14 2 2 1 1 1 total P2 0.086593 0.026126 @@ -82,14 +82,14 @@ 1 1 1 1 1 1 total P1 0.243427 0.025488 2 1 1 1 1 1 total P2 0.089236 0.007357 3 1 1 1 1 1 total P3 0.008994 0.005768 -4 1 2 1 1 1 total P0 0.622514 0.111323 -5 1 2 1 1 1 total P1 0.239376 0.042594 -6 1 2 1 1 1 total P2 0.088386 0.017200 -7 1 2 1 1 1 total P3 -0.001243 0.005639 -8 2 1 1 1 1 total P0 0.587256 0.084833 -9 2 1 1 1 1 total P1 0.245120 0.041033 -10 2 1 1 1 1 total P2 0.086784 0.016255 -11 2 1 1 1 1 total P3 0.008660 0.004755 +4 1 2 1 1 1 total P0 0.587256 0.084833 +5 1 2 1 1 1 total P1 0.245120 0.041033 +6 1 2 1 1 1 total P2 0.086784 0.016255 +7 1 2 1 1 1 total P3 0.008660 0.004755 +8 2 1 1 1 1 total P0 0.622514 0.111323 +9 2 1 1 1 1 total P1 0.239376 0.042594 +10 2 1 1 1 1 total P2 0.088386 0.017200 +11 2 1 1 1 1 total P3 -0.001243 0.005639 12 2 2 1 1 1 total P0 0.613792 0.168612 13 2 2 1 1 1 total P1 0.226142 0.061856 14 2 2 1 1 1 total P2 0.086174 0.025979 @@ -97,36 +97,114 @@ mesh 1 group in group out nuclide mean std. dev. x y z 0 1 1 1 1 1 total 1.000000 0.088094 -1 1 2 1 1 1 total 1.000000 0.160891 -2 2 1 1 1 1 total 1.000000 0.126864 +1 1 2 1 1 1 total 1.000000 0.126864 +2 2 1 1 1 1 total 1.000000 0.160891 3 2 2 1 1 1 total 1.001374 0.305883 mesh 1 group in group out nuclide mean std. dev. x y z 0 1 1 1 1 1 total 0.027395 0.004680 -1 1 2 1 1 1 total 0.022914 0.006025 -2 2 1 1 1 1 total 0.019384 0.002846 +1 1 2 1 1 1 total 0.019384 0.002846 +2 2 1 1 1 1 total 0.022914 0.006025 3 2 2 1 1 1 total 0.029629 0.006292 mesh 1 group out nuclide mean std. dev. x y z 0 1 1 1 1 total 1.0 0.220956 -1 1 2 1 1 total 1.0 0.316565 -2 2 1 1 1 total 1.0 0.132140 +1 1 2 1 1 total 1.0 0.132140 +2 2 1 1 1 total 1.0 0.316565 3 2 2 1 1 total 1.0 0.181577 mesh 1 group out nuclide mean std. dev. x y z 0 1 1 1 1 total 1.0 0.222246 -1 1 2 1 1 total 1.0 0.316565 -2 2 1 1 1 total 1.0 0.132140 +1 1 2 1 1 total 1.0 0.132140 +2 2 1 1 1 total 1.0 0.316565 3 2 2 1 1 total 1.0 0.181577 mesh 1 group in nuclide mean std. dev. x y z 0 1 1 1 1 total 3.610522e-07 3.169931e-08 -1 1 2 1 1 total 3.942353e-07 8.459167e-08 -2 2 1 1 1 total 3.097784e-07 5.252025e-08 +1 1 2 1 1 total 3.097784e-07 5.252025e-08 +2 2 1 1 1 total 3.942353e-07 8.459167e-08 3 2 2 1 1 total 3.799163e-07 1.806470e-07 mesh 1 group in nuclide mean std. dev. x y z 0 1 1 1 1 total 0.025920 0.002893 -1 1 2 1 1 total 0.028922 0.006394 -2 2 1 1 1 total 0.022467 0.004039 +1 1 2 1 1 total 0.022467 0.004039 +2 2 1 1 1 total 0.028922 0.006394 3 2 2 1 1 total 0.024923 0.009632 + mesh 1 delayedgroup group in nuclide mean std. dev. + x y z +0 1 1 1 1 1 total 0.000004 4.432732e-07 +1 1 1 1 2 1 total 0.000026 2.653319e-06 +2 1 1 1 3 1 total 0.000024 2.402270e-06 +3 1 1 1 4 1 total 0.000054 5.464055e-06 +4 1 1 1 5 1 total 0.000026 2.663025e-06 +5 1 1 1 6 1 total 0.000010 1.038005e-06 +6 1 2 1 1 1 total 0.000004 6.987770e-07 +7 1 2 1 2 1 total 0.000023 4.115234e-06 +8 1 2 1 3 1 total 0.000021 3.816392e-06 +9 1 2 1 4 1 total 0.000049 8.885822e-06 +10 1 2 1 5 1 total 0.000024 4.378290e-06 +11 1 2 1 6 1 total 0.000009 1.745695e-06 +12 2 1 1 1 1 total 0.000005 1.098837e-06 +13 2 1 1 2 1 total 0.000029 6.436855e-06 +14 2 1 1 3 1 total 0.000027 5.926286e-06 +15 2 1 1 4 1 total 0.000061 1.359391e-05 +16 2 1 1 5 1 total 0.000029 6.489015e-06 +17 2 1 1 6 1 total 0.000011 2.574270e-06 +18 2 2 1 1 1 total 0.000004 1.660497e-06 +19 2 2 1 2 1 total 0.000025 9.701974e-06 +20 2 2 1 3 1 total 0.000023 9.005217e-06 +21 2 2 1 4 1 total 0.000054 2.084107e-05 +22 2 2 1 5 1 total 0.000026 9.981045e-06 +23 2 2 1 6 1 total 0.000010 3.987979e-06 + mesh 1 delayedgroup group out nuclide mean std. dev. + x y z +0 1 1 1 1 1 total 0.0 0.000000 +1 1 1 1 2 1 total 0.0 0.000000 +2 1 1 1 3 1 total 0.0 0.000000 +3 1 1 1 4 1 total 1.0 1.414214 +4 1 1 1 5 1 total 0.0 0.000000 +5 1 1 1 6 1 total 0.0 0.000000 +6 1 2 1 1 1 total 0.0 0.000000 +7 1 2 1 2 1 total 0.0 0.000000 +8 1 2 1 3 1 total 0.0 0.000000 +9 1 2 1 4 1 total 0.0 0.000000 +10 1 2 1 5 1 total 0.0 0.000000 +11 1 2 1 6 1 total 0.0 0.000000 +12 2 1 1 1 1 total 0.0 0.000000 +13 2 1 1 2 1 total 0.0 0.000000 +14 2 1 1 3 1 total 0.0 0.000000 +15 2 1 1 4 1 total 0.0 0.000000 +16 2 1 1 5 1 total 0.0 0.000000 +17 2 1 1 6 1 total 0.0 0.000000 +18 2 2 1 1 1 total 0.0 0.000000 +19 2 2 1 2 1 total 0.0 0.000000 +20 2 2 1 3 1 total 0.0 0.000000 +21 2 2 1 4 1 total 0.0 0.000000 +22 2 2 1 5 1 total 0.0 0.000000 +23 2 2 1 6 1 total 0.0 0.000000 + mesh 1 delayedgroup group in nuclide mean std. dev. + x y z +0 1 1 1 1 1 total 0.000166 0.000023 +1 1 1 1 2 1 total 0.000989 0.000136 +2 1 1 1 3 1 total 0.000907 0.000123 +3 1 1 1 4 1 total 0.002087 0.000282 +4 1 1 1 5 1 total 0.001014 0.000137 +5 1 1 1 6 1 total 0.000400 0.000054 +6 1 2 1 1 1 total 0.000167 0.000030 +7 1 2 1 2 1 total 0.001002 0.000178 +8 1 2 1 3 1 total 0.000926 0.000165 +9 1 2 1 4 1 total 0.002149 0.000384 +10 1 2 1 5 1 total 0.001056 0.000189 +11 1 2 1 6 1 total 0.000417 0.000076 +12 2 1 1 1 1 total 0.000171 0.000039 +13 2 1 1 2 1 total 0.001003 0.000226 +14 2 1 1 3 1 total 0.000918 0.000208 +15 2 1 1 4 1 total 0.002100 0.000477 +16 2 1 1 5 1 total 0.000996 0.000228 +17 2 1 1 6 1 total 0.000394 0.000090 +18 2 2 1 1 1 total 0.000171 0.000082 +19 2 2 1 2 1 total 0.001007 0.000480 +20 2 2 1 3 1 total 0.000929 0.000445 +21 2 2 1 4 1 total 0.002143 0.001028 +22 2 2 1 5 1 total 0.001026 0.000492 +23 2 2 1 6 1 total 0.000408 0.000196 diff --git a/tests/test_mgxs_library_mesh/test_mgxs_library_mesh.py b/tests/test_mgxs_library_mesh/test_mgxs_library_mesh.py index df7a0a5ae8..1f31bd5660 100644 --- a/tests/test_mgxs_library_mesh/test_mgxs_library_mesh.py +++ b/tests/test_mgxs_library_mesh/test_mgxs_library_mesh.py @@ -18,14 +18,19 @@ class MGXSTestHarness(PyAPITestHarness): # Initialize a one-group structure energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 20.]) + # Initialize a six-delayed-group structure + delayed_groups = list(range(1,7)) + # Initialize MGXS Library for a few cross section types # for one material-filled cell in the geometry self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = False # Test all MGXS types - self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES + self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES + \ + openmc.mgxs.MDGXS_TYPES self.mgxs_lib.energy_groups = energy_groups + self.mgxs_lib.delayed_groups = delayed_groups self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'mesh' diff --git a/tests/test_mgxs_library_no_nuclides/inputs_true.dat b/tests/test_mgxs_library_no_nuclides/inputs_true.dat index 0c648376e8..328d68b05f 100644 --- a/tests/test_mgxs_library_no_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_no_nuclides/inputs_true.dat @@ -1 +1 @@ -e2cdca7ea5b3532050af5b12fac26d7ef212d2696bb1b73cdd00929b2243c40d100ad02438c7b090555b49815d0de6c48cf1b4ebf437a48bc80c2d2b4bad292e \ No newline at end of file +2b2a2f5778b03f87d20fa6da96cc19db0489f69d4d5f0cac02dd407fd8e53a082081bfef35c4310cb2e0651254766d499e89279e711fd6fd93f913c964855839 \ No newline at end of file diff --git a/tests/test_mgxs_library_no_nuclides/results_true.dat b/tests/test_mgxs_library_no_nuclides/results_true.dat index 141143c8c3..edd99b44c5 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -84,6 +84,45 @@ material group in nuclide mean std. dev. 1 10000 1 total 0.019239 0.001310 0 10000 2 total 0.466719 0.041411 + material delayedgroup group in nuclide mean std. dev. +1 10000 1 1 total 0.000023 0.000002 +3 10000 2 1 total 0.000144 0.000011 +5 10000 3 1 total 0.000151 0.000011 +7 10000 4 1 total 0.000074 0.000005 +9 10000 5 1 total 0.000041 0.000003 +11 10000 6 1 total 0.000017 0.000001 +0 10000 1 2 total 0.000107 0.000009 +2 10000 2 2 total 0.000552 0.000049 +4 10000 3 2 total 0.000527 0.000047 +6 10000 4 2 total 0.000222 0.000019 +8 10000 5 2 total 0.000091 0.000008 +10 10000 6 2 total 0.000038 0.000003 + material delayedgroup group out nuclide mean std. dev. +1 10000 1 1 total 0.0 0.000000 +3 10000 2 1 total 1.0 0.869128 +5 10000 3 1 total 1.0 1.414214 +7 10000 4 1 total 1.0 0.360359 +9 10000 5 1 total 0.0 0.000000 +11 10000 6 1 total 0.0 0.000000 +0 10000 1 2 total 0.0 0.000000 +2 10000 2 2 total 0.0 0.000000 +4 10000 3 2 total 0.0 0.000000 +6 10000 4 2 total 0.0 0.000000 +8 10000 5 2 total 0.0 0.000000 +10 10000 6 2 total 0.0 0.000000 + material delayedgroup group in nuclide mean std. dev. +1 10000 1 1 total 0.000049 0.000005 +3 10000 2 1 total 0.000306 0.000030 +5 10000 3 1 total 0.000322 0.000031 +7 10000 4 1 total 0.003822 0.000321 +9 10000 5 1 total 0.002135 0.000183 +11 10000 6 1 total 0.000875 0.000075 +0 10000 1 2 total 0.000228 0.000025 +2 10000 2 2 total 0.001175 0.000127 +4 10000 3 2 total 0.001122 0.000122 +6 10000 4 2 total 0.011426 0.001099 +8 10000 5 2 total 0.004684 0.000451 +10 10000 6 2 total 0.001962 0.000189 material group in nuclide mean std. dev. 1 10001 1 total 0.313738 0.015582 0 10001 2 total 0.300821 0.028052 @@ -170,6 +209,45 @@ material group in nuclide mean std. dev. 1 10001 1 total 0.0 0.0 0 10001 2 total 0.0 0.0 + material delayedgroup group in nuclide mean std. dev. +1 10001 1 1 total 0.0 0.0 +3 10001 2 1 total 0.0 0.0 +5 10001 3 1 total 0.0 0.0 +7 10001 4 1 total 0.0 0.0 +9 10001 5 1 total 0.0 0.0 +11 10001 6 1 total 0.0 0.0 +0 10001 1 2 total 0.0 0.0 +2 10001 2 2 total 0.0 0.0 +4 10001 3 2 total 0.0 0.0 +6 10001 4 2 total 0.0 0.0 +8 10001 5 2 total 0.0 0.0 +10 10001 6 2 total 0.0 0.0 + material delayedgroup group out nuclide mean std. dev. +1 10001 1 1 total 0.0 0.0 +3 10001 2 1 total 0.0 0.0 +5 10001 3 1 total 0.0 0.0 +7 10001 4 1 total 0.0 0.0 +9 10001 5 1 total 0.0 0.0 +11 10001 6 1 total 0.0 0.0 +0 10001 1 2 total 0.0 0.0 +2 10001 2 2 total 0.0 0.0 +4 10001 3 2 total 0.0 0.0 +6 10001 4 2 total 0.0 0.0 +8 10001 5 2 total 0.0 0.0 +10 10001 6 2 total 0.0 0.0 + material delayedgroup group in nuclide mean std. dev. +1 10001 1 1 total 0.0 0.0 +3 10001 2 1 total 0.0 0.0 +5 10001 3 1 total 0.0 0.0 +7 10001 4 1 total 0.0 0.0 +9 10001 5 1 total 0.0 0.0 +11 10001 6 1 total 0.0 0.0 +0 10001 1 2 total 0.0 0.0 +2 10001 2 2 total 0.0 0.0 +4 10001 3 2 total 0.0 0.0 +6 10001 4 2 total 0.0 0.0 +8 10001 5 2 total 0.0 0.0 +10 10001 6 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 10002 1 total 0.664572 0.031215 0 10002 2 total 2.052384 0.224343 @@ -256,3 +334,42 @@ material group in nuclide mean std. dev. 1 10002 1 total 0.0 0.0 0 10002 2 total 0.0 0.0 + material delayedgroup group in nuclide mean std. dev. +1 10002 1 1 total 0.0 0.0 +3 10002 2 1 total 0.0 0.0 +5 10002 3 1 total 0.0 0.0 +7 10002 4 1 total 0.0 0.0 +9 10002 5 1 total 0.0 0.0 +11 10002 6 1 total 0.0 0.0 +0 10002 1 2 total 0.0 0.0 +2 10002 2 2 total 0.0 0.0 +4 10002 3 2 total 0.0 0.0 +6 10002 4 2 total 0.0 0.0 +8 10002 5 2 total 0.0 0.0 +10 10002 6 2 total 0.0 0.0 + material delayedgroup group out nuclide mean std. dev. +1 10002 1 1 total 0.0 0.0 +3 10002 2 1 total 0.0 0.0 +5 10002 3 1 total 0.0 0.0 +7 10002 4 1 total 0.0 0.0 +9 10002 5 1 total 0.0 0.0 +11 10002 6 1 total 0.0 0.0 +0 10002 1 2 total 0.0 0.0 +2 10002 2 2 total 0.0 0.0 +4 10002 3 2 total 0.0 0.0 +6 10002 4 2 total 0.0 0.0 +8 10002 5 2 total 0.0 0.0 +10 10002 6 2 total 0.0 0.0 + material delayedgroup group in nuclide mean std. dev. +1 10002 1 1 total 0.0 0.0 +3 10002 2 1 total 0.0 0.0 +5 10002 3 1 total 0.0 0.0 +7 10002 4 1 total 0.0 0.0 +9 10002 5 1 total 0.0 0.0 +11 10002 6 1 total 0.0 0.0 +0 10002 1 2 total 0.0 0.0 +2 10002 2 2 total 0.0 0.0 +4 10002 3 2 total 0.0 0.0 +6 10002 4 2 total 0.0 0.0 +8 10002 5 2 total 0.0 0.0 +10 10002 6 2 total 0.0 0.0 diff --git a/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py b/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py index 2c0a2e278c..edd41f1c56 100644 --- a/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py +++ b/tests/test_mgxs_library_no_nuclides/test_mgxs_library_no_nuclides.py @@ -23,12 +23,18 @@ class MGXSTestHarness(PyAPITestHarness): energy_groups = openmc.mgxs.EnergyGroups(group_edges=[0, 0.625e-6, 20.]) + # Initialize a six-delayed-group structure + delayed_groups = list(range(1,7)) + # Initialize MGXS Library for a few cross section types self.mgxs_lib = openmc.mgxs.Library(self._input_set.geometry) self.mgxs_lib.by_nuclide = False + # Test all MGXS types - self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES + self.mgxs_lib.mgxs_types = openmc.mgxs.MGXS_TYPES + \ + openmc.mgxs.MDGXS_TYPES self.mgxs_lib.energy_groups = energy_groups + self.mgxs_lib.delayed_groups = delayed_groups self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'material' self.mgxs_lib.build_library() diff --git a/tests/test_mgxs_library_nuclides/inputs_true.dat b/tests/test_mgxs_library_nuclides/inputs_true.dat index a15bbee4c8..593111f329 100644 --- a/tests/test_mgxs_library_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_nuclides/inputs_true.dat @@ -1 +1 @@ -e4a5f03ab6167e96462c4ef537533fe33b98d7878ae00824c5619356bda8d548b3c71af01ba8c88d5a9b46dd1471d331e6f678a164af922200f2ee3642be6340 \ No newline at end of file +63f6f8ae24e0d8e23731c903a59e3f5e0edff730933ef6f8836ebf78949db75542c5794a6486c27016ad22e4375b8a18092cd1d1e025162afd01936cac2f205b \ No newline at end of file diff --git a/tests/test_multipole/inputs_true.dat b/tests/test_multipole/inputs_true.dat index 801536d07e..930be95361 100644 --- a/tests/test_multipole/inputs_true.dat +++ b/tests/test_multipole/inputs_true.dat @@ -1 +1 @@ -c727431ebef7a5987dade28f4cd940c566142f97b5ce01fbf9343d680caf9056623f0fac550db64f8f1043fa2cd8230155cfcbbcaffd1ae92cede723974596d7 \ No newline at end of file +8462e17d102259b3a48a7e908bc75038a28a19d4a5e8bd38f26579e5baf3998bc2d05d1d3055ac1ed478d0c01bd64868d654919c2e6ca3fea86d79f03eda25ef \ No newline at end of file diff --git a/tests/test_multipole/results_true.dat b/tests/test_multipole/results_true.dat index d138fa16a9..4d379b3f40 100644 --- a/tests/test_multipole/results_true.dat +++ b/tests/test_multipole/results_true.dat @@ -1,5 +1,5 @@ k-combined: -1.457760E+00 1.119659E-02 +1.425673E+00 1.779969E-02 Cell ID = 11 Name = diff --git a/tests/test_multipole/test_multipole.py b/tests/test_multipole/test_multipole.py index bd6822bdf5..a44489aa5a 100644 --- a/tests/test_multipole/test_multipole.py +++ b/tests/test_multipole/test_multipole.py @@ -7,7 +7,6 @@ import openmc from openmc.stats import Box from openmc.source import Source - class MultipoleTestHarness(PyAPITestHarness): def _build_inputs(self): #################### @@ -24,29 +23,20 @@ class MultipoleTestHarness(PyAPITestHarness): dense_fuel.add_nuclide('U235', 1.0) mats_file = openmc.Materials([moderator, dense_fuel]) - mats_file.default_xs = '71c' mats_file.export_to_xml() - #################### # Geometry #################### - c1 = openmc.Cell(cell_id=1) - c1.fill = moderator - mod_univ = openmc.Universe(universe_id=1) - mod_univ.add_cell(c1) + c1 = openmc.Cell(cell_id=1, fill=moderator) + mod_univ = openmc.Universe(universe_id=1, cells=(c1,)) r0 = openmc.ZCylinder(R=0.3) - c11 = openmc.Cell(cell_id=11) - c11.region = -r0 - c11.fill = dense_fuel + c11 = openmc.Cell(cell_id=11, fill=dense_fuel, region=-r0) c11.temperature = [500, 0, 700, 800] - c12 = openmc.Cell(cell_id=12) - c12.region = +r0 - c12.fill = moderator - fuel_univ = openmc.Universe(universe_id=11) - fuel_univ.add_cells((c11, c12)) + c12 = openmc.Cell(cell_id=12, fill=moderator, region=+r0) + fuel_univ = openmc.Universe(universe_id=11, cells=(c11, c12)) lat = openmc.RectLattice(lattice_id=101) lat.dimension = [2, 2] @@ -61,17 +51,12 @@ class MultipoleTestHarness(PyAPITestHarness): y1 = openmc.YPlane(y0=3.0) for s in [x0, x1, y0, y1]: s.boundary_type = 'reflective' - c101 = openmc.Cell(cell_id=101) - c101.region = +x0 & -x1 & +y0 & -y1 - c101.fill = lat - root_univ = openmc.Universe(universe_id=0) - root_univ.add_cell(c101) + c101 = openmc.Cell(cell_id=101, fill=lat, region=+x0 & -x1 & +y0 & -y1) + root_univ = openmc.Universe(universe_id=0, cells=(c101,)) - geometry = openmc.Geometry() - geometry.root_universe = root_univ + geometry = openmc.Geometry(root_univ) geometry.export_to_xml() - #################### # Settings #################### @@ -82,10 +67,9 @@ class MultipoleTestHarness(PyAPITestHarness): sets_file.particles = 1000 sets_file.source = Source(space=Box([-1, -1, -1], [1, 1, 1])) sets_file.output = {'summary': True} - sets_file.use_windowed_multipole=True + sets_file.temperature = {'method': 'multipole'} sets_file.export_to_xml() - #################### # Plots #################### diff --git a/tests/test_natural_element/materials.xml b/tests/test_natural_element/materials.xml index 60d60b81ff..6568951f43 100644 --- a/tests/test_natural_element/materials.xml +++ b/tests/test_natural_element/materials.xml @@ -3,8 +3,6 @@ - 71c - diff --git a/tests/test_output/materials.xml b/tests/test_output/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_output/materials.xml +++ b/tests/test_output/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_output/settings.xml b/tests/test_output/settings.xml index fef5e2fcf1..e2f3fc0186 100644 --- a/tests/test_output/settings.xml +++ b/tests/test_output/settings.xml @@ -1,7 +1,7 @@ - + 10 diff --git a/tests/test_output/test_output.py b/tests/test_output/test_output.py index 8e36ead808..81f8f42c8a 100644 --- a/tests/test_output/test_output.py +++ b/tests/test_output/test_output.py @@ -19,10 +19,6 @@ class OutputTestHarness(TestHarness): assert summary[0].endswith('h5'),\ 'Summary file is not a HDF5 file.' - # Check for the cross sections. - assert os.path.exists(os.path.join(os.getcwd(), 'cross_sections.out')),\ - 'Cross section output file does not exist.' - def _cleanup(self): TestHarness._cleanup(self) output = glob.glob(os.path.join(os.getcwd(), 'summary.*')) diff --git a/tests/test_particle_restart_eigval/materials.xml b/tests/test_particle_restart_eigval/materials.xml index 5ff4b736f5..3aa37fca6c 100644 --- a/tests/test_particle_restart_eigval/materials.xml +++ b/tests/test_particle_restart_eigval/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_particle_restart_fixed/materials.xml b/tests/test_particle_restart_fixed/materials.xml index f132f97630..f3851d7ef1 100644 --- a/tests/test_particle_restart_fixed/materials.xml +++ b/tests/test_particle_restart_fixed/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_periodic/inputs_true.dat b/tests/test_periodic/inputs_true.dat index 56d3e01bfe..ed1bc7d1b4 100644 --- a/tests/test_periodic/inputs_true.dat +++ b/tests/test_periodic/inputs_true.dat @@ -1 +1 @@ -0766f3e0ac9b3d26bf5529eb3c92e0337698994d663b6a68dd8c1340807d6941c7589d777430782bc7b78590adced55f0f55b1de71a7c70d453f78d4ca469d8d \ No newline at end of file +259ea7c22920ddea0bc076ee77d35e76f36d2c7043cb8d036b182a11fd7d0f6524e3cbd9c6b0bf4a1af905ebe10b765d3d43e43e899d3edbb601baf6fd172365 \ No newline at end of file diff --git a/tests/test_periodic/test_periodic.py b/tests/test_periodic/test_periodic.py index 0260711043..3883654c13 100644 --- a/tests/test_periodic/test_periodic.py +++ b/tests/test_periodic/test_periodic.py @@ -13,7 +13,7 @@ class PeriodicTest(PyAPITestHarness): water = openmc.Material(1) water.add_nuclide('H1', 2.0) water.add_nuclide('O16', 1.0) - water.add_s_alpha_beta('c_H_in_H2O', '71t') + water.add_s_alpha_beta('c_H_in_H2O') water.set_density('g/cc', 1.0) fuel = openmc.Material(2) @@ -21,7 +21,7 @@ class PeriodicTest(PyAPITestHarness): fuel.set_density('g/cc', 4.5) materials = openmc.Materials((water, fuel)) - materials.default_xs = '71c' + materials.default_temperature = '294K' materials.export_to_xml() # Define geometry diff --git a/tests/test_plot/materials.xml b/tests/test_plot/materials.xml index 826f670a48..90b3542675 100644 --- a/tests/test_plot/materials.xml +++ b/tests/test_plot/materials.xml @@ -3,17 +3,17 @@ - + - + - + diff --git a/tests/test_ptables_off/materials.xml b/tests/test_ptables_off/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_ptables_off/materials.xml +++ b/tests/test_ptables_off/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_quadric_surfaces/materials.xml b/tests/test_quadric_surfaces/materials.xml index 606253bec0..f687683837 100644 --- a/tests/test_quadric_surfaces/materials.xml +++ b/tests/test_quadric_surfaces/materials.xml @@ -3,8 +3,8 @@ - - + + diff --git a/tests/test_reflective_plane/materials.xml b/tests/test_reflective_plane/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_reflective_plane/materials.xml +++ b/tests/test_reflective_plane/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_resonance_scattering/inputs_true.dat b/tests/test_resonance_scattering/inputs_true.dat index fdfb2b84e3..7b515cd1cc 100644 --- a/tests/test_resonance_scattering/inputs_true.dat +++ b/tests/test_resonance_scattering/inputs_true.dat @@ -1 +1 @@ -a97844ec7ab45b9e8c1d5849c99414dfa1408956fd951fa783ffa99f78770cd4644a3fb5abe038b0f835ef233ccea2b014e8bd7448f06769944383035ef38ac6 \ No newline at end of file +15d4ce20d34fbafc757689f1a1f014c42b25efd1cac6bbefdd284c5c1af8bca264c75055fef719441655a61201d0ef098c82cacaa2aeea2b410d3006e983a942 \ No newline at end of file diff --git a/tests/test_resonance_scattering/test_resonance_scattering.py b/tests/test_resonance_scattering/test_resonance_scattering.py index 0d70c0d8d6..3daf5a3870 100644 --- a/tests/test_resonance_scattering/test_resonance_scattering.py +++ b/tests/test_resonance_scattering/test_resonance_scattering.py @@ -9,16 +9,21 @@ import openmc class ResonanceScatteringTestHarness(PyAPITestHarness): def _build_inputs(self): + # Nuclides + u238 = openmc.Nuclide('U238') + u235 = openmc.Nuclide('U235') + pu239 = openmc.Nuclide('Pu239') + h1 = openmc.Nuclide('H1') + # Materials mat = openmc.Material(material_id=1) mat.set_density('g/cc', 1.0) - mat.add_nuclide('U238', 1.0) - mat.add_nuclide('U235', 0.02) - mat.add_nuclide('Pu239', 0.02) - mat.add_nuclide('H1', 20.0) + mat.add_nuclide(u238, 1.0) + mat.add_nuclide(u235, 0.02) + mat.add_nuclide(pu239, 0.02) + mat.add_nuclide(h1, 20.0) mats_file = openmc.Materials([mat]) - mats_file.default_xs = '71c' mats_file.export_to_xml() # Geometry @@ -37,29 +42,9 @@ class ResonanceScatteringTestHarness(PyAPITestHarness): geometry.export_to_xml() # Settings - nuclide = openmc.Nuclide('U238', '71c') - res_scatt_dbrc = openmc.ResonanceScattering() - res_scatt_dbrc.nuclide = nuclide - res_scatt_dbrc.nuclide_0K = nuclide # This is a bad idea! Just for tests - res_scatt_dbrc.method = 'DBRC' - res_scatt_dbrc.E_min = 1e-6 - res_scatt_dbrc.E_max = 210e-6 - - nuclide = openmc.Nuclide('U235', '71c') - res_scatt_wcm = openmc.ResonanceScattering() - res_scatt_wcm.nuclide = nuclide - res_scatt_wcm.nuclide_0K = nuclide - res_scatt_wcm.method = 'WCM' - res_scatt_wcm.E_min = 1e-6 - res_scatt_wcm.E_max = 210e-6 - - nuclide = openmc.Nuclide('Pu239', '71c') - res_scatt_ares = openmc.ResonanceScattering() - res_scatt_ares.nuclide = nuclide - res_scatt_ares.nuclide_0K = nuclide - res_scatt_ares.method = 'ARES' - res_scatt_ares.E_min = 1e-6 - res_scatt_ares.E_max = 210e-6 + res_scatt_dbrc = openmc.ResonanceScattering(u238, 'DBRC', 1e-6, 210e-6) + res_scatt_wcm = openmc.ResonanceScattering(u235, 'WCM', 1e-6, 210e-6) + res_scatt_ares = openmc.ResonanceScattering(pu239, 'ARES', 1e-6, 210e-6) sets_file = openmc.Settings() sets_file.batches = 10 diff --git a/tests/test_rotation/materials.xml b/tests/test_rotation/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_rotation/materials.xml +++ b/tests/test_rotation/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_salphabeta/materials.xml b/tests/test_salphabeta/materials.xml index 2bc401e49c..bfe0a6224d 100644 --- a/tests/test_salphabeta/materials.xml +++ b/tests/test_salphabeta/materials.xml @@ -1,20 +1,18 @@ - 71c - - + - + @@ -22,8 +20,8 @@ - - + + @@ -36,8 +34,8 @@ - - + + diff --git a/tests/test_score_current/materials.xml b/tests/test_score_current/materials.xml index f5a9e61bea..8021f5f99e 100644 --- a/tests/test_score_current/materials.xml +++ b/tests/test_score_current/materials.xml @@ -1,8 +1,6 @@ - 71c - @@ -59,7 +57,7 @@ - + @@ -69,7 +67,7 @@ - + @@ -128,7 +126,7 @@ - + @@ -155,7 +153,7 @@ - + @@ -182,7 +180,7 @@ - + @@ -209,7 +207,7 @@ - + @@ -236,7 +234,7 @@ - + @@ -251,7 +249,7 @@ - + @@ -266,7 +264,7 @@ - + diff --git a/tests/test_score_current/results_true.dat b/tests/test_score_current/results_true.dat index 5d26226ae2..cf139cce24 100644 --- a/tests/test_score_current/results_true.dat +++ b/tests/test_score_current/results_true.dat @@ -1 +1 @@ -bafab1921a12146abb2bb29603b52b9cc28a5a950a7a6bb1e3f012c05891c310fad643760d4f148b04d0fef3d1f3e141d146e3a278d81cc6fc8187c37717c5e7 \ No newline at end of file +6e432700c1fb8641d106471f1fd19a0bf0f00f8b03a97131f2d73732c5a8eea48edf910c7b27b83058a7914c47c29dc7e7899b7dbb83485309b4f7d9f20471d2 \ No newline at end of file diff --git a/tests/test_seed/materials.xml b/tests/test_seed/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_seed/materials.xml +++ b/tests/test_seed/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_source/inputs_true.dat b/tests/test_source/inputs_true.dat index f11998e6cf..0c8f18194a 100644 --- a/tests/test_source/inputs_true.dat +++ b/tests/test_source/inputs_true.dat @@ -1 +1 @@ -27ceb546499a4134eac08ffb22d02ce21d67f12617d43a02991b443e9aca7b7eca818d03e146676c0b352abaef6505423e48edef24cfd7a8fdb148cb3dbcdb1f \ No newline at end of file +b791dc4a37d20599afe375d91a9c6da123d6579cdc3ae7093a4a464c82bce43f2349fc6828f0b5d9f6b11b8a1aa1031459cd19f2771277ef40d775fedb68c00f \ No newline at end of file diff --git a/tests/test_source/test_source.py b/tests/test_source/test_source.py index 09a13efaae..ce9012bc26 100644 --- a/tests/test_source/test_source.py +++ b/tests/test_source/test_source.py @@ -13,9 +13,9 @@ import openmc class SourceTestHarness(PyAPITestHarness): def _build_inputs(self): - mat1 = openmc.Material(material_id=1) + mat1 = openmc.Material(material_id=1, temperature='294') mat1.set_density('g/cm3', 4.5) - mat1.add_nuclide(openmc.Nuclide('U235', '71c'), 1.0) + mat1.add_nuclide(openmc.Nuclide('U235'), 1.0) materials = openmc.Materials([mat1]) materials.export_to_xml() diff --git a/tests/test_source_file/materials.xml b/tests/test_source_file/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_source_file/materials.xml +++ b/tests/test_source_file/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_sourcepoint_batch/materials.xml b/tests/test_sourcepoint_batch/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_sourcepoint_batch/materials.xml +++ b/tests/test_sourcepoint_batch/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_sourcepoint_interval/materials.xml b/tests/test_sourcepoint_interval/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_sourcepoint_interval/materials.xml +++ b/tests/test_sourcepoint_interval/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_sourcepoint_latest/materials.xml b/tests/test_sourcepoint_latest/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_sourcepoint_latest/materials.xml +++ b/tests/test_sourcepoint_latest/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_sourcepoint_restart/materials.xml b/tests/test_sourcepoint_restart/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_sourcepoint_restart/materials.xml +++ b/tests/test_sourcepoint_restart/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_sourcepoint_restart/results_true.dat b/tests/test_sourcepoint_restart/results_true.dat index 49afeb1d52..0e83121c58 100644 --- a/tests/test_sourcepoint_restart/results_true.dat +++ b/tests/test_sourcepoint_restart/results_true.dat @@ -41,16 +41,16 @@ tally 1: 1.416293E-07 0.000000E+00 0.000000E+00 -7.000000E-03 -1.500000E-05 -3.445754E-03 -3.819507E-06 -2.124056E-03 -1.976201E-06 -1.542203E-03 -1.531669E-06 -4.135720E-03 -4.532612E-06 +2.100000E-02 +1.150000E-04 +5.280651E-03 +1.222273E-05 +5.235520E-03 +1.202448E-05 +5.064093E-03 +1.787892E-05 +1.071093E-02 +2.748613E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -59,8 +59,118 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.874391E-04 -1.725424E-07 +8.954046E-04 +2.673852E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.100000E-02 +2.130000E-04 +1.472240E-02 +5.500913E-05 +1.077445E-02 +2.987369E-05 +6.729425E-03 +1.249089E-05 +1.363637E-02 +4.345511E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.182717E-03 +5.268981E-07 +2.000000E-03 +2.000000E-06 +-1.367978E-03 +9.381191E-07 +4.071787E-04 +9.316064E-08 +4.394728E-04 +1.064342E-07 +2.110881E-03 +1.737594E-06 +1.000000E-03 +1.000000E-06 +9.347357E-04 +8.737309E-07 +8.105963E-04 +6.570664E-07 +6.396651E-04 +4.091714E-07 +2.938723E-04 +8.636093E-08 +2.300000E-02 +1.330000E-04 +1.081756E-02 +3.675127E-05 +2.530156E-03 +6.960955E-06 +-1.930911E-03 +4.910249E-06 +1.162826E-02 +3.490280E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.957101E-04 +4.402865E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-02 +3.400000E-05 +4.086838E-03 +5.900874E-06 +1.812330E-03 +3.716159E-06 +2.138941E-03 +3.006748E-06 +5.414129E-03 +8.079335E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -71,76 +181,6 @@ tally 1: 0.000000E+00 3.079655E-04 9.484274E-08 -1.000000E-03 -1.000000E-06 -9.451745E-04 -8.933548E-07 -8.400323E-04 -7.056542E-07 -6.931788E-04 -4.804969E-07 -0.000000E+00 -0.000000E+00 -3.000000E-03 -3.000000E-06 -1.134842E-03 -1.040850E-06 -6.127525E-05 -3.988312E-07 -4.938488E-05 -2.738492E-07 -1.484493E-03 -9.722888E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -201,16 +241,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.200000E-02 -4.600000E-05 -9.302157E-04 -3.853850E-06 -1.874541E-03 -3.092623E-06 --1.511552E-03 -4.053466E-06 -5.941986E-03 -9.853873E-06 +2.700000E-02 +1.670000E-04 +1.789444E-02 +8.260005E-05 +1.049872E-02 +2.774537E-05 +5.665111E-03 +8.560197E-06 +1.100708E-02 +2.835296E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -219,60 +259,38 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.186549E-03 -5.291648E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.935668E-04 -8.618149E-08 +3.079655E-04 +9.484274E-08 1.000000E-03 1.000000E-06 -9.893707E-04 -9.788543E-07 -9.682814E-04 -9.375689E-07 -9.370683E-04 -8.780970E-07 -0.000000E+00 -0.000000E+00 -8.000000E-03 -2.000000E-05 -3.721382E-03 -4.736982E-06 --1.037031E-04 -6.648392E-07 --5.996856E-04 -9.642316E-07 -3.248622E-03 -4.063214E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.938723E-04 -8.636093E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +-2.856031E-04 +8.156913E-08 +-3.776463E-04 +1.426167E-07 +3.701637E-04 +1.370211E-07 +1.203065E-03 +7.240969E-07 +1.000000E-03 +1.000000E-06 +9.705482E-04 +9.419638E-07 +9.129457E-04 +8.334699E-07 +8.297310E-04 +6.884535E-07 0.000000E+00 0.000000E+00 +4.400000E-02 +4.320000E-04 +1.141886E-02 +4.208707E-05 +9.213446E-03 +2.259305E-05 +9.177440E-03 +2.088782E-05 +2.116869E-02 +9.629049E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -281,16 +299,38 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.501009E-03 +6.405023E-07 +1.000000E-03 +1.000000E-06 +5.882614E-04 +3.460515E-07 +1.907719E-05 +3.639390E-10 +-3.734703E-04 +1.394801E-07 +1.472277E-03 +9.506220E-07 2.000000E-03 2.000000E-06 -1.502634E-03 -1.146555E-06 -7.198331E-04 -3.484978E-07 --3.426513E-05 -1.342349E-07 -1.511030E-03 -1.198311E-06 +1.830192E-03 +1.679505E-06 +1.519257E-03 +1.189525E-06 +1.118506E-03 +7.332971E-07 +2.977039E-04 +8.862764E-08 +2.000000E-02 +1.080000E-04 +8.640372E-03 +1.765553E-05 +5.688468E-03 +1.038555E-05 +2.447898E-03 +4.466055E-06 +8.949668E-03 +1.935056E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -299,6 +339,38 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.977039E-04 +8.862764E-08 +1.000000E-03 +1.000000E-06 +-3.805163E-04 +1.447926E-07 +-2.828111E-04 +7.998210E-08 +4.330345E-04 +1.875189E-07 +2.121142E-03 +1.958355E-06 +1.000000E-03 +1.000000E-06 +9.260022E-04 +8.574800E-07 +7.862200E-04 +6.181419E-07 +5.960676E-04 +3.552966E-07 +2.938723E-04 +8.636093E-08 +1.000000E-02 +3.400000E-05 +4.840884E-03 +1.080853E-05 +3.402096E-03 +4.113972E-06 +1.374077E-03 +2.333511E-06 +4.754696E-03 +7.172310E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -307,6 +379,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.079655E-04 +9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -361,16 +441,136 @@ tally 1: 1.052422E-07 0.000000E+00 0.000000E+00 -1.500000E-02 -5.500000E-05 -2.209492E-03 -2.545503E-06 -5.991182E-03 -1.290780E-05 -1.772063E-03 -2.006265E-06 -5.944487E-03 -1.042417E-05 +2.900000E-02 +2.230000E-04 +6.260565E-03 +1.544092E-05 +7.061757E-03 +2.562385E-05 +3.982541E-03 +7.962565E-06 +1.486928E-02 +5.763902E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.915762E-04 +1.749886E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.954079E-04 +3.545105E-07 +1.000000E-03 +1.000000E-06 +9.938157E-04 +9.876697E-07 +9.815046E-04 +9.633512E-07 +9.631807E-04 +9.277170E-07 +0.000000E+00 +0.000000E+00 +2.900000E-02 +1.990000E-04 +1.237546E-02 +3.198261E-05 +8.287792E-03 +2.747313E-05 +3.254969E-03 +8.653294E-06 +1.189702E-02 +3.303341E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.033083E-04 +2.720593E-07 +3.000000E-03 +3.000000E-06 +3.649225E-04 +1.756075E-06 +1.134112E-03 +8.940601E-07 +-9.392028E-04 +5.872882E-07 +1.484188E-03 +9.721094E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.500000E-02 +1.390000E-04 +1.511834E-02 +5.459835E-05 +7.753447E-03 +2.291820E-05 +6.142979E-03 +1.359405E-05 +1.043467E-02 +2.526769E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.912057E-04 +1.747704E-07 +1.000000E-03 +1.000000E-06 +-1.098110E-04 +1.205846E-08 +-4.819123E-04 +2.322395E-07 +1.614061E-04 +2.605194E-08 +8.813115E-04 +4.316252E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 +1.900000E-02 +1.030000E-04 +1.035735E-02 +3.119381E-05 +6.483551E-03 +1.164471E-05 +3.924334E-03 +6.047577E-06 +9.748673E-03 +2.956634E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -389,120 +589,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.190621E-03 -8.859279E-07 -2.000000E-03 -2.000000E-06 -1.908405E-03 -1.821879E-06 -1.732819E-03 -1.508498E-06 -1.487670E-03 -1.131430E-06 -0.000000E+00 -0.000000E+00 -4.000000E-03 -4.000000E-06 -3.379122E-03 -2.880429E-06 -2.320644E-03 -1.498759E-06 -1.119131E-03 -6.212863E-07 -1.494579E-03 -6.241237E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.976389E-04 -8.858892E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.100000E-02 -1.150000E-04 -5.280651E-03 -1.222273E-05 -5.235520E-03 -1.202448E-05 -5.064093E-03 -1.787892E-05 -1.071093E-02 -2.748613E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.954046E-04 -2.673852E-07 +2.935668E-04 +8.618149E-08 +1.000000E-03 +1.000000E-06 +8.623139E-04 +7.435852E-07 +6.153778E-04 +3.786899E-07 +3.095388E-04 +9.581428E-08 0.000000E+00 0.000000E+00 +7.000000E-03 +1.500000E-05 +3.445754E-03 +3.819507E-06 +2.124056E-03 +1.976201E-06 +1.542203E-03 +1.531669E-06 +4.135720E-03 +4.532612E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -511,6 +619,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.874391E-04 +1.725424E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -519,6 +629,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.079655E-04 +9.484274E-08 +1.000000E-03 +1.000000E-06 +9.451745E-04 +8.933548E-07 +8.400323E-04 +7.056542E-07 +6.931788E-04 +4.804969E-07 0.000000E+00 0.000000E+00 2.600000E-02 @@ -561,6 +681,566 @@ tally 1: 5.268483E-07 0.000000E+00 0.000000E+00 +2.900000E-02 +1.950000E-04 +8.928267E-03 +2.594547E-05 +4.752762E-03 +1.522378E-05 +5.376579E-03 +1.088620E-05 +1.461149E-02 +4.367386E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.912057E-04 +1.747704E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +9.700000E-05 +1.046968E-02 +3.828445E-05 +6.704767E-03 +2.668260E-05 +2.659611E-03 +1.143518E-05 +1.099391E-02 +2.847330E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.655540E-03 +2.523801E-06 +3.000000E-03 +5.000000E-06 +2.960960E-03 +4.866206E-06 +2.884206E-03 +4.608867E-06 +2.772329E-03 +4.247272E-06 +2.976389E-04 +8.858892E-08 +6.000000E-03 +8.000000E-06 +2.104495E-03 +2.749678E-06 +8.451272E-04 +9.362821E-07 +5.355137E-04 +3.419837E-07 +2.683856E-03 +1.512640E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +1.000000E-03 +1.000000E-06 +9.374310E-04 +8.787769E-07 +8.181653E-04 +6.693944E-07 +6.533352E-04 +4.268468E-07 +2.976389E-04 +8.858892E-08 +1.200000E-02 +4.600000E-05 +9.302157E-04 +3.853850E-06 +1.874541E-03 +3.092623E-06 +-1.511552E-03 +4.053466E-06 +5.941986E-03 +9.853873E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.186549E-03 +5.291648E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 +1.000000E-03 +1.000000E-06 +9.893707E-04 +9.788543E-07 +9.682814E-04 +9.375689E-07 +9.370683E-04 +8.780970E-07 +0.000000E+00 +0.000000E+00 +2.300000E-02 +1.230000E-04 +5.099566E-03 +9.143616E-06 +4.738751E-03 +7.819254E-06 +3.929250E-03 +6.884420E-06 +1.015650E-02 +2.236950E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.977039E-04 +8.862764E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.912708E-04 +1.748091E-07 +2.000000E-03 +2.000000E-06 +1.762035E-03 +1.552542E-06 +1.328812E-03 +8.839688E-07 +7.771806E-04 +3.049398E-07 +0.000000E+00 +0.000000E+00 +3.100000E-02 +2.250000E-04 +1.389831E-02 +5.927254E-05 +9.999959E-03 +3.379365E-05 +4.584291E-03 +1.665226E-05 +1.729188E-02 +6.078654E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.792523E-03 +8.900699E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.700000E-02 +7.100000E-05 +3.566805E-03 +2.049908E-05 +5.418617E-03 +7.496014E-06 +2.451897E-03 +2.115374E-06 +7.760001E-03 +1.634548E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.977039E-04 +8.862764E-08 +1.000000E-03 +1.000000E-06 +-7.119580E-04 +5.068842E-07 +2.603263E-04 +6.776977E-08 +1.657364E-04 +2.746855E-08 +8.807005E-04 +7.756334E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.900000E-02 +2.030000E-04 +6.527719E-03 +1.422798E-05 +1.560049E-03 +2.934829E-06 +1.548553E-03 +8.929308E-06 +1.108618E-02 +3.019578E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.174573E-03 +8.619943E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.500000E-02 +5.500000E-05 +2.209492E-03 +2.545503E-06 +5.991182E-03 +1.290780E-05 +1.772063E-03 +2.006265E-06 +5.944487E-03 +1.042417E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.079655E-04 +9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.190621E-03 +8.859279E-07 +2.000000E-03 +2.000000E-06 +1.908405E-03 +1.821879E-06 +1.732819E-03 +1.508498E-06 +1.487670E-03 +1.131430E-06 +0.000000E+00 +0.000000E+00 +2.600000E-02 +1.460000E-04 +7.818547E-03 +3.176773E-05 +5.200193E-03 +1.419001E-05 +3.947828E-03 +8.417104E-06 +9.232714E-03 +1.900222E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.186919E-03 +5.294604E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.600000E-02 +2.740000E-04 +9.407788E-03 +2.403566E-05 +4.480017E-03 +6.102099E-06 +5.941113E-03 +1.265337E-05 +1.462273E-02 +4.551799E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.056694E-04 +1.834704E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.807005E-04 +7.756334E-07 +1.000000E-03 +1.000000E-06 +8.905295E-04 +7.930427E-07 +6.895641E-04 +4.754986E-07 +4.297756E-04 +1.847070E-07 +0.000000E+00 +0.000000E+00 +1.200000E-02 +3.000000E-05 +4.798420E-03 +7.171924E-06 +1.417651E-03 +4.997963E-06 +2.131704E-03 +3.253030E-06 +7.754475E-03 +1.333333E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.938723E-04 +8.636093E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.484383E-03 +1.504224E-06 +3.000000E-03 +5.000000E-06 +2.760812E-03 +4.139104E-06 +2.336063E-03 +2.844690E-06 +1.817042E-03 +1.656152E-06 +0.000000E+00 +0.000000E+00 +1.900000E-02 +9.900000E-05 +7.385212E-03 +2.033270E-05 +6.336514E-03 +2.028060E-05 +3.967026E-03 +1.027239E-05 +1.066281E-02 +2.937591E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.000000E-03 +3.000000E-06 +1.134842E-03 +1.040850E-06 +6.127525E-05 +3.988312E-07 +4.938488E-05 +2.738492E-07 +1.484493E-03 +9.722888E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 2.300000E-02 1.650000E-04 9.507197E-03 @@ -601,6 +1281,566 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.100000E-02 +2.030000E-04 +1.194795E-02 +4.198084E-05 +8.484089E-03 +1.631808E-05 +5.880364E-03 +1.308096E-05 +1.342551E-02 +3.842917E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.915762E-04 +1.749886E-07 +1.000000E-03 +1.000000E-06 +-5.881991E-05 +3.459782E-09 +-4.948103E-04 +2.448373E-07 +8.772111E-05 +7.694993E-09 +5.871337E-04 +3.447260E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +8.700000E-05 +5.469796E-03 +1.029265E-05 +4.923561E-04 +2.403244E-06 +2.579361E-03 +5.814745E-06 +8.693503E-03 +1.682274E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.000000E-03 +1.600000E-05 +5.411154E-03 +8.076329E-06 +3.145940E-03 +4.212660E-06 +2.637510E-03 +3.210372E-06 +3.866944E-03 +3.257876E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.175489E-03 +1.381775E-06 +1.000000E-03 +1.000000E-06 +7.809681E-04 +6.099112E-07 +4.148668E-04 +1.721145E-07 +1.935089E-05 +3.744570E-10 +0.000000E+00 +0.000000E+00 +8.000000E-03 +2.000000E-05 +3.721382E-03 +4.736982E-06 +-1.037031E-04 +6.648392E-07 +-5.996856E-04 +9.642316E-07 +3.248622E-03 +4.063214E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.938723E-04 +8.636093E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.800000E-02 +1.780000E-04 +1.190615E-02 +4.434442E-05 +7.332993E-03 +2.337416E-05 +6.867008E-03 +1.321552E-05 +1.283876E-02 +3.527488E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.954079E-04 +3.545105E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.000000E-02 +3.880000E-04 +6.620484E-03 +3.751545E-05 +9.255367E-03 +1.963463E-05 +7.761524E-03 +1.694944E-05 +1.659048E-02 +7.200875E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +1.000000E-03 +1.000000E-06 +-5.273064E-04 +2.780520E-07 +-8.292201E-05 +6.876059E-09 +4.244131E-04 +1.801265E-07 +8.891501E-04 +4.407166E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.200000E-02 +3.400000E-05 +5.905081E-03 +1.535048E-05 +3.856089E-03 +8.589511E-06 +3.244585E-03 +5.882222E-06 +5.074321E-03 +5.793166E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.000000E-03 +8.000000E-06 +1.520286E-03 +4.076900E-06 +2.191143E-03 +3.717004E-06 +1.161623E-03 +3.726099E-06 +3.570376E-03 +5.251427E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.000000E-03 +4.000000E-06 +3.379122E-03 +2.880429E-06 +2.320644E-03 +1.498759E-06 +1.119131E-03 +6.212863E-07 +1.494579E-03 +6.241237E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.100000E-02 +1.950000E-04 +1.338410E-02 +5.097757E-05 +6.794436E-03 +1.428226E-05 +3.939298E-03 +9.052046E-06 +1.250316E-02 +3.147176E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.953428E-04 +1.772166E-07 +1.000000E-03 +1.000000E-06 +-5.747626E-05 +3.303520E-09 +-4.950447E-04 +2.450693E-07 +8.573970E-05 +7.351297E-09 +5.954079E-04 +3.545105E-07 +1.000000E-03 +1.000000E-06 +9.748367E-04 +9.503066E-07 +9.254598E-04 +8.564759E-07 +8.537292E-04 +7.288535E-07 +0.000000E+00 +0.000000E+00 +2.600000E-02 +1.800000E-04 +1.225587E-02 +3.757196E-05 +7.670283E-03 +2.316758E-05 +5.282346E-03 +1.407031E-05 +1.162837E-02 +3.241151E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.874391E-04 +1.725424E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +9.900000E-05 +7.244455E-03 +2.708286E-05 +4.601657E-03 +5.366244E-06 +-1.675270E-03 +3.867377E-06 +9.216755E-03 +2.272207E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.079655E-04 +9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.159310E-04 +3.793709E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.000000E-03 +1.000000E-05 +1.316884E-03 +2.894217E-06 +2.095957E-03 +1.439521E-06 +1.013831E-04 +8.405300E-07 +2.404012E-03 +1.641294E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 1.500000E-02 6.300000E-05 5.790211E-03 @@ -641,16 +1881,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.700000E-02 -1.670000E-04 -1.789444E-02 -8.260005E-05 -1.049872E-02 -2.774537E-05 -5.665111E-03 -8.560197E-06 -1.100708E-02 -2.835296E-05 +1.900000E-02 +1.030000E-04 +3.010784E-03 +6.984061E-06 +5.243839E-03 +8.093978E-06 +-2.502286E-04 +2.564795E-06 +7.760559E-03 +1.654842E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -659,38 +1899,92 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.079655E-04 -9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 1.000000E-03 1.000000E-06 --2.856031E-04 -8.156913E-08 --3.776463E-04 -1.426167E-07 -3.701637E-04 -1.370211E-07 -1.203065E-03 -7.240969E-07 -1.000000E-03 -1.000000E-06 -9.705482E-04 -9.419638E-07 -9.129457E-04 -8.334699E-07 -8.297310E-04 -6.884535E-07 +9.333938E-04 +8.712239E-07 +8.068359E-04 +6.509841E-07 +6.328968E-04 +4.005583E-07 +0.000000E+00 +0.000000E+00 +1.800000E-02 +1.220000E-04 +6.860987E-03 +2.966806E-05 +4.229750E-03 +1.617998E-05 +1.295452E-03 +8.613003E-07 +7.815193E-03 +2.039363E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 -2.300000E-02 -1.230000E-04 -5.099566E-03 -9.143616E-06 -4.738751E-03 -7.819254E-06 -3.929250E-03 -6.884420E-06 -1.015650E-02 -2.236950E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -699,8 +1993,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.977039E-04 -8.862764E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -709,28 +2001,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.912708E-04 -1.748091E-07 2.000000E-03 2.000000E-06 -1.762035E-03 -1.552542E-06 -1.328812E-03 -8.839688E-07 -7.771806E-04 -3.049398E-07 -0.000000E+00 -0.000000E+00 -2.800000E-02 -1.780000E-04 -1.190615E-02 -4.434442E-05 -7.332993E-03 -2.337416E-05 -6.867008E-03 -1.321552E-05 -1.283876E-02 -3.527488E-05 +1.502634E-03 +1.146555E-06 +7.198331E-04 +3.484978E-07 +-3.426513E-05 +1.342349E-07 +1.511030E-03 +1.198311E-06 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -739,8 +2021,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.954079E-04 -3.545105E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -802,446 +2082,6 @@ tally 1: 0.000000E+00 0.000000E+00 2.900000E-02 -2.230000E-04 -6.260565E-03 -1.544092E-05 -7.061757E-03 -2.562385E-05 -3.982541E-03 -7.962565E-06 -1.486928E-02 -5.763902E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.915762E-04 -1.749886E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.954079E-04 -3.545105E-07 -1.000000E-03 -1.000000E-06 -9.938157E-04 -9.876697E-07 -9.815046E-04 -9.633512E-07 -9.631807E-04 -9.277170E-07 -0.000000E+00 -0.000000E+00 -2.600000E-02 -1.460000E-04 -7.818547E-03 -3.176773E-05 -5.200193E-03 -1.419001E-05 -3.947828E-03 -8.417104E-06 -9.232714E-03 -1.900222E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.186919E-03 -5.294604E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.100000E-02 -1.950000E-04 -1.338410E-02 -5.097757E-05 -6.794436E-03 -1.428226E-05 -3.939298E-03 -9.052046E-06 -1.250316E-02 -3.147176E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.953428E-04 -1.772166E-07 -1.000000E-03 -1.000000E-06 --5.747626E-05 -3.303520E-09 --4.950447E-04 -2.450693E-07 -8.573970E-05 -7.351297E-09 -5.954079E-04 -3.545105E-07 -1.000000E-03 -1.000000E-06 -9.748367E-04 -9.503066E-07 -9.254598E-04 -8.564759E-07 -8.537292E-04 -7.288535E-07 -0.000000E+00 -0.000000E+00 -1.000000E-02 -2.600000E-05 -5.875085E-04 -4.563904E-07 --9.207198E-05 -5.154496E-07 -3.674257E-05 -1.178281E-06 -5.048984E-03 -5.880390E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.079655E-04 -9.484274E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.952778E-04 -3.543557E-07 -1.000000E-03 -1.000000E-06 -9.362621E-04 -8.765867E-07 -8.148801E-04 -6.640295E-07 -6.473941E-04 -4.191191E-07 -0.000000E+00 -0.000000E+00 -3.100000E-02 -2.130000E-04 -1.472240E-02 -5.500913E-05 -1.077445E-02 -2.987369E-05 -6.729425E-03 -1.249089E-05 -1.363637E-02 -4.345511E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.182717E-03 -5.268981E-07 -2.000000E-03 -2.000000E-06 --1.367978E-03 -9.381191E-07 -4.071787E-04 -9.316064E-08 -4.394728E-04 -1.064342E-07 -2.110881E-03 -1.737594E-06 -1.000000E-03 -1.000000E-06 -9.347357E-04 -8.737309E-07 -8.105963E-04 -6.570664E-07 -6.396651E-04 -4.091714E-07 -2.938723E-04 -8.636093E-08 -2.900000E-02 -1.950000E-04 -8.928267E-03 -2.594547E-05 -4.752762E-03 -1.522378E-05 -5.376579E-03 -1.088620E-05 -1.461149E-02 -4.367386E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.912057E-04 -1.747704E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.100000E-02 -2.030000E-04 -1.194795E-02 -4.198084E-05 -8.484089E-03 -1.631808E-05 -5.880364E-03 -1.308096E-05 -1.342551E-02 -3.842917E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.915762E-04 -1.749886E-07 -1.000000E-03 -1.000000E-06 --5.881991E-05 -3.459782E-09 --4.948103E-04 -2.448373E-07 -8.772111E-05 -7.694993E-09 -5.871337E-04 -3.447260E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.900000E-02 -1.030000E-04 -3.010784E-03 -6.984061E-06 -5.243839E-03 -8.093978E-06 --2.502286E-04 -2.564795E-06 -7.760559E-03 -1.654842E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.935668E-04 -8.618149E-08 -1.000000E-03 -1.000000E-06 -9.333938E-04 -8.712239E-07 -8.068359E-04 -6.509841E-07 -6.328968E-04 -4.005583E-07 -0.000000E+00 -0.000000E+00 -4.400000E-02 -4.320000E-04 -1.141886E-02 -4.208707E-05 -9.213446E-03 -2.259305E-05 -9.177440E-03 -2.088782E-05 -2.116869E-02 -9.629049E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.501009E-03 -6.405023E-07 -1.000000E-03 -1.000000E-06 -5.882614E-04 -3.460515E-07 -1.907719E-05 -3.639390E-10 --3.734703E-04 -1.394801E-07 -1.472277E-03 -9.506220E-07 -2.000000E-03 -2.000000E-06 -1.830192E-03 -1.679505E-06 -1.519257E-03 -1.189525E-06 -1.118506E-03 -7.332971E-07 -2.977039E-04 -8.862764E-08 -3.100000E-02 -2.250000E-04 -1.389831E-02 -5.927254E-05 -9.999959E-03 -3.379365E-05 -4.584291E-03 -1.665226E-05 -1.729188E-02 -6.078654E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.792523E-03 -8.900699E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.000000E-02 -3.880000E-04 -6.620484E-03 -3.751545E-05 -9.255367E-03 -1.963463E-05 -7.761524E-03 -1.694944E-05 -1.659048E-02 -7.200875E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.976389E-04 -8.858892E-08 -1.000000E-03 -1.000000E-06 --5.273064E-04 -2.780520E-07 --8.292201E-05 -6.876059E-09 -4.244131E-04 -1.801265E-07 -8.891501E-04 -4.407166E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.900000E-02 1.970000E-04 4.944370E-03 2.340271E-05 @@ -1281,446 +2121,6 @@ tally 1: 3.184788E-07 0.000000E+00 0.000000E+00 -2.900000E-02 -1.990000E-04 -1.237546E-02 -3.198261E-05 -8.287792E-03 -2.747313E-05 -3.254969E-03 -8.653294E-06 -1.189702E-02 -3.303341E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.033083E-04 -2.720593E-07 -3.000000E-03 -3.000000E-06 -3.649225E-04 -1.756075E-06 -1.134112E-03 -8.940601E-07 --9.392028E-04 -5.872882E-07 -1.484188E-03 -9.721094E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.600000E-02 -2.740000E-04 -9.407788E-03 -2.403566E-05 -4.480017E-03 -6.102099E-06 -5.941113E-03 -1.265337E-05 -1.462273E-02 -4.551799E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.056694E-04 -1.834704E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.807005E-04 -7.756334E-07 -1.000000E-03 -1.000000E-06 -8.905295E-04 -7.930427E-07 -6.895641E-04 -4.754986E-07 -4.297756E-04 -1.847070E-07 -0.000000E+00 -0.000000E+00 -2.600000E-02 -1.800000E-04 -1.225587E-02 -3.757196E-05 -7.670283E-03 -2.316758E-05 -5.282346E-03 -1.407031E-05 -1.162837E-02 -3.241151E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.874391E-04 -1.725424E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-02 -9.000000E-05 -5.358616E-03 -1.697599E-05 -3.060277E-03 -7.132281E-06 -2.485730E-03 -7.247489E-06 -9.248313E-03 -1.738407E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.991712E-04 -2.696131E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.954079E-04 -3.545105E-07 -1.000000E-03 -1.000000E-06 -9.816220E-04 -9.635817E-07 -9.453726E-04 -8.937294E-07 -8.922496E-04 -7.961093E-07 -0.000000E+00 -0.000000E+00 -2.300000E-02 -1.330000E-04 -1.081756E-02 -3.675127E-05 -2.530156E-03 -6.960955E-06 --1.930911E-03 -4.910249E-06 -1.162826E-02 -3.490280E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.957101E-04 -4.402865E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.900000E-02 -9.700000E-05 -1.046968E-02 -3.828445E-05 -6.704767E-03 -2.668260E-05 -2.659611E-03 -1.143518E-05 -1.099391E-02 -2.847330E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.935668E-04 -8.618149E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.655540E-03 -2.523801E-06 -3.000000E-03 -5.000000E-06 -2.960960E-03 -4.866206E-06 -2.884206E-03 -4.608867E-06 -2.772329E-03 -4.247272E-06 -2.976389E-04 -8.858892E-08 -1.900000E-02 -8.700000E-05 -5.469796E-03 -1.029265E-05 -4.923561E-04 -2.403244E-06 -2.579361E-03 -5.814745E-06 -8.693503E-03 -1.682274E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.976389E-04 -8.858892E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.800000E-02 -1.220000E-04 -6.860987E-03 -2.966806E-05 -4.229750E-03 -1.617998E-05 -1.295452E-03 -8.613003E-07 -7.815193E-03 -2.039363E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.935668E-04 -8.618149E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-02 -1.080000E-04 -8.640372E-03 -1.765553E-05 -5.688468E-03 -1.038555E-05 -2.447898E-03 -4.466055E-06 -8.949668E-03 -1.935056E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.977039E-04 -8.862764E-08 -1.000000E-03 -1.000000E-06 --3.805163E-04 -1.447926E-07 --2.828111E-04 -7.998210E-08 -4.330345E-04 -1.875189E-07 -2.121142E-03 -1.958355E-06 -1.000000E-03 -1.000000E-06 -9.260022E-04 -8.574800E-07 -7.862200E-04 -6.181419E-07 -5.960676E-04 -3.552966E-07 -2.938723E-04 -8.636093E-08 -1.700000E-02 -7.100000E-05 -3.566805E-03 -2.049908E-05 -5.418617E-03 -7.496014E-06 -2.451897E-03 -2.115374E-06 -7.760001E-03 -1.634548E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.977039E-04 -8.862764E-08 -1.000000E-03 -1.000000E-06 --7.119580E-04 -5.068842E-07 -2.603263E-04 -6.776977E-08 -1.657364E-04 -2.746855E-08 -8.807005E-04 -7.756334E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.200000E-02 -3.400000E-05 -5.905081E-03 -1.535048E-05 -3.856089E-03 -8.589511E-06 -3.244585E-03 -5.882222E-06 -5.074321E-03 -5.793166E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 1.600000E-02 5.400000E-05 7.937805E-03 @@ -1761,446 +2161,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.500000E-02 -1.390000E-04 -1.511834E-02 -5.459835E-05 -7.753447E-03 -2.291820E-05 -6.142979E-03 -1.359405E-05 -1.043467E-02 -2.526769E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.912057E-04 -1.747704E-07 -1.000000E-03 -1.000000E-06 --1.098110E-04 -1.205846E-08 --4.819123E-04 -2.322395E-07 -1.614061E-04 -2.605194E-08 -8.813115E-04 -4.316252E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.935668E-04 -8.618149E-08 -1.200000E-02 -3.000000E-05 -4.798420E-03 -7.171924E-06 -1.417651E-03 -4.997963E-06 -2.131704E-03 -3.253030E-06 -7.754475E-03 -1.333333E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.938723E-04 -8.636093E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.484383E-03 -1.504224E-06 -3.000000E-03 -5.000000E-06 -2.760812E-03 -4.139104E-06 -2.336063E-03 -2.844690E-06 -1.817042E-03 -1.656152E-06 -0.000000E+00 -0.000000E+00 -1.900000E-02 -9.900000E-05 -7.244455E-03 -2.708286E-05 -4.601657E-03 -5.366244E-06 --1.675270E-03 -3.867377E-06 -9.216755E-03 -2.272207E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.079655E-04 -9.484274E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.159310E-04 -3.793709E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.000000E-03 -1.800000E-05 -4.925975E-03 -6.260377E-06 -3.176938E-03 -2.631319E-06 -2.008278E-03 -1.484516E-06 -3.844641E-03 -4.075869E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.977039E-04 -8.862764E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.238964E-04 -8.535846E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-02 -3.400000E-05 -4.086838E-03 -5.900874E-06 -1.812330E-03 -3.716159E-06 -2.138941E-03 -3.006748E-06 -5.414129E-03 -8.079335E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.079655E-04 -9.484274E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.000000E-03 -8.000000E-06 -2.104495E-03 -2.749678E-06 -8.451272E-04 -9.362821E-07 -5.355137E-04 -3.419837E-07 -2.683856E-03 -1.512640E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.976389E-04 -8.858892E-08 -1.000000E-03 -1.000000E-06 -9.374310E-04 -8.787769E-07 -8.181653E-04 -6.693944E-07 -6.533352E-04 -4.268468E-07 -2.976389E-04 -8.858892E-08 -8.000000E-03 -1.600000E-05 -5.411154E-03 -8.076329E-06 -3.145940E-03 -4.212660E-06 -2.637510E-03 -3.210372E-06 -3.866944E-03 -3.257876E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.175489E-03 -1.381775E-06 -1.000000E-03 -1.000000E-06 -7.809681E-04 -6.099112E-07 -4.148668E-04 -1.721145E-07 -1.935089E-05 -3.744570E-10 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-02 -3.400000E-05 -4.840884E-03 -1.080853E-05 -3.402096E-03 -4.113972E-06 -1.374077E-03 -2.333511E-06 -4.754696E-03 -7.172310E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.079655E-04 -9.484274E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.900000E-02 -2.030000E-04 -6.527719E-03 -1.422798E-05 -1.560049E-03 -2.934829E-06 -1.548553E-03 -8.929308E-06 -1.108618E-02 -3.019578E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.174573E-03 -8.619943E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.000000E-03 -8.000000E-06 -1.520286E-03 -4.076900E-06 -2.191143E-03 -3.717004E-06 -1.161623E-03 -3.726099E-06 -3.570376E-03 -5.251427E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 2.000000E-03 2.000000E-06 1.447007E-04 @@ -2241,16 +2201,56 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.900000E-02 -1.030000E-04 -1.035735E-02 -3.119381E-05 -6.483551E-03 -1.164471E-05 -3.924334E-03 -6.047577E-06 -9.748673E-03 -2.956634E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-02 +2.600000E-05 +5.875085E-04 +4.563904E-07 +-9.207198E-05 +5.154496E-07 +3.674257E-05 +1.178281E-06 +5.048984E-03 +5.880390E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2269,28 +2269,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.935668E-04 -8.618149E-08 +5.952778E-04 +3.543557E-07 1.000000E-03 1.000000E-06 -8.623139E-04 -7.435852E-07 -6.153778E-04 -3.786899E-07 -3.095388E-04 -9.581428E-08 +9.362621E-04 +8.765867E-07 +8.148801E-04 +6.640295E-07 +6.473941E-04 +4.191191E-07 0.000000E+00 0.000000E+00 -1.900000E-02 -9.900000E-05 -7.385212E-03 -2.033270E-05 -6.336514E-03 -2.028060E-05 -3.967026E-03 -1.027239E-05 -1.066281E-02 -2.937591E-05 +2.000000E-02 +9.000000E-05 +5.358616E-03 +1.697599E-05 +3.060277E-03 +7.132281E-06 +2.485730E-03 +7.247489E-06 +9.248313E-03 +1.738407E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2299,8 +2299,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.976389E-04 -8.858892E-08 +8.991712E-04 +2.696131E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2309,6 +2309,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.954079E-04 +3.545105E-07 +1.000000E-03 +1.000000E-06 +9.816220E-04 +9.635817E-07 +9.453726E-04 +8.937294E-07 +8.922496E-04 +7.961093E-07 +0.000000E+00 +0.000000E+00 +8.000000E-03 +1.800000E-05 +4.925975E-03 +6.260377E-06 +3.176938E-03 +2.631319E-06 +2.008278E-03 +1.484516E-06 +3.844641E-03 +4.075869E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2317,32 +2339,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.000000E-03 -1.000000E-05 -1.316884E-03 -2.894217E-06 -2.095957E-03 -1.439521E-06 -1.013831E-04 -8.405300E-07 -2.404012E-03 -1.641294E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +2.977039E-04 +8.862764E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2351,6 +2349,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.238964E-04 +8.535846E-07 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/tests/test_statepoint_batch/materials.xml b/tests/test_statepoint_batch/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_statepoint_batch/materials.xml +++ b/tests/test_statepoint_batch/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_statepoint_interval/materials.xml b/tests/test_statepoint_interval/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_statepoint_interval/materials.xml +++ b/tests/test_statepoint_interval/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_statepoint_restart/materials.xml b/tests/test_statepoint_restart/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_statepoint_restart/materials.xml +++ b/tests/test_statepoint_restart/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_statepoint_restart/results_true.dat b/tests/test_statepoint_restart/results_true.dat index 49afeb1d52..0e83121c58 100644 --- a/tests/test_statepoint_restart/results_true.dat +++ b/tests/test_statepoint_restart/results_true.dat @@ -41,16 +41,16 @@ tally 1: 1.416293E-07 0.000000E+00 0.000000E+00 -7.000000E-03 -1.500000E-05 -3.445754E-03 -3.819507E-06 -2.124056E-03 -1.976201E-06 -1.542203E-03 -1.531669E-06 -4.135720E-03 -4.532612E-06 +2.100000E-02 +1.150000E-04 +5.280651E-03 +1.222273E-05 +5.235520E-03 +1.202448E-05 +5.064093E-03 +1.787892E-05 +1.071093E-02 +2.748613E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -59,8 +59,118 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.874391E-04 -1.725424E-07 +8.954046E-04 +2.673852E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.100000E-02 +2.130000E-04 +1.472240E-02 +5.500913E-05 +1.077445E-02 +2.987369E-05 +6.729425E-03 +1.249089E-05 +1.363637E-02 +4.345511E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.182717E-03 +5.268981E-07 +2.000000E-03 +2.000000E-06 +-1.367978E-03 +9.381191E-07 +4.071787E-04 +9.316064E-08 +4.394728E-04 +1.064342E-07 +2.110881E-03 +1.737594E-06 +1.000000E-03 +1.000000E-06 +9.347357E-04 +8.737309E-07 +8.105963E-04 +6.570664E-07 +6.396651E-04 +4.091714E-07 +2.938723E-04 +8.636093E-08 +2.300000E-02 +1.330000E-04 +1.081756E-02 +3.675127E-05 +2.530156E-03 +6.960955E-06 +-1.930911E-03 +4.910249E-06 +1.162826E-02 +3.490280E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.957101E-04 +4.402865E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-02 +3.400000E-05 +4.086838E-03 +5.900874E-06 +1.812330E-03 +3.716159E-06 +2.138941E-03 +3.006748E-06 +5.414129E-03 +8.079335E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -71,76 +181,6 @@ tally 1: 0.000000E+00 3.079655E-04 9.484274E-08 -1.000000E-03 -1.000000E-06 -9.451745E-04 -8.933548E-07 -8.400323E-04 -7.056542E-07 -6.931788E-04 -4.804969E-07 -0.000000E+00 -0.000000E+00 -3.000000E-03 -3.000000E-06 -1.134842E-03 -1.040850E-06 -6.127525E-05 -3.988312E-07 -4.938488E-05 -2.738492E-07 -1.484493E-03 -9.722888E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -201,16 +241,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.200000E-02 -4.600000E-05 -9.302157E-04 -3.853850E-06 -1.874541E-03 -3.092623E-06 --1.511552E-03 -4.053466E-06 -5.941986E-03 -9.853873E-06 +2.700000E-02 +1.670000E-04 +1.789444E-02 +8.260005E-05 +1.049872E-02 +2.774537E-05 +5.665111E-03 +8.560197E-06 +1.100708E-02 +2.835296E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -219,60 +259,38 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.186549E-03 -5.291648E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.935668E-04 -8.618149E-08 +3.079655E-04 +9.484274E-08 1.000000E-03 1.000000E-06 -9.893707E-04 -9.788543E-07 -9.682814E-04 -9.375689E-07 -9.370683E-04 -8.780970E-07 -0.000000E+00 -0.000000E+00 -8.000000E-03 -2.000000E-05 -3.721382E-03 -4.736982E-06 --1.037031E-04 -6.648392E-07 --5.996856E-04 -9.642316E-07 -3.248622E-03 -4.063214E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.938723E-04 -8.636093E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +-2.856031E-04 +8.156913E-08 +-3.776463E-04 +1.426167E-07 +3.701637E-04 +1.370211E-07 +1.203065E-03 +7.240969E-07 +1.000000E-03 +1.000000E-06 +9.705482E-04 +9.419638E-07 +9.129457E-04 +8.334699E-07 +8.297310E-04 +6.884535E-07 0.000000E+00 0.000000E+00 +4.400000E-02 +4.320000E-04 +1.141886E-02 +4.208707E-05 +9.213446E-03 +2.259305E-05 +9.177440E-03 +2.088782E-05 +2.116869E-02 +9.629049E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -281,16 +299,38 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +1.501009E-03 +6.405023E-07 +1.000000E-03 +1.000000E-06 +5.882614E-04 +3.460515E-07 +1.907719E-05 +3.639390E-10 +-3.734703E-04 +1.394801E-07 +1.472277E-03 +9.506220E-07 2.000000E-03 2.000000E-06 -1.502634E-03 -1.146555E-06 -7.198331E-04 -3.484978E-07 --3.426513E-05 -1.342349E-07 -1.511030E-03 -1.198311E-06 +1.830192E-03 +1.679505E-06 +1.519257E-03 +1.189525E-06 +1.118506E-03 +7.332971E-07 +2.977039E-04 +8.862764E-08 +2.000000E-02 +1.080000E-04 +8.640372E-03 +1.765553E-05 +5.688468E-03 +1.038555E-05 +2.447898E-03 +4.466055E-06 +8.949668E-03 +1.935056E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -299,6 +339,38 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +2.977039E-04 +8.862764E-08 +1.000000E-03 +1.000000E-06 +-3.805163E-04 +1.447926E-07 +-2.828111E-04 +7.998210E-08 +4.330345E-04 +1.875189E-07 +2.121142E-03 +1.958355E-06 +1.000000E-03 +1.000000E-06 +9.260022E-04 +8.574800E-07 +7.862200E-04 +6.181419E-07 +5.960676E-04 +3.552966E-07 +2.938723E-04 +8.636093E-08 +1.000000E-02 +3.400000E-05 +4.840884E-03 +1.080853E-05 +3.402096E-03 +4.113972E-06 +1.374077E-03 +2.333511E-06 +4.754696E-03 +7.172310E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -307,6 +379,14 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.079655E-04 +9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -361,16 +441,136 @@ tally 1: 1.052422E-07 0.000000E+00 0.000000E+00 -1.500000E-02 -5.500000E-05 -2.209492E-03 -2.545503E-06 -5.991182E-03 -1.290780E-05 -1.772063E-03 -2.006265E-06 -5.944487E-03 -1.042417E-05 +2.900000E-02 +2.230000E-04 +6.260565E-03 +1.544092E-05 +7.061757E-03 +2.562385E-05 +3.982541E-03 +7.962565E-06 +1.486928E-02 +5.763902E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.915762E-04 +1.749886E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.954079E-04 +3.545105E-07 +1.000000E-03 +1.000000E-06 +9.938157E-04 +9.876697E-07 +9.815046E-04 +9.633512E-07 +9.631807E-04 +9.277170E-07 +0.000000E+00 +0.000000E+00 +2.900000E-02 +1.990000E-04 +1.237546E-02 +3.198261E-05 +8.287792E-03 +2.747313E-05 +3.254969E-03 +8.653294E-06 +1.189702E-02 +3.303341E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +9.033083E-04 +2.720593E-07 +3.000000E-03 +3.000000E-06 +3.649225E-04 +1.756075E-06 +1.134112E-03 +8.940601E-07 +-9.392028E-04 +5.872882E-07 +1.484188E-03 +9.721094E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.500000E-02 +1.390000E-04 +1.511834E-02 +5.459835E-05 +7.753447E-03 +2.291820E-05 +6.142979E-03 +1.359405E-05 +1.043467E-02 +2.526769E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.912057E-04 +1.747704E-07 +1.000000E-03 +1.000000E-06 +-1.098110E-04 +1.205846E-08 +-4.819123E-04 +2.322395E-07 +1.614061E-04 +2.605194E-08 +8.813115E-04 +4.316252E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 +1.900000E-02 +1.030000E-04 +1.035735E-02 +3.119381E-05 +6.483551E-03 +1.164471E-05 +3.924334E-03 +6.047577E-06 +9.748673E-03 +2.956634E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -389,120 +589,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.190621E-03 -8.859279E-07 -2.000000E-03 -2.000000E-06 -1.908405E-03 -1.821879E-06 -1.732819E-03 -1.508498E-06 -1.487670E-03 -1.131430E-06 -0.000000E+00 -0.000000E+00 -4.000000E-03 -4.000000E-06 -3.379122E-03 -2.880429E-06 -2.320644E-03 -1.498759E-06 -1.119131E-03 -6.212863E-07 -1.494579E-03 -6.241237E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.976389E-04 -8.858892E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.100000E-02 -1.150000E-04 -5.280651E-03 -1.222273E-05 -5.235520E-03 -1.202448E-05 -5.064093E-03 -1.787892E-05 -1.071093E-02 -2.748613E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.954046E-04 -2.673852E-07 +2.935668E-04 +8.618149E-08 +1.000000E-03 +1.000000E-06 +8.623139E-04 +7.435852E-07 +6.153778E-04 +3.786899E-07 +3.095388E-04 +9.581428E-08 0.000000E+00 0.000000E+00 +7.000000E-03 +1.500000E-05 +3.445754E-03 +3.819507E-06 +2.124056E-03 +1.976201E-06 +1.542203E-03 +1.531669E-06 +4.135720E-03 +4.532612E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -511,6 +619,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.874391E-04 +1.725424E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -519,6 +629,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.079655E-04 +9.484274E-08 +1.000000E-03 +1.000000E-06 +9.451745E-04 +8.933548E-07 +8.400323E-04 +7.056542E-07 +6.931788E-04 +4.804969E-07 0.000000E+00 0.000000E+00 2.600000E-02 @@ -561,6 +681,566 @@ tally 1: 5.268483E-07 0.000000E+00 0.000000E+00 +2.900000E-02 +1.950000E-04 +8.928267E-03 +2.594547E-05 +4.752762E-03 +1.522378E-05 +5.376579E-03 +1.088620E-05 +1.461149E-02 +4.367386E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.912057E-04 +1.747704E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +9.700000E-05 +1.046968E-02 +3.828445E-05 +6.704767E-03 +2.668260E-05 +2.659611E-03 +1.143518E-05 +1.099391E-02 +2.847330E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.655540E-03 +2.523801E-06 +3.000000E-03 +5.000000E-06 +2.960960E-03 +4.866206E-06 +2.884206E-03 +4.608867E-06 +2.772329E-03 +4.247272E-06 +2.976389E-04 +8.858892E-08 +6.000000E-03 +8.000000E-06 +2.104495E-03 +2.749678E-06 +8.451272E-04 +9.362821E-07 +5.355137E-04 +3.419837E-07 +2.683856E-03 +1.512640E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +1.000000E-03 +1.000000E-06 +9.374310E-04 +8.787769E-07 +8.181653E-04 +6.693944E-07 +6.533352E-04 +4.268468E-07 +2.976389E-04 +8.858892E-08 +1.200000E-02 +4.600000E-05 +9.302157E-04 +3.853850E-06 +1.874541E-03 +3.092623E-06 +-1.511552E-03 +4.053466E-06 +5.941986E-03 +9.853873E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.186549E-03 +5.291648E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 +1.000000E-03 +1.000000E-06 +9.893707E-04 +9.788543E-07 +9.682814E-04 +9.375689E-07 +9.370683E-04 +8.780970E-07 +0.000000E+00 +0.000000E+00 +2.300000E-02 +1.230000E-04 +5.099566E-03 +9.143616E-06 +4.738751E-03 +7.819254E-06 +3.929250E-03 +6.884420E-06 +1.015650E-02 +2.236950E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.977039E-04 +8.862764E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.912708E-04 +1.748091E-07 +2.000000E-03 +2.000000E-06 +1.762035E-03 +1.552542E-06 +1.328812E-03 +8.839688E-07 +7.771806E-04 +3.049398E-07 +0.000000E+00 +0.000000E+00 +3.100000E-02 +2.250000E-04 +1.389831E-02 +5.927254E-05 +9.999959E-03 +3.379365E-05 +4.584291E-03 +1.665226E-05 +1.729188E-02 +6.078654E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.792523E-03 +8.900699E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.700000E-02 +7.100000E-05 +3.566805E-03 +2.049908E-05 +5.418617E-03 +7.496014E-06 +2.451897E-03 +2.115374E-06 +7.760001E-03 +1.634548E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.977039E-04 +8.862764E-08 +1.000000E-03 +1.000000E-06 +-7.119580E-04 +5.068842E-07 +2.603263E-04 +6.776977E-08 +1.657364E-04 +2.746855E-08 +8.807005E-04 +7.756334E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.900000E-02 +2.030000E-04 +6.527719E-03 +1.422798E-05 +1.560049E-03 +2.934829E-06 +1.548553E-03 +8.929308E-06 +1.108618E-02 +3.019578E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.174573E-03 +8.619943E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.500000E-02 +5.500000E-05 +2.209492E-03 +2.545503E-06 +5.991182E-03 +1.290780E-05 +1.772063E-03 +2.006265E-06 +5.944487E-03 +1.042417E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.079655E-04 +9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.190621E-03 +8.859279E-07 +2.000000E-03 +2.000000E-06 +1.908405E-03 +1.821879E-06 +1.732819E-03 +1.508498E-06 +1.487670E-03 +1.131430E-06 +0.000000E+00 +0.000000E+00 +2.600000E-02 +1.460000E-04 +7.818547E-03 +3.176773E-05 +5.200193E-03 +1.419001E-05 +3.947828E-03 +8.417104E-06 +9.232714E-03 +1.900222E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.186919E-03 +5.294604E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.600000E-02 +2.740000E-04 +9.407788E-03 +2.403566E-05 +4.480017E-03 +6.102099E-06 +5.941113E-03 +1.265337E-05 +1.462273E-02 +4.551799E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.056694E-04 +1.834704E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.807005E-04 +7.756334E-07 +1.000000E-03 +1.000000E-06 +8.905295E-04 +7.930427E-07 +6.895641E-04 +4.754986E-07 +4.297756E-04 +1.847070E-07 +0.000000E+00 +0.000000E+00 +1.200000E-02 +3.000000E-05 +4.798420E-03 +7.171924E-06 +1.417651E-03 +4.997963E-06 +2.131704E-03 +3.253030E-06 +7.754475E-03 +1.333333E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.938723E-04 +8.636093E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.484383E-03 +1.504224E-06 +3.000000E-03 +5.000000E-06 +2.760812E-03 +4.139104E-06 +2.336063E-03 +2.844690E-06 +1.817042E-03 +1.656152E-06 +0.000000E+00 +0.000000E+00 +1.900000E-02 +9.900000E-05 +7.385212E-03 +2.033270E-05 +6.336514E-03 +2.028060E-05 +3.967026E-03 +1.027239E-05 +1.066281E-02 +2.937591E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.000000E-03 +3.000000E-06 +1.134842E-03 +1.040850E-06 +6.127525E-05 +3.988312E-07 +4.938488E-05 +2.738492E-07 +1.484493E-03 +9.722888E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 2.300000E-02 1.650000E-04 9.507197E-03 @@ -601,6 +1281,566 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +3.100000E-02 +2.030000E-04 +1.194795E-02 +4.198084E-05 +8.484089E-03 +1.631808E-05 +5.880364E-03 +1.308096E-05 +1.342551E-02 +3.842917E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.915762E-04 +1.749886E-07 +1.000000E-03 +1.000000E-06 +-5.881991E-05 +3.459782E-09 +-4.948103E-04 +2.448373E-07 +8.772111E-05 +7.694993E-09 +5.871337E-04 +3.447260E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +8.700000E-05 +5.469796E-03 +1.029265E-05 +4.923561E-04 +2.403244E-06 +2.579361E-03 +5.814745E-06 +8.693503E-03 +1.682274E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +8.000000E-03 +1.600000E-05 +5.411154E-03 +8.076329E-06 +3.145940E-03 +4.212660E-06 +2.637510E-03 +3.210372E-06 +3.866944E-03 +3.257876E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.175489E-03 +1.381775E-06 +1.000000E-03 +1.000000E-06 +7.809681E-04 +6.099112E-07 +4.148668E-04 +1.721145E-07 +1.935089E-05 +3.744570E-10 +0.000000E+00 +0.000000E+00 +8.000000E-03 +2.000000E-05 +3.721382E-03 +4.736982E-06 +-1.037031E-04 +6.648392E-07 +-5.996856E-04 +9.642316E-07 +3.248622E-03 +4.063214E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.938723E-04 +8.636093E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.800000E-02 +1.780000E-04 +1.190615E-02 +4.434442E-05 +7.332993E-03 +2.337416E-05 +6.867008E-03 +1.321552E-05 +1.283876E-02 +3.527488E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.954079E-04 +3.545105E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.000000E-02 +3.880000E-04 +6.620484E-03 +3.751545E-05 +9.255367E-03 +1.963463E-05 +7.761524E-03 +1.694944E-05 +1.659048E-02 +7.200875E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +1.000000E-03 +1.000000E-06 +-5.273064E-04 +2.780520E-07 +-8.292201E-05 +6.876059E-09 +4.244131E-04 +1.801265E-07 +8.891501E-04 +4.407166E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.200000E-02 +3.400000E-05 +5.905081E-03 +1.535048E-05 +3.856089E-03 +8.589511E-06 +3.244585E-03 +5.882222E-06 +5.074321E-03 +5.793166E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.000000E-03 +8.000000E-06 +1.520286E-03 +4.076900E-06 +2.191143E-03 +3.717004E-06 +1.161623E-03 +3.726099E-06 +3.570376E-03 +5.251427E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +4.000000E-03 +4.000000E-06 +3.379122E-03 +2.880429E-06 +2.320644E-03 +1.498759E-06 +1.119131E-03 +6.212863E-07 +1.494579E-03 +6.241237E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.976389E-04 +8.858892E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.100000E-02 +1.950000E-04 +1.338410E-02 +5.097757E-05 +6.794436E-03 +1.428226E-05 +3.939298E-03 +9.052046E-06 +1.250316E-02 +3.147176E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.953428E-04 +1.772166E-07 +1.000000E-03 +1.000000E-06 +-5.747626E-05 +3.303520E-09 +-4.950447E-04 +2.450693E-07 +8.573970E-05 +7.351297E-09 +5.954079E-04 +3.545105E-07 +1.000000E-03 +1.000000E-06 +9.748367E-04 +9.503066E-07 +9.254598E-04 +8.564759E-07 +8.537292E-04 +7.288535E-07 +0.000000E+00 +0.000000E+00 +2.600000E-02 +1.800000E-04 +1.225587E-02 +3.757196E-05 +7.670283E-03 +2.316758E-05 +5.282346E-03 +1.407031E-05 +1.162837E-02 +3.241151E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +5.874391E-04 +1.725424E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.900000E-02 +9.900000E-05 +7.244455E-03 +2.708286E-05 +4.601657E-03 +5.366244E-06 +-1.675270E-03 +3.867377E-06 +9.216755E-03 +2.272207E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +3.079655E-04 +9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.159310E-04 +3.793709E-07 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +6.000000E-03 +1.000000E-05 +1.316884E-03 +2.894217E-06 +2.095957E-03 +1.439521E-06 +1.013831E-04 +8.405300E-07 +2.404012E-03 +1.641294E-06 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 1.500000E-02 6.300000E-05 5.790211E-03 @@ -641,16 +1881,16 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.700000E-02 -1.670000E-04 -1.789444E-02 -8.260005E-05 -1.049872E-02 -2.774537E-05 -5.665111E-03 -8.560197E-06 -1.100708E-02 -2.835296E-05 +1.900000E-02 +1.030000E-04 +3.010784E-03 +6.984061E-06 +5.243839E-03 +8.093978E-06 +-2.502286E-04 +2.564795E-06 +7.760559E-03 +1.654842E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -659,38 +1899,92 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -3.079655E-04 -9.484274E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 1.000000E-03 1.000000E-06 --2.856031E-04 -8.156913E-08 --3.776463E-04 -1.426167E-07 -3.701637E-04 -1.370211E-07 -1.203065E-03 -7.240969E-07 -1.000000E-03 -1.000000E-06 -9.705482E-04 -9.419638E-07 -9.129457E-04 -8.334699E-07 -8.297310E-04 -6.884535E-07 +9.333938E-04 +8.712239E-07 +8.068359E-04 +6.509841E-07 +6.328968E-04 +4.005583E-07 +0.000000E+00 +0.000000E+00 +1.800000E-02 +1.220000E-04 +6.860987E-03 +2.966806E-05 +4.229750E-03 +1.617998E-05 +1.295452E-03 +8.613003E-07 +7.815193E-03 +2.039363E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +2.935668E-04 +8.618149E-08 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 -2.300000E-02 -1.230000E-04 -5.099566E-03 -9.143616E-06 -4.738751E-03 -7.819254E-06 -3.929250E-03 -6.884420E-06 -1.015650E-02 -2.236950E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -699,8 +1993,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.977039E-04 -8.862764E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -709,28 +2001,18 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.912708E-04 -1.748091E-07 2.000000E-03 2.000000E-06 -1.762035E-03 -1.552542E-06 -1.328812E-03 -8.839688E-07 -7.771806E-04 -3.049398E-07 -0.000000E+00 -0.000000E+00 -2.800000E-02 -1.780000E-04 -1.190615E-02 -4.434442E-05 -7.332993E-03 -2.337416E-05 -6.867008E-03 -1.321552E-05 -1.283876E-02 -3.527488E-05 +1.502634E-03 +1.146555E-06 +7.198331E-04 +3.484978E-07 +-3.426513E-05 +1.342349E-07 +1.511030E-03 +1.198311E-06 +0.000000E+00 +0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 @@ -739,8 +2021,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -5.954079E-04 -3.545105E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -802,446 +2082,6 @@ tally 1: 0.000000E+00 0.000000E+00 2.900000E-02 -2.230000E-04 -6.260565E-03 -1.544092E-05 -7.061757E-03 -2.562385E-05 -3.982541E-03 -7.962565E-06 -1.486928E-02 -5.763902E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.915762E-04 -1.749886E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.954079E-04 -3.545105E-07 -1.000000E-03 -1.000000E-06 -9.938157E-04 -9.876697E-07 -9.815046E-04 -9.633512E-07 -9.631807E-04 -9.277170E-07 -0.000000E+00 -0.000000E+00 -2.600000E-02 -1.460000E-04 -7.818547E-03 -3.176773E-05 -5.200193E-03 -1.419001E-05 -3.947828E-03 -8.417104E-06 -9.232714E-03 -1.900222E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.186919E-03 -5.294604E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.100000E-02 -1.950000E-04 -1.338410E-02 -5.097757E-05 -6.794436E-03 -1.428226E-05 -3.939298E-03 -9.052046E-06 -1.250316E-02 -3.147176E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.953428E-04 -1.772166E-07 -1.000000E-03 -1.000000E-06 --5.747626E-05 -3.303520E-09 --4.950447E-04 -2.450693E-07 -8.573970E-05 -7.351297E-09 -5.954079E-04 -3.545105E-07 -1.000000E-03 -1.000000E-06 -9.748367E-04 -9.503066E-07 -9.254598E-04 -8.564759E-07 -8.537292E-04 -7.288535E-07 -0.000000E+00 -0.000000E+00 -1.000000E-02 -2.600000E-05 -5.875085E-04 -4.563904E-07 --9.207198E-05 -5.154496E-07 -3.674257E-05 -1.178281E-06 -5.048984E-03 -5.880390E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.079655E-04 -9.484274E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.952778E-04 -3.543557E-07 -1.000000E-03 -1.000000E-06 -9.362621E-04 -8.765867E-07 -8.148801E-04 -6.640295E-07 -6.473941E-04 -4.191191E-07 -0.000000E+00 -0.000000E+00 -3.100000E-02 -2.130000E-04 -1.472240E-02 -5.500913E-05 -1.077445E-02 -2.987369E-05 -6.729425E-03 -1.249089E-05 -1.363637E-02 -4.345511E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.182717E-03 -5.268981E-07 -2.000000E-03 -2.000000E-06 --1.367978E-03 -9.381191E-07 -4.071787E-04 -9.316064E-08 -4.394728E-04 -1.064342E-07 -2.110881E-03 -1.737594E-06 -1.000000E-03 -1.000000E-06 -9.347357E-04 -8.737309E-07 -8.105963E-04 -6.570664E-07 -6.396651E-04 -4.091714E-07 -2.938723E-04 -8.636093E-08 -2.900000E-02 -1.950000E-04 -8.928267E-03 -2.594547E-05 -4.752762E-03 -1.522378E-05 -5.376579E-03 -1.088620E-05 -1.461149E-02 -4.367386E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.912057E-04 -1.747704E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.100000E-02 -2.030000E-04 -1.194795E-02 -4.198084E-05 -8.484089E-03 -1.631808E-05 -5.880364E-03 -1.308096E-05 -1.342551E-02 -3.842917E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.915762E-04 -1.749886E-07 -1.000000E-03 -1.000000E-06 --5.881991E-05 -3.459782E-09 --4.948103E-04 -2.448373E-07 -8.772111E-05 -7.694993E-09 -5.871337E-04 -3.447260E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.900000E-02 -1.030000E-04 -3.010784E-03 -6.984061E-06 -5.243839E-03 -8.093978E-06 --2.502286E-04 -2.564795E-06 -7.760559E-03 -1.654842E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.935668E-04 -8.618149E-08 -1.000000E-03 -1.000000E-06 -9.333938E-04 -8.712239E-07 -8.068359E-04 -6.509841E-07 -6.328968E-04 -4.005583E-07 -0.000000E+00 -0.000000E+00 -4.400000E-02 -4.320000E-04 -1.141886E-02 -4.208707E-05 -9.213446E-03 -2.259305E-05 -9.177440E-03 -2.088782E-05 -2.116869E-02 -9.629049E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.501009E-03 -6.405023E-07 -1.000000E-03 -1.000000E-06 -5.882614E-04 -3.460515E-07 -1.907719E-05 -3.639390E-10 --3.734703E-04 -1.394801E-07 -1.472277E-03 -9.506220E-07 -2.000000E-03 -2.000000E-06 -1.830192E-03 -1.679505E-06 -1.519257E-03 -1.189525E-06 -1.118506E-03 -7.332971E-07 -2.977039E-04 -8.862764E-08 -3.100000E-02 -2.250000E-04 -1.389831E-02 -5.927254E-05 -9.999959E-03 -3.379365E-05 -4.584291E-03 -1.665226E-05 -1.729188E-02 -6.078654E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.792523E-03 -8.900699E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.000000E-02 -3.880000E-04 -6.620484E-03 -3.751545E-05 -9.255367E-03 -1.963463E-05 -7.761524E-03 -1.694944E-05 -1.659048E-02 -7.200875E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.976389E-04 -8.858892E-08 -1.000000E-03 -1.000000E-06 --5.273064E-04 -2.780520E-07 --8.292201E-05 -6.876059E-09 -4.244131E-04 -1.801265E-07 -8.891501E-04 -4.407166E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.900000E-02 1.970000E-04 4.944370E-03 2.340271E-05 @@ -1281,446 +2121,6 @@ tally 1: 3.184788E-07 0.000000E+00 0.000000E+00 -2.900000E-02 -1.990000E-04 -1.237546E-02 -3.198261E-05 -8.287792E-03 -2.747313E-05 -3.254969E-03 -8.653294E-06 -1.189702E-02 -3.303341E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.033083E-04 -2.720593E-07 -3.000000E-03 -3.000000E-06 -3.649225E-04 -1.756075E-06 -1.134112E-03 -8.940601E-07 --9.392028E-04 -5.872882E-07 -1.484188E-03 -9.721094E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.600000E-02 -2.740000E-04 -9.407788E-03 -2.403566E-05 -4.480017E-03 -6.102099E-06 -5.941113E-03 -1.265337E-05 -1.462273E-02 -4.551799E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.056694E-04 -1.834704E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.807005E-04 -7.756334E-07 -1.000000E-03 -1.000000E-06 -8.905295E-04 -7.930427E-07 -6.895641E-04 -4.754986E-07 -4.297756E-04 -1.847070E-07 -0.000000E+00 -0.000000E+00 -2.600000E-02 -1.800000E-04 -1.225587E-02 -3.757196E-05 -7.670283E-03 -2.316758E-05 -5.282346E-03 -1.407031E-05 -1.162837E-02 -3.241151E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.874391E-04 -1.725424E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-02 -9.000000E-05 -5.358616E-03 -1.697599E-05 -3.060277E-03 -7.132281E-06 -2.485730E-03 -7.247489E-06 -9.248313E-03 -1.738407E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.991712E-04 -2.696131E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.954079E-04 -3.545105E-07 -1.000000E-03 -1.000000E-06 -9.816220E-04 -9.635817E-07 -9.453726E-04 -8.937294E-07 -8.922496E-04 -7.961093E-07 -0.000000E+00 -0.000000E+00 -2.300000E-02 -1.330000E-04 -1.081756E-02 -3.675127E-05 -2.530156E-03 -6.960955E-06 --1.930911E-03 -4.910249E-06 -1.162826E-02 -3.490280E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.957101E-04 -4.402865E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.900000E-02 -9.700000E-05 -1.046968E-02 -3.828445E-05 -6.704767E-03 -2.668260E-05 -2.659611E-03 -1.143518E-05 -1.099391E-02 -2.847330E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.935668E-04 -8.618149E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.655540E-03 -2.523801E-06 -3.000000E-03 -5.000000E-06 -2.960960E-03 -4.866206E-06 -2.884206E-03 -4.608867E-06 -2.772329E-03 -4.247272E-06 -2.976389E-04 -8.858892E-08 -1.900000E-02 -8.700000E-05 -5.469796E-03 -1.029265E-05 -4.923561E-04 -2.403244E-06 -2.579361E-03 -5.814745E-06 -8.693503E-03 -1.682274E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.976389E-04 -8.858892E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.800000E-02 -1.220000E-04 -6.860987E-03 -2.966806E-05 -4.229750E-03 -1.617998E-05 -1.295452E-03 -8.613003E-07 -7.815193E-03 -2.039363E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.935668E-04 -8.618149E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.000000E-02 -1.080000E-04 -8.640372E-03 -1.765553E-05 -5.688468E-03 -1.038555E-05 -2.447898E-03 -4.466055E-06 -8.949668E-03 -1.935056E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.977039E-04 -8.862764E-08 -1.000000E-03 -1.000000E-06 --3.805163E-04 -1.447926E-07 --2.828111E-04 -7.998210E-08 -4.330345E-04 -1.875189E-07 -2.121142E-03 -1.958355E-06 -1.000000E-03 -1.000000E-06 -9.260022E-04 -8.574800E-07 -7.862200E-04 -6.181419E-07 -5.960676E-04 -3.552966E-07 -2.938723E-04 -8.636093E-08 -1.700000E-02 -7.100000E-05 -3.566805E-03 -2.049908E-05 -5.418617E-03 -7.496014E-06 -2.451897E-03 -2.115374E-06 -7.760001E-03 -1.634548E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.977039E-04 -8.862764E-08 -1.000000E-03 -1.000000E-06 --7.119580E-04 -5.068842E-07 -2.603263E-04 -6.776977E-08 -1.657364E-04 -2.746855E-08 -8.807005E-04 -7.756334E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.200000E-02 -3.400000E-05 -5.905081E-03 -1.535048E-05 -3.856089E-03 -8.589511E-06 -3.244585E-03 -5.882222E-06 -5.074321E-03 -5.793166E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 1.600000E-02 5.400000E-05 7.937805E-03 @@ -1761,446 +2161,6 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.500000E-02 -1.390000E-04 -1.511834E-02 -5.459835E-05 -7.753447E-03 -2.291820E-05 -6.142979E-03 -1.359405E-05 -1.043467E-02 -2.526769E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -5.912057E-04 -1.747704E-07 -1.000000E-03 -1.000000E-06 --1.098110E-04 -1.205846E-08 --4.819123E-04 -2.322395E-07 -1.614061E-04 -2.605194E-08 -8.813115E-04 -4.316252E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.935668E-04 -8.618149E-08 -1.200000E-02 -3.000000E-05 -4.798420E-03 -7.171924E-06 -1.417651E-03 -4.997963E-06 -2.131704E-03 -3.253030E-06 -7.754475E-03 -1.333333E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.938723E-04 -8.636093E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.484383E-03 -1.504224E-06 -3.000000E-03 -5.000000E-06 -2.760812E-03 -4.139104E-06 -2.336063E-03 -2.844690E-06 -1.817042E-03 -1.656152E-06 -0.000000E+00 -0.000000E+00 -1.900000E-02 -9.900000E-05 -7.244455E-03 -2.708286E-05 -4.601657E-03 -5.366244E-06 --1.675270E-03 -3.867377E-06 -9.216755E-03 -2.272207E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.079655E-04 -9.484274E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.159310E-04 -3.793709E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -8.000000E-03 -1.800000E-05 -4.925975E-03 -6.260377E-06 -3.176938E-03 -2.631319E-06 -2.008278E-03 -1.484516E-06 -3.844641E-03 -4.075869E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.977039E-04 -8.862764E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -9.238964E-04 -8.535846E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-02 -3.400000E-05 -4.086838E-03 -5.900874E-06 -1.812330E-03 -3.716159E-06 -2.138941E-03 -3.006748E-06 -5.414129E-03 -8.079335E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.079655E-04 -9.484274E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.000000E-03 -8.000000E-06 -2.104495E-03 -2.749678E-06 -8.451272E-04 -9.362821E-07 -5.355137E-04 -3.419837E-07 -2.683856E-03 -1.512640E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.976389E-04 -8.858892E-08 -1.000000E-03 -1.000000E-06 -9.374310E-04 -8.787769E-07 -8.181653E-04 -6.693944E-07 -6.533352E-04 -4.268468E-07 -2.976389E-04 -8.858892E-08 -8.000000E-03 -1.600000E-05 -5.411154E-03 -8.076329E-06 -3.145940E-03 -4.212660E-06 -2.637510E-03 -3.210372E-06 -3.866944E-03 -3.257876E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.175489E-03 -1.381775E-06 -1.000000E-03 -1.000000E-06 -7.809681E-04 -6.099112E-07 -4.148668E-04 -1.721145E-07 -1.935089E-05 -3.744570E-10 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.000000E-02 -3.400000E-05 -4.840884E-03 -1.080853E-05 -3.402096E-03 -4.113972E-06 -1.374077E-03 -2.333511E-06 -4.754696E-03 -7.172310E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -3.079655E-04 -9.484274E-08 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -2.900000E-02 -2.030000E-04 -6.527719E-03 -1.422798E-05 -1.560049E-03 -2.934829E-06 -1.548553E-03 -8.929308E-06 -1.108618E-02 -3.019578E-05 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -1.174573E-03 -8.619943E-07 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -4.000000E-03 -8.000000E-06 -1.520286E-03 -4.076900E-06 -2.191143E-03 -3.717004E-06 -1.161623E-03 -3.726099E-06 -3.570376E-03 -5.251427E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 2.000000E-03 2.000000E-06 1.447007E-04 @@ -2241,16 +2201,56 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -1.900000E-02 -1.030000E-04 -1.035735E-02 -3.119381E-05 -6.483551E-03 -1.164471E-05 -3.924334E-03 -6.047577E-06 -9.748673E-03 -2.956634E-05 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +0.000000E+00 +1.000000E-02 +2.600000E-05 +5.875085E-04 +4.563904E-07 +-9.207198E-05 +5.154496E-07 +3.674257E-05 +1.178281E-06 +5.048984E-03 +5.880390E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2269,28 +2269,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.935668E-04 -8.618149E-08 +5.952778E-04 +3.543557E-07 1.000000E-03 1.000000E-06 -8.623139E-04 -7.435852E-07 -6.153778E-04 -3.786899E-07 -3.095388E-04 -9.581428E-08 +9.362621E-04 +8.765867E-07 +8.148801E-04 +6.640295E-07 +6.473941E-04 +4.191191E-07 0.000000E+00 0.000000E+00 -1.900000E-02 -9.900000E-05 -7.385212E-03 -2.033270E-05 -6.336514E-03 -2.028060E-05 -3.967026E-03 -1.027239E-05 -1.066281E-02 -2.937591E-05 +2.000000E-02 +9.000000E-05 +5.358616E-03 +1.697599E-05 +3.060277E-03 +7.132281E-06 +2.485730E-03 +7.247489E-06 +9.248313E-03 +1.738407E-05 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2299,8 +2299,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -2.976389E-04 -8.858892E-08 +8.991712E-04 +2.696131E-07 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2309,6 +2309,28 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +5.954079E-04 +3.545105E-07 +1.000000E-03 +1.000000E-06 +9.816220E-04 +9.635817E-07 +9.453726E-04 +8.937294E-07 +8.922496E-04 +7.961093E-07 +0.000000E+00 +0.000000E+00 +8.000000E-03 +1.800000E-05 +4.925975E-03 +6.260377E-06 +3.176938E-03 +2.631319E-06 +2.008278E-03 +1.484516E-06 +3.844641E-03 +4.075869E-06 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2317,32 +2339,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -6.000000E-03 -1.000000E-05 -1.316884E-03 -2.894217E-06 -2.095957E-03 -1.439521E-06 -1.013831E-04 -8.405300E-07 -2.404012E-03 -1.641294E-06 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 -0.000000E+00 +2.977039E-04 +8.862764E-08 0.000000E+00 0.000000E+00 0.000000E+00 @@ -2351,6 +2349,8 @@ tally 1: 0.000000E+00 0.000000E+00 0.000000E+00 +9.238964E-04 +8.535846E-07 0.000000E+00 0.000000E+00 0.000000E+00 diff --git a/tests/test_statepoint_sourcesep/materials.xml b/tests/test_statepoint_sourcesep/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_statepoint_sourcesep/materials.xml +++ b/tests/test_statepoint_sourcesep/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_survival_biasing/materials.xml b/tests/test_survival_biasing/materials.xml index facad016bf..f271ddee22 100644 --- a/tests/test_survival_biasing/materials.xml +++ b/tests/test_survival_biasing/materials.xml @@ -3,8 +3,8 @@ - - + + diff --git a/tests/test_tallies/inputs_true.dat b/tests/test_tallies/inputs_true.dat index 9d67bc0d03..5f4bebb0d2 100644 --- a/tests/test_tallies/inputs_true.dat +++ b/tests/test_tallies/inputs_true.dat @@ -1 +1 @@ -930af242a043f2676a000dbc5a2db6b148edcb31ed8c87dbaa35a8efb37a3be8cff30cdf4dc03f9c5c7eb4021f7e4c3327e64681cdd8fd8722c95c69db850227 \ No newline at end of file +96d2f92c6017e62d688e3ca245c2ff7904a92816d188d096829440cd8fcfd4f8639dc67c12d54b324081c19e1c7dd2e79c1caeac53d7826399f11766826d5410 \ No newline at end of file diff --git a/tests/test_tallies/results_true.dat b/tests/test_tallies/results_true.dat index 7aa65e1c19..108c7ee800 100644 --- a/tests/test_tallies/results_true.dat +++ b/tests/test_tallies/results_true.dat @@ -1 +1 @@ -a51db2a4efc681805f85968e04411dc33beee0532c202f5179b9a82880ab60a75e53fa9141c81045ea1d2842372f2d8da900326f09382ea61dd80a3c9b43bba1 \ No newline at end of file +a6afd2f11affce2467d77b8477881ab20091f67df4f632226ec2dd5d4cd7fabb9ac3e182563bb467ed249e4b3fe95b319cb688d653757f8ea154759b8a7f50e1 \ No newline at end of file diff --git a/tests/test_tallies/test_tallies.py b/tests/test_tallies/test_tallies.py index ba0098513c..387be8af51 100644 --- a/tests/test_tallies/test_tallies.py +++ b/tests/test_tallies/test_tallies.py @@ -123,8 +123,9 @@ class TalliesTestHarness(PyAPITestHarness): t.filters = [cell_filter] t.scores = ['absorption', 'delayed-nu-fission', 'events', 'fission', 'inverse-velocity', 'kappa-fission', '(n,2n)', '(n,n1)', - '(n,gamma)', 'nu-fission', 'scatter', 'elastic', 'total', - 'prompt-nu-fission'] + '(n,gamma)', 'nu-fission', 'scatter', 'elastic', + 'total', 'prompt-nu-fission', 'fission-q-prompt', + 'fission-q-recoverable'] score_tallies[0].estimator = 'tracklength' score_tallies[1].estimator = 'analog' score_tallies[2].estimator = 'collision' diff --git a/tests/test_tally_aggregation/inputs_true.dat b/tests/test_tally_aggregation/inputs_true.dat index 9c79787555..6d2990754d 100644 --- a/tests/test_tally_aggregation/inputs_true.dat +++ b/tests/test_tally_aggregation/inputs_true.dat @@ -1 +1 @@ -67daf0d74cddb40ecbbc7e3793a3302866adcb1617fe2dc454dd161c06105e65027523f5e5954d80b961ba6c6abf14114b8be5c4d5b7682eaddffc1288d3e7c8 \ No newline at end of file +4a4e481b9af3612c71bdc93245011555807061bbd9d9be4c5b399f2c38820d38d9ce3ac6255d045415a216737eac65fb0f0b6e331e49b90bf8edc814d0f2f0e8 \ No newline at end of file diff --git a/tests/test_tally_arithmetic/inputs_true.dat b/tests/test_tally_arithmetic/inputs_true.dat index b56c17b6b6..b0da0ed247 100644 --- a/tests/test_tally_arithmetic/inputs_true.dat +++ b/tests/test_tally_arithmetic/inputs_true.dat @@ -1 +1 @@ -c8772a174e2162030f0315a318991085f1a5c0b054883a5f071d520e34f9ecf7d309f25700067bea8685e2b6324a19a003bd6f6ab38161ee87c95257b5a6ae69 \ No newline at end of file +6747131dad4c1efd8c87d857ce9127cb16ec883fdf5fabe309d82732d47851424273e9ad4878a335555d8b25bb0c0a15e68ac30e355ae346e9885c499e9ec979 \ No newline at end of file diff --git a/tests/test_tally_assumesep/materials.xml b/tests/test_tally_assumesep/materials.xml index f5a9e61bea..8021f5f99e 100644 --- a/tests/test_tally_assumesep/materials.xml +++ b/tests/test_tally_assumesep/materials.xml @@ -1,8 +1,6 @@ - 71c - @@ -59,7 +57,7 @@ - + @@ -69,7 +67,7 @@ - + @@ -128,7 +126,7 @@ - + @@ -155,7 +153,7 @@ - + @@ -182,7 +180,7 @@ - + @@ -209,7 +207,7 @@ - + @@ -236,7 +234,7 @@ - + @@ -251,7 +249,7 @@ - + @@ -266,7 +264,7 @@ - + diff --git a/tests/test_tally_nuclides/materials.xml b/tests/test_tally_nuclides/materials.xml index e9667b41f4..1f89c7df61 100644 --- a/tests/test_tally_nuclides/materials.xml +++ b/tests/test_tally_nuclides/materials.xml @@ -1,8 +1,6 @@ - 71c - diff --git a/tests/test_tally_slice_merge/inputs_true.dat b/tests/test_tally_slice_merge/inputs_true.dat index 16d11b6d2b..7a747e6b52 100644 --- a/tests/test_tally_slice_merge/inputs_true.dat +++ b/tests/test_tally_slice_merge/inputs_true.dat @@ -1 +1 @@ -a17354ce54bcb5ce93e861ae95fd932c45fe60c733d999aa180d5dee636f43130fac5b003c615e23c65d44fe55f376ef4c86596b78603ab217d7e37fd694074d \ No newline at end of file +144dd4059444fad5e2e4fa20681fbdc74c0e5cbf3265104a0b49d87c768798eaeb25e3c6c795bcac2eebdde784c51588006d62c9f25be96dda5c51011a76b7c1 \ No newline at end of file diff --git a/tests/test_tally_slice_merge/results_true.dat b/tests/test_tally_slice_merge/results_true.dat index 89d415b0d6..278d8ee108 100644 --- a/tests/test_tally_slice_merge/results_true.dat +++ b/tests/test_tally_slice_merge/results_true.dat @@ -49,19 +49,19 @@ 14 (500, 5000, 50000) 6.25e-07 2.00e+01 U238 fission 0.00e+00 0.00e+00 15 (500, 5000, 50000) 6.25e-07 2.00e+01 U238 nu-fission 0.00e+00 0.00e+00 sum(mesh) energy low [MeV] energy high [MeV] nuclide score mean std. dev. -0 ((1, 1, 1), (1, 2, 1)) 0.00e+00 6.25e-07 U235 fission 9.18e-03 1.62e-03 -1 ((1, 1, 1), (1, 2, 1)) 0.00e+00 6.25e-07 U235 nu-fission 2.24e-02 3.94e-03 -2 ((1, 1, 1), (1, 2, 1)) 0.00e+00 6.25e-07 U238 fission 1.31e-08 2.08e-09 -3 ((1, 1, 1), (1, 2, 1)) 0.00e+00 6.25e-07 U238 nu-fission 3.26e-08 5.19e-09 -4 ((1, 1, 1), (1, 2, 1)) 6.25e-07 2.00e+01 U235 fission 8.40e-04 2.13e-04 -5 ((1, 1, 1), (1, 2, 1)) 6.25e-07 2.00e+01 U235 nu-fission 2.06e-03 5.17e-04 -6 ((1, 1, 1), (1, 2, 1)) 6.25e-07 2.00e+01 U238 fission 7.05e-04 3.42e-04 -7 ((1, 1, 1), (1, 2, 1)) 6.25e-07 2.00e+01 U238 nu-fission 1.99e-03 1.01e-03 -8 ((2, 1, 1), (2, 2, 1)) 0.00e+00 6.25e-07 U235 fission 8.77e-03 1.30e-03 -9 ((2, 1, 1), (2, 2, 1)) 0.00e+00 6.25e-07 U235 nu-fission 2.14e-02 3.18e-03 -10 ((2, 1, 1), (2, 2, 1)) 0.00e+00 6.25e-07 U238 fission 1.24e-08 1.74e-09 -11 ((2, 1, 1), (2, 2, 1)) 0.00e+00 6.25e-07 U238 nu-fission 3.08e-08 4.33e-09 -12 ((2, 1, 1), (2, 2, 1)) 6.25e-07 2.00e+01 U235 fission 2.30e-03 6.20e-04 -13 ((2, 1, 1), (2, 2, 1)) 6.25e-07 2.00e+01 U235 nu-fission 5.63e-03 1.52e-03 -14 ((2, 1, 1), (2, 2, 1)) 6.25e-07 2.00e+01 U238 fission 1.45e-03 7.19e-04 -15 ((2, 1, 1), (2, 2, 1)) 6.25e-07 2.00e+01 U238 nu-fission 3.97e-03 1.98e-03 +0 ((1, 1, 1), (1, 2, 1)) 0.00e+00 6.25e-07 U235 fission 8.54e-03 1.30e-03 +1 ((1, 1, 1), (1, 2, 1)) 0.00e+00 6.25e-07 U235 nu-fission 2.08e-02 3.17e-03 +2 ((1, 1, 1), (1, 2, 1)) 0.00e+00 6.25e-07 U238 fission 1.21e-08 1.74e-09 +3 ((1, 1, 1), (1, 2, 1)) 0.00e+00 6.25e-07 U238 nu-fission 3.01e-08 4.34e-09 +4 ((1, 1, 1), (1, 2, 1)) 6.25e-07 2.00e+01 U235 fission 2.20e-03 6.05e-04 +5 ((1, 1, 1), (1, 2, 1)) 6.25e-07 2.00e+01 U235 nu-fission 5.38e-03 1.48e-03 +6 ((1, 1, 1), (1, 2, 1)) 6.25e-07 2.00e+01 U238 fission 1.40e-03 7.17e-04 +7 ((1, 1, 1), (1, 2, 1)) 6.25e-07 2.00e+01 U238 nu-fission 3.84e-03 1.97e-03 +8 ((2, 1, 1), (2, 2, 1)) 0.00e+00 6.25e-07 U235 fission 9.40e-03 1.62e-03 +9 ((2, 1, 1), (2, 2, 1)) 0.00e+00 6.25e-07 U235 nu-fission 2.29e-02 3.95e-03 +10 ((2, 1, 1), (2, 2, 1)) 0.00e+00 6.25e-07 U238 fission 1.34e-08 2.08e-09 +11 ((2, 1, 1), (2, 2, 1)) 0.00e+00 6.25e-07 U238 nu-fission 3.33e-08 5.18e-09 +12 ((2, 1, 1), (2, 2, 1)) 6.25e-07 2.00e+01 U235 fission 9.41e-04 2.52e-04 +13 ((2, 1, 1), (2, 2, 1)) 6.25e-07 2.00e+01 U235 nu-fission 2.31e-03 6.13e-04 +14 ((2, 1, 1), (2, 2, 1)) 6.25e-07 2.00e+01 U238 fission 7.54e-04 3.45e-04 +15 ((2, 1, 1), (2, 2, 1)) 6.25e-07 2.00e+01 U238 nu-fission 2.12e-03 1.02e-03 diff --git a/tests/test_trace/materials.xml b/tests/test_trace/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_trace/materials.xml +++ b/tests/test_trace/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_track_output/materials.xml b/tests/test_track_output/materials.xml index 017797aa1e..5dc9a64755 100644 --- a/tests/test_track_output/materials.xml +++ b/tests/test_track_output/materials.xml @@ -4,92 +4,92 @@ - - - - - + + + + + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - + diff --git a/tests/test_track_output/results_true.dat b/tests/test_track_output/results_true.dat index 6ded87a0ec..1d0ca80399 100644 --- a/tests/test_track_output/results_true.dat +++ b/tests/test_track_output/results_true.dat @@ -1,5 +1,5 @@ - + diff --git a/tests/test_translation/materials.xml b/tests/test_translation/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_translation/materials.xml +++ b/tests/test_translation/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_trigger_batch_interval/materials.xml b/tests/test_trigger_batch_interval/materials.xml index e9667b41f4..1f89c7df61 100644 --- a/tests/test_trigger_batch_interval/materials.xml +++ b/tests/test_trigger_batch_interval/materials.xml @@ -1,8 +1,6 @@ - 71c - diff --git a/tests/test_trigger_no_batch_interval/materials.xml b/tests/test_trigger_no_batch_interval/materials.xml index e9667b41f4..1f89c7df61 100644 --- a/tests/test_trigger_no_batch_interval/materials.xml +++ b/tests/test_trigger_no_batch_interval/materials.xml @@ -1,8 +1,6 @@ - 71c - diff --git a/tests/test_trigger_no_status/materials.xml b/tests/test_trigger_no_status/materials.xml index e9667b41f4..1f89c7df61 100644 --- a/tests/test_trigger_no_status/materials.xml +++ b/tests/test_trigger_no_status/materials.xml @@ -1,8 +1,6 @@ - 71c - diff --git a/tests/test_trigger_tallies/materials.xml b/tests/test_trigger_tallies/materials.xml index e9667b41f4..1f89c7df61 100644 --- a/tests/test_trigger_tallies/materials.xml +++ b/tests/test_trigger_tallies/materials.xml @@ -1,8 +1,6 @@ - 71c - diff --git a/tests/test_triso/inputs_true.dat b/tests/test_triso/inputs_true.dat index 04119a2dc8..561877ad93 100644 --- a/tests/test_triso/inputs_true.dat +++ b/tests/test_triso/inputs_true.dat @@ -1 +1 @@ -f33e6653b883200457df2ff2ba9cf715d5ddaa1296dd71d277c6f1d9d5b7831cc92aaf1e97509d26e5a93235cd9f775c0cfaa5ebc3dfe8fc71469bac166d362b \ No newline at end of file +b22973093e2b0690b30fb1262a11e27004555b796c446d256cb58a1d7329888ab60c1b93729b3d74bb015b98aa434416daa2dc2aee526eb8df0e9052911f94b4 \ No newline at end of file diff --git a/tests/test_triso/results_true.dat b/tests/test_triso/results_true.dat index ea7da21edf..15107e8c84 100644 --- a/tests/test_triso/results_true.dat +++ b/tests/test_triso/results_true.dat @@ -1,2 +1,2 @@ k-combined: -1.662675E+00 1.475968E-02 +1.636336E+00 1.154000E-01 diff --git a/tests/test_triso/test_triso.py b/tests/test_triso/test_triso.py index 9a8fb0c3be..685034491f 100644 --- a/tests/test_triso/test_triso.py +++ b/tests/test_triso/test_triso.py @@ -27,12 +27,12 @@ class TRISOTestHarness(PyAPITestHarness): porous_carbon = openmc.Material() porous_carbon.set_density('g/cm3', 1.0) porous_carbon.add_nuclide('C0', 1.0) - porous_carbon.add_s_alpha_beta('c_Graphite', '71t') + porous_carbon.add_s_alpha_beta('c_Graphite') ipyc = openmc.Material() ipyc.set_density('g/cm3', 1.90) ipyc.add_nuclide('C0', 1.0) - ipyc.add_s_alpha_beta('c_Graphite', '71t') + ipyc.add_s_alpha_beta('c_Graphite') sic = openmc.Material() sic.set_density('g/cm3', 3.20) @@ -42,12 +42,12 @@ class TRISOTestHarness(PyAPITestHarness): opyc = openmc.Material() opyc.set_density('g/cm3', 1.87) opyc.add_nuclide('C0', 1.0) - opyc.add_s_alpha_beta('c_Graphite', '71t') + opyc.add_s_alpha_beta('c_Graphite') graphite = openmc.Material() graphite.set_density('g/cm3', 1.1995) graphite.add_nuclide('C0', 1.0) - graphite.add_s_alpha_beta('c_Graphite', '71t') + graphite.add_s_alpha_beta('c_Graphite') # Create TRISO particles spheres = [openmc.Sphere(R=r*1e-4) @@ -60,24 +60,9 @@ class TRISOTestHarness(PyAPITestHarness): inner_univ = openmc.Universe(cells=[c1, c2, c3, c4, c5]) outer_radius = 422.5*1e-4 - trisos = [] - random.seed(1) - for i in range(100): - # Randomly sample location - lim = 0.5 - outer_radius*1.001 - x = random.uniform(-lim, lim) - y = random.uniform(-lim, lim) - z = random.uniform(-lim, lim) - t = openmc.model.TRISO(outer_radius, inner_univ, (x, y, z)) - - # Make sure TRISO doesn't overlap with another - for tp in trisos: - xp, yp, zp = tp.center - distance = sqrt((x - xp)**2 + (y - yp)**2 + (z - zp)**2) - if distance <= 2*outer_radius: - break - else: - trisos.append(t) + trisos = openmc.model.pack_trisos( + radius=outer_radius, fill=inner_univ, domain_shape='cube', + domain_length=1., domain_center=(0., 0., 0.), n_particles=100) # Define box to contain lattice min_x = openmc.XPlane(x0=-0.5, boundary_type='reflective') @@ -108,7 +93,6 @@ class TRISOTestHarness(PyAPITestHarness): settings.export_to_xml() mats = openmc.Materials([fuel, porous_carbon, ipyc, sic, opyc, graphite]) - mats.default_xs = '71c' mats.export_to_xml() diff --git a/tests/test_uniform_fs/materials.xml b/tests/test_uniform_fs/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_uniform_fs/materials.xml +++ b/tests/test_uniform_fs/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_union_energy_grids/geometry.xml b/tests/test_union_energy_grids/geometry.xml deleted file mode 100644 index bc56030e18..0000000000 --- a/tests/test_union_energy_grids/geometry.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/tests/test_union_energy_grids/materials.xml b/tests/test_union_energy_grids/materials.xml deleted file mode 100644 index ed9b38d901..0000000000 --- a/tests/test_union_energy_grids/materials.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/tests/test_union_energy_grids/results_true.dat b/tests/test_union_energy_grids/results_true.dat deleted file mode 100644 index 0a607592c8..0000000000 --- a/tests/test_union_energy_grids/results_true.dat +++ /dev/null @@ -1,2 +0,0 @@ -k-combined: -3.330789E-01 2.216495E-03 diff --git a/tests/test_union_energy_grids/settings.xml b/tests/test_union_energy_grids/settings.xml deleted file mode 100644 index 1eb22241cc..0000000000 --- a/tests/test_union_energy_grids/settings.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - union - - - 10 - 5 - 1000 - - - - - -4 -4 -4 4 4 4 - - - - diff --git a/tests/test_union_energy_grids/test_union_energy_grids.py b/tests/test_union_energy_grids/test_union_energy_grids.py deleted file mode 100644 index 2a595f3e66..0000000000 --- a/tests/test_union_energy_grids/test_union_energy_grids.py +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env python - -import os -import sys -sys.path.insert(0, os.pardir) -from testing_harness import TestHarness - - -if __name__ == '__main__': - harness = TestHarness('statepoint.10.*') - harness.main() diff --git a/tests/test_universe/materials.xml b/tests/test_universe/materials.xml index 23d7f969db..2472a74717 100644 --- a/tests/test_universe/materials.xml +++ b/tests/test_universe/materials.xml @@ -3,7 +3,7 @@ - + diff --git a/tests/test_void/materials.xml b/tests/test_void/materials.xml index 4768bad0bc..f70c3a40f2 100644 --- a/tests/test_void/materials.xml +++ b/tests/test_void/materials.xml @@ -3,8 +3,6 @@ - 71c - @@ -41,7 +39,7 @@ - + diff --git a/tests/test_volume_calc/inputs_true.dat b/tests/test_volume_calc/inputs_true.dat new file mode 100644 index 0000000000..ddfd497de4 --- /dev/null +++ b/tests/test_volume_calc/inputs_true.dat @@ -0,0 +1 @@ +382404d3061d2c847c87654ab12594ba3fbb7e3a82327da872b5fe2029018ef4d5d3376fceba5c2229ea6f85e1fb63650caf54baed3f3b0304137fde61a98d63 \ No newline at end of file diff --git a/tests/test_volume_calc/results_true.dat b/tests/test_volume_calc/results_true.dat new file mode 100644 index 0000000000..efd6395c3c --- /dev/null +++ b/tests/test_volume_calc/results_true.dat @@ -0,0 +1,31 @@ +k-combined: 4.165451e-02 3.582531e-04 +Volume calculation 0 +Domain 1: 31.4693 +/- 0.0721 cm^3 +Domain 2: 2.0933 +/- 0.0310 cm^3 +Domain 3: 2.0486 +/- 0.0307 cm^3 + Cell Nuclide Atoms Uncertainty +0 1 U235 3.481769e+23 7.979991e+20 +1 1 Mo99 3.481769e+22 7.979991e+19 +2 2 H1 1.399770e+23 2.072914e+21 +3 2 O16 6.998852e+22 1.036457e+21 +4 2 B10 6.998852e+18 1.036457e+17 +5 3 H1 1.369920e+23 2.051689e+21 +6 3 O16 6.849599e+22 1.025844e+21 +7 3 B10 6.849599e+18 1.025844e+17 +Volume calculation 1 +Domain 1: 4.1419 +/- 0.0426 cm^3 +Domain 2: 31.4693 +/- 0.0721 cm^3 + Material Nuclide Atoms Uncertainty +0 1 H1 2.769690e+23 2.850068e+21 +1 1 O16 1.384845e+23 1.425034e+21 +2 1 B10 1.384845e+19 1.425034e+17 +3 2 U235 3.481769e+23 7.979991e+20 +4 2 Mo99 3.481769e+22 7.979991e+19 +Volume calculation 2 +Domain 0: 35.6112 +/- 0.0664 cm^3 + Universe Nuclide Atoms Uncertainty +0 0 H1 2.769690e+23 2.850068e+21 +1 0 O16 1.384845e+23 1.425034e+21 +2 0 B10 1.384845e+19 1.425034e+17 +3 0 U235 3.481769e+23 7.979991e+20 +4 0 Mo99 3.481769e+22 7.979991e+19 diff --git a/tests/test_volume_calc/test_volume_calc.py b/tests/test_volume_calc/test_volume_calc.py new file mode 100644 index 0000000000..fa267efb6a --- /dev/null +++ b/tests/test_volume_calc/test_volume_calc.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python + +import os +import glob +import sys +sys.path.insert(0, os.pardir) +from testing_harness import PyAPITestHarness +import openmc + + +class VolumeTest(PyAPITestHarness): + def _build_inputs(self): + # Define materials + water = openmc.Material(1) + water.add_nuclide('H1', 2.0) + water.add_nuclide('O16', 1.0) + water.add_nuclide('B10', 0.0001) + water.add_s_alpha_beta('c_H_in_H2O') + water.set_density('g/cc', 1.0) + + fuel = openmc.Material(2) + fuel.add_nuclide('U235', 1.0) + fuel.add_nuclide('Mo99', 0.1) + fuel.set_density('g/cc', 4.5) + + materials = openmc.Materials((water, fuel)) + materials.export_to_xml() + + cyl = openmc.ZCylinder(1, R=1.0, boundary_type='vacuum') + top_sphere = openmc.Sphere(2, z0=5., R=1., boundary_type='vacuum') + top_plane = openmc.ZPlane(3, z0=5.) + bottom_sphere = openmc.Sphere(4, z0=-5., R=1., boundary_type='vacuum') + bottom_plane = openmc.ZPlane(5, z0=-5.) + + # Define geometry + inside_cyl = openmc.Cell(1, fill=fuel, region=-cyl & -top_plane & +bottom_plane) + top_hemisphere = openmc.Cell(2, fill=water, region=-top_sphere & +top_plane) + bottom_hemisphere = openmc.Cell(3, fill=water, region=-bottom_sphere & -top_plane) + root = openmc.Universe(0, cells=(inside_cyl, top_hemisphere, bottom_hemisphere)) + + geometry = openmc.Geometry() + geometry.root_universe = root + geometry.export_to_xml() + + # Set up stochastic volume calculation + ll, ur = openmc.Union(*[c.region for c in root.cells.values()]).bounding_box + vol_calcs = [ + openmc.VolumeCalculation(list(root.cells.values()), 100000), + openmc.VolumeCalculation([water, fuel], 100000, ll, ur), + openmc.VolumeCalculation([root], 100000, ll, ur) + ] + + # Define settings + settings = openmc.Settings() + settings.particles = 1000 + settings.batches = 4 + settings.inactive = 0 + settings.source = openmc.Source(space=openmc.stats.Box( + [-1., -1., -5.], [1., 1., 5.])) + settings.volume_calculations = vol_calcs + settings.export_to_xml() + + def _get_results(self): + # Read the statepoint file. + statepoint = os.path.join(os.getcwd(), self._sp_name) + sp = openmc.StatePoint(statepoint) + + # Write out k-combined. + outstr = 'k-combined: {:12.6e} {:12.6e}\n'.format(*sp.k_combined) + + for i, filename in enumerate(sorted(glob.glob(os.path.join( + os.getcwd(), 'volume_*.h5')))): + outstr += 'Volume calculation {}\n'.format(i) + + # Read volume calculation results + vol = openmc.VolumeCalculation.from_hdf5(filename) + + # Write cell volumes and total # of atoms for each nuclide + for uid, results in sorted(vol.results.items()): + outstr += 'Domain {0}: {1[0]:.4f} +/- {1[1]:.4f} cm^3\n'.format( + uid, results['volume']) + outstr += str(vol.atoms_dataframe) + '\n' + + return outstr + +if __name__ == '__main__': + harness = VolumeTest('statepoint.4.h5') + harness.main() diff --git a/tests/testing_harness.py b/tests/testing_harness.py index d360184045..19a7ffb06c 100644 --- a/tests/testing_harness.py +++ b/tests/testing_harness.py @@ -137,6 +137,7 @@ class TestHarness(object): output.append(os.path.join(os.getcwd(), 'tallies.out')) output.append(os.path.join(os.getcwd(), 'results_test.dat')) output.append(os.path.join(os.getcwd(), 'summary.h5')) + output += glob.glob(os.path.join(os.getcwd(), 'volume_*.h5')) for f in output: if os.path.exists(f): os.remove(f)