diff --git a/docs/source/pythonapi/examples/mgxs-part-i.ipynb b/docs/source/pythonapi/examples/mgxs-part-i.ipynb index 610e82ec1..ea75bec72 100644 --- a/docs/source/pythonapi/examples/mgxs-part-i.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-i.ipynb @@ -372,10 +372,12 @@ "\n", "* `TotalXS`\n", "* `TransportXS`\n", + "* `NuTransportXS`\n", "* `AbsorptionXS`\n", "* `CaptureXS`\n", "* `FissionXS`\n", "* `NuFissionXS`\n", + "* `KappaFissionXS`\n", "* `ScatterXS`\n", "* `NuScatterXS`\n", "* `ScatterMatrixXS`\n", @@ -394,9 +396,9 @@ "outputs": [], "source": [ "# Instantiate a few different sections\n", - "total = mgxs.TotalXS(domain=cell, domain_type='cell', groups=groups)\n", - "absorption = mgxs.AbsorptionXS(domain=cell, domain_type='cell', groups=groups)\n", - "scattering = mgxs.ScatterXS(domain=cell, domain_type='cell', groups=groups)" + "total = mgxs.TotalXS(domain=cell, groups=groups)\n", + "absorption = mgxs.AbsorptionXS(domain=cell, groups=groups)\n", + "scattering = mgxs.ScatterXS(domain=cell, groups=groups)" ] }, { @@ -417,22 +419,24 @@ "data": { "text/plain": [ "OrderedDict([('flux', Tally\n", - " \tID =\t10000\n", - " \tName =\t\n", - " \tFilters =\t\n", - " \t\tcell\t[1]\n", - " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", - " \tNuclides =\ttotal \n", - " \tScores =\t['flux']\n", - " \tEstimator =\ttracklength), ('absorption', Tally\n", - " \tID =\t10001\n", - " \tName =\t\n", - " \tFilters =\t\n", - " \t\tcell\t[1]\n", - " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", - " \tNuclides =\ttotal \n", - " \tScores =\t['absorption']\n", - " \tEstimator =\ttracklength)])" + "\tID =\t10000\n", + "\tName =\t\n", + "\tFilters =\t\n", + " \t\tcell\t[1]\n", + " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", + "\tNuclides =\ttotal \n", + "\tScores =\t['flux']\n", + "\tEstimator =\ttracklength\n", + "), ('absorption', Tally\n", + "\tID =\t10001\n", + "\tName =\t\n", + "\tFilters =\t\n", + " \t\tcell\t[1]\n", + " \t\tenergy\t[ 0.00000000e+00 6.25000000e-07 2.00000000e+01]\n", + "\tNuclides =\ttotal \n", + "\tScores =\t['absorption']\n", + "\tEstimator =\ttracklength\n", + ")])" ] }, "execution_count": 13, @@ -507,10 +511,11 @@ " 888\n", "\n", " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.org/en/latest/license.html\n", + " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: df280b60eb1c6d7b7f842e05ede734a4883a0fc8\n", - " Date/Time: 2016-05-05 13:43:54\n", + " Git SHA1: 19feb55e6d5e8350398627f39fb55ee8e2e63011\n", + " Date/Time: 2016-05-13 10:19:16\n", + " MPI Processes: 1\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -595,20 +600,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 5.7300E-01 seconds\n", - " Reading cross sections = 1.7600E-01 seconds\n", - " Total time in simulation = 2.1188E+01 seconds\n", - " Time in transport only = 2.1173E+01 seconds\n", - " Time in inactive batches = 2.6880E+00 seconds\n", - " Time in active batches = 1.8500E+01 seconds\n", - " Time synchronizing fission bank = 3.0000E-03 seconds\n", - " Sampling source sites = 2.0000E-03 seconds\n", - " SEND/RECV source sites = 1.0000E-03 seconds\n", + " Total time for initialization = 4.2300E-01 seconds\n", + " Reading cross sections = 9.3000E-02 seconds\n", + " Total time in simulation = 1.6549E+01 seconds\n", + " Time in transport only = 1.6535E+01 seconds\n", + " Time in inactive batches = 2.3650E+00 seconds\n", + " Time in active batches = 1.4184E+01 seconds\n", + " Time synchronizing fission bank = 5.0000E-03 seconds\n", + " Sampling source sites = 3.0000E-03 seconds\n", + " SEND/RECV source sites = 0.0000E+00 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", " Total time for finalization = 0.0000E+00 seconds\n", - " Total time elapsed = 2.1776E+01 seconds\n", - " Calculation Rate (inactive) = 9300.60 neutrons/second\n", - " Calculation Rate (active) = 5405.41 neutrons/second\n", + " Total time elapsed = 1.6981E+01 seconds\n", + " Calculation Rate (inactive) = 10570.8 neutrons/second\n", + " Calculation Rate (active) = 7050.20 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1162,21 +1167,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 2", "language": "python", - "name": "python3" + "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 3 + "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.1" + "pygments_lexer": "ipython2", + "version": "2.7.6" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb index fd8d09052..b882e949c 100644 --- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb @@ -34,16 +34,16 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/romano/miniconda3/envs/default/lib/python3.5/site-packages/matplotlib/__init__.py:1350: UserWarning: This call to matplotlib.use() has no effect\n", + "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.1+1178.ga40c9ec-py2.7-linux-x86_64.egg/matplotlib/__init__.py:884: UserWarning: axes.color_cycle is deprecated and replaced with axes.prop_cycle; please use the latter.\n", + " warnings.warn(self.msg_depr % (key, alt_key))\n", + "/usr/local/lib/python2.7/dist-packages/matplotlib-1.5.1+1178.ga40c9ec-py2.7-linux-x86_64.egg/matplotlib/__init__.py:1362: 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", - "/home/romano/miniconda3/envs/default/lib/python3.5/importlib/_bootstrap.py:222: QAWarning: pyne.rxname is not yet QA compliant.\n", - " return f(*args, **kwds)\n", - "/home/romano/miniconda3/envs/default/lib/python3.5/importlib/_bootstrap.py:222: QAWarning: pyne.ace is not yet QA compliant.\n", - " return f(*args, **kwds)\n" + "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:9: QAWarning: pyne.rxname is not yet QA compliant.\n", + "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:9: QAWarning: pyne.ace is not yet QA compliant.\n" ] } ], @@ -396,9 +396,8 @@ "for cell in openmc_cells:\n", " for rxn_type in xs_library[cell.id]:\n", "\n", - " # Set the cross sections domain type to the cell\n", + " # Set the cross sections domain to the cell\n", " xs_library[cell.id][rxn_type].domain = cell\n", - " xs_library[cell.id][rxn_type].domain_type = 'cell'\n", " \n", " # Tally cross sections by nuclide\n", " xs_library[cell.id][rxn_type].by_nuclide = True\n", @@ -443,10 +442,11 @@ " 888\n", "\n", " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.org/en/latest/license.html\n", + " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: df280b60eb1c6d7b7f842e05ede734a4883a0fc8\n", - " Date/Time: 2016-05-05 15:00:51\n", + " Git SHA1: 19feb55e6d5e8350398627f39fb55ee8e2e63011\n", + " Date/Time: 2016-05-13 10:13:48\n", + " MPI Processes: 1\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -522,7 +522,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 10056\n", + " Triggers unsatisfied, max unc./thresh. is 1.25496 for flux in tally 10051\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", @@ -548,7 +548,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 10056\n", + " Triggers unsatisfied, max unc./thresh. is 1.00243 for flux in tally 10051\n", " The estimated number of batches is 74\n", " 74/1 1.22437 1.22487 +/- 0.00188\n", " Triggers satisfied for batch 74\n", @@ -561,20 +561,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 3.8600E-01 seconds\n", - " Reading cross sections = 1.1000E-01 seconds\n", - " Total time in simulation = 2.3697E+02 seconds\n", - " Time in transport only = 2.3690E+02 seconds\n", - " Time in inactive batches = 1.5640E+01 seconds\n", - " Time in active batches = 2.2133E+02 seconds\n", - " Time synchronizing fission bank = 3.0000E-02 seconds\n", - " Sampling source sites = 1.9000E-02 seconds\n", - " SEND/RECV source sites = 1.1000E-02 seconds\n", + " Total time for initialization = 5.7400E-01 seconds\n", + " Reading cross sections = 1.2600E-01 seconds\n", + " Total time in simulation = 2.6256E+02 seconds\n", + " Time in transport only = 2.6250E+02 seconds\n", + " Time in inactive batches = 2.2890E+01 seconds\n", + " Time in active batches = 2.3967E+02 seconds\n", + " Time synchronizing fission bank = 3.4000E-02 seconds\n", + " Sampling source sites = 2.1000E-02 seconds\n", + " SEND/RECV source sites = 1.3000E-02 seconds\n", " Time accumulating tallies = 0.0000E+00 seconds\n", - " Total time for finalization = 1.0000E-02 seconds\n", - " Total time elapsed = 2.3743E+02 seconds\n", - " Calculation Rate (inactive) = 6393.86 neutrons/second\n", - " Calculation Rate (active) = 1807.26 neutrons/second\n", + " Total time for finalization = 1.3000E-02 seconds\n", + " Total time elapsed = 2.6320E+02 seconds\n", + " Calculation Rate (inactive) = 4368.72 neutrons/second\n", + " Calculation Rate (active) = 1668.93 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -1166,166 +1166,166 @@ "[ NORMAL ] Iteration 0:\tk_eff = 0.574672\tres = 0.000E+00\n", "[ NORMAL ] Iteration 1:\tk_eff = 0.679815\tres = 4.253E-01\n", "[ NORMAL ] Iteration 2:\tk_eff = 0.660826\tres = 1.830E-01\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.658941\tres = 2.793E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.643012\tres = 2.852E-03\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.658940\tres = 2.793E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.643012\tres = 2.853E-03\n", "[ NORMAL ] Iteration 5:\tk_eff = 0.625810\tres = 2.417E-02\n", "[ NORMAL ] Iteration 6:\tk_eff = 0.606678\tres = 2.675E-02\n", "[ NORMAL ] Iteration 7:\tk_eff = 0.587485\tres = 3.057E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.569029\tres = 3.164E-02\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.551708\tres = 3.142E-02\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.536035\tres = 3.044E-02\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.522275\tres = 2.841E-02\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.510610\tres = 2.567E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.501107\tres = 2.233E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.493832\tres = 1.861E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.488781\tres = 1.452E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.485924\tres = 1.023E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.485212\tres = 5.845E-03\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.486571\tres = 1.466E-03\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.489906\tres = 2.802E-03\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.495106\tres = 6.853E-03\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.502056\tres = 1.061E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.510631\tres = 1.404E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.520696\tres = 1.708E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.532121\tres = 1.971E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.544768\tres = 2.194E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.558506\tres = 2.377E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.573200\tres = 2.522E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.588723\tres = 2.631E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.604951\tres = 2.708E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.621766\tres = 2.757E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.639054\tres = 2.779E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.656709\tres = 2.781E-02\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.674632\tres = 2.763E-02\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.692731\tres = 2.729E-02\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.710919\tres = 2.683E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.729119\tres = 2.626E-02\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.747258\tres = 2.560E-02\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.765273\tres = 2.488E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.783105\tres = 2.411E-02\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.800701\tres = 2.330E-02\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.818017\tres = 2.247E-02\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.835012\tres = 2.163E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.851652\tres = 2.078E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.867906\tres = 1.993E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.883751\tres = 1.909E-02\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.899164\tres = 1.826E-02\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.914131\tres = 1.744E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.928638\tres = 1.664E-02\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.942676\tres = 1.587E-02\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.956239\tres = 1.512E-02\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.969323\tres = 1.439E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.981928\tres = 1.368E-02\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.994054\tres = 1.300E-02\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.005706\tres = 1.235E-02\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.016887\tres = 1.172E-02\n", - "[ NORMAL ] Iteration 56:\tk_eff = 1.027604\tres = 1.112E-02\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.037867\tres = 1.054E-02\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.047683\tres = 9.987E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.057063\tres = 9.458E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.066016\tres = 8.953E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.074556\tres = 8.471E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.082694\tres = 8.011E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.090442\tres = 7.573E-03\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.097813\tres = 7.156E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.104821\tres = 6.760E-03\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.111477\tres = 6.383E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.117796\tres = 6.025E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.123790\tres = 5.684E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.129472\tres = 5.362E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.134854\tres = 5.056E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.139951\tres = 4.765E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.144773\tres = 4.491E-03\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.149333\tres = 4.230E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.153644\tres = 3.983E-03\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.157716\tres = 3.751E-03\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.161561\tres = 3.530E-03\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.165190\tres = 3.322E-03\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.168613\tres = 3.124E-03\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.171841\tres = 2.938E-03\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.174883\tres = 2.762E-03\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.177749\tres = 2.596E-03\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.180447\tres = 2.439E-03\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.182988\tres = 2.291E-03\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.185378\tres = 2.152E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.187627\tres = 2.021E-03\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.189741\tres = 1.897E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.191729\tres = 1.780E-03\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.193596\tres = 1.670E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.195350\tres = 1.566E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.196997\tres = 1.470E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.198542\tres = 1.378E-03\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.199994\tres = 1.291E-03\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.201355\tres = 1.211E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.202632\tres = 1.135E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.203830\tres = 1.063E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.204952\tres = 9.959E-04\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.206004\tres = 9.320E-04\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.206990\tres = 8.733E-04\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.207913\tres = 8.176E-04\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.208778\tres = 7.643E-04\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.209588\tres = 7.163E-04\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.210345\tres = 6.699E-04\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.211055\tres = 6.262E-04\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.211719\tres = 5.863E-04\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.212340\tres = 5.480E-04\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.212921\tres = 5.126E-04\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.213464\tres = 4.791E-04\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.213972\tres = 4.476E-04\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.214447\tres = 4.190E-04\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.214891\tres = 3.909E-04\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.215306\tres = 3.656E-04\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.215693\tres = 3.414E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.216056\tres = 3.186E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.216393\tres = 2.983E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.216709\tres = 2.777E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.217005\tres = 2.600E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.217280\tres = 2.425E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.217538\tres = 2.261E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.217777\tres = 2.116E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.218001\tres = 1.970E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.218210\tres = 1.836E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.218405\tres = 1.717E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.218587\tres = 1.604E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.218756\tres = 1.497E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.218915\tres = 1.387E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.219063\tres = 1.301E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.219200\tres = 1.213E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.219329\tres = 1.126E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.219449\tres = 1.058E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.219560\tres = 9.819E-05\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.219664\tres = 9.124E-05\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.219761\tres = 8.522E-05\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.219851\tres = 7.946E-05\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.219935\tres = 7.396E-05\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.220014\tres = 6.887E-05\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.220086\tres = 6.461E-05\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.220155\tres = 5.971E-05\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.220218\tres = 5.596E-05\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.220276\tres = 5.177E-05\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.220332\tres = 4.809E-05\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.220383\tres = 4.555E-05\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.220431\tres = 4.197E-05\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.220475\tres = 3.922E-05\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.220516\tres = 3.642E-05\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.220556\tres = 3.368E-05\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.220592\tres = 3.194E-05\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.220625\tres = 2.959E-05\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.220657\tres = 2.763E-05\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.220686\tres = 2.555E-05\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.220712\tres = 2.384E-05\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.220737\tres = 2.193E-05\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.220761\tres = 2.076E-05\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.220783\tres = 1.910E-05\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.220803\tres = 1.796E-05\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.220822\tres = 1.660E-05\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.220840\tres = 1.568E-05\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.220857\tres = 1.465E-05\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.220872\tres = 1.346E-05\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.220886\tres = 1.233E-05\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.220899\tres = 1.178E-05\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.220912\tres = 1.083E-05\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.220923\tres = 1.012E-05\n" + "[ NORMAL ] Iteration 8:\tk_eff = 0.569028\tres = 3.164E-02\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.551707\tres = 3.142E-02\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.536034\tres = 3.044E-02\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.522274\tres = 2.841E-02\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.510609\tres = 2.567E-02\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.501105\tres = 2.234E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.493831\tres = 1.861E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.488780\tres = 1.452E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.485922\tres = 1.023E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.485209\tres = 5.846E-03\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.486569\tres = 1.467E-03\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.489903\tres = 2.801E-03\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.495102\tres = 6.853E-03\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.502053\tres = 1.061E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.510627\tres = 1.404E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.520692\tres = 1.708E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.532116\tres = 1.971E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.544763\tres = 2.194E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.558500\tres = 2.377E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.573195\tres = 2.522E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.588717\tres = 2.631E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.604945\tres = 2.708E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.621759\tres = 2.756E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.639046\tres = 2.779E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.656701\tres = 2.780E-02\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.674624\tres = 2.763E-02\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.692722\tres = 2.729E-02\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.710909\tres = 2.683E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.729109\tres = 2.626E-02\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.747248\tres = 2.560E-02\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.765262\tres = 2.488E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.783093\tres = 2.411E-02\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.800689\tres = 2.330E-02\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.818004\tres = 2.247E-02\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.834999\tres = 2.163E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.851638\tres = 2.078E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.867891\tres = 1.993E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.883735\tres = 1.909E-02\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.899148\tres = 1.826E-02\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.914114\tres = 1.744E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.928621\tres = 1.664E-02\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.942659\tres = 1.587E-02\n", + "[ NORMAL ] Iteration 50:\tk_eff = 0.956221\tres = 1.512E-02\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.969305\tres = 1.439E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.981909\tres = 1.368E-02\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.994034\tres = 1.300E-02\n", + "[ NORMAL ] Iteration 54:\tk_eff = 1.005685\tres = 1.235E-02\n", + "[ NORMAL ] Iteration 55:\tk_eff = 1.016866\tres = 1.172E-02\n", + "[ NORMAL ] Iteration 56:\tk_eff = 1.027583\tres = 1.112E-02\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.037845\tres = 1.054E-02\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.047661\tres = 9.986E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.057040\tres = 9.458E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.065993\tres = 8.952E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.074533\tres = 8.470E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.082670\tres = 8.011E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.090418\tres = 7.573E-03\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.097789\tres = 7.156E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.104796\tres = 6.760E-03\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.111452\tres = 6.383E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.117770\tres = 6.025E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.123764\tres = 5.685E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.129445\tres = 5.362E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.134828\tres = 5.056E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.139924\tres = 4.766E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.144746\tres = 4.491E-03\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.149306\tres = 4.230E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.153617\tres = 3.984E-03\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.157689\tres = 3.750E-03\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.161534\tres = 3.530E-03\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.165163\tres = 3.321E-03\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.168586\tres = 3.124E-03\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.171813\tres = 2.938E-03\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.174855\tres = 2.762E-03\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.177721\tres = 2.596E-03\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.180419\tres = 2.439E-03\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.182960\tres = 2.291E-03\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.185350\tres = 2.152E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.187598\tres = 2.021E-03\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.189712\tres = 1.897E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.191699\tres = 1.780E-03\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.193567\tres = 1.670E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.195320\tres = 1.567E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.196967\tres = 1.469E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.198513\tres = 1.378E-03\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.199964\tres = 1.292E-03\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.201326\tres = 1.211E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.202602\tres = 1.134E-03\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.203800\tres = 1.063E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.204922\tres = 9.955E-04\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.205974\tres = 9.323E-04\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.206959\tres = 8.730E-04\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.207883\tres = 8.173E-04\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.208747\tres = 7.649E-04\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.209557\tres = 7.159E-04\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.210315\tres = 6.698E-04\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.211024\tres = 6.266E-04\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.211688\tres = 5.861E-04\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.212309\tres = 5.481E-04\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.212890\tres = 5.125E-04\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.213433\tres = 4.791E-04\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.213941\tres = 4.479E-04\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.214416\tres = 4.186E-04\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.214860\tres = 3.912E-04\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.215275\tres = 3.655E-04\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.215662\tres = 3.414E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.216024\tres = 3.189E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.216362\tres = 2.979E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.216678\tres = 2.781E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.216973\tres = 2.597E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.217249\tres = 2.425E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.217506\tres = 2.263E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.217746\tres = 2.112E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.217970\tres = 1.971E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.218179\tres = 1.840E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.218374\tres = 1.716E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.218556\tres = 1.601E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.218726\tres = 1.494E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.218884\tres = 1.393E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.219032\tres = 1.299E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.219170\tres = 1.212E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.219298\tres = 1.130E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.219418\tres = 1.053E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.219529\tres = 9.821E-05\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.219633\tres = 9.155E-05\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.219730\tres = 8.534E-05\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.219821\tres = 7.954E-05\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.219905\tres = 7.412E-05\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.219984\tres = 6.907E-05\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.220057\tres = 6.436E-05\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.220125\tres = 5.997E-05\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.220188\tres = 5.587E-05\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.220248\tres = 5.205E-05\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.220303\tres = 4.848E-05\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.220354\tres = 4.516E-05\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.220402\tres = 4.206E-05\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.220446\tres = 3.917E-05\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.220488\tres = 3.648E-05\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.220526\tres = 3.397E-05\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.220562\tres = 3.163E-05\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.220596\tres = 2.945E-05\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.220627\tres = 2.742E-05\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.220656\tres = 2.552E-05\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.220683\tres = 2.376E-05\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.220708\tres = 2.212E-05\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.220732\tres = 2.059E-05\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.220753\tres = 1.916E-05\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.220774\tres = 1.783E-05\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.220792\tres = 1.660E-05\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.220810\tres = 1.545E-05\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.220826\tres = 1.437E-05\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.220841\tres = 1.337E-05\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.220856\tres = 1.244E-05\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.220869\tres = 1.158E-05\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.220881\tres = 1.077E-05\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.220892\tres = 1.002E-05\n" ] } ], @@ -1358,8 +1358,8 @@ "output_type": "stream", "text": [ "openmc keff = 1.223474\n", - "openmoc keff = 1.220923\n", - "bias [pcm]: -255.0\n" + "openmoc keff = 1.220892\n", + "bias [pcm]: -258.1\n" ] } ], @@ -1435,236 +1435,236 @@ "[ NORMAL ] Importing ray tracing data from file...\n", "[ NORMAL ] Computing the eigenvalue...\n", "[ NORMAL ] Iteration 0:\tk_eff = 0.495816\tres = 0.000E+00\n", - "[ NORMAL ] Iteration 1:\tk_eff = 0.557478\tres = 5.042E-01\n", - "[ NORMAL ] Iteration 2:\tk_eff = 0.518301\tres = 1.244E-01\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.509212\tres = 7.027E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.496490\tres = 1.754E-02\n", + "[ NORMAL ] Iteration 1:\tk_eff = 0.557477\tres = 5.042E-01\n", + "[ NORMAL ] Iteration 2:\tk_eff = 0.518300\tres = 1.244E-01\n", + "[ NORMAL ] Iteration 3:\tk_eff = 0.509211\tres = 7.027E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.496489\tres = 1.754E-02\n", "[ NORMAL ] Iteration 5:\tk_eff = 0.488581\tres = 2.498E-02\n", "[ NORMAL ] Iteration 6:\tk_eff = 0.482897\tres = 1.593E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.479776\tres = 1.163E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.478835\tres = 6.465E-03\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.479872\tres = 1.960E-03\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.482685\tres = 2.166E-03\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.487085\tres = 5.861E-03\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.492901\tres = 9.116E-03\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.499973\tres = 1.194E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.508155\tres = 1.435E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.517314\tres = 1.637E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.527327\tres = 1.802E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.538082\tres = 1.936E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.549475\tres = 2.039E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.561413\tres = 2.117E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.573811\tres = 2.173E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.586589\tres = 2.208E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.599678\tres = 2.227E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.613012\tres = 2.231E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.626532\tres = 2.223E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.640186\tres = 2.206E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.653925\tres = 2.179E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.667706\tres = 2.146E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.681490\tres = 2.107E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.695241\tres = 2.064E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.708928\tres = 2.018E-02\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.722523\tres = 1.969E-02\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.736001\tres = 1.918E-02\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.749339\tres = 1.865E-02\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.762519\tres = 1.812E-02\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.775523\tres = 1.759E-02\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.788336\tres = 1.705E-02\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.800945\tres = 1.652E-02\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.813338\tres = 1.599E-02\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.825507\tres = 1.547E-02\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.837444\tres = 1.496E-02\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.849142\tres = 1.446E-02\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.860595\tres = 1.397E-02\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.871800\tres = 1.349E-02\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.882754\tres = 1.302E-02\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.893455\tres = 1.256E-02\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.903901\tres = 1.212E-02\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.914091\tres = 1.169E-02\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.924027\tres = 1.127E-02\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.933708\tres = 1.087E-02\n", - "[ NORMAL ] Iteration 50:\tk_eff = 0.943137\tres = 1.048E-02\n", - "[ NORMAL ] Iteration 51:\tk_eff = 0.952314\tres = 1.010E-02\n", - "[ NORMAL ] Iteration 52:\tk_eff = 0.961244\tres = 9.731E-03\n", - "[ NORMAL ] Iteration 53:\tk_eff = 0.969927\tres = 9.377E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 0.978368\tres = 9.033E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 0.986569\tres = 8.702E-03\n", - "[ NORMAL ] Iteration 56:\tk_eff = 0.994534\tres = 8.382E-03\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.002268\tres = 8.074E-03\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.009773\tres = 7.776E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.017055\tres = 7.488E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.024118\tres = 7.212E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.030966\tres = 6.944E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.037603\tres = 6.687E-03\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.044035\tres = 6.438E-03\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.050267\tres = 6.199E-03\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.056302\tres = 5.969E-03\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.062145\tres = 5.746E-03\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.067802\tres = 5.531E-03\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.073276\tres = 5.326E-03\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.078573\tres = 5.126E-03\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.083697\tres = 4.936E-03\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.088654\tres = 4.751E-03\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.093447\tres = 4.573E-03\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.098080\tres = 4.403E-03\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.102560\tres = 4.238E-03\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.106889\tres = 4.080E-03\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.111072\tres = 3.926E-03\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.115114\tres = 3.779E-03\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.119018\tres = 3.638E-03\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.122790\tres = 3.501E-03\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.126432\tres = 3.370E-03\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.129949\tres = 3.244E-03\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.133344\tres = 3.122E-03\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.136622\tres = 3.005E-03\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.139786\tres = 2.892E-03\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.142839\tres = 2.783E-03\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.145786\tres = 2.679E-03\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.148629\tres = 2.579E-03\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.151373\tres = 2.482E-03\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.154019\tres = 2.388E-03\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.156572\tres = 2.299E-03\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.159035\tres = 2.212E-03\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.161410\tres = 2.129E-03\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.163700\tres = 2.049E-03\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.165908\tres = 1.972E-03\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.168038\tres = 1.898E-03\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.170090\tres = 1.826E-03\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.172070\tres = 1.757E-03\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.173977\tres = 1.692E-03\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.175816\tres = 1.628E-03\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.177589\tres = 1.567E-03\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.179296\tres = 1.507E-03\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.180943\tres = 1.450E-03\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.182529\tres = 1.396E-03\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.184057\tres = 1.343E-03\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.185530\tres = 1.293E-03\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.186949\tres = 1.244E-03\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.188316\tres = 1.197E-03\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.189633\tres = 1.152E-03\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.190902\tres = 1.109E-03\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.192124\tres = 1.066E-03\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.193300\tres = 1.026E-03\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.194435\tres = 9.872E-04\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.195526\tres = 9.503E-04\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.196578\tres = 9.141E-04\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.197591\tres = 8.792E-04\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.198566\tres = 8.468E-04\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.199506\tres = 8.141E-04\n", - "[ NORMAL ] Iteration 118:\tk_eff = 1.200410\tres = 7.840E-04\n", - "[ NORMAL ] Iteration 119:\tk_eff = 1.201281\tres = 7.538E-04\n", - "[ NORMAL ] Iteration 120:\tk_eff = 1.202120\tres = 7.257E-04\n", - "[ NORMAL ] Iteration 121:\tk_eff = 1.202927\tres = 6.979E-04\n", - "[ NORMAL ] Iteration 122:\tk_eff = 1.203705\tres = 6.716E-04\n", - "[ NORMAL ] Iteration 123:\tk_eff = 1.204453\tres = 6.466E-04\n", - "[ NORMAL ] Iteration 124:\tk_eff = 1.205173\tres = 6.218E-04\n", - "[ NORMAL ] Iteration 125:\tk_eff = 1.205867\tres = 5.979E-04\n", - "[ NORMAL ] Iteration 126:\tk_eff = 1.206535\tres = 5.760E-04\n", - "[ NORMAL ] Iteration 127:\tk_eff = 1.207177\tres = 5.534E-04\n", - "[ NORMAL ] Iteration 128:\tk_eff = 1.207796\tres = 5.326E-04\n", - "[ NORMAL ] Iteration 129:\tk_eff = 1.208392\tres = 5.126E-04\n", - "[ NORMAL ] Iteration 130:\tk_eff = 1.208965\tres = 4.937E-04\n", - "[ NORMAL ] Iteration 131:\tk_eff = 1.209516\tres = 4.744E-04\n", - "[ NORMAL ] Iteration 132:\tk_eff = 1.210048\tres = 4.559E-04\n", - "[ NORMAL ] Iteration 133:\tk_eff = 1.210559\tres = 4.393E-04\n", - "[ NORMAL ] Iteration 134:\tk_eff = 1.211050\tres = 4.224E-04\n", - "[ NORMAL ] Iteration 135:\tk_eff = 1.211524\tres = 4.061E-04\n", - "[ NORMAL ] Iteration 136:\tk_eff = 1.211980\tres = 3.914E-04\n", - "[ NORMAL ] Iteration 137:\tk_eff = 1.212419\tres = 3.763E-04\n", - "[ NORMAL ] Iteration 138:\tk_eff = 1.212841\tres = 3.624E-04\n", - "[ NORMAL ] Iteration 139:\tk_eff = 1.213247\tres = 3.480E-04\n", - "[ NORMAL ] Iteration 140:\tk_eff = 1.213638\tres = 3.344E-04\n", - "[ NORMAL ] Iteration 141:\tk_eff = 1.214014\tres = 3.223E-04\n", - "[ NORMAL ] Iteration 142:\tk_eff = 1.214376\tres = 3.098E-04\n", - "[ NORMAL ] Iteration 143:\tk_eff = 1.214724\tres = 2.986E-04\n", - "[ NORMAL ] Iteration 144:\tk_eff = 1.215060\tres = 2.870E-04\n", - "[ NORMAL ] Iteration 145:\tk_eff = 1.215382\tres = 2.763E-04\n", - "[ NORMAL ] Iteration 146:\tk_eff = 1.215692\tres = 2.648E-04\n", - "[ NORMAL ] Iteration 147:\tk_eff = 1.215991\tres = 2.554E-04\n", - "[ NORMAL ] Iteration 148:\tk_eff = 1.216278\tres = 2.460E-04\n", - "[ NORMAL ] Iteration 149:\tk_eff = 1.216555\tres = 2.363E-04\n", - "[ NORMAL ] Iteration 150:\tk_eff = 1.216822\tres = 2.277E-04\n", - "[ NORMAL ] Iteration 151:\tk_eff = 1.217077\tres = 2.191E-04\n", - "[ NORMAL ] Iteration 152:\tk_eff = 1.217324\tres = 2.101E-04\n", - "[ NORMAL ] Iteration 153:\tk_eff = 1.217561\tres = 2.024E-04\n", - "[ NORMAL ] Iteration 154:\tk_eff = 1.217789\tres = 1.949E-04\n", - "[ NORMAL ] Iteration 155:\tk_eff = 1.218008\tres = 1.871E-04\n", - "[ NORMAL ] Iteration 156:\tk_eff = 1.218219\tres = 1.802E-04\n", - "[ NORMAL ] Iteration 157:\tk_eff = 1.218423\tres = 1.732E-04\n", - "[ NORMAL ] Iteration 158:\tk_eff = 1.218618\tres = 1.669E-04\n", - "[ NORMAL ] Iteration 159:\tk_eff = 1.218806\tres = 1.602E-04\n", - "[ NORMAL ] Iteration 160:\tk_eff = 1.218987\tres = 1.543E-04\n", - "[ NORMAL ] Iteration 161:\tk_eff = 1.219161\tres = 1.487E-04\n", - "[ NORMAL ] Iteration 162:\tk_eff = 1.219328\tres = 1.428E-04\n", - "[ NORMAL ] Iteration 163:\tk_eff = 1.219490\tres = 1.375E-04\n", - "[ NORMAL ] Iteration 164:\tk_eff = 1.219645\tres = 1.322E-04\n", - "[ NORMAL ] Iteration 165:\tk_eff = 1.219794\tres = 1.271E-04\n", - "[ NORMAL ] Iteration 166:\tk_eff = 1.219937\tres = 1.223E-04\n", - "[ NORMAL ] Iteration 167:\tk_eff = 1.220075\tres = 1.174E-04\n", - "[ NORMAL ] Iteration 168:\tk_eff = 1.220207\tres = 1.131E-04\n", - "[ NORMAL ] Iteration 169:\tk_eff = 1.220335\tres = 1.085E-04\n", - "[ NORMAL ] Iteration 170:\tk_eff = 1.220458\tres = 1.044E-04\n", - "[ NORMAL ] Iteration 171:\tk_eff = 1.220576\tres = 1.008E-04\n", - "[ NORMAL ] Iteration 172:\tk_eff = 1.220689\tres = 9.680E-05\n", - "[ NORMAL ] Iteration 173:\tk_eff = 1.220799\tres = 9.304E-05\n", - "[ NORMAL ] Iteration 174:\tk_eff = 1.220904\tres = 8.975E-05\n", - "[ NORMAL ] Iteration 175:\tk_eff = 1.221006\tres = 8.643E-05\n", - "[ NORMAL ] Iteration 176:\tk_eff = 1.221104\tres = 8.326E-05\n", - "[ NORMAL ] Iteration 177:\tk_eff = 1.221197\tres = 7.985E-05\n", - "[ NORMAL ] Iteration 178:\tk_eff = 1.221287\tres = 7.662E-05\n", - "[ NORMAL ] Iteration 179:\tk_eff = 1.221374\tres = 7.371E-05\n", - "[ NORMAL ] Iteration 180:\tk_eff = 1.221457\tres = 7.101E-05\n", - "[ NORMAL ] Iteration 181:\tk_eff = 1.221538\tres = 6.821E-05\n", - "[ NORMAL ] Iteration 182:\tk_eff = 1.221615\tres = 6.577E-05\n", - "[ NORMAL ] Iteration 183:\tk_eff = 1.221689\tres = 6.307E-05\n", - "[ NORMAL ] Iteration 184:\tk_eff = 1.221760\tres = 6.069E-05\n", - "[ NORMAL ] Iteration 185:\tk_eff = 1.221829\tres = 5.831E-05\n", - "[ NORMAL ] Iteration 186:\tk_eff = 1.221895\tres = 5.641E-05\n", - "[ NORMAL ] Iteration 187:\tk_eff = 1.221958\tres = 5.382E-05\n", - "[ NORMAL ] Iteration 188:\tk_eff = 1.222019\tres = 5.206E-05\n", - "[ NORMAL ] Iteration 189:\tk_eff = 1.222077\tres = 4.967E-05\n", - "[ NORMAL ] Iteration 190:\tk_eff = 1.222134\tres = 4.811E-05\n", - "[ NORMAL ] Iteration 191:\tk_eff = 1.222188\tres = 4.618E-05\n", - "[ NORMAL ] Iteration 192:\tk_eff = 1.222241\tres = 4.456E-05\n", - "[ NORMAL ] Iteration 193:\tk_eff = 1.222291\tres = 4.293E-05\n", - "[ NORMAL ] Iteration 194:\tk_eff = 1.222339\tres = 4.122E-05\n", - "[ NORMAL ] Iteration 195:\tk_eff = 1.222386\tres = 3.982E-05\n", - "[ NORMAL ] Iteration 196:\tk_eff = 1.222431\tres = 3.788E-05\n", - "[ NORMAL ] Iteration 197:\tk_eff = 1.222474\tres = 3.663E-05\n", - "[ NORMAL ] Iteration 198:\tk_eff = 1.222515\tres = 3.522E-05\n", - "[ NORMAL ] Iteration 199:\tk_eff = 1.222555\tres = 3.381E-05\n", - "[ NORMAL ] Iteration 200:\tk_eff = 1.222593\tres = 3.264E-05\n", - "[ NORMAL ] Iteration 201:\tk_eff = 1.222629\tres = 3.117E-05\n", - "[ NORMAL ] Iteration 202:\tk_eff = 1.222665\tres = 2.985E-05\n", - "[ NORMAL ] Iteration 203:\tk_eff = 1.222699\tres = 2.901E-05\n", - "[ NORMAL ] Iteration 204:\tk_eff = 1.222732\tres = 2.770E-05\n", - "[ NORMAL ] Iteration 205:\tk_eff = 1.222763\tres = 2.679E-05\n", - "[ NORMAL ] Iteration 206:\tk_eff = 1.222793\tres = 2.560E-05\n", - "[ NORMAL ] Iteration 207:\tk_eff = 1.222823\tres = 2.487E-05\n", - "[ NORMAL ] Iteration 208:\tk_eff = 1.222851\tres = 2.412E-05\n", - "[ NORMAL ] Iteration 209:\tk_eff = 1.222878\tres = 2.298E-05\n", - "[ NORMAL ] Iteration 210:\tk_eff = 1.222904\tres = 2.194E-05\n", - "[ NORMAL ] Iteration 211:\tk_eff = 1.222929\tres = 2.131E-05\n", - "[ NORMAL ] Iteration 212:\tk_eff = 1.222953\tres = 2.030E-05\n", - "[ NORMAL ] Iteration 213:\tk_eff = 1.222976\tres = 1.963E-05\n", - "[ NORMAL ] Iteration 214:\tk_eff = 1.222998\tres = 1.889E-05\n", - "[ NORMAL ] Iteration 215:\tk_eff = 1.223020\tres = 1.812E-05\n", - "[ NORMAL ] Iteration 216:\tk_eff = 1.223041\tres = 1.764E-05\n", - "[ NORMAL ] Iteration 217:\tk_eff = 1.223060\tres = 1.691E-05\n", - "[ NORMAL ] Iteration 218:\tk_eff = 1.223079\tres = 1.629E-05\n", - "[ NORMAL ] Iteration 219:\tk_eff = 1.223098\tres = 1.571E-05\n", - "[ NORMAL ] Iteration 220:\tk_eff = 1.223115\tres = 1.508E-05\n", - "[ NORMAL ] Iteration 221:\tk_eff = 1.223132\tres = 1.429E-05\n", - "[ NORMAL ] Iteration 222:\tk_eff = 1.223149\tres = 1.394E-05\n", - "[ NORMAL ] Iteration 223:\tk_eff = 1.223165\tres = 1.330E-05\n", - "[ NORMAL ] Iteration 224:\tk_eff = 1.223180\tres = 1.299E-05\n", - "[ NORMAL ] Iteration 225:\tk_eff = 1.223194\tres = 1.241E-05\n", - "[ NORMAL ] Iteration 226:\tk_eff = 1.223208\tres = 1.167E-05\n", - "[ NORMAL ] Iteration 227:\tk_eff = 1.223221\tres = 1.151E-05\n", - "[ NORMAL ] Iteration 228:\tk_eff = 1.223234\tres = 1.073E-05\n", - "[ NORMAL ] Iteration 229:\tk_eff = 1.223246\tres = 1.051E-05\n", - "[ NORMAL ] Iteration 230:\tk_eff = 1.223258\tres = 1.000E-05\n" + "[ NORMAL ] Iteration 7:\tk_eff = 0.479775\tres = 1.163E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.478834\tres = 6.465E-03\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.479871\tres = 1.960E-03\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.482684\tres = 2.166E-03\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.487084\tres = 5.861E-03\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.492900\tres = 9.116E-03\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.499971\tres = 1.194E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.508153\tres = 1.435E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.517312\tres = 1.637E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.527324\tres = 1.802E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.538079\tres = 1.935E-02\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.549472\tres = 2.039E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.561410\tres = 2.117E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.573807\tres = 2.173E-02\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.586585\tres = 2.208E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.599674\tres = 2.227E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.613007\tres = 2.231E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.626528\tres = 2.223E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.640181\tres = 2.206E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.653920\tres = 2.179E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.667700\tres = 2.146E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.681483\tres = 2.107E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.695234\tres = 2.064E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.708921\tres = 2.018E-02\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.722515\tres = 1.969E-02\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.735993\tres = 1.918E-02\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.749331\tres = 1.865E-02\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.762510\tres = 1.812E-02\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.775514\tres = 1.759E-02\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.788326\tres = 1.705E-02\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.800934\tres = 1.652E-02\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.813328\tres = 1.599E-02\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.825497\tres = 1.547E-02\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.837433\tres = 1.496E-02\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.849131\tres = 1.446E-02\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.860584\tres = 1.397E-02\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.871789\tres = 1.349E-02\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.882742\tres = 1.302E-02\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.893442\tres = 1.256E-02\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.903888\tres = 1.212E-02\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.914078\tres = 1.169E-02\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.924013\tres = 1.127E-02\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.933694\tres = 1.087E-02\n", + "[ NORMAL ] Iteration 50:\tk_eff = 0.943122\tres = 1.048E-02\n", + "[ NORMAL ] Iteration 51:\tk_eff = 0.952299\tres = 1.010E-02\n", + "[ NORMAL ] Iteration 52:\tk_eff = 0.961228\tres = 9.731E-03\n", + "[ NORMAL ] Iteration 53:\tk_eff = 0.969911\tres = 9.376E-03\n", + "[ NORMAL ] Iteration 54:\tk_eff = 0.978351\tres = 9.033E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 0.986552\tres = 8.702E-03\n", + "[ NORMAL ] Iteration 56:\tk_eff = 0.994517\tres = 8.382E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.002250\tres = 8.074E-03\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.009756\tres = 7.776E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.017037\tres = 7.488E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.024100\tres = 7.211E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.030948\tres = 6.944E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.037585\tres = 6.687E-03\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.044017\tres = 6.438E-03\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.050248\tres = 6.199E-03\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.056282\tres = 5.968E-03\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.062125\tres = 5.746E-03\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.067782\tres = 5.532E-03\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.073256\tres = 5.325E-03\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.078553\tres = 5.127E-03\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.083677\tres = 4.935E-03\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.088633\tres = 4.751E-03\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.093425\tres = 4.573E-03\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.098059\tres = 4.402E-03\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.102538\tres = 4.238E-03\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.106867\tres = 4.079E-03\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.111050\tres = 3.926E-03\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.115091\tres = 3.779E-03\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.118996\tres = 3.638E-03\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.122767\tres = 3.501E-03\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.126408\tres = 3.370E-03\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.129925\tres = 3.244E-03\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.133320\tres = 3.122E-03\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.136598\tres = 3.005E-03\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.139762\tres = 2.892E-03\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.142815\tres = 2.784E-03\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.145762\tres = 2.679E-03\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.148605\tres = 2.578E-03\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.151348\tres = 2.482E-03\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.153995\tres = 2.388E-03\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.156548\tres = 2.299E-03\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.159010\tres = 2.212E-03\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.161384\tres = 2.129E-03\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.163674\tres = 2.049E-03\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.165883\tres = 1.972E-03\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.168012\tres = 1.898E-03\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.170064\tres = 1.826E-03\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.172043\tres = 1.757E-03\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.173951\tres = 1.691E-03\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.175790\tres = 1.628E-03\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.177562\tres = 1.566E-03\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.179270\tres = 1.507E-03\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.180916\tres = 1.450E-03\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.182502\tres = 1.396E-03\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.184030\tres = 1.343E-03\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.185503\tres = 1.292E-03\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.186922\tres = 1.244E-03\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.188289\tres = 1.197E-03\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.189605\tres = 1.152E-03\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.190874\tres = 1.108E-03\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.192096\tres = 1.066E-03\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.193273\tres = 1.026E-03\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.194407\tres = 9.873E-04\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.195498\tres = 9.500E-04\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.196550\tres = 9.141E-04\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.197563\tres = 8.796E-04\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.198538\tres = 8.464E-04\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.199477\tres = 8.144E-04\n", + "[ NORMAL ] Iteration 118:\tk_eff = 1.200381\tres = 7.836E-04\n", + "[ NORMAL ] Iteration 119:\tk_eff = 1.201252\tres = 7.539E-04\n", + "[ NORMAL ] Iteration 120:\tk_eff = 1.202091\tres = 7.254E-04\n", + "[ NORMAL ] Iteration 121:\tk_eff = 1.202898\tres = 6.980E-04\n", + "[ NORMAL ] Iteration 122:\tk_eff = 1.203675\tres = 6.715E-04\n", + "[ NORMAL ] Iteration 123:\tk_eff = 1.204423\tres = 6.461E-04\n", + "[ NORMAL ] Iteration 124:\tk_eff = 1.205144\tres = 6.217E-04\n", + "[ NORMAL ] Iteration 125:\tk_eff = 1.205837\tres = 5.981E-04\n", + "[ NORMAL ] Iteration 126:\tk_eff = 1.206505\tres = 5.755E-04\n", + "[ NORMAL ] Iteration 127:\tk_eff = 1.207148\tres = 5.537E-04\n", + "[ NORMAL ] Iteration 128:\tk_eff = 1.207766\tres = 5.327E-04\n", + "[ NORMAL ] Iteration 129:\tk_eff = 1.208362\tres = 5.125E-04\n", + "[ NORMAL ] Iteration 130:\tk_eff = 1.208935\tres = 4.931E-04\n", + "[ NORMAL ] Iteration 131:\tk_eff = 1.209487\tres = 4.744E-04\n", + "[ NORMAL ] Iteration 132:\tk_eff = 1.210018\tres = 4.564E-04\n", + "[ NORMAL ] Iteration 133:\tk_eff = 1.210529\tres = 4.391E-04\n", + "[ NORMAL ] Iteration 134:\tk_eff = 1.211021\tres = 4.225E-04\n", + "[ NORMAL ] Iteration 135:\tk_eff = 1.211495\tres = 4.064E-04\n", + "[ NORMAL ] Iteration 136:\tk_eff = 1.211950\tres = 3.910E-04\n", + "[ NORMAL ] Iteration 137:\tk_eff = 1.212389\tres = 3.762E-04\n", + "[ NORMAL ] Iteration 138:\tk_eff = 1.212811\tres = 3.619E-04\n", + "[ NORMAL ] Iteration 139:\tk_eff = 1.213217\tres = 3.482E-04\n", + "[ NORMAL ] Iteration 140:\tk_eff = 1.213608\tres = 3.349E-04\n", + "[ NORMAL ] Iteration 141:\tk_eff = 1.213984\tres = 3.222E-04\n", + "[ NORMAL ] Iteration 142:\tk_eff = 1.214346\tres = 3.100E-04\n", + "[ NORMAL ] Iteration 143:\tk_eff = 1.214695\tres = 2.982E-04\n", + "[ NORMAL ] Iteration 144:\tk_eff = 1.215030\tres = 2.869E-04\n", + "[ NORMAL ] Iteration 145:\tk_eff = 1.215353\tres = 2.760E-04\n", + "[ NORMAL ] Iteration 146:\tk_eff = 1.215663\tres = 2.655E-04\n", + "[ NORMAL ] Iteration 147:\tk_eff = 1.215962\tres = 2.554E-04\n", + "[ NORMAL ] Iteration 148:\tk_eff = 1.216249\tres = 2.457E-04\n", + "[ NORMAL ] Iteration 149:\tk_eff = 1.216526\tres = 2.364E-04\n", + "[ NORMAL ] Iteration 150:\tk_eff = 1.216792\tres = 2.274E-04\n", + "[ NORMAL ] Iteration 151:\tk_eff = 1.217048\tres = 2.187E-04\n", + "[ NORMAL ] Iteration 152:\tk_eff = 1.217294\tres = 2.104E-04\n", + "[ NORMAL ] Iteration 153:\tk_eff = 1.217531\tres = 2.024E-04\n", + "[ NORMAL ] Iteration 154:\tk_eff = 1.217759\tres = 1.947E-04\n", + "[ NORMAL ] Iteration 155:\tk_eff = 1.217979\tres = 1.873E-04\n", + "[ NORMAL ] Iteration 156:\tk_eff = 1.218190\tres = 1.802E-04\n", + "[ NORMAL ] Iteration 157:\tk_eff = 1.218393\tres = 1.733E-04\n", + "[ NORMAL ] Iteration 158:\tk_eff = 1.218588\tres = 1.667E-04\n", + "[ NORMAL ] Iteration 159:\tk_eff = 1.218776\tres = 1.604E-04\n", + "[ NORMAL ] Iteration 160:\tk_eff = 1.218957\tres = 1.543E-04\n", + "[ NORMAL ] Iteration 161:\tk_eff = 1.219131\tres = 1.484E-04\n", + "[ NORMAL ] Iteration 162:\tk_eff = 1.219298\tres = 1.427E-04\n", + "[ NORMAL ] Iteration 163:\tk_eff = 1.219459\tres = 1.373E-04\n", + "[ NORMAL ] Iteration 164:\tk_eff = 1.219614\tres = 1.321E-04\n", + "[ NORMAL ] Iteration 165:\tk_eff = 1.219763\tres = 1.270E-04\n", + "[ NORMAL ] Iteration 166:\tk_eff = 1.219907\tres = 1.222E-04\n", + "[ NORMAL ] Iteration 167:\tk_eff = 1.220045\tres = 1.176E-04\n", + "[ NORMAL ] Iteration 168:\tk_eff = 1.220177\tres = 1.131E-04\n", + "[ NORMAL ] Iteration 169:\tk_eff = 1.220305\tres = 1.088E-04\n", + "[ NORMAL ] Iteration 170:\tk_eff = 1.220428\tres = 1.046E-04\n", + "[ NORMAL ] Iteration 171:\tk_eff = 1.220546\tres = 1.006E-04\n", + "[ NORMAL ] Iteration 172:\tk_eff = 1.220660\tres = 9.680E-05\n", + "[ NORMAL ] Iteration 173:\tk_eff = 1.220769\tres = 9.311E-05\n", + "[ NORMAL ] Iteration 174:\tk_eff = 1.220874\tres = 8.956E-05\n", + "[ NORMAL ] Iteration 175:\tk_eff = 1.220975\tres = 8.614E-05\n", + "[ NORMAL ] Iteration 176:\tk_eff = 1.221073\tres = 8.286E-05\n", + "[ NORMAL ] Iteration 177:\tk_eff = 1.221166\tres = 7.970E-05\n", + "[ NORMAL ] Iteration 178:\tk_eff = 1.221256\tres = 7.666E-05\n", + "[ NORMAL ] Iteration 179:\tk_eff = 1.221343\tres = 7.373E-05\n", + "[ NORMAL ] Iteration 180:\tk_eff = 1.221426\tres = 7.092E-05\n", + "[ NORMAL ] Iteration 181:\tk_eff = 1.221506\tres = 6.822E-05\n", + "[ NORMAL ] Iteration 182:\tk_eff = 1.221583\tres = 6.562E-05\n", + "[ NORMAL ] Iteration 183:\tk_eff = 1.221658\tres = 6.311E-05\n", + "[ NORMAL ] Iteration 184:\tk_eff = 1.221729\tres = 6.070E-05\n", + "[ NORMAL ] Iteration 185:\tk_eff = 1.221797\tres = 5.839E-05\n", + "[ NORMAL ] Iteration 186:\tk_eff = 1.221863\tres = 5.616E-05\n", + "[ NORMAL ] Iteration 187:\tk_eff = 1.221927\tres = 5.402E-05\n", + "[ NORMAL ] Iteration 188:\tk_eff = 1.221988\tres = 5.196E-05\n", + "[ NORMAL ] Iteration 189:\tk_eff = 1.222047\tres = 4.997E-05\n", + "[ NORMAL ] Iteration 190:\tk_eff = 1.222103\tres = 4.807E-05\n", + "[ NORMAL ] Iteration 191:\tk_eff = 1.222158\tres = 4.623E-05\n", + "[ NORMAL ] Iteration 192:\tk_eff = 1.222210\tres = 4.447E-05\n", + "[ NORMAL ] Iteration 193:\tk_eff = 1.222260\tres = 4.277E-05\n", + "[ NORMAL ] Iteration 194:\tk_eff = 1.222308\tres = 4.114E-05\n", + "[ NORMAL ] Iteration 195:\tk_eff = 1.222355\tres = 3.957E-05\n", + "[ NORMAL ] Iteration 196:\tk_eff = 1.222400\tres = 3.805E-05\n", + "[ NORMAL ] Iteration 197:\tk_eff = 1.222443\tres = 3.660E-05\n", + "[ NORMAL ] Iteration 198:\tk_eff = 1.222484\tres = 3.520E-05\n", + "[ NORMAL ] Iteration 199:\tk_eff = 1.222524\tres = 3.386E-05\n", + "[ NORMAL ] Iteration 200:\tk_eff = 1.222562\tres = 3.257E-05\n", + "[ NORMAL ] Iteration 201:\tk_eff = 1.222599\tres = 3.132E-05\n", + "[ NORMAL ] Iteration 202:\tk_eff = 1.222635\tres = 3.013E-05\n", + "[ NORMAL ] Iteration 203:\tk_eff = 1.222669\tres = 2.898E-05\n", + "[ NORMAL ] Iteration 204:\tk_eff = 1.222701\tres = 2.787E-05\n", + "[ NORMAL ] Iteration 205:\tk_eff = 1.222733\tres = 2.680E-05\n", + "[ NORMAL ] Iteration 206:\tk_eff = 1.222763\tres = 2.578E-05\n", + "[ NORMAL ] Iteration 207:\tk_eff = 1.222792\tres = 2.480E-05\n", + "[ NORMAL ] Iteration 208:\tk_eff = 1.222820\tres = 2.385E-05\n", + "[ NORMAL ] Iteration 209:\tk_eff = 1.222847\tres = 2.294E-05\n", + "[ NORMAL ] Iteration 210:\tk_eff = 1.222873\tres = 2.206E-05\n", + "[ NORMAL ] Iteration 211:\tk_eff = 1.222898\tres = 2.122E-05\n", + "[ NORMAL ] Iteration 212:\tk_eff = 1.222922\tres = 2.041E-05\n", + "[ NORMAL ] Iteration 213:\tk_eff = 1.222945\tres = 1.963E-05\n", + "[ NORMAL ] Iteration 214:\tk_eff = 1.222968\tres = 1.888E-05\n", + "[ NORMAL ] Iteration 215:\tk_eff = 1.222989\tres = 1.816E-05\n", + "[ NORMAL ] Iteration 216:\tk_eff = 1.223009\tres = 1.746E-05\n", + "[ NORMAL ] Iteration 217:\tk_eff = 1.223029\tres = 1.680E-05\n", + "[ NORMAL ] Iteration 218:\tk_eff = 1.223048\tres = 1.615E-05\n", + "[ NORMAL ] Iteration 219:\tk_eff = 1.223067\tres = 1.554E-05\n", + "[ NORMAL ] Iteration 220:\tk_eff = 1.223084\tres = 1.494E-05\n", + "[ NORMAL ] Iteration 221:\tk_eff = 1.223101\tres = 1.437E-05\n", + "[ NORMAL ] Iteration 222:\tk_eff = 1.223117\tres = 1.382E-05\n", + "[ NORMAL ] Iteration 223:\tk_eff = 1.223133\tres = 1.329E-05\n", + "[ NORMAL ] Iteration 224:\tk_eff = 1.223148\tres = 1.279E-05\n", + "[ NORMAL ] Iteration 225:\tk_eff = 1.223162\tres = 1.230E-05\n", + "[ NORMAL ] Iteration 226:\tk_eff = 1.223176\tres = 1.183E-05\n", + "[ NORMAL ] Iteration 227:\tk_eff = 1.223190\tres = 1.137E-05\n", + "[ NORMAL ] Iteration 228:\tk_eff = 1.223203\tres = 1.094E-05\n", + "[ NORMAL ] Iteration 229:\tk_eff = 1.223215\tres = 1.052E-05\n", + "[ NORMAL ] Iteration 230:\tk_eff = 1.223227\tres = 1.012E-05\n" ] } ], @@ -1690,8 +1690,8 @@ "output_type": "stream", "text": [ "openmc keff = 1.223474\n", - "openmoc keff = 1.223258\n", - "bias [pcm]: -21.5\n" + "openmoc keff = 1.223227\n", + "bias [pcm]: -24.7\n" ] } ], @@ -1780,9 +1780,9 @@ }, { "data": { - "image/png": "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\nRK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAEfCAYAAACqKwpQAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XeYVOX1wPHvzGwvgOKCoqigeBQEC4ian6ighhXEEgli\nAwNEQMUSNYq9RkNiogbEBipWsEYEwYqQWIKiKMVXEFERFaTJ9p3y++POsNN3Zpm+5/M8POzcvXPP\nO7O798zbbR6PB6WUUsqfPd0FUEoplXk0OSillAqhyUEppVQITQ5KKaVCaHJQSikVQpODUkqpEHnp\nLoDKLiKyL7DaGJMXdPwC4DxjzIlhntMGeADog/WB5DljzE3e7x0HTALaAjXA5caYhd7r3Qf86Hep\nycaYyUHXPh54A1gTFPZ54EFgvjHm4Ba8zkuAjsaYG+N9bpRrng/8CSgGCoAPgKuNMesTFSPGcpwE\n3ArsinUPWAtcaoxZ0cLrHQnUGmM+T8b7ptJDk4NKhb8ADUB3oBT4TEQWAf8BXgQGGmM+EZHTgFki\nsof3eS8bYy6I4frfGWMOjPC9uBMDQHAS2lkiMh4rMZxqjFkpIvnADcBCETnYGFPnd67dGONOZHy/\na7fDSpz9jTGfiojNW64XRaS7MaYlE5/+gPWz/DzR75tKH00OKhVeAlZ5b3jbRWQp0AP4HzDaGPOJ\n97y3gY5Au0QE9a/liMiewAxgD6xP7TONMddHOX4LsJcxZoyI7A08AuwLNAKTjDEzvNf/ALgL+CPW\nJ/E/GWNmBpXDDtwMjDDGrAQwxjQCN4vIp4DHW1MaglWD+gy4SkQuBcZh1bYMMMYYs9Fb2/onUATY\ngJuMMc9HOh70tnQDPMDn3nJ4ROQ+4Env1zbgRuBc73Ve8b4ml4h0BR4HOgFbgLFAX2AEcKqIdADa\nJOp9U+mlfQ4q6Ywx7xhjvocdTUy/AT4yxmwzxvzbe9wGjAYWGWO2eJ96qIgsEJGvRGSaiLTdiWJc\nDiw0xnTHqk3s7a2hRDru72FggTFGgMHA/d4bHMBugNsY09N7rTvCxD4Q2AV4M/gbxphXjDH13oe/\nBcYbY64SkaOAq4HjvbWi77BupgB/B67wlvlk4IxmjvtbDvwKLBCRc0RkD2OM0xizwfv984BhWDf9\n/bz/xvu9D88aY/YH7sRKKA9iJfk/G2P+keD3TaWRJgeVMiJSADwDvGqM+cDv+FCsvoVLgIu8h78C\n/o31afpQrE+k/4xw6b1F5Mugf38MOmcDMFBEjgEajTHnG2N+jHLcV7Z84CSsPhOMMd8C7wIDvKfk\nAY95v14C7B2mfLsCG2NosllljFnl/Xow8ILfTftRrOThey0jRORAY8xaY8w5zRzfwRhTAxyNdUO/\nFVgvIh95ax1gvd/TvYnb6Y37OxEpAvoDz3rP+zdwZKQXkqD3TaWRNiupeLkBm4jYgm52DsAFICJv\nA3sC+PoCRKQMq3lpHVZTyQ7GmBeAF0RkAPC2iBxqjHkfeN93jojcBcyLUKawfQ5+n1LBSiwOrJtV\nJxGZAtwS5bhPe8BmjNnmd2wL0MH7tcsYU+372nutYL8AHUUkz3vDjWSz39cVgH9HtX/MUVj9FW+J\nSC0w0fseRjoewNsBfiVwpfc9uhiYKyKdsZr0rhKRC72n5wEbsRKcHdjmvYYHqIryWhLxvqk00uSg\n4vULVpt1Z6ymDp8DfI+NMSf4P0FE8oCXgWXGmCv8jncGDjXGzPY+7x0RWQcc6W2LrzHGbPSenofV\nbt0i3pvy3cDdInIA8DrwH2PMm+GOB71et4js4tfc1R74OY7wX2F9qj8VK0HuICI3AVPDPOdnbxyf\nHTGNMT8DE4AJIvJb4CURmRfl+I6buIh0A8qMMZ96r7UWuFpERgFdsRLSq2FGhRVi/dzbA794mwH3\nA76O8JoT8b6pNNJmJRUXb7PEE8Bt3mYiROQwYCTwrwhPuxTY7p8YvAqAJ0Wkh/c6AuyP1S4+FnhQ\nRPJExIF105vT0nKLyEPeIZxg3dB+wuoIDnvc7/U6gfne8iAi+wHHAm/FGtvbEX8DVpv7Ed7r5IvI\nHVj9Ar+GedocrOYcX4IYC8zxPm+BX7/IJ1hJ0xHhePCop8Oxksb+fu/NYMAJrMRqLjpfREq83xsr\nIiO9/SJvABd4nzYQmOutQTQSNIggEe+bSi9NDqolLsVqAvlMRFYCk4FzjDGfRzh/LNA3qE/gdmPM\n11ijVZ4VkS+xRsZc4m13vwPYjnXDWoF187p6J8r8IHCnN84KrNEyb0c57m8ccLz3nJexRg19H09w\nY8xj3vI/IiJfAV9gdcoO8OuQ9j//f1g1mkXeuO2A672jnB7Fan5bAbwHTPA234Q7XhN03ZlYHdsv\niogRka+xfp6V3maeV4DZwBJv3FOxbvIAY4AhIrIG6+fj69N4GfiriAR3SO/0+6bSx6b7OSillAqm\nNQellFIhNDkopZQKoclBKaVUCE0OSimlQmT9PAen0+XZsqWm+RMTYJddSsjFWKmOp7GyL57Gyq5Y\nscSrqCi3RXt+1tcc8vJSN7EyV2OlOp7Gyr54Giu7YiUiXtYnB6WUUomnyUEppVQITQ5KKaVCaHJQ\nSikVQpODUkqpEJoclFJKhdDkoJRSKkTWT4LTRWWVUonw/fffcf/997B16xZcLjc9e/bi4osvp6Cg\nIOZrvPvuW/TvfyKrVhkWLlzA6NFjk1ji5Mr6mkOfPrBuXdSJfkopFZXL5eKGG/7MOeeM4JFHZjBt\n2pMAPPbYI3Fd56mnngCgWzfJ6sQAOVBzOPdcOPnkEh55pI6jjnKluzhKqSy0ePFH7L33vhx2WG8A\nbDYbF110KTabnVmznuXtt98AoF+/4zjvvAu4885b2G23CoxZyc8//8RNN93BJ5/8j9Wrv+K6665m\n6NCzeOmlWdxxxyTOOut0+vU7ni+/XEZhYQl/+9u9PPbYI7Rr144zzzyLNWtW849/TGLy5Id5++03\nmTnzaRwOByIHcfnlVzFt2kNhz7333r/x5ZcrcblcnHHGUAYNGpLQ9yTraw5/+hPcd18do0YV8eST\n+ekujlIqC3333Vq6dTsg4FhhYRG//LKR11+fzZQpjzBlyiO8886b/PDDOgAaGhr4xz8m8/vfD2fe\nvDmcc84IysrK+Mtf/hZwnfXrf6CycjAzZ85k+/Zf+frrVWHLUFNTw8MPT+Heex9g6tRprF//A0uW\nfBz23F9/3cb77/+HBx+cztSp03A6nQl4FwJlfc0BYMAAF6+9VsOIEcUsX27n9tvrydc8oVTWOvbY\nEr78MnFrER14oIuFC6MtemfD7Q7ebhtWrTL06NGTvDzrVtmz5yGsXv0VAIccchgAFRUdWbFiecQr\nl5aWsv/+3QDo0KEDVVVVYc/7/vvv2GuvvSkpKQHgsMN689VXX4Y9t02btnTuvA/XXvsn+vc/kcrK\nwVFeW8vkRHIA6NrVw+uv1zB+fDHDhhXz6KN1tG+vvdVKZaPoN/LE22effXnxxVkBxxoaGvjmmzX4\nb6Xc2NiIzWY1uDgcTckr2nbL/uf5zrXZmvpJfZ/6bbbA6zidjRQWFoY9F+Cee+7HmC958815zJs3\nh3/+c0pMrzVWWd+s5K+8HJ54opY+fVwMHFjC8uU59fKUUklyxBFH8vPPP/Kf/ywEwO12M3Xqv/j+\n+29ZtuwLnE4nTqeTFSuWc8ABEvE6bndsH0hLS0v55ZdfAPj8888A6Nx5H9at+46ammoAPv10CSLd\nw57744/ref755xA5kEsuuZxt27a17IVHkTM1Bx+HA66/voHu3d0MHVrMpEn1DBmS+PY4pVTusNvt\n3HPPZCZNupPHHnuE/Px8jjjiSCZMuIKXX36BCRMuxO32MGTIaey++x4Rr3PAAcIf/ziC8eMvjRrv\nuOMGcPXVl7Fy5XIOPfRwAIqLi7n44su48soJ2Gx2evU6lEMOOZSOHTuGnLvbbhUsW7aUt99+g/z8\nfAYPPjVxb4aXLVp1KEt4Nm7cHvYbn39u54ILihk+vJGrrmrAvpMViYqKciLFSrRUxkp1PI2VffE0\nVnbFiiVezm/2E02vXm7mzath4UIHo0YVEaEfSCmlVJCcTg4AHTp4eOmlWnbd1cPgwSWsXasT5pRS\nqjk5nxwACgrgnnvqGTGikcGDS1i0KLXb9SmlVLZpFckBrGFio0c38tBDdYwbV8S0afm6LpNSSkXQ\napKDzzHHuJg7t4YZM/K58spCGhrSXSKllMo8rS45AOyzj4c5c2rYvNnG735XzIYN2g+hlFL+WmVy\nACgrg+nT6zjuOBeVlSUsXdpq3wqlWr0ff1zPMcf0YcWKZQHH//jHEdx55y1hnzN37mwmT74XsJbq\nBmu5jWnTHgp7/qJFixg/fhTjx49i1KhzeeihKbhcmbtYaKu+I9rtcPXVDdx6az3Dhxfz0ks5NydQ\nKRWjTp325J133trx+KeffuTXX3+N6bnNLdX944/rufvuu7n99r8ydep0Hn74Cb755mtee+3fAedl\n0rwzvRsCQ4Y46drVzciRxaxYYWfixAYcOqBJqValR4+efPLJ/3Y8fvfdtzniiKOor69j6NAhzJgx\nk5KSEiZPvpeuXffbcd4zz8wIu1S3v1deeZGRI0ey224VAOTl5XHHHZN2LOg3fPgZHH30MbRt25ZB\ng4Zw11230djYiN1u59prb8Rms3HDDdfs2Gdi9OjzueOOvzJ9+sOUlJSwdu1atm3bynXX3cQBBxyY\nkPejVdcc/PXo4Wb+/Bo++cTBiBHFxPiBQSmVaPfcQ/sunajo0CZh/9p36UTxA/+KGjYvL49u3YRl\ny74A4P33F3H00f/XbHEjLdXt77vv1nLAAYFLgvsSA1gL6h155NFccMEYHn30QU455TQmT36YM84Y\nyvTpD0eN73Q6ue++BxgzZhyPPfZos+WNVcYlBxEpFZGPReSUVMdu397DrFm1dO7s5uSTS1izRjuq\nlUq5e+7BXp3Y5Qzs1VUUT42eHAD69z+Bd999k59//ony8jYUFxcnJL7NZt+xour69T9wySUXMn78\naK655ood53Tv3gMAY1bu2HTo8MP7sGqViXrtPn36AnDwwb34/vtvE1JeSEFyEJHpIrJBRJYFHa8U\nESMiq0XkWr9vXQMErp2bQvn5cPfd9Ywb18gpp5TwzjvavqRUSl15Je7SsoRe0l1aRu34Cc2e16fP\nkXz88WLee+9djjuu/47jkZbNjsSXAC655EK+/HIlXbp0Zdky6xbYqdOeTJ78MDfddPuO1VYB8vJ8\nm9DYdvQ9NDY6sdnsAfGDy+BbCdZ6TuI+0Kaiz+FxYDIww3dARBzAFOAkYB2wWEReBfYEVgBFKShX\nVOef30i3bm7++Mcixo9vYPz4xnQXSanW4cor2TTiwrSEzs/P54ADhDlz/s2UKY/u2GynpKSUTZt+\nobBwT5Yv/yJk2e7gpbp9CcCnffv2XHbZOHr1OoLOnfcG4OOP/0dBQUFIGQ46qDtLlnzMSSdV8tln\nn3DggQdRUlLKli2b8Xg8bN68ifXr1+04//PPP+WEE05i+fLP2XffLgl7L5KeHIwxC0Vk36DDfYHV\nxpg1ACLyHHAaUAaUAt2BWhGZa4wJ3Z4pRY46ysXrr9cwcmQxy5c7mDGj+ecopbJb//4nsnXrFsrK\nmmovZ545jGuuuYK9996HLl26hjynuaW6Kyo68M9//pPbbrsdl8uF0+lkn3325ZZb7gw5d8yYcdx1\n1+3Mnv0KeXn5TJx4I23atKFPn76MGTOC/ffvRrduTcmpoaGBP//5cn7++Wduuun2BLwDlpQs2e1N\nDq8ZYw72Ph4KVBpjxngfnw8caYy5xPv4AuAXY8xrMVw+6S+gpgZGjYJvvoGXX4ZOnZIdUSmlmnft\ntdcycOBA+vfv3/zJoaK2QWXkUFZjzOPxnJ+KNdLvvx+mTSunTx8306fX0rt3cis0mbb2u8bKrFip\njqexMjNWXV0j27bVhr1uDPs5RL12upLDD0Bnv8d7eY9lLJsNJk6Ezp3rOP/8Ym66qZ7hw3WHOaVU\n+lx//S1Ju3a6ksNioJuIdMFKCsOBc9JUlrgMHOji5ZdrGTHC6oe4+eZ68jKy/qWUUi2XiqGszwIf\nWF/KOhEZbYxxApcA84GVwCxjzPJklyVRRNzMn1+NMXbOPruYrVvTXSKllEqsVIxWOjvC8bnA3GTH\nT5Z27eCZZ2q57bZCBg4s5cknaznggLQNrFJKqYTKuBnS2SQvD267rZ4rrqjn9NOLeeMNnTCnlMoN\n2lqeAMOHO+nWzc2oUcWsWNHIZZc1YNOVN5RSWUxrDgnSu7e1cN+8eXmMHVtETU26S6SUUi2nySGB\ndt/dwyuv1JCfD0OGlLBunVYflFLZSZNDghUVweTJdQwd2sjJJ5fw4YfaD6GUyj6aHJLAZoPx4xu5\n7746Ro0q4skn85t/klJKZRBNDkk0YICL2bNrePDBfK69tpBGXdhVKZUlNDkk2X77eXj99Rq+/97O\nsGHFbNqk/RBKqcynySEF2rSBGTNq6d3bxcCBJSxfrm+7Uiqz6V0qRRwOuOGGBq67rp6hQ4t57TWd\nYqKUylx6h0qx3/3OyX77ubnggmJWrLBz1VUN2DVFK6UyjN6W0uCQQ6wJcwsXOhg1qoiqxO6lrpRS\nO02TQ5p06ODhxRdr2XVXD4MHl7B2rXZUK6UyhyaHNCoshHvuqWfEiEYGDy5h0SKdMKeUygyaHNLM\nZoPRoxt58ME6xo0rYtq0fFKwrbdSSkWlySFD9OvnYs6cGmbMyOfKKwtpaEh3iZRSrZkmhwyy774e\n5sypYfNmGwMGwIYN2g+hlEoPTQ4ZpqwMpk+v48QTobKyhKVL9UeklEo9vfNkILsdbrkFbr21nuHD\ni3npJZ2OopRKLb3rZLAhQ5x07epm5EhrwtzEiQ04dECTUioFtOaQ4Xr0sCbMffKJgxEjivn113SX\nSCnVGmhyyALt23uYNauWzp3dnHxyCV9/rR3VSqnk0uSQJfLz4e676xk7tpEhQ0pYuFDbl5RSyaPJ\nIcuMGNHII4/UMX58EY8/rjvMKaWSQ5NDFvq//7N2mHvkkXwmTizE6Ux3iZRSuUaTQ5bq2tXaYW7N\nGjvnnFPMtm3pLpFSKpdocshibdrA00/XcsABVkf1mjXaUa2USgxNDlkuLw/uuKOpo/o//9GOaqXU\nztPkkCNGjmzkoYfqGDu2iCee0I5qpdTO0eSQQ445xuqofuihfG64QTuqlVItp8khx/g6qr/6ys65\n5+qMaqVUy2hyyEFt28Izz9TStaubQYNK+OYb7ahWSsVHk0OOysuDu+6qZ8yYRk45pYT339eOaqVU\n7OJKDiLSTkT0Y2gWueCCRqZOrWPMmCKeeko7qpVSsYmYHESkl4i86Pf4aWA9sF5E+iajMCJykIg8\nKCLPi8iYZMRojY491uqonjKlgBtvLMTlSneJlFKZLlrN4X7gCQARORY4GugIDAD+EmsAEZkuIhtE\nZFnQ8UoRMSKyWkSuBTDGrDTGjAPOAgbG91JUNPvt5+H116tZscLOyJHFVFWlu0RKqUwWLTnYjTGv\ner8eAjxnjNlujFkJxNO09DhQ6X9ARBzAFOBkoDtwtoh0937vVGAu8FwcMVQM2rWD556rpUMHN6ee\nWsL69dpCqJQKL1pyaPT7uj+wIMbnBTDGLAQ2Bx3uC6w2xqwxxjRgJYLTvOe/aoypBEbGGkPFLj8f\n7rmnnjPOcDJoUAlffKFjEpRSoaJtE1orIqcBbYC9gXfB6hcAdnboy57A936P1wFHisjxwO+AIgKT\nkUogmw0mTGhg333dDBtWzL331nHeeekulVIqk0RLDpcBU4FdgHOMMY0iUgwsBIYlozDGmAW0IClU\nVJQnvCytIdaoUdCjB5xxRgmbN8Oll+bOa2sNsVIdT2NlV6ydjRcxORhjvgZ+G3SsVkS6GWO2tjii\n5Qegs9/jvbzHWmTjxu07WZzYVFSU51ysrl1h9mwbI0aU8cUXDdx+ez2OJE+JyMX3MdWxUh1PY2VX\nrFjiNZc4og1lvSjK956KpXBRLAa6iUgXESkAhgOvNvMclSR77+3hv/+Fr76yM2KEjmRSSkXvWK4U\nkTdEpJPvgHck0afA8lgDiMizwAfWl7JOREYbY5zAJcB8YCUwyxgT8zVV4rVrB88+W0vHjm6GDNGR\nTEq1dtGalU4VkXOABSIyCTgW6AJUGmNMrAGMMWdHOD4Xa8iqyhC+kUyTJxcwaFAJM2bU0quXO93F\nUkqlQbQOaYwxz4jIj8AbgAGONMZUp6RkKi38RzKddZY1kmngQJ1SrVRrE63PwS4i1wEPACdhTWb7\nSET6pahsKo2GDHHy1FO1XHVVEQ8/nI/Hk+4SZa5333WwYUP0ZriqKvjxR22qU9kjWp/DR8B+QF9j\nzAJjzN+xOo7vFZF/paR0Kq1693YzZ04NTz6Zz403FuLWFqawzjqrhL/+tSDqOZdeWsQhh5SlqERK\n7bxoyeEOY8xoY8yOsVDGmGVYayylbjyWSqu99/Ywe3YNn39uZ+zYIurr012izNRc4vzlF601qOwS\nrUP63xGONwDXJa1E8SovpyKFYy8rUhYptbGixavAGm4GQNjfilDu0jJqrp5I7UUTdr5gWcDt1pu/\nyi3Zv7CODsrPSPbqKkr+dle6i5EyzdUcbJo7VJbJ/uRQpu24mcpe3XoSt/bHqFwTdSirj4i0BXbF\nb6luY8yaZBUqLtu35+T090ybah/sqafyufvuAp58spbDDgu8M1Z0aJPo4mW85kZzac1BZZtmaw4i\ncj/Wqqlv+/17K8nlUhnuvPMa+fvf6zj33GI+/FD3p96ZmsNHHzm44IKixBVGqQSIpebQH6gwxtQl\nuzAqu1RWuigurmPUqCKmTq3juONa72S5nak5vPZaHnPn5gP6J6YyRyx9Dqs0MahIjjvOxfTpdYwf\nX8Sbb7beGoROElS5JpaawzoRWQj8B3D6DhpjbkpaqVRWOeooF08+Wcv55xczaVI9f0h3gdLAPzm4\nXGC3B9YWtM9BZZtYag6bsPoZ6gGX3z+ldujd283MmbVce21huouSdiJl3Hhj7O+D1jpUJmq25mCM\nuVVESgEBPNYhU5P0kqms07Onm+eeq4UB6S5J6vnf4H/91cann7beJjaVG2IZrXQ6sBp4EHgE+EpE\nTk52wVR2Ovjg1jngX4eyqlwTS7PS1UAvY0xfY0wfoC9wY3KLpXLFokWt4xN0cHLQpiKV7WJJDg3G\nmI2+B8aY9Vj9D0o1a+zYolYxD0KTg8o1sYxWqhKRK4E3vY8Hoquyqhg98IA1D+KZZ2o59NDcbXLS\n5KByTSzJYTRwG3AeVof0h95jSjXr98NK+T3AbwOP+68A29pWcFUqG8QyWmkDMC4FZVE5wl1aFtei\ne74VXLM5OSSj5tClSxm33FLPyJGNO38xpeIUbZvQmd7/vxeR7/z+fS8i36WuiCrb1Fw9EXdpfKvl\nZvsKrsloRqqutvHJJ7nfX6MyU7Saw6Xe/49JRUFU7qi9aELEWsDUqfk8/XQRL71URYcOnlazgmu0\noazaP6EyUcSagzHmZ++XNqCzMeZbrJbjm4CSFJRN5aDx4xs5+2wYNqyYLVvSXZrUW7w48gDBoUOL\nqQtaxUwTh0qXWIayPgY0iMhhwBjgReD+pJZK5bSbb4Zjj3Vxzjm58xkj1m1CBw8uDXi8dKmdF17I\nB2Dhwjw2bdLZciozxJIcPMaY/wFnAJONMXPx2/RHqXjZbHDrrfV07567S3TFOiP6hhsK2bIl9OS9\n97b6bLTmoNIlluRQJiJHAEOBeSJSCOyS3GKpXGezwaRJzc+lXLvWxpIlmb+bbaKXz6irs7XoeUol\nSizzHO7BWlPpIWPMRhG5C3gmucVSrYEjaCBOuM7pCqDKVsbHg6+nx/SLU1OwFmjpJ3xdk0llqmY/\nkhljZgKHGWPu89YaHjDG3JP8oqnWIJYhr2WeKnq/difV1SkoUIbR5KDSJZZVWScCl4lICfAp8IKI\n3Jb0kqlWIdY5EeVU8eKL+SkoUcskqwZgs2mng0qPWBpzhwD3Ab8HZhtjjkTnPqgEqb1oApu+Wc/G\nDb+G/efv5ZdjaQVND3eClo3SDmiVKWJJDo3GGA9wMvCK95hO21Qp98UXDn75JTvbWVpac2hoyM7X\nq7JfLMlhq4jMAQ4yxnwgIqcAubu8pspY/fs7ef31zKw9JOoTf3AS0T4HlS6xJIdzsEYrneh9XA+M\nTFqJlIpg8GAnr72W/uTw2mt5PPNMYDni6XNwxTG9w2aDqiqorIxtwqDHA198kflDf1Xmi7bwnm8r\n0LOAXYEhIjIK6ExTolAqZU480cnixQ62bk1vOa68sojLLy+Oek60T/x77FFOQ0Nssex2WL/ezpIl\nsbXkLljg4IQTSkOOacJQ8Yr2MawX8DrQL8z3PMD0ZBTIu2f1YKANMM0Y80Yy4qjsU1YG/fo5mTcv\nj+HDnWkrhzWCKPDuH2+zUmMjFBTEEiv69086qYTjjnNyww1WtqkPM69w2LAS9tnHzeLFrXAssGqx\naMnhdQBjzB8ARKS9MWZTS4KIyHTgFGCDMeZgv+OVWCOhHMCjxpi7jTGvAK+IyC7A3wFNDgqwJsnN\nBes389LQ76dq0yB7mA/hX3+dnk/mS5c6cLnYkRyUSpRov9H3Bj1+fifiPA5U+h8QEQcwBWsUVHfg\nbBHp7nfKDd7vq1Ysnn0hfJsGBYu1CWdn/PBD9OQQXAOIVNMIPu4/z+G995pvWvJ4tAdbJUa03+jg\n37IW/9YZYxYCm4MO9wVWG2PWGGMagOeA00TEJiJ/BV43xixpaUyVG+LdOCh406Bt22CvvcpZty75\nN8145zps29b8zfx//2tKCL//fQnnnVeMM4YWtTVrbGGbmJSKVbTkEPzZJtHTc/YEvvd7vM57bAJW\nh/dQEdHtSVu5cJPkJv+rhhNPaIw4Wc6fMdb/q1YlrtknUhKI5abt89NPNrp1Kw/7veOOaxqZtHq1\nI6DW8cYbedTUBJ6/bJmDgw4K7IQ+6qgy7r8/hk4NpSJI/7jAIMaY+4lzv4iKivB/ZMmQq7FSHW9n\nYo0aZe1YgIvuAAAgAElEQVQJUVtbzt57R7/2G94eq9raEioq4ovj8YTvEPY1/ZSUlFPqd092Opti\nOxyOgHIUFgZeo6DAqg3l5wc2FbVvX8bKlYHn7rJLadA55bRrF3jOpk12KirKaeO3dqHLVUhFhRU4\nL8++0z/fbPn90FiJiRctOfwmaK/oDt7HNqw9HsL8WcblB6xhsT57eY/FbePG7TtZlNhUVJTnZKxU\nx0tErNNPL+Rf//Lw5z9bHQr+933/a69aZf1xrF9fx8aNjTFff9EiB2eeWcKGDaHldLvLABtlZXi/\nb8VwOn2xy3G5XGzcaH3Eb2iAefOs5/hs3lwNlNLY6MJ/wYHNm6uAwGY037n+r6+xMfQPf+PG7Wzd\nmgdYw2xrahrYuLEeKOfrr2Hlyip2261lDQDZ9vvR2mPFEq+5xBEtOUgLyxSrxUA3EemClRSGY024\nU6pZ553XyLnnFnP55Q1Rh4SuWgW77+5m+/b4+hyi9VFE6kz2b1ZatcrOuecW8/TTtcydmxeyU5xv\nv4ZYxNqZ3ZwffrC1ODmo1idicvDuGZ0QIvIscDywm4isA242xkwTkUuA+VgfnaYbY5YnKqbKbQcf\n7Gb//d289FL0OQ9ffw29ern59df4kkO0+QXR+hx8z/v1VxtvvpnHmjU2LrwwdMLcqaeGn/H8/POJ\nW3n2wQcL6Ns3d3fbU8mVkj4HY8zZEY7PBWvoulLxuuyyBiZOLGTYsOjJYeRIFxs3xpccoo088v+e\n/6d4pxNqawPPPeqo2EdaAfzlL4XNnvPppw4GDAi96d92WwGHHx5Y8IsuKgp4/O67DqqrbZxySvom\nEarsoHPqVdbq189FmzbwwgvhP+P8+qt1s+7a1U1VVbzJIbZmpeDkMHFiUegTEmz48BJeeSWPjz4K\nPD55cmhiCW6+uvDCYkaNir70h1IQY81BRPoBR2ANZ/3QGPNBUkulVAxsNrjllnrGjSsi3Aaiq1fb\n2X9/a9mN6urk1Bzcbmuimt0OTqctZJhpslx4YTGHHBJ6fNs2nQSnEiOWneBuA/4G7IE1D+F+7+5w\nSqXdkUe6OOyw8O3qS5c66N0bSks9cd+0oyUH/9qC2w15ebDPPp645jmEu1a8li4NPXbFFdFrLrqZ\nkIpVLDWH/sBvjDFuABHJAxYCoesUKJUGd9xRD6+FHl+yxMHxx1vJIZE1h+DkYLdDXp6HxthHyiqV\n8WLpc7D7EgOAMcaJbvajMkinTqEfh51OeOstB5WVUFIC1XEuSBrtE7b/fgy+5OBwxDdDOh7Juq7P\no4/m88kn2v2oAsVSc1giIq8Cb3kfn4Q1R0GpjLR+vY3XX8/jwAPd7LuvnU2b4q85REsO/p3VvlnU\n+fnJu4mvX5+YfoTJk0MnhDz2WD7XXVfEgAFOnnuuNsyzVGsVS3K4DBgGHInVIf0kO7dCq1JJ9X//\nV0qbNh5mzaoF8igtja9DeuLEQkpKYmuctzqkrX6HZCWHRPUT/Pvf+bRpE3ixa64pSmgMlTtiSQ4T\njTF3Yq2aqlTG++qrKhyOpn0XrD6H2J8/bVoBBxwQ2+Qxl8tqUmpps9LHH8eyDHf8143lWlu2NH3t\ncllzIu67r478xM3DU1kslobGg0Rk/6SXRKkEyc8P3JCnsNC6+cXTYRzr8tsulw2Hw+qQTlbNId6l\nwGMl0rS2zsKFebzwQj4bNuhQWGWJpebQC1gpIpuABhK38J5SKWGzQWkp1NRA27aJvbZVc/BkRbMS\nsGONqe+/j5wE/vtfB8uW2Rk7VodftWaxJIchSS+FUknmG87atm18d9pIy3b7BI9WSkbbfTJ2d+vd\nO/yyHh6PtYTH4sUOTQ6tXCzNSqXAOGPMt97F+G4heE1hpTJcrHMdfDd334gkVzNdD03zHKCyMr7V\nVmOVrs7iL77Q4a2tWSw//SkELo43HXggOcVRKjlinevg21rTt4Bec8nB1yGdl2fdwX/+OfuTgy/e\nlCm6k1xrFktyyDPGLPI98P9aqWwRa83BlxR85zbXGew/WimW81silclh6VLHjhFU9fVN78eoUbBp\nk3ZWtyax9DlsE5HxwAKsZFIJpG47I6XiVNGhTeBj4H2AM2J4Lt7N0n3bUu8D7tIyaq6eSO1FE0LO\n929WgmT1OST+mpH84Q9NK7bOmZPPCSfYef/9Gh57DAYMsDNwoO4P0VrEUnP4A9AbmAU8C3TzHlMq\nY7hLk9cNZq+uouRv4ZcS8w1ldTQ/XaHFPvkkiRdvxurV6Yut0qvZmoMxZiMwJgVlUarFaq6eSMnf\n7sJeXZWU6/uuG/wp3jeU9aWXrJljyWhWMkY7hlXqRUwOIjLTGHOWiHyPt6btT+c5qExSe9GEsM0+\nvk3Wr7++kH32cXPhhdGHZ378sZ1Bg0p3PPYQ2M4ePJHO1+dQWdnIvHn5uFzZ3yEdyS+/2AFtVmot\notUcLvX+f0wqCqJUMsXaId3cjnG+0Uw+vj6Ho45yMW9eflImwr3zTkp2823WFVdYC/TtsUeGZCuV\nVNF+60REJMr3v010YZRKltJS2B5mGMWXX9o58MCmtqAtW5pLDoHf99UcCgqaHueaN95o6neoq0tj\nQVRKRUsOC4Avgf9h7d/g/1fhwdrwR6msUFLi4aefQtvujz22lFWrtu9YVmPLFht2uyfiHtINDYGP\ng4eyJnvvhXQ477ySdBdBpUG05HAMcB5wLPAG8JQxZklKSqVUgoVrVvL1H2zb1rSsxpYtNjp29PDj\nj7EnB/+hrLmYHPydfXYJH35YzV13FbBgQR7z56do02yVchGTgzHmfeB977agg4CJIrIf8ALwtHcp\nDaWywi67wC+/BN7wAye8Wclh61Ybu+/u4ccfw1+noSHwGk6nDYfDg8NhPT8ZHdKZZM0aO3/4QxFz\n5ui63rkulqGsTuBV4FURGQj8E/gTsFuSy6ZUwvTo4WLZssKAY7W11o3cf1mNzZttdOzoBkLH91d0\naNM0Sc7ndDgN4H/WrlhsCXla7pnj93WHll0i2sRClRmaHUAtIvuKyE0ishwYB9wIdEp6yZRKoM6d\nPdTV2QLWPvLVHGpqmo5t3Wo1KwHY7R5cJbrGZDJEm1ioMkO0eQ5jgPO95zwF9DPGbE5VwZRKJJsN\nevZ0sWyZnY4drSFFvhVUa/yazTdvtnH44VZyaNfOw3dnX8c+j/8laZPrWjN9TzNbtJrDw8DuWBv8\nDANeEJF3fP9SUjqlEqhnTzdffNHUXBSu5rBli40997SGtrZrB+vOupRN36zHhofzz6vnxReqcdjd\n2PBgw8P0aTUM6N/I9Gk12PBgtzV9r2I3146vc/XfHrtbr3HshfVs3PBrTP9UdojW59AlZaVQKgV6\n9XLx2mtNv/JNNYem5LBtG/Tr5+L++2uZOrUgYN6Cx2ON8y8qaqptNDYGDmX135gnLzPmriVVuOHB\nKjdEG62ko5FUTunZ081f/hJac/DvkK6utrHLLh6GD3fy0EMFAWslbd9u47zzSthjD/eOhOJLDr79\nHPzl+w3oOfxwF0uW5O4idmvWaJLINfoTVa1G165u6upg5Urr1953g/f973Ra8xiKvatW2+2BC+n9\n+KP1PP8hsU6nNWku3KqsyVypNdO89VYrqCa1MpocVKvhcMAf/9jI3XcX4PFYk9+gqYmopsbaMc63\nZ7TDEbgcRpW3/7RLl6aMEdys5K+oqKk24b943tixDaEn54AanQ+XUzQ5qFZl3LgGvv3WzpQp+WzZ\nYg1X9a9BlJY23cUdjsCaQ1WVjT59XPzjH00LDDmd1nnHHuuiZ8/AWP59Dv7JwZ6jf3UPP6zbiuaS\nHP01VSq8wkJ4+ulaHn+8gClTCujZ072jz6G62lqgz8dmC5zxXFVl9Uf41xJ8NQe7HQ49tOn4M8/U\nREwOthydRL1+fY6+sFZKk4Nqdfbc08OcOTWMH9/I+ec37qg5VFcH1xw8ATf17duhrCw4Odh21ARe\nfLHp+IknugKSQGDNITeXvH78ca055BJNDqpV6tjRw6WXNrDvvu4di+xVV9soKWm6cdvtgX0OTqct\nTHJo6m945hnr/2nTrGFQkZJDrtYcVG7JqCEGItIVuB5oa4wZmu7yqNzXu7eL5csdbNliDW0tKmr6\nXnCHNAR2WIOVHHzDWE87DQ46yIWI1VHh31+hyUFlm6QnBxGZDpwCbDDGHOx3vBK4D2uFs0eNMXcb\nY9YAo0XkhWSXSymw+hhOPtnJU08V0LWrm+LiwJpD8J7QwTWH+npbQN/Ce+81DdmJlBxytUNa5ZZU\n/Jo+DlT6HxARBzAFOBnoDpwtIt1TUBalQowZ08CMGfnU1jbNcYDYkkNDQ+BkN3/+CcHjgbfftnq+\nteagskHSk4MxZiEQvGBfX2C1MWaNMaYBeA7vysdKpdqhh7opLfXw7rt5Ic1KockhsEO5vj7yMhnB\nNYf27a3naXJQ2SBdfQ57At/7PV4HHCki7YE7gcNEZKIxJqY1fSsqypNQxNYVK9XxMi3W6afDAw84\nOOccqKiwqgJFRVBWlkdFRdN5nToVBTy22wto2xYqKgpCYvk3H+XlOdhtN2v579LSQpzO3Fx7Kd6f\na6TzM+33Ixtj7Wy8jPr1NMZswtozIi4bN4bZOT4JKirKczJWquNlYqxevRxs3VqCx9PAxo31ALhc\nRWze7GTjRidg/ZG53TVs3eoGrBv9r782suuubjZubAiJVVdXgm/TIKfTxebNtUAZtbX1bN7csOOa\nuSSW99ovt4Y9PxN/P7ItVizxmksc6eoa+wHo7Pd4L+8xpdKiZ0+rDaj5DunAGkFdXeQ+h+3bA9uP\nfM1J2qykskG6ksNioJuIdBGRAmA41lakSqVFRYWVFKz9pC2xdUjbIiaHQYOcYY9rclDZIOnJQUSe\nBT6wvpR1IjLauy/1JcB8YCUwyxizPNllUSqa3r1d9OnTNLEhfId08FDW8Mt1A9x5Z/2Or12upqQQ\nz1DWu+6qa/4kpZIg6X0OxpizIxyfC8xNdnylYvX664HLigbPkAarWcn/k399feRmpeBlNpprVurW\nzcWqVdaTzjyzkdmz86isdDJxYjyvQqnE0Ok4SkUQLjmUloY2K8Uy6qixMXqfw/LlVbz7bs2OpTem\nTq1j3TrdY1mljyYHpSII16xUWmotyOdTXw8FMaw3558cwjUrtW3roaDAatryp/0TKl00OSgVQbgO\naZst8OZuLZ/R/CqrTifYbJHP0ySgMo0mB6UicDg8uFy2gGUwIDA5RFs+w5/LZfOrOcS+ZHe2JY3g\nZjiVvTQ5KBWBr+YQfMPz72OI1iHt784763bc6MOd7/tetESUDXr3LuWbb7Iso6mwsuxXT6nU8XVI\nN3i3fPZ1FhcWNp0Ta4f073/v3JEA4lk2I9tqDj/9ZGPhwoxaeEG1kCYHpSJwOKxP8o2NUF7uYcgQ\na1Kb74ZdUODxNivF1kwUS80h1uOZ6k9/auCNN/Koq4P//MfB9u3wm9+U7NiKVWUPTQ5KReCrOWzf\nbqO8PDABfPZZFUcc4Yq6fEawpuQQOZnssYeHyZNrA8qQTUaPbqSuDv7v/0q58MIirruuiNWrHQwY\nUMpDD8X4RqmMkGW/ekqljm8nuC1bbLRtG3hD79TJQ3ExeDyRl8/wue++wG1DozUr2e0wbJjT73F2\n7Tfdvr2HF1+spbLSSX29jZkzrTfnm2/sPP+8JodsoslBqQh8HdI//WTbsfaSv112sY5FG8r65pvV\n/P73gWssxdOslG01B58bbqjnqadqGTCg6bVv25ZlbWStnPYcKRWB1axk45NPHBx+eOgYTV9y8O+g\nDnbIIU0TJXy7zMUyac6/DNmouBiOPtrF/vvX0aOHtbz5t9/a+fFHW8CS3SpzZemvnlLJ53B48Hhg\n8WJHwIJ8Pnvuad34Y73Z+5bdCFfTyJUO6WAVFR42bLD2FPjNb5y88YZ+Hs0WmhyUisBut4axfvaZ\ng9693SHfL/fulVJYGF+/QLSaRrgy5IING7YzcmQjV19d1PzJKiPkyK+eUomXlwcrVtipqPDs2P/Z\nny8pxNNMNH9+Nf36hdZCcq3PIZzKSifXXlsfcGzSpAK+/DKHXmQO0Z+KUhEUFVlNSr16hV8Tosj7\nITiemsBhh7njuuHnUnIoLrbmQfj7+98LefJJHcWUiXLoV0+pxCoq8rBhg53u3UOblKBpvkK8zUrx\nyKXkEMkjjxTgcsHEiYXMnKl9EplCfxJKReCrGXTqFD45+JqT4mlWildrSA4A115byBNPWG/kxRdb\n80v8981QqddKfvWUil9RkVUj2G238DUD32S2ZCaH4L6I/fYLn6jiETzbO53WrdvORRc17EgMYCXE\nPfYoZ+lSOx06lKexdK2bJgelIvDNSwg3AQ6aVlBN5qf74OTwwQc7v0jR6ac37vQ1EqWgAC6+uCHs\n915+2eqLePTRfOp0K+2U0+SgVATN1RyCNwJSLeNLvnvu6ebpp2tYvRp69HDxwANWbeK664pYulTb\nmFJNk4NSEfhGIYUbxgqhey+ollu6tIolS6o56SQX++0Hzz1nrUc1eXItnTq5eestBx9/bDUz/fyz\njRtvjGOImGoRTQ5KReBryojUp6A1h8TZYw9PQBNax44e/vnPOs4800llpZP77ivk/POtdr4jjihl\n+vR8nM4IF1MJoclBqQj239/NYYdF3veyXz8X06fXRvx+c+65J/EN6Z9/XpXwa6bLuec24nBYi/hN\nn16L223joINc1NXZaGy0cdllRZogkkiTg1IRdO3qYf78mojfLyyEU05p+d3Jt8bSiSe2/BqFhR5m\nzmwqo6+fJJeUlVnv86efVjFrVlMyfv75fK67rpDNm9NYuCyxZQtMmZLPjTfG/n5pclAqTXx9Fu3a\ntfyG3ratJ2CviZYs1Ne9e+TaUSYpKYEOHTzcfXcdJSXWa1661MERR5Rx+unFzJqVR2PmDMTKGLW1\n0L9/KcuXO2hshGOOKY2pz0aTg1Jp4na3fMnV3r1bdkMP3rQIrOazbGGzwahRjSxdWsU332xn/vwa\nli2r4sILG5k5M5++fUuZOjWfqtxpXdtpzz2XT8+ebh54oI67767n1VdrIg7P9qfJQak0+e1vA/ek\nbs6zzzY1Hx1ySFNy8B81FW4E1V//2tS3sTO1lEzSti2UllpfFxfDoEFOXnyxlscfr+XTTx306VPK\nlVcW8vzzeXz3na1VjCzzeMAYe8B+3fX1MGVKARMmNC14uP/+Hi69NPzcEn+6fIZSadKhg3XHijU5\nnHBC+NpCPDc+m81qnmnOvHnVVFaWxn7hDHHIIW4efriOb7+1MX9+HvPm5XHLLYXk58OQIU4uuaSB\njh1zL1O43XDNNYXMmZNHdbWNTp08HHUU5OUV0q2bm759468danJQKs1iSQ677Rb4xx0pIfiuVVnZ\nyGWXNXDyyYE3eI8Hrr22noceir7mx+GHp6apqaJDm/DHd/a6QJ/ggw95/yU4VnPcpWXUXD0Rbr4u\naTGefz6Pzz5z8NFH1RQXw6pVdpYvL+XZZ+38/e8tGxWnyUGpDDdrVg1lZfF92i0uJuwGRdDUHOMT\nvMDdzTcnd60Kd2kZ9urW0ylgr66i5G93JS05eDzw8MMFTJxYv2MDqoMOcnPssTB0aMuHWmufg1Jp\n1lzN4fjjXfTpE3ij32cfd9jn+h43V7Pwlx+0nUKyV0OtuXoi7tKy5AbJMMlMhl99ZWfzZhsDBiR2\n1JnWHJRKs3iHn37zzXaKi+GWW6w1xf0TQUuGsoYbwRRNv35OFi1q+a2j9qIJ1F40IeL3KyrK2bhx\ne4uvH4+KinK++WY7M2fmM3t2HsuWOejf38mppzoZNMi504kyUrNZIi1Y4GDAAGfCF4DUmoNSaWaz\nxXdzLi0NXAm2XTv/azUXK/TY9dfX89FHVYwZ0xDTNa68svmRLtmkrAxGj27klVdq+eADaxvXBx8s\nYL/9yhgzpojnn8/L6KVSFizI4/jjEz9XRWsOSmW5bt3cfP31dvbbrzxss1Jzo5lKSqBLl9gTVEtq\nJ9miosLDiBGNjBjRyC+/2JgzJ49HHy3g8suLGDGikQkTGth9dw9ud9N+Hi3ldltNQh995ODzz+18\n9ZWdXXbx0KWLhy5d3JxwgpPOnaP/XOrr4cMPHTzwQMv7FiLJqOQgIqXAA0ADsMAY83Sai6RU0kVa\nEjwe5eXw3nvVIZ3N/oqLPTz55M7fRPyTw5//XM+kSYX07OkK2R862+22m4eRI61EsWKFneefz+eY\nY0ppbLT6ZXr2dHHEES6OPtrFCSe4mm/WsdlCRkZ1BPrtZDmrACT896KOxGrmU0PSk4OITAdOATYY\nYw72O14J3Ac4gEeNMXcDvwNeMMbMFpGZgCYHldM++6wqIckBrBEq0RxxhIsDDoh8ju+mH0/NoFs3\n63pvvx15DapsZ7NBjx5uevSo56ab6qmttT71L1niYPFiB5MmFTJpEowY0Ui3bm66dHGz664eqqpg\n15IyHDXZOTIrFX0OjwOV/gdExAFMAU4GugNni0h3YC/ge+9p2bHgi1I7oVMnz05tMxruRl5S4uHw\nw0P/fILPjbTi7BFHRP/T8/9+LjcxhWO3W30+5eVw3HEurrqqgTfeqOHiixtYvNjBrbcW0r9/CZ07\nl9G3bxm3cjNVtuwcmZX0moMxZqGI7Bt0uC+w2hizBkBEngNOA9ZhJYjP0M5ypaK6/npo0ya0KWft\n2pZ9UvXd6A87LHoNxOGAww93sWSJ7s4G1vt2+ulOTj+9aXVdj8f3fo6llrHUkrhRWMuW2bnmmiK2\nb4ft220sXlwdtv+juXjNTf5LV5/DnjTVEMBKCkcC9wOTRWQwMDsdBVMqW9xxB2zcGPsypPF+yi8r\n81BVFf5JM2fWUF9v48MPNUGEk8wa1cEHu5k9u4YFCxx07uzZ6Y7xSDKqQ9oYUw38Id7nVVSUJ6E0\nrStWquNprNTFKyuz5kMUFuYFnJ+X5wi4hm/NJd/j7dutmdZ1ddZEucMOg/Xrre9XeD92rlgRezni\nkas/s0TGOuus5MZLV3L4Aejs93gv77EWSeWEmVyMlep4GiuV8crZvr0OKKKhwcnGjbU7jrtcLsCx\n4xoNDYVAQdA1ywAbd90FQ4dux+2GjRubvrvrrnagNKGvO1d/Zpn2+9Fc4khXu/5ioJuIdBGRAmA4\n8GqayqJUTvM1cYi4wx73ufLKeubOrQ44NmhQUzt6SYk1Ycxfr15uNmxI3Q1PpU7Sk4OIPAt8YH0p\n60RktDHGCVwCzAdWArOMMcuTXRalWiOPB777bjs331wf9bzyckLWcHrwQWsRvsLmNw5TOSYVo5XO\njnB8LjA32fGVUlBU1PLnvv12NcccU8q2bYkrj8p8OlxUqVZq991jWzCoZ0/3Ts3FUNlJk4NSOW7P\nPcMngXPOacQY7S9Q4WXUUFalVGKtXbs94ragNhvssktqy6Oyh9YclMphsewXrVQ4mhyUUkqF0OSg\nVCvV2hbNU/HR5KCUUiqEJgelWqnmdohTrZvNo78hSimlgmjNQSmlVAhNDkoppUJoclBKKRVCk4NS\nSqkQmhyUUkqF0OSglFIqhCYHpZRSITQ5KKWUCpGTS3aLSFfgeqCtMWZopGNJjFUKPAA0AAuMMU8n\nKp73+t2BW4BNwNvGmBcSef2gWHsB/wK2AF8ZY+5OVixvvH7AuVi/m92NMb9JYiw7cDvQBvjYGPNE\nEmMd7421HHjOGLMgWbG88UqB94BbjDGvJTHOQcBlQHtgvjHm0WTF8sY7HRiM9TObZox5I4mxknLP\n8Lt+Uu8TQbHifi0ZlxxEZDpwCrDBGHOw3/FK4D7AATwa7SZljFkDjBaRF6IdS1Ys4HfAC8aY2SIy\nE9jxQ09ETOBk4F/GmEUi8ioQNjkkKFYv4EVjzFPe1xJRgt7PRcAi701gcTJjAacBe2El2XVJjuUB\nqoCiFMQCuAaYFe2EBP28VgLjvIl2JhAxOSQo3ivAKyKyC/B3IGxySOLfdlRxxo14n0h0rJa8loxL\nDsDjwGRghu+AiDiAKcBJWH9Yi703RQdwV9DzRxljNqQ51l7AF96vXYmOCTwJ3Cwip2J9Ykva6wP+\nC8wWEV/caHY6nt/7eQ4wOsmvTYD3jTEPef9o3k5irEXGmPdEpCPwD6zaUbJiHQKswEpE0ex0LGPM\nBu/v4UXAI6mI5/36Bu/zUhErHvHEjXafSGgsY8yKeC+eccnBGLNQRPYNOtwXWO3NfojIc8Bpxpi7\nsDJnpsVah/WD/4ygfp0ExrzY+4vwUqRCJCKWiFwB3OC91gvAY8mM5z1nb2CbibKHZYJe2zqsKj1A\nxA2VE/x7sgUoTPLrOh4oBboDtSIy1xgT8voS9bqMMa8Cr3pveC8m+bXZgLuB140xS5IZqyXiiUuU\n+0QSYsWdHLKlQ3pP4Hu/x+u8x8ISkfYi8iBwmIhMjHQsWbGwbthnishUYHaUWC2Nua+IPIz1ieFv\nMVy/xbGAd4DLvK9xbZyxWhIPrBpDxCSUwFgvAQNF5F9Y7fNJiyUivxORh7BqX5OTGcsYc70x5nLg\nGeCRcIkhUbFE5HgRud/7+7ggjjgtigdMAE4EhorIuGTGiuOe0dK48d4nWhyrJa8l42oOiWCM2QSM\na+5YEmNVA39IdCy/668FLkzW9YNiLQXOTEUsv5g3pyhODdGbrhIZ6yWi1PKSFPPxFMRYQMuSQkvj\n3Q/cn6JYSbln+F0/qfeJoFhxv5ZsqTn8AHT2e7yX91i2x0pHzFS/vlx9bRor++Kl42871XETFitb\nag6LgW4i0gXrhQ7H6rDM9ljpiJnq15err01jZV+8dPxtpzpuwmJlXM1BRJ4FPrC+lHUiMtoY4wQu\nAeYDK4FZxpjl2RQrHTFT/fpy9bVpLP39yMS4yY6lO8EppZQKkXE1B6WUUumnyUEppVQITQ5KKaVC\naHJQSikVQpODUkqpEJoclFJKhdDkoJRSKkS2zJBWKi7e1SoN1iQhf3OMMfEuVpgwInIB1kZNr3j/\nvSwX0sAAAAMlSURBVAsMNH6b1ojIOVhr+3fxrqMV7jozgE+MMfcFHf8KaynnU4E6Y8zxiX4NqnXQ\n5KBy2cZE3xxFxGaM2dmZo48bY27xLq39FTCCwE1rzvUej2Ya8E+sTV18ZfsN4DLG/EVEnsFKEkq1\niCYH1SqJyDbgTqAS2AMYZoz5QkR6AfcA+d5/lxhjPhWRBVjr7vf23tQvxNrg5kfgQ2BvrI2RjjHG\njPTGGA78zhgzLEpRPgKOEpEyY0yViHQAdvFe11fWCcAwrL/XL71xFwLlItLTGOPbMGYEVtJQaqdp\nn4NqrdoAXxhjBgDPAWO8x58GxnlrHBcRuO1llTGmH1AG/AXoDwwCjvN+/1ngtyJS7n18NlG2zfRy\nA/+maVn0s/Hb3lNE+gJnAMcaY44GtgJjvLWX6YAvERV6z5uBUgmgNQeVyyq8n/j9/dkY8z/v1+96\n//8W2N/7qV2AaSLiO7+NWPsjA7zv/b8b8I0x5hcAEZkNHOz95P8KMFxEZgEHAm/FUM4nsZqInsBK\nDqcBp3u/dzywP/Cut0ylQKP3e08AH4nINVh9DP9t4daWSoXQ5KByWXN9Dk6/r21APVAf7jneG7Nv\nS1E7kbcVfQhrD18X8Ewsu7AZYz4XkV1FZACw1Rjzs19yqgdeNcZcEuZ560XkM+C3wPne2EolhDYr\nKeVljNkGrBWRQQAicoCI3BTm1K+BriJSLtY+3qf4XeMzrA3rryC+rU6fxkoqTwcd/y9wsoiUect0\nkYgc7ff9aVi72R0MzIsjnlJRac1B5bJwzUrfGGOibc04ArhfRK7F6pD+U/AJxphNIvI3rGGya4HP\ngRK/U2YApxpjvoujrM8ANwEvB8X6WESmAAtEpA5YT+AopNeAB4FpxhhXHPGUikr3c1CqBURkBFZz\nz1YReQBYa4yZJCI2rM3i7/efu+D3vAuAfY0xtyS5fPtiDZk9PplxVO7SZiWlWqYd8J6ILAL2BB4U\nkcOBT7BGQYUkBj8XiMi9ySqYiFRijcBSqsW05qCUUiqE1hyUUkqF0OSglFIqhCYHpZRSITQ5KKWU\nCqHJQSmlVAhNDkoppUL8Pzlt5uQccjZkAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1863,9 +1863,9 @@ "outputs": [ { "data": { - "image/png": "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\nfn35+EIOpHUAAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1892,25 +1892,34 @@ "# Show the plot on screen\n", "plt.show()" ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 2", "language": "python", - "name": "python3" + "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 3 + "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.1" + "pygments_lexer": "ipython2", + "version": "2.7.6" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb index c39f21dfa..bc2f96414 100644 --- a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb +++ b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb @@ -32,7 +32,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/romano/miniconda3/envs/default/lib/python3.5/site-packages/matplotlib/__init__.py:1350: UserWarning: This call to matplotlib.use() has no effect\n", + "/home/wboyd/anaconda2/lib/python2.7/site-packages/matplotlib/__init__.py:1350: 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", @@ -459,7 +459,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/plain": [ "" ] @@ -539,10 +539,12 @@ "\n", "* `TotalXS` (`\"total\"`)\n", "* `TransportXS` (`\"transport\"`)\n", + "* `NuTransportXS` (`\"nu-transport\"`)\n", "* `AbsorptionXS` (`\"absorption\"`)\n", "* `CaptureXS` (`\"capture\"`)\n", "* `FissionXS` (`\"fission\"`)\n", "* `NuFissionXS` (`\"nu-fission\"`)\n", + "* `KappaFissionXS` (`\"kappa-fission\"`)\n", "* `ScatterXS` (`\"scatter\"`)\n", "* `NuScatterXS` (`\"nu-scatter\"`)\n", "* `ScatterMatrixXS` (`\"scatter matrix\"`)\n", @@ -584,7 +586,7 @@ "outputs": [], "source": [ "# Specify a \"cell\" domain type for the cross section tally filters\n", - "mgxs_lib.domain_type = \"cell\"\n", + "mgxs_lib.domain_type = 'cell'\n", "\n", "# Specify the cell domains over which to compute multi-group cross sections\n", "mgxs_lib.domains = geometry.get_all_material_cells()" @@ -722,10 +724,11 @@ " 888\n", "\n", " Copyright: 2011-2016 Massachusetts Institute of Technology\n", - " License: http://openmc.readthedocs.org/en/latest/license.html\n", + " License: http://openmc.readthedocs.io/en/latest/license.html\n", " Version: 0.7.1\n", - " Git SHA1: df280b60eb1c6d7b7f842e05ede734a4883a0fc8\n", - " Date/Time: 2016-05-05 15:06:49\n", + " Git SHA1: 47ef320ad517612376e181ec6a6bc42ca0db98ce\n", + " Date/Time: 2016-05-14 12:29:07\n", + " MPI Processes: 1\n", "\n", " ===========================================================================\n", " ========================> INITIALIZATION <=========================\n", @@ -811,20 +814,20 @@ "\n", " =======================> TIMING STATISTICS <=======================\n", "\n", - " Total time for initialization = 4.1500E-01 seconds\n", - " Reading cross sections = 1.1800E-01 seconds\n", - " Total time in simulation = 5.3686E+01 seconds\n", - " Time in transport only = 5.3657E+01 seconds\n", - " Time in inactive batches = 4.3970E+00 seconds\n", - " Time in active batches = 4.9289E+01 seconds\n", - " Time synchronizing fission bank = 3.0000E-03 seconds\n", + " Total time for initialization = 5.7700E-01 seconds\n", + " Reading cross sections = 1.3400E-01 seconds\n", + " Total time in simulation = 8.0461E+01 seconds\n", + " Time in transport only = 8.0422E+01 seconds\n", + " Time in inactive batches = 6.4060E+00 seconds\n", + " Time in active batches = 7.4055E+01 seconds\n", + " Time synchronizing fission bank = 6.0000E-03 seconds\n", " Sampling source sites = 2.0000E-03 seconds\n", - " SEND/RECV source sites = 1.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 = 5.4118E+01 seconds\n", - " Calculation Rate (inactive) = 5685.70 neutrons/second\n", - " Calculation Rate (active) = 2028.85 neutrons/second\n", + " Total time elapsed = 8.1067E+01 seconds\n", + " Calculation Rate (inactive) = 3902.59 neutrons/second\n", + " Calculation Rate (active) = 1350.35 neutrons/second\n", "\n", " ============================> RESULTS <============================\n", "\n", @@ -950,7 +953,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/romano/openmc/openmc/tallies.py:1996: RuntimeWarning: invalid value encountered in true_divide\n", + "/home/wboyd/Documents/NSE-CRPG-Codes/openmc/openmc/tallies.py:1988: RuntimeWarning: invalid value encountered in true_divide\n", " self_rel_err = data['self']['std. dev.'] / data['self']['mean']\n" ] }, @@ -1099,7 +1102,7 @@ "cell_type": "code", "execution_count": 32, "metadata": { - "collapsed": true + "collapsed": false }, "outputs": [], "source": [ @@ -1300,121 +1303,121 @@ "[ NORMAL ] Iteration 0:\tk_eff = 0.854370\tres = 0.000E+00\n", "[ NORMAL ] Iteration 1:\tk_eff = 0.801922\tres = 1.521E-01\n", "[ NORMAL ] Iteration 2:\tk_eff = 0.761745\tres = 6.349E-02\n", - "[ NORMAL ] Iteration 3:\tk_eff = 0.732367\tres = 5.029E-02\n", - "[ NORMAL ] Iteration 4:\tk_eff = 0.711075\tres = 3.869E-02\n", - "[ NORMAL ] Iteration 5:\tk_eff = 0.696557\tres = 2.912E-02\n", - "[ NORMAL ] Iteration 6:\tk_eff = 0.687673\tres = 2.044E-02\n", - "[ NORMAL ] Iteration 7:\tk_eff = 0.683469\tres = 1.277E-02\n", - "[ NORMAL ] Iteration 8:\tk_eff = 0.683129\tres = 6.141E-03\n", - "[ NORMAL ] Iteration 9:\tk_eff = 0.685949\tres = 7.889E-04\n", - "[ NORMAL ] Iteration 10:\tk_eff = 0.691329\tres = 4.181E-03\n", - "[ NORMAL ] Iteration 11:\tk_eff = 0.698755\tres = 7.875E-03\n", - "[ NORMAL ] Iteration 12:\tk_eff = 0.707786\tres = 1.077E-02\n", - "[ NORMAL ] Iteration 13:\tk_eff = 0.718050\tres = 1.295E-02\n", - "[ NORMAL ] Iteration 14:\tk_eff = 0.729230\tres = 1.452E-02\n", - "[ NORMAL ] Iteration 15:\tk_eff = 0.741058\tres = 1.559E-02\n", - "[ NORMAL ] Iteration 16:\tk_eff = 0.753310\tres = 1.624E-02\n", - "[ NORMAL ] Iteration 17:\tk_eff = 0.765800\tres = 1.655E-02\n", - "[ NORMAL ] Iteration 18:\tk_eff = 0.778371\tres = 1.660E-02\n", - "[ NORMAL ] Iteration 19:\tk_eff = 0.790897\tres = 1.643E-02\n", - "[ NORMAL ] Iteration 20:\tk_eff = 0.803272\tres = 1.611E-02\n", - "[ NORMAL ] Iteration 21:\tk_eff = 0.815414\tres = 1.566E-02\n", - "[ NORMAL ] Iteration 22:\tk_eff = 0.827256\tres = 1.513E-02\n", - "[ NORMAL ] Iteration 23:\tk_eff = 0.838747\tres = 1.453E-02\n", - "[ NORMAL ] Iteration 24:\tk_eff = 0.849846\tres = 1.390E-02\n", - "[ NORMAL ] Iteration 25:\tk_eff = 0.860527\tres = 1.324E-02\n", - "[ NORMAL ] Iteration 26:\tk_eff = 0.870770\tres = 1.258E-02\n", - "[ NORMAL ] Iteration 27:\tk_eff = 0.880562\tres = 1.191E-02\n", - "[ NORMAL ] Iteration 28:\tk_eff = 0.889897\tres = 1.125E-02\n", - "[ NORMAL ] Iteration 29:\tk_eff = 0.898776\tres = 1.061E-02\n", - "[ NORMAL ] Iteration 30:\tk_eff = 0.907202\tres = 9.986E-03\n", - "[ NORMAL ] Iteration 31:\tk_eff = 0.915181\tres = 9.382E-03\n", - "[ NORMAL ] Iteration 32:\tk_eff = 0.922724\tres = 8.803E-03\n", - "[ NORMAL ] Iteration 33:\tk_eff = 0.929843\tres = 8.249E-03\n", - "[ NORMAL ] Iteration 34:\tk_eff = 0.936550\tres = 7.721E-03\n", - "[ NORMAL ] Iteration 35:\tk_eff = 0.942861\tres = 7.220E-03\n", - "[ NORMAL ] Iteration 36:\tk_eff = 0.948791\tres = 6.744E-03\n", - "[ NORMAL ] Iteration 37:\tk_eff = 0.954357\tres = 6.295E-03\n", - "[ NORMAL ] Iteration 38:\tk_eff = 0.959575\tres = 5.871E-03\n", - "[ NORMAL ] Iteration 39:\tk_eff = 0.964461\tres = 5.472E-03\n", - "[ NORMAL ] Iteration 40:\tk_eff = 0.969033\tres = 5.097E-03\n", - "[ NORMAL ] Iteration 41:\tk_eff = 0.973306\tres = 4.744E-03\n", - "[ NORMAL ] Iteration 42:\tk_eff = 0.977297\tres = 4.414E-03\n", - "[ NORMAL ] Iteration 43:\tk_eff = 0.981021\tres = 4.104E-03\n", - "[ NORMAL ] Iteration 44:\tk_eff = 0.984493\tres = 3.814E-03\n", - "[ NORMAL ] Iteration 45:\tk_eff = 0.987729\tres = 3.543E-03\n", - "[ NORMAL ] Iteration 46:\tk_eff = 0.990741\tres = 3.290E-03\n", - "[ NORMAL ] Iteration 47:\tk_eff = 0.993545\tres = 3.053E-03\n", - "[ NORMAL ] Iteration 48:\tk_eff = 0.996153\tres = 2.833E-03\n", - "[ NORMAL ] Iteration 49:\tk_eff = 0.998577\tres = 2.627E-03\n", - "[ NORMAL ] Iteration 50:\tk_eff = 1.000829\tres = 2.436E-03\n", - "[ NORMAL ] Iteration 51:\tk_eff = 1.002920\tres = 2.257E-03\n", - "[ NORMAL ] Iteration 52:\tk_eff = 1.004860\tres = 2.091E-03\n", - "[ NORMAL ] Iteration 53:\tk_eff = 1.006661\tres = 1.937E-03\n", - "[ NORMAL ] Iteration 54:\tk_eff = 1.008330\tres = 1.793E-03\n", - "[ NORMAL ] Iteration 55:\tk_eff = 1.009877\tres = 1.660E-03\n", - "[ NORMAL ] Iteration 56:\tk_eff = 1.011311\tres = 1.536E-03\n", - "[ NORMAL ] Iteration 57:\tk_eff = 1.012639\tres = 1.421E-03\n", - "[ NORMAL ] Iteration 58:\tk_eff = 1.013868\tres = 1.314E-03\n", - "[ NORMAL ] Iteration 59:\tk_eff = 1.015006\tres = 1.215E-03\n", - "[ NORMAL ] Iteration 60:\tk_eff = 1.016059\tres = 1.124E-03\n", - "[ NORMAL ] Iteration 61:\tk_eff = 1.017033\tres = 1.038E-03\n", - "[ NORMAL ] Iteration 62:\tk_eff = 1.017933\tres = 9.596E-04\n", - "[ NORMAL ] Iteration 63:\tk_eff = 1.018766\tres = 8.865E-04\n", - "[ NORMAL ] Iteration 64:\tk_eff = 1.019535\tres = 8.188E-04\n", - "[ NORMAL ] Iteration 65:\tk_eff = 1.020246\tres = 7.561E-04\n", - "[ NORMAL ] Iteration 66:\tk_eff = 1.020903\tres = 6.981E-04\n", - "[ NORMAL ] Iteration 67:\tk_eff = 1.021509\tres = 6.444E-04\n", - "[ NORMAL ] Iteration 68:\tk_eff = 1.022069\tres = 5.948E-04\n", - "[ NORMAL ] Iteration 69:\tk_eff = 1.022586\tres = 5.488E-04\n", - "[ NORMAL ] Iteration 70:\tk_eff = 1.023063\tres = 5.064E-04\n", - "[ NORMAL ] Iteration 71:\tk_eff = 1.023503\tres = 4.671E-04\n", - "[ NORMAL ] Iteration 72:\tk_eff = 1.023909\tres = 4.308E-04\n", - "[ NORMAL ] Iteration 73:\tk_eff = 1.024284\tres = 3.973E-04\n", - "[ NORMAL ] Iteration 74:\tk_eff = 1.024629\tres = 3.663E-04\n", - "[ NORMAL ] Iteration 75:\tk_eff = 1.024947\tres = 3.377E-04\n", - "[ NORMAL ] Iteration 76:\tk_eff = 1.025241\tres = 3.113E-04\n", - "[ NORMAL ] Iteration 77:\tk_eff = 1.025512\tres = 2.869E-04\n", - "[ NORMAL ] Iteration 78:\tk_eff = 1.025761\tres = 2.644E-04\n", - "[ NORMAL ] Iteration 79:\tk_eff = 1.025991\tres = 2.436E-04\n", - "[ NORMAL ] Iteration 80:\tk_eff = 1.026203\tres = 2.244E-04\n", - "[ NORMAL ] Iteration 81:\tk_eff = 1.026398\tres = 2.067E-04\n", - "[ NORMAL ] Iteration 82:\tk_eff = 1.026577\tres = 1.904E-04\n", - "[ NORMAL ] Iteration 83:\tk_eff = 1.026743\tres = 1.753E-04\n", - "[ NORMAL ] Iteration 84:\tk_eff = 1.026895\tres = 1.615E-04\n", - "[ NORMAL ] Iteration 85:\tk_eff = 1.027036\tres = 1.487E-04\n", - "[ NORMAL ] Iteration 86:\tk_eff = 1.027165\tres = 1.369E-04\n", - "[ NORMAL ] Iteration 87:\tk_eff = 1.027284\tres = 1.260E-04\n", - "[ NORMAL ] Iteration 88:\tk_eff = 1.027393\tres = 1.160E-04\n", - "[ NORMAL ] Iteration 89:\tk_eff = 1.027493\tres = 1.067E-04\n", - "[ NORMAL ] Iteration 90:\tk_eff = 1.027586\tres = 9.824E-05\n", - "[ NORMAL ] Iteration 91:\tk_eff = 1.027671\tres = 9.043E-05\n", - "[ NORMAL ] Iteration 92:\tk_eff = 1.027750\tres = 8.318E-05\n", - "[ NORMAL ] Iteration 93:\tk_eff = 1.027822\tres = 7.654E-05\n", - "[ NORMAL ] Iteration 94:\tk_eff = 1.027889\tres = 7.041E-05\n", - "[ NORMAL ] Iteration 95:\tk_eff = 1.027950\tres = 6.481E-05\n", - "[ NORMAL ] Iteration 96:\tk_eff = 1.028006\tres = 5.960E-05\n", - "[ NORMAL ] Iteration 97:\tk_eff = 1.028058\tres = 5.480E-05\n", - "[ NORMAL ] Iteration 98:\tk_eff = 1.028105\tres = 5.043E-05\n", - "[ NORMAL ] Iteration 99:\tk_eff = 1.028149\tres = 4.634E-05\n", - "[ NORMAL ] Iteration 100:\tk_eff = 1.028189\tres = 4.266E-05\n", - "[ NORMAL ] Iteration 101:\tk_eff = 1.028226\tres = 3.920E-05\n", - "[ NORMAL ] Iteration 102:\tk_eff = 1.028260\tres = 3.604E-05\n", - "[ NORMAL ] Iteration 103:\tk_eff = 1.028291\tres = 3.316E-05\n", - "[ NORMAL ] Iteration 104:\tk_eff = 1.028320\tres = 3.047E-05\n", - "[ NORMAL ] Iteration 105:\tk_eff = 1.028347\tres = 2.800E-05\n", - "[ NORMAL ] Iteration 106:\tk_eff = 1.028371\tres = 2.576E-05\n", - "[ NORMAL ] Iteration 107:\tk_eff = 1.028393\tres = 2.367E-05\n", - "[ NORMAL ] Iteration 108:\tk_eff = 1.028414\tres = 2.176E-05\n", - "[ NORMAL ] Iteration 109:\tk_eff = 1.028433\tres = 2.003E-05\n", - "[ NORMAL ] Iteration 110:\tk_eff = 1.028450\tres = 1.836E-05\n", - "[ NORMAL ] Iteration 111:\tk_eff = 1.028466\tres = 1.689E-05\n", - "[ NORMAL ] Iteration 112:\tk_eff = 1.028481\tres = 1.553E-05\n", - "[ NORMAL ] Iteration 113:\tk_eff = 1.028494\tres = 1.427E-05\n", - "[ NORMAL ] Iteration 114:\tk_eff = 1.028507\tres = 1.309E-05\n", - "[ NORMAL ] Iteration 115:\tk_eff = 1.028518\tres = 1.202E-05\n", - "[ NORMAL ] Iteration 116:\tk_eff = 1.028528\tres = 1.107E-05\n", - "[ NORMAL ] Iteration 117:\tk_eff = 1.028538\tres = 1.015E-05\n" + "[ NORMAL ] Iteration 3:\tk_eff = 0.732366\tres = 5.029E-02\n", + "[ NORMAL ] Iteration 4:\tk_eff = 0.711073\tres = 3.869E-02\n", + "[ NORMAL ] Iteration 5:\tk_eff = 0.696554\tres = 2.912E-02\n", + "[ NORMAL ] Iteration 6:\tk_eff = 0.687670\tres = 2.044E-02\n", + "[ NORMAL ] Iteration 7:\tk_eff = 0.683465\tres = 1.277E-02\n", + "[ NORMAL ] Iteration 8:\tk_eff = 0.683124\tres = 6.142E-03\n", + "[ NORMAL ] Iteration 9:\tk_eff = 0.685943\tres = 7.897E-04\n", + "[ NORMAL ] Iteration 10:\tk_eff = 0.691322\tres = 4.180E-03\n", + "[ NORMAL ] Iteration 11:\tk_eff = 0.698747\tres = 7.873E-03\n", + "[ NORMAL ] Iteration 12:\tk_eff = 0.707777\tres = 1.076E-02\n", + "[ NORMAL ] Iteration 13:\tk_eff = 0.718040\tres = 1.295E-02\n", + "[ NORMAL ] Iteration 14:\tk_eff = 0.729218\tres = 1.452E-02\n", + "[ NORMAL ] Iteration 15:\tk_eff = 0.741045\tres = 1.559E-02\n", + "[ NORMAL ] Iteration 16:\tk_eff = 0.753296\tres = 1.624E-02\n", + "[ NORMAL ] Iteration 17:\tk_eff = 0.765785\tres = 1.655E-02\n", + "[ NORMAL ] Iteration 18:\tk_eff = 0.778355\tres = 1.659E-02\n", + "[ NORMAL ] Iteration 19:\tk_eff = 0.790879\tres = 1.643E-02\n", + "[ NORMAL ] Iteration 20:\tk_eff = 0.803254\tres = 1.610E-02\n", + "[ NORMAL ] Iteration 21:\tk_eff = 0.815394\tres = 1.566E-02\n", + "[ NORMAL ] Iteration 22:\tk_eff = 0.827235\tres = 1.513E-02\n", + "[ NORMAL ] Iteration 23:\tk_eff = 0.838724\tres = 1.453E-02\n", + "[ NORMAL ] Iteration 24:\tk_eff = 0.849823\tres = 1.390E-02\n", + "[ NORMAL ] Iteration 25:\tk_eff = 0.860503\tres = 1.324E-02\n", + "[ NORMAL ] Iteration 26:\tk_eff = 0.870744\tres = 1.258E-02\n", + "[ NORMAL ] Iteration 27:\tk_eff = 0.880535\tres = 1.191E-02\n", + "[ NORMAL ] Iteration 28:\tk_eff = 0.889870\tres = 1.125E-02\n", + "[ NORMAL ] Iteration 29:\tk_eff = 0.898748\tres = 1.061E-02\n", + "[ NORMAL ] Iteration 30:\tk_eff = 0.907172\tres = 9.985E-03\n", + "[ NORMAL ] Iteration 31:\tk_eff = 0.915151\tres = 9.382E-03\n", + "[ NORMAL ] Iteration 32:\tk_eff = 0.922693\tres = 8.802E-03\n", + "[ NORMAL ] Iteration 33:\tk_eff = 0.929811\tres = 8.248E-03\n", + "[ NORMAL ] Iteration 34:\tk_eff = 0.936517\tres = 7.720E-03\n", + "[ NORMAL ] Iteration 35:\tk_eff = 0.942827\tres = 7.219E-03\n", + "[ NORMAL ] Iteration 36:\tk_eff = 0.948757\tres = 6.744E-03\n", + "[ NORMAL ] Iteration 37:\tk_eff = 0.954322\tres = 6.295E-03\n", + "[ NORMAL ] Iteration 38:\tk_eff = 0.959539\tres = 5.871E-03\n", + "[ NORMAL ] Iteration 39:\tk_eff = 0.964425\tres = 5.472E-03\n", + "[ NORMAL ] Iteration 40:\tk_eff = 0.968996\tres = 5.096E-03\n", + "[ NORMAL ] Iteration 41:\tk_eff = 0.973268\tres = 4.744E-03\n", + "[ NORMAL ] Iteration 42:\tk_eff = 0.977259\tres = 4.413E-03\n", + "[ NORMAL ] Iteration 43:\tk_eff = 0.980982\tres = 4.104E-03\n", + "[ NORMAL ] Iteration 44:\tk_eff = 0.984454\tres = 3.814E-03\n", + "[ NORMAL ] Iteration 45:\tk_eff = 0.987689\tres = 3.543E-03\n", + "[ NORMAL ] Iteration 46:\tk_eff = 0.990702\tres = 3.289E-03\n", + "[ NORMAL ] Iteration 47:\tk_eff = 0.993505\tres = 3.053E-03\n", + "[ NORMAL ] Iteration 48:\tk_eff = 0.996112\tres = 2.832E-03\n", + "[ NORMAL ] Iteration 49:\tk_eff = 0.998536\tres = 2.627E-03\n", + "[ NORMAL ] Iteration 50:\tk_eff = 1.000787\tres = 2.435E-03\n", + "[ NORMAL ] Iteration 51:\tk_eff = 1.002878\tres = 2.257E-03\n", + "[ NORMAL ] Iteration 52:\tk_eff = 1.004818\tres = 2.091E-03\n", + "[ NORMAL ] Iteration 53:\tk_eff = 1.006618\tres = 1.937E-03\n", + "[ NORMAL ] Iteration 54:\tk_eff = 1.008287\tres = 1.793E-03\n", + "[ NORMAL ] Iteration 55:\tk_eff = 1.009834\tres = 1.660E-03\n", + "[ NORMAL ] Iteration 56:\tk_eff = 1.011268\tres = 1.536E-03\n", + "[ NORMAL ] Iteration 57:\tk_eff = 1.012595\tres = 1.421E-03\n", + "[ NORMAL ] Iteration 58:\tk_eff = 1.013824\tres = 1.314E-03\n", + "[ NORMAL ] Iteration 59:\tk_eff = 1.014962\tres = 1.215E-03\n", + "[ NORMAL ] Iteration 60:\tk_eff = 1.016015\tres = 1.123E-03\n", + "[ NORMAL ] Iteration 61:\tk_eff = 1.016988\tres = 1.038E-03\n", + "[ NORMAL ] Iteration 62:\tk_eff = 1.017889\tres = 9.595E-04\n", + "[ NORMAL ] Iteration 63:\tk_eff = 1.018721\tres = 8.864E-04\n", + "[ NORMAL ] Iteration 64:\tk_eff = 1.019490\tres = 8.187E-04\n", + "[ NORMAL ] Iteration 65:\tk_eff = 1.020201\tres = 7.560E-04\n", + "[ NORMAL ] Iteration 66:\tk_eff = 1.020858\tres = 6.980E-04\n", + "[ NORMAL ] Iteration 67:\tk_eff = 1.021464\tres = 6.444E-04\n", + "[ NORMAL ] Iteration 68:\tk_eff = 1.022024\tres = 5.947E-04\n", + "[ NORMAL ] Iteration 69:\tk_eff = 1.022541\tres = 5.488E-04\n", + "[ NORMAL ] Iteration 70:\tk_eff = 1.023017\tres = 5.063E-04\n", + "[ NORMAL ] Iteration 71:\tk_eff = 1.023458\tres = 4.670E-04\n", + "[ NORMAL ] Iteration 72:\tk_eff = 1.023863\tres = 4.308E-04\n", + "[ NORMAL ] Iteration 73:\tk_eff = 1.024238\tres = 3.972E-04\n", + "[ NORMAL ] Iteration 74:\tk_eff = 1.024583\tres = 3.663E-04\n", + "[ NORMAL ] Iteration 75:\tk_eff = 1.024902\tres = 3.376E-04\n", + "[ NORMAL ] Iteration 76:\tk_eff = 1.025195\tres = 3.112E-04\n", + "[ NORMAL ] Iteration 77:\tk_eff = 1.025466\tres = 2.868E-04\n", + "[ NORMAL ] Iteration 78:\tk_eff = 1.025715\tres = 2.643E-04\n", + "[ NORMAL ] Iteration 79:\tk_eff = 1.025945\tres = 2.435E-04\n", + "[ NORMAL ] Iteration 80:\tk_eff = 1.026157\tres = 2.244E-04\n", + "[ NORMAL ] Iteration 81:\tk_eff = 1.026352\tres = 2.067E-04\n", + "[ NORMAL ] Iteration 82:\tk_eff = 1.026531\tres = 1.904E-04\n", + "[ NORMAL ] Iteration 83:\tk_eff = 1.026697\tres = 1.753E-04\n", + "[ NORMAL ] Iteration 84:\tk_eff = 1.026849\tres = 1.614E-04\n", + "[ NORMAL ] Iteration 85:\tk_eff = 1.026989\tres = 1.487E-04\n", + "[ NORMAL ] Iteration 86:\tk_eff = 1.027118\tres = 1.369E-04\n", + "[ NORMAL ] Iteration 87:\tk_eff = 1.027237\tres = 1.260E-04\n", + "[ NORMAL ] Iteration 88:\tk_eff = 1.027347\tres = 1.160E-04\n", + "[ NORMAL ] Iteration 89:\tk_eff = 1.027447\tres = 1.067E-04\n", + "[ NORMAL ] Iteration 90:\tk_eff = 1.027540\tres = 9.823E-05\n", + "[ NORMAL ] Iteration 91:\tk_eff = 1.027625\tres = 9.039E-05\n", + "[ NORMAL ] Iteration 92:\tk_eff = 1.027704\tres = 8.317E-05\n", + "[ NORMAL ] Iteration 93:\tk_eff = 1.027776\tres = 7.652E-05\n", + "[ NORMAL ] Iteration 94:\tk_eff = 1.027843\tres = 7.040E-05\n", + "[ NORMAL ] Iteration 95:\tk_eff = 1.027904\tres = 6.476E-05\n", + "[ NORMAL ] Iteration 96:\tk_eff = 1.027960\tres = 5.957E-05\n", + "[ NORMAL ] Iteration 97:\tk_eff = 1.028012\tres = 5.479E-05\n", + "[ NORMAL ] Iteration 98:\tk_eff = 1.028059\tres = 5.039E-05\n", + "[ NORMAL ] Iteration 99:\tk_eff = 1.028103\tres = 4.635E-05\n", + "[ NORMAL ] Iteration 100:\tk_eff = 1.028143\tres = 4.262E-05\n", + "[ NORMAL ] Iteration 101:\tk_eff = 1.028180\tres = 3.919E-05\n", + "[ NORMAL ] Iteration 102:\tk_eff = 1.028214\tres = 3.603E-05\n", + "[ NORMAL ] Iteration 103:\tk_eff = 1.028245\tres = 3.313E-05\n", + "[ NORMAL ] Iteration 104:\tk_eff = 1.028274\tres = 3.046E-05\n", + "[ NORMAL ] Iteration 105:\tk_eff = 1.028300\tres = 2.800E-05\n", + "[ NORMAL ] Iteration 106:\tk_eff = 1.028324\tres = 2.574E-05\n", + "[ NORMAL ] Iteration 107:\tk_eff = 1.028347\tres = 2.366E-05\n", + "[ NORMAL ] Iteration 108:\tk_eff = 1.028367\tres = 2.175E-05\n", + "[ NORMAL ] Iteration 109:\tk_eff = 1.028386\tres = 1.999E-05\n", + "[ NORMAL ] Iteration 110:\tk_eff = 1.028403\tres = 1.837E-05\n", + "[ NORMAL ] Iteration 111:\tk_eff = 1.028419\tres = 1.688E-05\n", + "[ NORMAL ] Iteration 112:\tk_eff = 1.028434\tres = 1.551E-05\n", + "[ NORMAL ] Iteration 113:\tk_eff = 1.028447\tres = 1.426E-05\n", + "[ NORMAL ] Iteration 114:\tk_eff = 1.028460\tres = 1.310E-05\n", + "[ NORMAL ] Iteration 115:\tk_eff = 1.028471\tres = 1.204E-05\n", + "[ NORMAL ] Iteration 116:\tk_eff = 1.028481\tres = 1.106E-05\n", + "[ NORMAL ] Iteration 117:\tk_eff = 1.028491\tres = 1.016E-05\n" ] } ], @@ -1447,8 +1450,8 @@ "output_type": "stream", "text": [ "openmc keff = 1.028263\n", - "openmoc keff = 1.028538\n", - "bias [pcm]: 27.5\n" + "openmoc keff = 1.028491\n", + "bias [pcm]: 22.8\n" ] } ], @@ -1556,7 +1559,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 43, @@ -1565,9 +1568,9 @@ }, { "data": { - "image/png": "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\nAElFTkSuQmCC\n", + "image/png": "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\n2ajR7Q6wgAAAAABJRU5ErkJggg==\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -1575,6 +1578,10 @@ } ], "source": [ + "# Ignore zero fission rates in guide tubes with Matplotlib color scheme\n", + "openmc_fission_rates[openmc_fission_rates == 0] = np.nan\n", + "openmoc_fission_rates[openmoc_fission_rates == 0] = np.nan\n", + "\n", "# Plot OpenMC's fission rates in the left subplot\n", "fig = plt.subplot(121)\n", "plt.imshow(openmc_fission_rates, interpolation='none', cmap='jet')\n", @@ -1589,21 +1596,21 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 2", "language": "python", - "name": "python3" + "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 3 + "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.5.1" + "pygments_lexer": "ipython2", + "version": "2.7.11" } }, "nbformat": 4, diff --git a/docs/source/pythonapi/index.rst b/docs/source/pythonapi/index.rst index 3c4899cd2..bf35e7587 100644 --- a/docs/source/pythonapi/index.rst +++ b/docs/source/pythonapi/index.rst @@ -123,6 +123,16 @@ Many of the above classes are derived from several abstract classes: openmc.Region openmc.Lattice +One function is also available to create a hexagonal region defined by the +intersection of six surface half-spaces. + +.. autosummary:: + :toctree: generated + :nosignatures: + :template: myfunction.rst + + openmc.make_hexagon_region + Constructing Tallies -------------------- diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst index 775407d70..8493ac480 100644 --- a/docs/source/usersguide/input.rst +++ b/docs/source/usersguide/input.rst @@ -1033,6 +1033,20 @@ Each ```` element can have the following attributes or sub-elements: + The rotation applied is an intrinsic rotation whose Tait-Bryan angles are + given as those specified about the x, y, and z axes respectively. That is to + say, if the angles are :math:`(\phi, \theta, \psi)`, then the rotation + matrix applied is :math:`R_z(\psi) R_y(\theta) R_x(\phi)` or + + .. math:: + + \left [ \begin{array}{ccc} \cos\theta \cos\psi & -\cos\theta \sin\psi + + \sin\phi \sin\theta \cos\psi & \sin\phi \sin\psi + \cos\phi \sin\theta + \cos\psi \\ \cos\theta \sin\psi & \cos\phi \cos\psi + \sin\phi \sin\theta + \sin\psi & -\sin\phi \cos\psi + \cos\phi \sin\theta \sin\psi \\ + -\sin\theta & \sin\phi \cos\theta & \cos\phi \cos\theta \end{array} + \right ] + *Default*: None :translation: diff --git a/openmc/cell.py b/openmc/cell.py index 37828d8fc..8ddae6371 100644 --- a/openmc/cell.py +++ b/openmc/cell.py @@ -23,7 +23,7 @@ def reset_auto_cell_id(): class Cell(object): - """A region of space defined as the intersection of half-space created by + r"""A region of space defined as the intersection of half-space created by quadric surfaces. Parameters @@ -48,11 +48,24 @@ class Cell(object): Indicates what the region of space is filled with region : openmc.Region Region of space that is assigned to the cell. - rotation : numpy.ndarray + rotation : Iterable of float If the cell is filled with a universe, this array specifies the angles in degrees about the x, y, and z axes that the filled universe should be - rotated. - translation : numpy.ndarray + rotated. The rotation applied is an intrinsic rotation with specified + Tait-Bryan angles. That is to say, if the angles are :math:`(\phi, + \theta, \psi)`, then the rotation matrix applied is :math:`R_z(\psi) + R_y(\theta) R_x(\phi)` or + + .. math:: + + \left [ \begin{array}{ccc} \cos\theta \cos\psi & -\cos\theta \sin\psi + + \sin\phi \sin\theta \cos\psi & \sin\phi \sin\psi + \cos\phi + \sin\theta \cos\psi \\ \cos\theta \sin\psi & \cos\phi \cos\psi + + \sin\phi \sin\theta \sin\psi & -\sin\phi \cos\psi + \cos\phi + \sin\theta \sin\psi \\ -\sin\theta & \sin\phi \cos\theta & \cos\phi + \cos\theta \end{array} \right ] + + translation : Iterable of float If the cell is filled with a universe, this array specifies a vector that is used to translate (shift) the universe. offsets : ndarray @@ -230,6 +243,10 @@ class Cell(object): @rotation.setter def rotation(self, rotation): + if not isinstance(self.fill, openmc.Universe): + raise RuntimeError('Cell rotation can only be applied if the cell ' + 'is filled with a Universe') + cv.check_type('cell rotation', rotation, Iterable, Real) cv.check_length('cell rotation', rotation, 3) self._rotation = rotation diff --git a/openmc/element.py b/openmc/element.py index 39564add4..66371aba9 100644 --- a/openmc/element.py +++ b/openmc/element.py @@ -1,7 +1,7 @@ import sys import openmc -from openmc.checkvalue import check_type +from openmc.checkvalue import check_type, check_length from openmc.data import natural_abundance if sys.version_info[0] >= 3: @@ -99,7 +99,8 @@ class Element(object): @name.setter def name(self, name): - check_type('name', name, basestring) + check_type('element name', name, basestring) + check_length('element name', name, 1, 2) self._name = name @scattering.setter diff --git a/openmc/lattice.py b/openmc/lattice.py index f78ec8e90..af6c14a6a 100644 --- a/openmc/lattice.py +++ b/openmc/lattice.py @@ -30,8 +30,8 @@ class Lattice(object): Unique identifier for the lattice name : str Name of the lattice - pitch : float - Pitch of the lattice in cm + pitch : Iterable of float + Pitch of the lattice in each direction in cm outer : openmc.Universe A universe to fill all space outside the lattice universes : Iterable of Iterable of openmc.Universe @@ -259,8 +259,9 @@ class RectLattice(Lattice): lower_left : Iterable of float The coordinates of the lower-left corner of the lattice. If the lattice is two-dimensional, only the x- and y-coordinates are specified. - pitch : float - Pitch of the lattice in cm + pitch : Iterable of float + Pitch of the lattice in the x, y, and (if applicable) z directions in + cm. outer : openmc.Universe A universe to fill all space outside the lattice universes : Iterable of Iterable of openmc.Universe @@ -512,13 +513,19 @@ class HexLattice(Lattice): center : Iterable of float Coordinates of the center of the lattice. If the lattice does not have axial sections then only the x- and y-coordinates are specified - pitch : float - Pitch of the lattice in cm + pitch : Iterable of float + Pitch of the lattice in cm. The first item in the iterable specifies the + pitch in the radial direction and, if the lattice is 3D, the second item + in the iterable specifies the pitch in the axial direction. outer : openmc.Universe A universe to fill all space outside the lattice universes : Iterable of Iterable of openmc.Universe A two- or three-dimensional list/array of universes filling each element - of the lattice + of the lattice. Each sub-list corresponds to one ring of universes and + should be ordered from outermost ring to innermost ring. The universes + within each sub-list are ordered from the "top" and proceed in a + clockwise fashion. The :meth:`HexLattice.show_indices` method can be + used to help figure out indices for this property. """ @@ -882,3 +889,107 @@ class HexLattice(Lattice): # Join the rows together and return the string. universe_ids = '\n'.join(rows) return universe_ids + + @staticmethod + def show_indices(num_rings): + """Return a diagram of the hexagonal lattice layout with indices. + + This method can be used to show the proper indices to be used when + setting the :attr:`HexLattice.universes` property. For example, running + this method with num_rings=3 will return the following diagram:: + + (0, 0) + (0,11) (0, 1) + (0,10) (1, 0) (0, 2) + (1, 5) (1, 1) + (0, 9) (2, 0) (0, 3) + (1, 4) (1, 2) + (0, 8) (1, 3) (0, 4) + (0, 7) (0, 5) + (0, 6) + + Parameters + ---------- + num_rings : int + Number of rings in the hexagonal lattice + + Returns + ------- + str + Diagram of the hexagonal lattice showing indices + + """ + + # Find the largest string and count the number of digits so we can + # properly pad the output string later + largest_index = 6*(num_rings - 1) + n_digits_index = len(str(largest_index)) + n_digits_ring = len(str(num_rings - 1)) + str_form = '({{:{}}},{{:{}}})'.format(n_digits_ring, n_digits_index) + pad = ' '*(n_digits_index + n_digits_ring + 3) + + # Initialize the list for each row. + rows = [[] for i in range(1 + 4 * (num_rings-1))] + middle = 2 * (num_rings - 1) + + # Start with the degenerate first ring. + rows[middle] = [str_form.format(num_rings - 1, 0)] + + # Add universes one ring at a time. + for r in range(1, num_rings): + # r_prime increments down while r increments up. + r_prime = num_rings - 1 - r + theta = 0 + y = middle + 2*r + + for i in range(r): + # Climb down the top-right. + rows[y].append(str_form.format(r_prime, theta)) + y -= 1 + theta += 1 + + for i in range(r): + # Climb down the right. + rows[y].append(str_form.format(r_prime, theta)) + y -= 2 + theta += 1 + + for i in range(r): + # Climb down the bottom-right. + rows[y].append(str_form.format(r_prime, theta)) + y -= 1 + theta += 1 + + for i in range(r): + # Climb up the bottom-left. + rows[y].insert(0, str_form.format(r_prime, theta)) + y += 1 + theta += 1 + + for i in range(r): + # Climb up the left. + rows[y].insert(0, str_form.format(r_prime, theta)) + y += 2 + theta += 1 + + for i in range(r): + # Climb up the top-left. + rows[y].insert(0, str_form.format(r_prime, theta)) + y += 1 + theta += 1 + + # Flip the rows and join each row into a single string. + rows = [pad.join(x) for x in rows[::-1]] + + # Pad the beginning of the rows so they line up properly. + for y in range(num_rings - 1): + rows[y] = (num_rings - 1 - y)*pad + rows[y] + rows[-1 - y] = (num_rings - 1 - y)*pad + rows[-1 - y] + + for y in range(num_rings % 2, num_rings, 2): + rows[middle + y] = pad + rows[middle + y] + if y != 0: + rows[middle - y] = pad + rows[middle - y] + + # Join the rows together and return the string. + return '\n'.join(rows) diff --git a/openmc/material.py b/openmc/material.py index 02cbc117d..6b2b07f2d 100644 --- a/openmc/material.py +++ b/openmc/material.py @@ -516,7 +516,7 @@ class Material(object): for nuclide_name in self._nuclides: self._nuclides[nuclide_name][0].scattering = 'iso-in-lab' for element_name in self._elements: - self._element[element_name][0].scattering = 'iso-in-lab' + self._elements[element_name][0].scattering = 'iso-in-lab' def get_all_nuclides(self): """Returns all nuclides in the material diff --git a/openmc/mgxs/library.py b/openmc/mgxs/library.py index baa4d6304..bc643ed3e 100644 --- a/openmc/mgxs/library.py +++ b/openmc/mgxs/library.py @@ -2,6 +2,7 @@ import sys import os import copy import pickle +import warnings from numbers import Integral from collections import OrderedDict from warnings import warn @@ -60,6 +61,8 @@ class Library(object): The spatial domain(s) for which MGXS in the Library are computed correction : {'P0', None} Apply the P0 correction to scattering matrices if set to 'P0' + legendre_order : int + The highest legendre moment in the scattering matrices (default is 0) energy_groups : openmc.mgxs.EnergyGroups Energy group structure for energy condensation tally_trigger : openmc.Trigger @@ -92,8 +95,9 @@ class Library(object): self._mgxs_types = [] self._domain_type = None self._domains = 'all' - self._correction = 'P0' self._energy_groups = None + self._correction = 'P0' + self._legendre_order = 0 self._tally_trigger = None self._all_mgxs = OrderedDict() self._sp_filename = None @@ -121,6 +125,7 @@ class Library(object): clone._domain_type = self.domain_type clone._domains = copy.deepcopy(self.domains) clone._correction = self.correction + clone._legendre_order = self.legendre_order clone._energy_groups = copy.deepcopy(self.energy_groups, memo) clone._tally_trigger = copy.deepcopy(self.tally_trigger, memo) clone._all_mgxs = copy.deepcopy(self.all_mgxs) @@ -188,13 +193,17 @@ class Library(object): else: return self._domains + @property + def energy_groups(self): + return self._energy_groups + @property def correction(self): return self._correction @property - def energy_groups(self): - return self._energy_groups + def legendre_order(self): + return self._legendre_order @property def tally_trigger(self): @@ -283,16 +292,36 @@ class Library(object): self._domains = domains - @correction.setter - def correction(self, correction): - cv.check_value('correction', correction, ('P0', None)) - self._correction = correction - @energy_groups.setter def energy_groups(self, energy_groups): cv.check_type('energy groups', energy_groups, openmc.mgxs.EnergyGroups) self._energy_groups = energy_groups + @correction.setter + def correction(self, correction): + cv.check_value('correction', correction, ('P0', None)) + + if correction == 'P0' and self.legendre_order > 0: + msg = 'The P0 correction will be ignored since the scattering ' \ + 'order {} is greater than zero'.format(self.legendre_order) + warnings.warn(msg) + + self._correction = correction + + @legendre_order.setter + def legendre_order(self, legendre_order): + cv.check_type('legendre_order', legendre_order, Integral) + cv.check_greater_than('legendre_order', legendre_order, 0, equality=True) + cv.check_less_than('legendre_order', legendre_order, 10, equality=True) + + if self.correction == 'P0' and legendre_order > 0: + msg = 'The P0 correction will be ignored since the scattering ' \ + 'order {} is greater than zero'.format(self.legendre_order) + warnings.warn(msg, RuntimeWarning) + self.correction = None + + self._legendre_order = legendre_order + @tally_trigger.setter def tally_trigger(self, tally_trigger): cv.check_type('tally trigger', tally_trigger, openmc.Trigger) @@ -347,6 +376,7 @@ class Library(object): # Specify whether to use a transport ('P0') correction if isinstance(mgxs, openmc.mgxs.ScatterMatrixXS): mgxs.correction = self.correction + mgxs.legendre_order = self.legendre_order self.all_mgxs[domain.id][mgxs_type] = mgxs diff --git a/openmc/mgxs/mgxs.py b/openmc/mgxs/mgxs.py index 7cfec2f54..5be84bb2c 100644 --- a/openmc/mgxs/mgxs.py +++ b/openmc/mgxs/mgxs.py @@ -2,6 +2,7 @@ from __future__ import division from collections import Iterable, OrderedDict from numbers import Integral +import warnings import os import sys import copy @@ -21,6 +22,7 @@ if sys.version_info[0] >= 3: # Supported cross section types MGXS_TYPES = ['total', 'transport', + 'nu-transport', 'absorption', 'capture', 'fission', @@ -88,6 +90,15 @@ class MGXS(object): 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 @@ -113,8 +124,12 @@ class MGXS(object): 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 """ @@ -136,7 +151,9 @@ class MGXS(object): self._rxn_rate_tally = None self._xs_tally = None self._sparse = False + self._loaded_sp = False self._derived = False + self._hdf5_key = None self.name = name self.by_nuclide = by_nuclide @@ -211,18 +228,74 @@ class MGXS(object): def num_groups(self): return self.energy_groups.num_groups + @property + def scores(self): + return ['flux', self.rxn_type] + + @property + def filters(self): + group_edges = self.energy_groups.group_edges + energy_filter = openmc.Filter('energy', group_edges) + return [[energy_filter]] * len(self.scores) + + @property + def tally_keys(self): + return self.scores + + @property + def estimator(self): + return 'tracklength' + @property def tallies(self): + + # Instantiate tallies if they do not exist + if self._tallies is None: + + # Initialize a collection of Tallies + self._tallies = OrderedDict() + + # Create a domain Filter object + domain_filter = openmc.Filter(self.domain_type, self.domain.id) + + # Create each Tally needed to compute the multi group cross section + tally_metadata = zip(self.scores, self.tally_keys, self.filters) + for score, key, filters in tally_metadata: + self._tallies[key] = openmc.Tally(name=self.name) + self._tallies[key].scores = [score] + self._tallies[key].estimator = self.estimator + self._tallies[key].filters = [domain_filter] + + # If a tally trigger was specified, add it to each tally + if self.tally_trigger: + trigger_clone = copy.deepcopy(self.tally_trigger) + trigger_clone.scores = [score] + self._tallies[key].triggers.append(trigger_clone) + + # Add non-domain specific Filters (e.g., 'energy') to the Tally + for add_filter in filters: + self._tallies[key].filters.append(add_filter) + + # 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) + else: + self._tallies[key].nuclides.append('total') + return self._tallies @property def rxn_rate_tally(self): + if self._rxn_rate_tally is None: + self._rxn_rate_tally = self.tallies[self.rxn_type] + self._rxn_rate_tally.sparse = self.sparse + return self._rxn_rate_tally @property def xs_tally(self): - """Computes multi-group cross section using OpenMC tally arithmetic.""" - if self._xs_tally is None: if self.tallies is None: msg = 'Unable to get xs_tally since tallies have ' \ @@ -257,10 +330,21 @@ class MGXS(object): else: return 'sum' + @property + def loaded_sp(self): + return self._loaded_sp + @property def derived(self): return self._derived + @property + def hdf5_key(self): + if self._hdf5_key is not None: + return self._hdf5_key + else: + return self._rxn_type + @name.setter def name(self, name): cv.check_type('name', name, basestring) @@ -281,6 +365,15 @@ class MGXS(object): cv.check_type('domain', domain, tuple(_DOMAINS)) self._domain = domain + # Assign a domain type + if self.domain_type is None: + if isinstance(domain, openmc.Material): + self._domain_type = 'material' + elif isinstance(domain, openmc.Cell): + self._domain_type = 'cell' + elif isinstance(domain, openmc.Universe): + self._domain_type = 'universe' + @domain_type.setter def domain_type(self, domain_type): cv.check_value('domain type', domain_type, DOMAIN_TYPES) @@ -332,7 +425,7 @@ class MGXS(object): Parameters ---------- - mgxs_type : {'total', 'transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'chi'} + mgxs_type : {'total', 'transport', 'nu-transport', 'absorption', 'capture', 'fission', 'nu-fission', 'kappa-fission', 'scatter', 'nu-scatter', 'scatter matrix', 'nu-scatter matrix', 'chi'} The type of multi-group cross section object to return domain : openmc.Material or openmc.Cell or openmc.Universe The domain for spatial homogenization @@ -361,6 +454,8 @@ class MGXS(object): mgxs = TotalXS(domain, domain_type, energy_groups) elif mgxs_type == 'transport': mgxs = TransportXS(domain, domain_type, energy_groups) + elif mgxs_type == 'nu-transport': + mgxs = NuTransportXS(domain, domain_type, energy_groups) elif mgxs_type == 'absorption': mgxs = AbsorptionXS(domain, domain_type, energy_groups) elif mgxs_type == 'capture': @@ -500,63 +595,6 @@ class MGXS(object): return densities - def _create_tallies(self, scores, all_filters, keys, estimator): - """Instantiates tallies needed to compute the multi-group cross section. - - This is a helper method for MGXS subclasses to create tallies - for input file generation. The tallies are stored in the tallies dict. - This method is called by each subclass' tallies property getter - which define the parameters given to this parent class method. - - Parameters - ---------- - scores : Iterable of str - Scores for each tally - all_filters : Iterable of tuple of openmc.Filter - Tuples of non-spatial domain filters for each tally - keys : Iterable of str - Key string used to store each tally in the tallies dictionary - estimator : {'analog', 'tracklength'} - Type of estimator to use for each tally - - """ - - cv.check_iterable_type('scores', scores, basestring) - cv.check_length('scores', scores, len(keys)) - cv.check_iterable_type('filters', all_filters, openmc.Filter, 1, 2) - cv.check_type('keys', keys, Iterable, basestring) - cv.check_value('estimator', estimator, ['analog', 'tracklength']) - - self._tallies = OrderedDict() - - # Create a domain Filter object - domain_filter = openmc.Filter(self.domain_type, self.domain.id) - - # Create each Tally needed to compute the multi group cross section - for score, key, filters in zip(scores, keys, all_filters): - self.tallies[key] = openmc.Tally(name=self.name) - self.tallies[key].scores = [score] - self.tallies[key].estimator = estimator - self.tallies[key].filters = [domain_filter] - - # If a tally trigger was specified, add it to each tally - if self.tally_trigger: - trigger_clone = copy.deepcopy(self.tally_trigger) - trigger_clone.scores = [score] - self.tallies[key].triggers.append(trigger_clone) - - # Add all non-domain specific Filters (e.g., 'energy') to the Tally - for add_filter in filters: - self.tallies[key].filters.append(add_filter) - - # If this is a by-nuclide cross-section, add all 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) - else: - self.tallies[key].nuclides.append('total') - def _compute_xs(self): """Performs generic cleanup after a subclass' uses tally arithmetic to compute a multi-group cross section as a derived tally. @@ -638,9 +676,11 @@ class MGXS(object): filter_bins = [] # Clear any tallies previously loaded from a statepoint - self._tallies = None - self._xs_tally = None - self._rxn_rate_tally = None + if self.loaded_sp: + self._tallies = None + self._xs_tally = None + self._rxn_rate_tally = None + self._loaded_sp = False # Find, slice and store Tallies from StatePoint # The tally slicing is needed if tally merging was used @@ -653,6 +693,8 @@ class MGXS(object): sp_tally.sparse = self.sparse self.tallies[tally_type] = sp_tally + self._loaded_sp = True + def get_xs(self, groups='all', subdomains='all', nuclides='all', xs_type='macro', order_groups='increasing', value='mean', **kwargs): @@ -1247,8 +1289,8 @@ class MGXS(object): else: subdomain_group = domain_group - # Create a separate HDF5 group for the rxn type - rxn_group = subdomain_group.require_group(self.rxn_type) + # Create a separate HDF5 group for this cross section + rxn_group = subdomain_group.require_group(self.hdf5_key) # Create a separate HDF5 group for each nuclide for j, nuclide in enumerate(nuclides): @@ -1435,7 +1477,8 @@ class MGXS(object): df.rename(columns={'energyout low [MeV]': 'group out'}, inplace=True) - out_groups = np.tile(all_groups, df.shape[0] / all_groups.size) + out_groups = np.repeat(all_groups, self.xs_tally.num_scores) + out_groups = np.tile(out_groups, df.shape[0] / out_groups.size) df['group out'] = out_groups del df['energyout high [MeV]'] columns = ['group in', 'group out'] @@ -1479,7 +1522,85 @@ class MGXS(object): class TotalXS(MGXS): - """A total multi-group cross section.""" + """A total 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 cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + 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. + + 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 + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'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. 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, groups=None, by_nuclide=False, name=''): @@ -1487,44 +1608,87 @@ class TotalXS(MGXS): groups, by_nuclide, name) self._rxn_type = 'total' - @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. - - This method constructs two tracklength tallies to compute the 'flux' - and 'total' reaction rates in the spatial domain and energy groups - of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', 'total'] - estimator = 'tracklength' - keys = scores - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - filters = [[energy_filter], [energy_filter]] - - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies - - @property - def rxn_rate_tally(self): - if self._rxn_rate_tally is None : - self._rxn_rate_tally = self.tallies['total'] - self._rxn_rate_tally.sparse = self.sparse - return self._rxn_rate_tally - class TransportXS(MGXS): - """A transport-corrected total multi-group cross section.""" + """A transport-corrected total 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 cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + 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. + + 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 + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'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. 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, groups=None, by_nuclide=False, name=''): @@ -1533,53 +1697,208 @@ class TransportXS(MGXS): self._rxn_type = 'transport' @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. + def scores(self): + return ['flux', 'total', 'scatter-1'] - This method constructs three analog tallies to compute the 'flux', - 'total' and 'scatter-P1' reaction rates in the spatial domain and - energy groups of interest. + @property + def filters(self): + group_edges = self.energy_groups.group_edges + energy_filter = openmc.Filter('energy', group_edges) + energyout_filter = openmc.Filter('energyout', group_edges) + return [[energy_filter], [energy_filter], [energyout_filter]] - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', 'total', 'scatter-P1'] - estimator = 'analog' - keys = scores - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - energyout_filter = openmc.Filter('energyout', group_edges) - filters = [[energy_filter], [energy_filter], [energyout_filter]] - - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies + @property + def estimator(self): + return 'analog' @property def rxn_rate_tally(self): if self._rxn_rate_tally is None: - scatter_p1 = copy.deepcopy(self.tallies['scatter-P1']) - - # Use tally slicing to remove scatter-P0 data from scatter-P1 tally - self.tallies['scatter-P1'] = \ - scatter_p1.get_slice(scores=['scatter-P1']) - - self.tallies['scatter-P1'].filters[-1].type = 'energy' + self.tallies['scatter-1'].filters[-1].type = 'energy' self._rxn_rate_tally = \ - self.tallies['total'] - self.tallies['scatter-P1'] + self.tallies['total'] - self.tallies['scatter-1'] self._rxn_rate_tally.sparse = self.sparse return self._rxn_rate_tally +class NuTransportXS(TransportXS): + """A transport-corrected total multi-group cross section which + accounts for neutron multiplicity in scattering reactions. + + 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. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + 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. + + 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 + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'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. 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, + groups=None, by_nuclide=False, name=''): + super(NuTransportXS, self).__init__(domain, domain_type, + groups, by_nuclide, name) + self._rxn_type = 'nu-transport' + + @property + def scores(self): + return ['flux', 'total', 'nu-scatter-1'] + + @property + def tally_keys(self): + return ['flux', 'total', 'scatter-1'] + + class AbsorptionXS(MGXS): - """An absorption multi-group cross section.""" + """An absorption 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 cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + 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. + + 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 + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'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. 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, groups=None, by_nuclide=False, name=''): @@ -1587,41 +1906,6 @@ class AbsorptionXS(MGXS): groups, by_nuclide, name) self._rxn_type = 'absorption' - @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. - - This method constructs two tracklength tallies to compute the 'flux' - and 'absorption' reaction rates in the spatial domain and energy - groups of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', 'absorption'] - estimator = 'tracklength' - keys = scores - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - filters = [[energy_filter], [energy_filter]] - - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies - - @property - def rxn_rate_tally(self): - if self._rxn_rate_tally is None: - self._rxn_rate_tally = self.tallies['absorption'] - self._rxn_rate_tally.sparse = self.sparse - return self._rxn_rate_tally - class CaptureXS(MGXS): """A capture multi-group cross section. @@ -1631,6 +1915,82 @@ class CaptureXS(MGXS): not only radiative capture, but all forms of neutron disappearance aside from fission (e.g., MT > 100). + 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. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + 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. + + 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 + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'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. 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, @@ -1640,32 +2000,8 @@ class CaptureXS(MGXS): self._rxn_type = 'capture' @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. - - This method constructs two tracklength tallies to compute the 'flux' - and 'capture' reaction rates in the spatial domain and energy - groups of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', 'absorption', 'fission'] - estimator = 'tracklength' - keys = scores - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - filters = [[energy_filter], [energy_filter], [energy_filter]] - - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies + def scores(self): + return ['flux', 'absorption', 'fission'] @property def rxn_rate_tally(self): @@ -1675,83 +2011,351 @@ class CaptureXS(MGXS): self._rxn_rate_tally.sparse = self.sparse return self._rxn_rate_tally -class FissionXSBase(MGXS): - """A fission production multi-group cross section base class - for NuFission and KappaFission + +class FissionXS(MGXS): + """A fission 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 cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + 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. + + 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 + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'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. 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 + """ - # This is an abstract class which cannot be instantiated - __metaclass__ = abc.ABCMeta - - def __init__(self, rxn_type, domain=None, domain_type=None, - groups=None, by_nuclide=False, name=''): - super(FissionXSBase, self).__init__(domain, domain_type, - groups, by_nuclide, name) - self._rxn_type = rxn_type - - @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. - - This method constructs two tracklength tallies to compute the 'flux' - and 'rxn_type' reaction rates in the spatial domain and energy - groups of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', self._rxn_type] - estimator = 'tracklength' - keys = scores - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - filters = [[energy_filter], [energy_filter]] - - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies - - @property - def rxn_rate_tally(self): - if self._rxn_rate_tally is None: - self._rxn_rate_tally = self.tallies[self._rxn_type] - self._rxn_rate_tally.sparse = self.sparse - return self._rxn_rate_tally - - -class FissionXS(FissionXSBase): - """A fission multi-group cross section.""" - def __init__(self, domain=None, domain_type=None, groups=None, by_nuclide=False, name=''): - super(FissionXS, self).__init__('fission', domain, domain_type, + super(FissionXS, self).__init__(domain, domain_type, groups, by_nuclide, name) + self._rxn_type = 'fission' -class NuFissionXS(FissionXSBase): - """A fission production multi-group cross section.""" +class NuFissionXS(MGXS): + """A fission 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 cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + 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. + + 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 + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'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. 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, groups=None, by_nuclide=False, name=''): - super(NuFissionXS, self).__init__('nu-fission', domain, domain_type, + super(NuFissionXS, self).__init__(domain, domain_type, groups, by_nuclide, name) + self._rxn_type = 'nu-fission' -class KappaFissionXS(FissionXSBase): - """A recoverable fission energy production rate multi-group cross section.""" + +class KappaFissionXS(MGXS): + """A recoverable fission energy production rate 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 cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + 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. + + 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 + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'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. 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, groups=None, by_nuclide=False, name=''): - super(KappaFissionXS, self).__init__('kappa-fission', domain, domain_type, + super(KappaFissionXS, self).__init__(domain, domain_type, groups, by_nuclide, name) + self._rxn_type = 'kappa-fission' + class ScatterXS(MGXS): - """A scatter multi-group cross section.""" + """A scatter 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 cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + 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. + + 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 + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'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. 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, groups=None, by_nuclide=False, name=''): @@ -1759,44 +2363,87 @@ class ScatterXS(MGXS): groups, by_nuclide, name) self._rxn_type = 'scatter' - @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. - - This method constructs two tracklength tallies to compute the 'flux' - and 'scatter' reaction rates in the spatial domain and energy - groups of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', 'scatter'] - estimator = 'tracklength' - keys = scores - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - filters = [[energy_filter], [energy_filter]] - - # Intialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies - - @property - def rxn_rate_tally(self): - if self._rxn_rate_tally is None: - self._rxn_rate_tally = self.tallies['scatter'] - self._rxn_rate_tally.sparse = self.sparse - return self._rxn_rate_tally - class NuScatterXS(MGXS): - """A nu-scatter multi-group cross section.""" + """A nu-scatter 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 cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + 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. + + 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 + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'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. 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, groups=None, by_nuclide=False, name=''): @@ -1804,49 +2451,90 @@ class NuScatterXS(MGXS): groups, by_nuclide, name) self._rxn_type = 'nu-scatter' - @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. - - This method constructs two analog tallies to compute the 'flux' - and 'nu-scatter' reaction rates in the spatial domain and energy - groups of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['flux', 'nu-scatter'] - estimator = 'analog' - keys = scores - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy_filter = openmc.Filter('energy', group_edges) - filters = [[energy_filter], [energy_filter]] - - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies - - @property - def rxn_rate_tally(self): - if self._rxn_rate_tally is None: - self._rxn_rate_tally = self.tallies['nu-scatter'] - self._rxn_rate_tally.sparse = self.sparse - return self._rxn_rate_tally - class ScatterMatrixXS(MGXS): - """A scattering matrix multi-group cross section. + """A scattering matrix multi-group cross section for one or more Legendre + moments. + + 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. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + 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. Attributes ---------- correction : 'P0' or None Apply the P0 correction to scattering matrices if set to 'P0' + legendre_order : int + The highest legendre moment in the scattering matrix (default is 0) + 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 + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'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. 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 """ @@ -1854,12 +2542,15 @@ class ScatterMatrixXS(MGXS): groups=None, by_nuclide=False, name=''): super(ScatterMatrixXS, self).__init__(domain, domain_type, groups, by_nuclide, name) - self._rxn_type = 'scatter matrix' + self._rxn_type = 'scatter' self._correction = 'P0' + self._legendre_order = 0 + self._hdf5_key = 'scatter matrix' def __deepcopy__(self, memo): clone = super(ScatterMatrixXS, self).__deepcopy__(memo) clone._correction = self.correction + clone._legendre_order = self.legendre_order return clone @property @@ -1867,52 +2558,56 @@ class ScatterMatrixXS(MGXS): return self._correction @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. + def legendre_order(self): + return self._legendre_order - This method constructs three analog tallies to compute the 'flux', - 'scatter' and 'scatter-P1' reaction rates in the spatial domain and - energy groups of interest. + @property + def scores(self): + scores = ['flux'] - """ + if self.correction == 'P0' and self.legendre_order == 0: + scores += ['{}-0'.format(self.rxn_type), + '{}-1'.format(self.rxn_type)] + else: + scores += ['{}-P{}'.format(self.rxn_type, self.legendre_order)] - # Instantiate tallies if they do not exist - if self._tallies is None: + return scores - group_edges = self.energy_groups.group_edges - energy = openmc.Filter('energy', group_edges) - energyout = openmc.Filter('energyout', group_edges) + @property + def filters(self): + group_edges = self.energy_groups.group_edges + energy = openmc.Filter('energy', group_edges) + energyout = openmc.Filter('energyout', group_edges) - # Create a list of scores for each Tally to be created - if self.correction == 'P0': - scores = ['flux', 'scatter', 'scatter-P1'] - filters = [[energy], [energy, energyout], [energyout]] - else: - scores = ['flux', 'scatter'] - filters = [[energy], [energy, energyout]] + if self.correction == 'P0' and self.legendre_order == 0: + filters = [[energy], [energy, energyout], [energyout]] + else: + filters = [[energy], [energy, energyout]] - estimator = 'analog' - keys = scores + return filters - # Initialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies + @property + def estimator(self): + return 'analog' @property def rxn_rate_tally(self): if self._rxn_rate_tally is None: - # If using P0 correction subtract scatter-P1 from the diagonal - if self.correction == 'P0': - scatter_p1 = self.tallies['scatter-P1'] - scatter_p1 = scatter_p1.get_slice(scores=['scatter-P1']) - energy_filter = self.tallies['scatter'].find_filter('energy') + + # If using P0 correction subtract scatter-1 from the diagonal + if self.correction == 'P0' and self.legendre_order == 0: + scatter_p0 = self.tallies['{}-0'.format(self.rxn_type)] + scatter_p1 = self.tallies['{}-1'.format(self.rxn_type)] + energy_filter = scatter_p0.find_filter('energy') energy_filter = copy.deepcopy(energy_filter) scatter_p1 = scatter_p1.diagonalize_filter(energy_filter) - self._rxn_rate_tally = self.tallies['scatter'] - scatter_p1 + self._rxn_rate_tally = scatter_p0 - scatter_p1 + + # Extract scattering moment reaction rate Tally else: - self._rxn_rate_tally = self.tallies['scatter'] + tally_key = '{}-P{}'.format(self.rxn_type, self.legendre_order) + self._rxn_rate_tally = self.tallies[tally_key] self._rxn_rate_tally.sparse = self.sparse @@ -1921,9 +2616,68 @@ class ScatterMatrixXS(MGXS): @correction.setter def correction(self, correction): cv.check_value('correction', correction, ('P0', None)) + + if correction == 'P0' and self.legendre_order > 0: + msg = 'The P0 correction will be ignored since the scattering ' \ + 'order {} is greater than zero'.format(self.legendre_order) + warnings.warn(msg) + self._correction = correction - def get_slice(self, nuclides=[], in_groups=[], out_groups=[]): + @legendre_order.setter + def legendre_order(self, legendre_order): + cv.check_type('legendre_order', legendre_order, Integral) + cv.check_greater_than('legendre_order', legendre_order, 0, equality=True) + cv.check_less_than('legendre_order', legendre_order, 10, equality=True) + + if self.correction == 'P0' and legendre_order > 0: + msg = 'The P0 correction will be ignored since the scattering ' \ + 'order {} is greater than zero'.format(self.legendre_order) + warnings.warn(msg, RuntimeWarning) + self.correction = None + + self._legendre_order = legendre_order + + def load_from_statepoint(self, statepoint): + """Extracts tallies in an OpenMC StatePoint with the data needed to + compute multi-group cross sections. + + This method is needed to compute cross section data from tallies + in an OpenMC StatePoint object. + + NOTE: The statepoint must first be linked with an OpenMC Summary object. + + Parameters + ---------- + statepoint : openmc.StatePoint + An OpenMC StatePoint object with tally data + + Raises + ------ + ValueError + When this method is called with a statepoint that has not been + linked with a summary object. + + """ + + # Clear any tallies previously loaded from a statepoint + if self.loaded_sp: + self._tallies = None + self._xs_tally = None + self._rxn_rate_tally = None + self._loaded_sp = False + + # Expand scores to match the format in the statepoint + # e.g., "scatter-P2" -> "scatter-0", "scatter-1", "scatter-2" + if self.correction != 'P0' or self.legendre_order != 0: + tally_key = '{}-P{}'.format(self.rxn_type, self.legendre_order) + self.tallies[tally_key].scores = \ + [self.rxn_type + '-{}'.format(i) for i in range(self.legendre_order+1)] + + super(ScatterMatrixXS, self).load_from_statepoint(statepoint) + + def get_slice(self, nuclides=[], in_groups=[], out_groups=[], + legendre_order='same'): """Build a sliced ScatterMatrix for the specified nuclides and energy groups. @@ -1943,6 +2697,12 @@ class ScatterMatrixXS(MGXS): out_groups : list of int A list of outgoing energy group indices starting at 1 for the high energies (e.g., [1, 2, 3]; default is []) + legendre_order : int or 'same' + The highest Legendre moment in the sliced MGXS. If order is 'same' + then the sliced MGXS will have the same Legendre moments as the + original MGXS (default). If order is an integer less than the + original MGXS' order, then only those Legendre moments up to that + order will be included in the sliced MGXS. Returns ------- @@ -1957,6 +2717,20 @@ class ScatterMatrixXS(MGXS): slice_xs._rxn_rate_tally = None slice_xs._xs_tally = None + # Slice the Legendre order if needed + if legendre_order != 'same': + cv.check_type('legendre_order', legendre_order, Integral) + cv.check_less_than('legendre_order', legendre_order, + self.legendre_order, equality=True) + slice_xs.legendre_order = legendre_order + + # Slice the scattering tally + tally_key = '{}-P{}'.format(self.rxn_type, self.legendre_order) + expand_scores = \ + [self.rxn_type + '-{}'.format(i) for i in range(self.legendre_order+1)] + slice_xs.tallies[tally_key] = \ + slice_xs.tallies[tally_key].get_slice(scores=expand_scores) + # Slice outgoing energy groups if needed if len(out_groups) != 0: filter_bins = [] @@ -1976,14 +2750,18 @@ class ScatterMatrixXS(MGXS): return slice_xs 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): - """Returns an array of multi-group cross sections. + subdomains='all', nuclides='all', moment='all', + xs_type='macro', order_groups='increasing', + row_column='inout', value='mean', **kwargs): + 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. + NOTE: The scattering moments are not multiplied by the :math:`(2l+1)/2` + prefactor in the expansion of the scattering source into Legendre + moments in the neutron transport equation. + Parameters ---------- in_groups : Iterable of Integral or 'all' @@ -1997,6 +2775,10 @@ class ScatterMatrixXS(MGXS): 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'. + moment : int or 'all' + The scattering matrix moment to return. All moments will be + returned if the moment is 'all' (default); otherwise, a specific + moment will be returned. xs_type: {'macro', 'micro'} Return the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. @@ -2053,6 +2835,16 @@ class ScatterMatrixXS(MGXS): filters.append('energyout') filter_bins.append((self.energy_groups.get_group_bounds(group),)) + # Construct CrossScore for requested scattering moment + if moment != 'all': + cv.check_type('moment', moment, Integral) + cv.check_greater_than('moment', moment, 0, equality=True) + cv.check_less_than( + 'moment', moment, self.legendre_order, equality=True) + scores = [self.xs_tally.scores[moment]] + else: + scores = [] + # 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']: @@ -2065,10 +2857,10 @@ class ScatterMatrixXS(MGXS): # Use tally summation if user requested the sum for all nuclides if nuclides == 'sum' or nuclides == ['sum']: xs_tally = self.xs_tally.summation(nuclides=query_nuclides) - xs = xs_tally.get_values(filters=filters, + xs = xs_tally.get_values(scores=scores, filters=filters, filter_bins=filter_bins, value=value) else: - xs = self.xs_tally.get_values(filters=filters, + xs = self.xs_tally.get_values(scores=scores, filters=filters, filter_bins=filter_bins, nuclides=query_nuclides, value=value) @@ -2114,7 +2906,77 @@ class ScatterMatrixXS(MGXS): return xs - def print_xs(self, subdomains='all', nuclides='all', xs_type='macro'): + def get_pandas_dataframe(self, groups='all', nuclides='all', moment='all', + xs_type='macro', distribcell_paths=True): + """Build a Pandas DataFrame for the MGXS data. + + This method leverages :meth:`openmc.Tally.get_pandas_dataframe`, but + renames the columns with terminology appropriate for cross section data. + + Parameters + ---------- + groups : Iterable of Integral or 'all' + Energy groups of interest. Defaults to 'all'. + nuclides : Iterable of str or 'all' or 'sum' + 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'. + moment : int or 'all' + The scattering matrix moment to return. All moments will be + returned if the moment is 'all' (default); otherwise, a specific + moment will be returned. + 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. + + Returns + ------- + pandas.DataFrame + A Pandas DataFrame for the cross section data. + + Raises + ------ + ValueError + When this method is called before the multi-group cross section is + computed from tally data. + + """ + + df = super(ScatterMatrixXS, self).get_pandas_dataframe( + groups, nuclides, xs_type, distribcell_paths) + + # Add a moment column to dataframe + 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)) + df['moment'] = moments + + # Place the moment column before the mean column + mean_index = df.columns.get_loc('mean') + columns = df.columns.tolist() + df = df[columns[:mean_index] + ['moment'] + columns[mean_index:-1]] + + # Select rows corresponding to requested scattering moment + if moment != 'all': + cv.check_type('moment', moment, Integral) + cv.check_greater_than('moment', moment, 0, equality=True) + cv.check_less_than( + 'moment', moment, self.legendre_order, equality=True) + df = df[df['moment'] == 'P{}'.format(moment)] + + return df + + def print_xs(self, subdomains='all', nuclides='all', + xs_type='macro', moment=0): """Prints a string representation for the multi-group cross section. Parameters @@ -2131,6 +2993,8 @@ class ScatterMatrixXS(MGXS): xs_type: {'macro', 'micro'} Return the macro or micro cross section in units of cm^-1 or barns. Defaults to 'macro'. + moment : int + The scattering moment to print (default is 0) """ @@ -2155,9 +3019,14 @@ class ScatterMatrixXS(MGXS): cv.check_value('xs_type', xs_type, ['macro', 'micro']) + if self.correction != 'P0': + rxn_type= '{0} (P{1})'.format(self.rxn_type, moment) + else: + rxn_type = self.rxn_type + # Build header for string with type and domain info string = 'Multi-Group XS\n' - string += '{0: <16}=\t{1}\n'.format('\tReaction Type', self.rxn_type) + string += '{0: <16}=\t{1}\n'.format('\tReaction Type', 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) @@ -2202,11 +3071,11 @@ class ScatterMatrixXS(MGXS): string += template.format('', in_group, out_group) average = \ self.get_xs([in_group], [out_group], - [subdomain], [nuclide], + [subdomain], [nuclide], moment=moment, xs_type=xs_type, value='mean') rel_err = \ self.get_xs([in_group], [out_group], - [subdomain], [nuclide], + [subdomain], [nuclide], moment=moment, xs_type=xs_type, value='rel_err') average = average.flatten()[0] rel_err = rel_err.flatten()[0] * 100. @@ -2220,51 +3089,179 @@ class ScatterMatrixXS(MGXS): class NuScatterMatrixXS(ScatterMatrixXS): - """A scattering production matrix multi-group cross section.""" + """A scattering production matrix multi-group cross section for one or + more Legendre moments. + + 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. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + 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. + + Attributes + ---------- + correction : 'P0' or None + Apply the P0 correction to scattering matrices if set to 'P0' + legendre_order : int + The highest legendre moment in the scattering matrix (default is 0) + 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 + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'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. 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, groups=None, by_nuclide=False, name=''): super(NuScatterMatrixXS, self).__init__(domain, domain_type, groups, by_nuclide, name) - self._rxn_type = 'nu-scatter matrix' + self._rxn_type = 'nu-scatter' + self._hdf5_key = 'nu-scatter matrix' - @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. - - This method constructs three analog tallies to compute the 'flux', - 'nu-scatter' and 'scatter-P1' reaction rates in the spatial domain and - energy groups of interest. - - """ - - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create the non-domain specific Filters for the Tallies - group_edges = self.energy_groups.group_edges - energy = openmc.Filter('energy', group_edges) - energyout = openmc.Filter('energyout', group_edges) - - # Create a list of scores for each Tally to be created - if self.correction == 'P0': - scores = ['flux', 'nu-scatter', 'scatter-P1'] - estimator = 'analog' - keys = ['flux', 'scatter', 'scatter-P1'] - filters = [[energy], [energy, energyout], [energyout]] - else: - scores = ['flux', 'nu-scatter'] - estimator = 'analog' - keys = ['flux', 'scatter'] - filters = [[energy], [energy, energyout]] - - # Intialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies class Chi(MGXS): - """The fission spectrum.""" + """The 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 cross sections for deterministic neutronics calculations. + + Parameters + ---------- + domain : openmc.Material or openmc.Cell or openmc.Universe + The domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + 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. + + 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 + Domain for spatial homogenization + domain_type : {'material', 'cell', 'distribcell', 'universe'} + Domain type for spatial homogenization + energy_groups : openmc.mgxs.EnergyGroups + Energy group structure for energy condensation + tally_trigger : openmc.Trigger + An (optional) tally precision trigger given to each tally used to + compute the cross section + scores : list of str + The scores in each tally used to compute the multi-group cross section + filters : list of openmc.Filter + The filters in each tally used to compute the multi-group cross section + tally_keys : list of str + The keys into the tallies dictionary for each tally used to compute + the multi-group cross section + estimator : {'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. 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, groups=None, by_nuclide=False, name=''): @@ -2272,33 +3269,24 @@ class Chi(MGXS): self._rxn_type = 'chi' @property - def tallies(self): - """Construct the OpenMC tallies needed to compute this cross section. + def scores(self): + return ['nu-fission', 'nu-fission'] - This method constructs two analog tallies to compute 'nu-fission' - reaction rates with 'energy' and 'energyout' filters in the spatial - domain and energy groups of interest. + @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]]) + return [[energyin], [energyout]] - """ + @property + def tally_keys(self): + return ['nu-fission-in', 'nu-fission-out'] - # Instantiate tallies if they do not exist - if self._tallies is None: - - # Create a list of scores for each Tally to be created - scores = ['nu-fission', 'nu-fission'] - estimator = 'analog' - keys = ['nu-fission-in', 'nu-fission-out'] - - # 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]]) - filters = [[energyin], [energyout]] - - # Intialize the Tallies - self._create_tallies(scores, filters, keys, estimator) - - return self._tallies + @property + def estimator(self): + return 'analog' @property def rxn_rate_tally(self): @@ -2309,7 +3297,6 @@ class Chi(MGXS): @property def xs_tally(self): - """Computes chi fission spectrum using OpenMC tally arithmetic.""" if self._xs_tally is None: nu_fission_in = self.tallies['nu-fission-in'] diff --git a/openmc/statepoint.py b/openmc/statepoint.py index 19aa3dbaf..d5dd7bc1e 100644 --- a/openmc/statepoint.py +++ b/openmc/statepoint.py @@ -1,6 +1,8 @@ import sys import re import os +import warnings + import numpy as np import openmc diff --git a/openmc/stats/multivariate.py b/openmc/stats/multivariate.py index 4ce34a071..e4eadd7aa 100644 --- a/openmc/stats/multivariate.py +++ b/openmc/stats/multivariate.py @@ -328,8 +328,8 @@ class Point(Spatial): Parameters ---------- - xyz : Iterable of float - Cartesian coordinates of location + xyz : Iterable of float, optional + Cartesian coordinates of location. Defaults to (0., 0., 0.). Attributes ---------- @@ -338,7 +338,7 @@ class Point(Spatial): """ - def __init__(self, xyz): + def __init__(self, xyz=(0., 0., 0.)): super(Point, self).__init__() self.xyz = xyz diff --git a/openmc/summary.py b/openmc/summary.py index 64d591386..6fb6b7000 100644 --- a/openmc/summary.py +++ b/openmc/summary.py @@ -280,7 +280,7 @@ class Summary(object): rotation = \ self._f['geometry/cells'][key]['rotation'][...] rotation = np.asarray(rotation, dtype=np.int) - cell.rotation = rotation + cell._rotation = rotation # Store Cell fill information for after Universe/Lattice creation self._cell_fills[index] = (fill_type, fill) diff --git a/openmc/surface.py b/openmc/surface.py index 37e7c2ffd..52f0955f0 100644 --- a/openmc/surface.py +++ b/openmc/surface.py @@ -2,11 +2,12 @@ from abc import ABCMeta from numbers import Real, Integral from xml.etree import ElementTree as ET import sys +from math import sqrt import numpy as np from openmc.checkvalue import check_type, check_value, check_greater_than -from openmc.region import Region +from openmc.region import Region, Intersection if sys.version_info[0] >= 3: basestring = str @@ -1503,3 +1504,45 @@ class Halfspace(Region): def __str__(self): return '-' + str(self.surface.id) if self.side == '-' \ else str(self.surface.id) + + +def make_hexagon_region(edge_length=1., orientation='y'): + """Create a hexagon region from six surface planes. + + Parameters + ---------- + edge_length : float + Length of a side of the hexagon in cm + orientation : {'x', 'y'} + An 'x' orientation means that two sides of the hexagon are parallel to + the x-axis and a 'y' orientation means that two sides of the hexagon are + parallel to the y-axis. + + Returns + ------- + openmc.Region + The inside of a hexagonal prism + + """ + + l = edge_length + + if orientation == 'y': + right = XPlane(x0=sqrt(3.)/2.*l) + left = XPlane(x0=-sqrt(3.)/2.*l) + c = sqrt(3.)/3. + ur = Plane(A=c, B=1., D=l) # y = -x/sqrt(3) + a + ul = Plane(A=-c, B=1., D=l) # y = x/sqrt(3) + a + lr = Plane(A=-c, B=1., D=-l) # y = x/sqrt(3) - a + ll = Plane(A=c, B=1., D=-l) # y = -x/sqrt(3) - a + return Intersection(-right, +left, -ur, -ul, +lr, +ll) + + elif orientation == 'x': + top = YPlane(y0=sqrt(3.)/2.*l) + bottom = YPlane(y0=-sqrt(3.)/2.*l) + c = sqrt(3.) + ur = Plane(A=c, B=1., D=c*l) # y = -sqrt(3)*(x - a) + lr = Plane(A=-c, B=1., D=-c*l) # y = sqrt(3)*(x + a) + ll = Plane(A=c, B=1., D=-c*l) # y = -sqrt(3)*(x + a) + ul = Plane(A=-c, B=1., D=c*l) # y = sqrt(3)*(x + a) + return Intersection(-top, +bottom, -ur, +lr, +ll, -ul) diff --git a/openmc/tallies.py b/openmc/tallies.py index 96323763a..9559adcad 100644 --- a/openmc/tallies.py +++ b/openmc/tallies.py @@ -1629,7 +1629,7 @@ class Tally(object): for score in self.scores: if isinstance(score, (basestring, CrossScore)): - scores.append(score) + scores.append(str(score)) elif isinstance(score, AggregateScore): scores.append(score.name) column_name = '{0}(score)'.format(score.aggregate_op) diff --git a/src/hdf5_interface.F90 b/src/hdf5_interface.F90 index 01e50d983..ce934baa4 100644 --- a/src/hdf5_interface.F90 +++ b/src/hdf5_interface.F90 @@ -64,14 +64,28 @@ module hdf5_interface module procedure read_tally_result_2D end interface read_dataset + interface read_attribute + module procedure read_attribute_double + module procedure read_attribute_double_1D + module procedure read_attribute_double_2D + module procedure read_attribute_integer + module procedure read_attribute_integer_1D + module procedure read_attribute_integer_2D + module procedure read_attribute_string + end interface read_attribute + public :: write_dataset public :: read_dataset + public :: read_attribute public :: file_create public :: file_open public :: file_close public :: create_group public :: open_group public :: close_group + public :: open_dataset + public :: close_dataset + public :: get_shape public :: write_attribute_string contains @@ -243,6 +257,44 @@ contains end if end subroutine close_group +!=============================================================================== +! OPEN_DATASET opens an existing HDF5 dataset +!=============================================================================== + + function open_dataset(group_id, name) result(dataset_id) + integer(HID_T), intent(in) :: group_id + character(*), intent(in) :: name ! name of dataset + integer(HID_T) :: dataset_id + + logical :: exists ! does the dataset exist + integer :: hdf5_err ! HDF5 error code + + ! Check if group exists + call h5ltpath_valid_f(group_id, trim(name), .true., exists, hdf5_err) + + ! open group if it exists + if (exists) then + call h5dopen_f(group_id, trim(name), dataset_id, hdf5_err) + else + call fatal_error("The dataset '" // trim(name) // "' does not exist.") + end if + end function open_dataset + +!=============================================================================== +! CLOSE_GROUP closes HDF5 temp_group +!=============================================================================== + + subroutine close_dataset(dataset_id) + integer(HID_T), intent(inout) :: dataset_id + + integer :: hdf5_err ! HDF5 error code + + call h5dclose_f(dataset_id, hdf5_err) + if (hdf5_err < 0) then + call fatal_error("Unable to close HDF5 dataset.") + end if + end subroutine close_dataset + !=============================================================================== ! WRITE_DOUBLE writes double precision scalar data !=============================================================================== @@ -293,19 +345,27 @@ contains ! READ_DOUBLE reads double precision scalar data !=============================================================================== - subroutine read_double(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name for data - real(8), intent(inout), target :: buffer ! read data to here - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double(buffer, obj_id, name, indep) + real(8), target, intent(inout) :: buffer + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O - integer :: hdf5_err - integer :: data_xfer_mode + integer :: hdf5_err + integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle - type(c_ptr) :: f_ptr + integer(HID_T) :: dset_id + type(c_ptr) :: f_ptr + + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) + else + dset_id = obj_id + end if ! Set up collective vs. independent I/O data_xfer_mode = H5FD_MPIO_COLLECTIVE_F @@ -313,21 +373,20 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) end if - call h5dclose_f(dset, hdf5_err) + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_double !=============================================================================== @@ -396,35 +455,46 @@ contains ! READ_DOUBLE_1D reads double precision 1-D array data !=============================================================================== - subroutine read_double_1D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name of data - real(8), intent(inout), target :: buffer(:) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double_1D(buffer, obj_id, name, indep) + real(8), target, intent(inout) :: buffer(:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(1) - dims(:) = shape(buffer) - if (present(indep)) then - call read_double_1D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_double_1D_explicit(group_id, dims, name, buffer) + dset_id = obj_id end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_double_1D_explicit(dset_id, dims, buffer, indep) + else + call read_double_1D_explicit(dset_id, dims, buffer) + end if + + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_double_1D - subroutine read_double_1D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(1) - character(*), intent(in) :: name ! name of data - real(8), intent(inout), target :: buffer(dims(1)) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double_1D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(1) + real(8), target, intent(inout) :: buffer(dims(1)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle type(c_ptr) :: f_ptr ! Set up collective vs. independent I/O @@ -433,21 +503,18 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) end if - - call h5dclose_f(dset, hdf5_err) end subroutine read_double_1D_explicit !=============================================================================== @@ -516,35 +583,46 @@ contains ! READ_DOUBLE_2D reads double precision 2-D array data !=============================================================================== - subroutine read_double_2D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name of data - real(8), intent(inout), target :: buffer(:,:) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double_2D(buffer, obj_id, name, indep) + real(8), target, intent(inout) :: buffer(:,:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(2) - dims(:) = shape(buffer) - if (present(indep)) then - call read_double_2D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_double_2D_explicit(group_id, dims, name, buffer) + dset_id = obj_id end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_double_2D_explicit(dset_id, dims, buffer, indep) + else + call read_double_2D_explicit(dset_id, dims, buffer) + end if + + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_double_2D - subroutine read_double_2D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(2) - character(*), intent(in) :: name ! name of data - real(8), intent(inout), target :: buffer(dims(1),dims(2)) - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double_2D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(2) + real(8), target, intent(inout) :: buffer(dims(1),dims(2)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle type(c_ptr) :: f_ptr ! Set up collective vs. independent I/O @@ -553,21 +631,18 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) end if - - call h5dclose_f(dset, hdf5_err) end subroutine read_double_2D_explicit !=============================================================================== @@ -636,35 +711,46 @@ contains ! READ_DOUBLE_3D reads double precision 3-D array data !=============================================================================== - subroutine read_double_3D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name of data - real(8), intent(inout), target :: buffer(:,:,:) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double_3D(buffer, obj_id, name, indep) + real(8), target, intent(inout) :: buffer(:,:,:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(3) - dims(:) = shape(buffer) - if (present(indep)) then - call read_double_3D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_double_3D_explicit(group_id, dims, name, buffer) + dset_id = obj_id end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_double_3D_explicit(dset_id, dims, buffer, indep) + else + call read_double_3D_explicit(dset_id, dims, buffer) + end if + + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_double_3D - subroutine read_double_3D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(3) - character(*), intent(in) :: name ! name of data - real(8), intent(inout), target :: buffer(dims(1),dims(2),dims(3)) - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double_3D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(3) + real(8), target, intent(inout) :: buffer(dims(1),dims(2),dims(3)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle type(c_ptr) :: f_ptr ! Set up collective vs. independent I/O @@ -673,21 +759,18 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) end if - - call h5dclose_f(dset, hdf5_err) end subroutine read_double_3D_explicit !=============================================================================== @@ -756,35 +839,46 @@ contains ! READ_DOUBLE_4D reads double precision 4-D array data !=============================================================================== - subroutine read_double_4D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name of data - real(8), intent(inout), target :: buffer(:,:,:,:) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double_4D(buffer, obj_id, name, indep) + real(8), target, intent(inout) :: buffer(:,:,:,:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(4) - dims(:) = shape(buffer) - if (present(indep)) then - call read_double_4D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_double_4D_explicit(group_id, dims, name, buffer) + dset_id = obj_id end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_double_4D_explicit(dset_id, dims, buffer, indep) + else + call read_double_4D_explicit(dset_id, dims, buffer) + end if + + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_double_4D - subroutine read_double_4D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(4) - character(*), intent(in) :: name ! name of data - real(8), intent(inout), target :: buffer(dims(1),dims(2),dims(3),dims(4)) - logical, intent(in), optional :: indep ! independent I/O + subroutine read_double_4D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(4) + real(8), target, intent(inout) :: buffer(dims(1),dims(2),dims(3),dims(4)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle type(c_ptr) :: f_ptr ! Set up collective vs. independent I/O @@ -793,21 +887,18 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) end if - - call h5dclose_f(dset, hdf5_err) end subroutine read_double_4D_explicit !=============================================================================== @@ -860,19 +951,27 @@ contains ! READ_INTEGER reads integer precision scalar data !=============================================================================== - subroutine read_integer(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name for data - integer, intent(inout), target :: buffer ! read data to here - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer(buffer, obj_id, name, indep) + integer, target, intent(inout) :: buffer + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O - integer :: hdf5_err - integer :: data_xfer_mode + integer :: hdf5_err + integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle - type(c_ptr) :: f_ptr + integer(HID_T) :: dset_id + type(c_ptr) :: f_ptr + + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) + else + dset_id = obj_id + end if ! Set up collective vs. independent I/O data_xfer_mode = H5FD_MPIO_COLLECTIVE_F @@ -880,21 +979,20 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) end if - call h5dclose_f(dset, hdf5_err) + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_integer !=============================================================================== @@ -963,35 +1061,46 @@ contains ! READ_INTEGER_1D reads integer precision 1-D array data !=============================================================================== - subroutine read_integer_1D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name of data - integer, intent(inout), target :: buffer(:) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer_1D(buffer, obj_id, name, indep) + integer, target, intent(inout) :: buffer(:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(1) - dims(:) = shape(buffer) - if (present(indep)) then - call read_integer_1D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_integer_1D_explicit(group_id, dims, name, buffer) + dset_id = obj_id end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_integer_1D_explicit(dset_id, dims, buffer, indep) + else + call read_integer_1D_explicit(dset_id, dims, buffer) + end if + + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_integer_1D - subroutine read_integer_1D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(1) - character(*), intent(in) :: name ! name of data - integer, intent(inout), target :: buffer(dims(1)) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer_1D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(1) + integer, target, intent(inout) :: buffer(dims(1)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle type(c_ptr) :: f_ptr ! Set up collective vs. independent I/O @@ -1000,21 +1109,18 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) end if - - call h5dclose_f(dset, hdf5_err) end subroutine read_integer_1D_explicit !=============================================================================== @@ -1083,35 +1189,46 @@ contains ! READ_INTEGER_2D reads integer precision 2-D array data !=============================================================================== - subroutine read_integer_2D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name of data - integer, intent(inout), target :: buffer(:,:) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer_2D(buffer, obj_id, name, indep) + integer, target, intent(inout) :: buffer(:,:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(2) - dims(:) = shape(buffer) - if (present(indep)) then - call read_integer_2D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_integer_2D_explicit(group_id, dims, name, buffer) + dset_id = obj_id end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_integer_2D_explicit(dset_id, dims, buffer, indep) + else + call read_integer_2D_explicit(dset_id, dims, buffer) + end if + + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_integer_2D - subroutine read_integer_2D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(2) - character(*), intent(in) :: name ! name of data - integer, intent(inout), target :: buffer(dims(1),dims(2)) - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer_2D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(2) + integer, target, intent(inout) :: buffer(dims(1),dims(2)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle type(c_ptr) :: f_ptr ! Set up collective vs. independent I/O @@ -1120,21 +1237,18 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) end if - - call h5dclose_f(dset, hdf5_err) end subroutine read_integer_2D_explicit !=============================================================================== @@ -1203,35 +1317,46 @@ contains ! READ_INTEGER_3D reads integer precision 3-D array data !=============================================================================== - subroutine read_integer_3D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name of data - integer, intent(inout), target :: buffer(:,:,:) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer_3D(buffer, obj_id, name, indep) + integer, target, intent(inout) :: buffer(:,:,:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(3) - dims(:) = shape(buffer) - if (present(indep)) then - call read_integer_3D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_integer_3D_explicit(group_id, dims, name, buffer) + dset_id = obj_id end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_integer_3D_explicit(dset_id, dims, buffer, indep) + else + call read_integer_3D_explicit(dset_id, dims, buffer) + end if + + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_integer_3D - subroutine read_integer_3D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(3) - character(*), intent(in) :: name ! name of data - integer, intent(inout), target :: buffer(dims(1),dims(2),dims(3)) - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer_3D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(3) + integer, target, intent(inout) :: buffer(dims(1),dims(2),dims(3)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle type(c_ptr) :: f_ptr ! Set up collective vs. independent I/O @@ -1240,21 +1365,18 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) end if - - call h5dclose_f(dset, hdf5_err) end subroutine read_integer_3D_explicit !=============================================================================== @@ -1323,35 +1445,46 @@ contains ! READ_INTEGER_4D reads integer precision 4-D array data !=============================================================================== - subroutine read_integer_4D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name of data - integer, intent(inout), target :: buffer(:,:,:,:) ! data to write - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer_4D(buffer, obj_id, name, indep) + integer, target, intent(inout) :: buffer(:,:,:,:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(4) - dims(:) = shape(buffer) - if (present(indep)) then - call read_integer_4D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_integer_4D_explicit(group_id, dims, name, buffer) + dset_id = obj_id end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_integer_4D_explicit(dset_id, dims, buffer, indep) + else + call read_integer_4D_explicit(dset_id, dims, buffer) + end if + + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_integer_4D - subroutine read_integer_4D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(4) - character(*), intent(in) :: name ! name of data - integer, intent(inout), target :: buffer(dims(1),dims(2),dims(3),dims(4)) - logical, intent(in), optional :: indep ! independent I/O + subroutine read_integer_4D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(4) + integer, target, intent(inout) :: buffer(dims(1),dims(2),dims(3),dims(4)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle type(c_ptr) :: f_ptr ! Set up collective vs. independent I/O @@ -1360,21 +1493,18 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + call h5dread_f(dset_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) end if - - call h5dclose_f(dset, hdf5_err) end subroutine read_integer_4D_explicit !=============================================================================== @@ -1427,19 +1557,27 @@ contains ! READ_LONG reads long integer scalar data !=============================================================================== - subroutine read_long(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name for data - integer(8), intent(inout), target :: buffer ! read data to here - logical, intent(in), optional :: indep ! independent I/O + subroutine read_long(buffer, obj_id, name, indep) + integer(8), target, intent(inout) :: buffer + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O - integer :: hdf5_err - integer :: data_xfer_mode + integer :: hdf5_err + integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle - type(c_ptr) :: f_ptr + integer(HID_T) :: dset_id + type(c_ptr) :: f_ptr + + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) + else + dset_id = obj_id + end if ! Set up collective vs. independent I/O data_xfer_mode = H5FD_MPIO_COLLECTIVE_F @@ -1447,21 +1585,20 @@ contains if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - call h5dopen_f(group_id, trim(name), dset, hdf5_err) f_ptr = c_loc(buffer) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, hdf5_integer8_t, f_ptr, hdf5_err, xfer_prp=plist) + call h5dread_f(dset_id, hdf5_integer8_t, f_ptr, hdf5_err, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, hdf5_integer8_t, f_ptr, hdf5_err) + call h5dread_f(dset_id, hdf5_integer8_t, f_ptr, hdf5_err) end if - call h5dclose_f(dset, hdf5_err) + if (present(name)) call h5dclose_f(dset_id, hdf5_err) end subroutine read_long !=============================================================================== @@ -1529,37 +1666,42 @@ contains ! READ_STRING reads string data !=============================================================================== - subroutine read_string(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name ! name for data - character(*), intent(inout), target :: buffer ! read data to here - logical, intent(in), optional :: indep ! independent I/O + subroutine read_string(buffer, obj_id, name, indep) + character(*), target, intent(inout) :: buffer + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle - integer(HID_T) :: dspace ! data or file space handle + integer(HID_T) :: dset_id + integer(HID_T) :: space_id integer(HID_T) :: filetype integer(HID_T) :: memtype integer(SIZE_T) :: size integer(SIZE_T) :: n type(c_ptr) :: f_ptr + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) + else + dset_id = obj_id + end if + ! Set up collective vs. independent I/O data_xfer_mode = H5FD_MPIO_COLLECTIVE_F if (present(indep)) then if (indep) data_xfer_mode = H5FD_MPIO_INDEPENDENT_F end if - ! Get dataset and dataspace - call h5dopen_f(group_id, trim(name), dset, hdf5_err) - call h5dget_space_f(dset, dspace, hdf5_err) + ! Get dataspace + call h5dget_space_f(dset_id, space_id, hdf5_err) ! Make sure buffer is large enough - call h5dget_type_f(dset, filetype, hdf5_err) + call h5dget_type_f(dset_id, filetype, hdf5_err) call h5tget_size_f(filetype, size, hdf5_err) if (size > len(buffer) + 1) then call fatal_error("Character buffer is not long enough to & @@ -1574,20 +1716,21 @@ contains ! Get pointer to start of string f_ptr = c_loc(buffer(1:1)) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, memtype, f_ptr, hdf5_err, mem_space_id=dspace, & - xfer_prp=plist) + call h5dread_f(dset_id, memtype, f_ptr, hdf5_err, & + mem_space_id=space_id, xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, memtype, f_ptr, hdf5_err, mem_space_id=dspace) + call h5dread_f(dset_id, memtype, f_ptr, hdf5_err, mem_space_id=space_id) end if - call h5dclose_f(dset, hdf5_err) - call h5sclose_f(dspace, hdf5_err) + if (present(name)) call h5dclose_f(dset_id, hdf5_err) + + call h5sclose_f(space_id, hdf5_err) call h5tclose_f(filetype, hdf5_err) call h5tclose_f(memtype, hdf5_err) end subroutine read_string @@ -1674,36 +1817,45 @@ contains ! READ_STRING_1D reads string 1-D array data !=============================================================================== - subroutine read_string_1D(group_id, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - character(*), intent(in) :: name - character(*), intent(inout), target :: buffer(:) - logical, intent(in), optional :: indep ! independent I/O + subroutine read_string_1D(buffer, obj_id, name, indep) + character(*), target, intent(inout) :: buffer(:) + integer(HID_T), intent(in) :: obj_id + character(*), optional, intent(in) :: name + logical, optional, intent(in) :: indep ! independent I/O + integer :: hdf5_err + integer(HID_T) :: dset_id integer(HSIZE_T) :: dims(1) - dims(:) = shape(buffer) - if (present(indep)) then - call read_string_1D_explicit(group_id, dims, name, buffer, indep) + ! If 'name' argument is passed, obj_id is interpreted to be a group and + ! 'name' is the name of the dataset we should read from + if (present(name)) then + call h5dopen_f(obj_id, trim(name), dset_id, hdf5_err) else - call read_string_1D_explicit(group_id, dims, name, buffer) + dset_id = obj_id + end if + + dims(:) = shape(buffer) + + if (present(indep)) then + call read_string_1D_explicit(dset_id, dims, buffer, indep) + else + call read_string_1D_explicit(dset_id, dims, buffer) end if end subroutine read_string_1D - subroutine read_string_1D_explicit(group_id, dims, name, buffer, indep) - integer(HID_T), intent(in) :: group_id - integer(HSIZE_T), intent(in) :: dims(1) - character(*), intent(in) :: name - character(*), intent(inout), target :: buffer(dims(1)) - logical, intent(in), optional :: indep ! independent I/O + subroutine read_string_1D_explicit(dset_id, dims, buffer, indep) + integer(HID_T), intent(in) :: dset_id + integer(HSIZE_T), intent(in) :: dims(1) + character(*), target, intent(inout) :: buffer(dims(1)) + logical, optional, intent(in) :: indep ! independent I/O integer :: hdf5_err integer :: data_xfer_mode #ifdef PHDF5 integer(HID_T) :: plist ! property list #endif - integer(HID_T) :: dset ! data set handle - integer(HID_T) :: dspace ! data or file space handle + integer(HID_T) :: space_id integer(HID_T) :: filetype integer(HID_T) :: memtype integer(SIZE_T) :: size @@ -1717,11 +1869,10 @@ contains end if ! Get dataset and dataspace - call h5dopen_f(group_id, trim(name), dset, hdf5_err) - call h5dget_space_f(dset, dspace, hdf5_err) + call h5dget_space_f(dset_id, space_id, hdf5_err) ! Make sure buffer is large enough - call h5dget_type_f(dset, filetype, hdf5_err) + call h5dget_type_f(dset_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 & @@ -1736,20 +1887,19 @@ contains ! Get pointer to start of string f_ptr = c_loc(buffer(1)(1:1)) - if (using_mpio_device(group_id)) then + if (using_mpio_device(dset_id)) then #ifdef PHDF5 call h5pcreate_f(H5P_DATASET_XFER_F, plist, hdf5_err) call h5pset_dxpl_mpio_f(plist, data_xfer_mode, hdf5_err) - call h5dread_f(dset, memtype, f_ptr, hdf5_err, mem_space_id=dspace, & + call h5dread_f(dset_id, memtype, f_ptr, hdf5_err, mem_space_id=space_id, & xfer_prp=plist) call h5pclose_f(plist, hdf5_err) #endif else - call h5dread_f(dset, memtype, f_ptr, hdf5_err, mem_space_id=dspace) + call h5dread_f(dset_id, memtype, f_ptr, hdf5_err, mem_space_id=space_id) end if - call h5dclose_f(dset, hdf5_err) - call h5sclose_f(dspace, hdf5_err) + call h5sclose_f(space_id, hdf5_err) call h5tclose_f(filetype, hdf5_err) call h5tclose_f(memtype, hdf5_err) end subroutine read_string_1D_explicit @@ -1893,6 +2043,254 @@ contains call h5dclose_f(dset, hdf5_err) end subroutine read_tally_result_2D_explicit + subroutine read_attribute_double(buffer, obj_id, name) + real(8), intent(inout), target :: buffer + integer(HID_T), intent(in) :: obj_id + character(*), intent(in) :: name + + integer :: hdf5_err + integer(HID_T) :: attr_id + type(c_ptr) :: f_ptr + + call h5aopen_f(obj_id, trim(name), attr_id, hdf5_err) + f_ptr = c_loc(buffer) + call h5aread_f(attr_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + call h5aclose_f(attr_id, hdf5_err) + end subroutine read_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 + 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_double_1D_explicit(attr_id, dims, buffer) + call h5aclose_f(attr_id, hdf5_err) + end subroutine read_attribute_double_1D + + subroutine read_attribute_double_1D_explicit(attr_id, dims, buffer) + integer(HID_T), intent(in) :: attr_id + integer(HSIZE_T), intent(in) :: dims(1) + real(8), target, intent(inout) :: buffer(dims(1)) + + integer :: hdf5_err + type(c_ptr) :: f_ptr + + f_ptr = c_loc(buffer) + call h5aread_f(attr_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + end subroutine read_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 + character(*), intent(in) :: name + + integer :: hdf5_err + integer(HID_T) :: space_id + integer(HID_T) :: attr_id + integer(HSIZE_T) :: dims(2) + integer(HSIZE_T) :: maxdims(2) + + 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), dims(2))) + call h5sclose_f(space_id, hdf5_err) + end if + + call read_attribute_double_2D_explicit(attr_id, dims, buffer) + call h5aclose_f(attr_id, hdf5_err) + end subroutine read_attribute_double_2D + + subroutine read_attribute_double_2D_explicit(attr_id, dims, buffer) + integer(HID_T), intent(in) :: attr_id + integer(HSIZE_T), intent(in) :: dims(2) + real(8), target, intent(inout) :: buffer(dims(1),dims(2)) + + integer :: hdf5_err + type(c_ptr) :: f_ptr + + f_ptr = c_loc(buffer) + call h5aread_f(attr_id, H5T_NATIVE_DOUBLE, f_ptr, hdf5_err) + end subroutine read_attribute_double_2D_explicit + + subroutine read_attribute_integer(buffer, obj_id, name) + integer, intent(inout), target :: buffer + integer(HID_T), intent(in) :: obj_id + character(*), intent(in) :: name + + integer :: hdf5_err + integer(HID_T) :: attr_id + type(c_ptr) :: f_ptr + + call h5aopen_f(obj_id, trim(name), attr_id, hdf5_err) + f_ptr = c_loc(buffer) + call h5aread_f(attr_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + call h5aclose_f(attr_id, hdf5_err) + end subroutine read_attribute_integer + + subroutine read_attribute_integer_1D(buffer, obj_id, name) + integer, 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_integer_1D_explicit(attr_id, dims, buffer) + call h5aclose_f(attr_id, hdf5_err) + end subroutine read_attribute_integer_1D + + subroutine read_attribute_integer_1D_explicit(attr_id, dims, buffer) + integer(HID_T), intent(in) :: attr_id + integer(HSIZE_T), intent(in) :: dims(1) + integer, target, intent(inout) :: buffer(dims(1)) + + integer :: hdf5_err + type(c_ptr) :: f_ptr + + f_ptr = c_loc(buffer) + call h5aread_f(attr_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + end subroutine read_attribute_integer_1D_explicit + + subroutine read_attribute_integer_2D(buffer, obj_id, name) + integer, 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(2) + integer(HSIZE_T) :: maxdims(2) + + 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), dims(2))) + call h5sclose_f(space_id, hdf5_err) + end if + + call read_attribute_integer_2D_explicit(attr_id, dims, buffer) + call h5aclose_f(attr_id, hdf5_err) + end subroutine read_attribute_integer_2D + + subroutine read_attribute_integer_2D_explicit(attr_id, dims, buffer) + integer(HID_T), intent(in) :: attr_id + integer(HSIZE_T), intent(in) :: dims(2) + integer, target, intent(inout) :: buffer(dims(1),dims(2)) + + integer :: hdf5_err + type(c_ptr) :: f_ptr + + f_ptr = c_loc(buffer) + call h5aread_f(attr_id, H5T_NATIVE_INTEGER, f_ptr, hdf5_err) + end subroutine read_attribute_integer_2D_explicit + + subroutine read_attribute_string(buffer, obj_id, name) + character(*), intent(inout), target :: buffer ! read data to here + integer(HID_T), intent(in) :: obj_id + character(*), intent(in) :: name ! name for data + + integer :: hdf5_err + integer(HID_T) :: attr_id ! data set handle + integer(HID_T) :: filetype + integer(HID_T) :: memtype + integer(SIZE_T) :: i + integer(SIZE_T) :: size + character(kind=C_CHAR), allocatable, target :: temp_buffer(:) + type(c_ptr) :: f_ptr + + ! Get dataset and dataspace + call h5aopen_f(obj_id, trim(name), attr_id, hdf5_err) + + ! Make sure buffer is large enough + call h5aget_type_f(attr_id, filetype, hdf5_err) + call h5tget_size_f(filetype, size, hdf5_err) + allocate(temp_buffer(size)) + if (size > len(buffer)) then + call fatal_error("Character buffer is not long enough to & + &read HDF5 string.") + end if + + ! Get datatype in memory based on Fortran character + call h5tcopy_f(H5T_C_S1, memtype, hdf5_err) + call h5tset_size_f(memtype, size + 1, hdf5_err) + + ! Get pointer to start of string + f_ptr = c_loc(temp_buffer(1)) + + call h5aread_f(attr_id, memtype, f_ptr, hdf5_err) + buffer = '' + do i = 1, size + buffer(i:i) = temp_buffer(i) + end do + deallocate(temp_buffer) + + call h5aclose_f(attr_id, hdf5_err) + call h5tclose_f(filetype, hdf5_err) + call h5tclose_f(memtype, hdf5_err) + end subroutine read_attribute_string + + subroutine get_shape(obj_id, dims) + integer(HID_T), intent(in) :: obj_id + integer(HSIZE_T), intent(out) :: dims(:) + + integer :: hdf5_err + integer :: type + integer(HID_T) :: space_id + integer(HSIZE_T) :: maxdims(size(dims)) + + call h5iget_type_f(obj_id, type, hdf5_err) + if (type == H5I_DATASET_F) then + call h5dget_space_f(obj_id, space_id, hdf5_err) + call h5sget_simple_extent_dims_f(space_id, dims, maxdims, hdf5_err) + call h5sclose_f(space_id, hdf5_err) + elseif (type == H5I_ATTR_F) then + call h5aget_space_f(obj_id, space_id, hdf5_err) + call h5sget_simple_extent_dims_f(space_id, dims, maxdims, hdf5_err) + call h5sclose_f(space_id, hdf5_err) + end if + end subroutine get_shape + function using_mpio_device(obj_id) result(mpio) integer(HID_T), intent(in) :: obj_id logical :: mpio diff --git a/src/initialize.F90 b/src/initialize.F90 index 09bedb138..8c4eabbc1 100644 --- a/src/initialize.F90 +++ b/src/initialize.F90 @@ -375,7 +375,7 @@ contains ! Check what type of file this is file_id = file_open(argv(i), 'r', parallel=.true.) - call read_dataset(file_id, 'filetype', filetype) + call read_dataset(filetype, file_id, 'filetype') call file_close(file_id) ! Set path and flag for type of run @@ -401,7 +401,7 @@ contains ! Check file type is a source file file_id = file_open(argv(i), 'r', parallel=.true.) - call read_dataset(file_id, 'filetype', filetype) + call read_dataset(filetype, file_id, 'filetype') call file_close(file_id) if (filetype /= 'source') then call fatal_error("Second file after restart flag must be a & diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 24986be87..822b2084e 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -3359,28 +3359,14 @@ contains end if case ('scatter-n') - if (n_order == 0) then - t % score_bins(j) = SCORE_SCATTER - else - t % score_bins(j) = SCORE_SCATTER_N - ! Set tally estimator to analog - t % estimator = ESTIMATOR_ANALOG - end if + t % score_bins(j) = SCORE_SCATTER_N t % moment_order(j) = n_order + t % estimator = ESTIMATOR_ANALOG case ('nu-scatter-n') - if (n_order == 0) then - t % score_bins(j) = SCORE_NU_SCATTER - else - t % score_bins(j) = SCORE_NU_SCATTER_N - ! Set tally estimator to analog for CE mode - ! (MG mode has all data available without a collision being - ! necessary) - if (run_CE) then - t % estimator = ESTIMATOR_ANALOG - end if - end if + t % score_bins(j) = SCORE_NU_SCATTER_N t % moment_order(j) = n_order + t % estimator = ESTIMATOR_ANALOG case ('scatter-pn') t % estimator = ESTIMATOR_ANALOG diff --git a/src/particle_restart.F90 b/src/particle_restart.F90 index 9d49a4f97..e5cca17bf 100644 --- a/src/particle_restart.F90 +++ b/src/particle_restart.F90 @@ -34,7 +34,7 @@ contains verbosity = 10 ! Initialize the particle to be tracked - call p%initialize() + call p % initialize() ! Read in the restart information call read_particle_restart(p, previous_run_mode) @@ -46,9 +46,9 @@ contains select case (previous_run_mode) case (MODE_EIGENVALUE) particle_seed = ((current_batch - 1)*gen_per_batch + & - current_gen - 1)*n_particles + p%id + current_gen - 1)*n_particles + p % id case (MODE_FIXEDSOURCE) - particle_seed = p%id + particle_seed = p % id end select call set_particle_seed(particle_seed) @@ -71,7 +71,7 @@ contains integer :: int_scalar integer(HID_T) :: file_id - character(MAX_WORD_LEN) :: mode + character(MAX_WORD_LEN) :: tempstr ! Write meessage call write_message("Loading particle restart file " & @@ -81,32 +81,32 @@ contains file_id = file_open(path_particle_restart, 'r') ! Read data from file - call read_dataset(file_id, 'filetype', int_scalar) - call read_dataset(file_id, 'revision', int_scalar) - call read_dataset(file_id, 'current_batch', current_batch) - call read_dataset(file_id, 'gen_per_batch', gen_per_batch) - call read_dataset(file_id, 'current_gen', current_gen) - call read_dataset(file_id, 'n_particles', n_particles) - call read_dataset(file_id, 'run_mode', mode) - select case (mode) + call read_dataset(tempstr, file_id, 'filetype') + call read_dataset(int_scalar, file_id, 'revision') + call read_dataset(current_batch, file_id, 'current_batch') + call read_dataset(gen_per_batch, file_id, 'gen_per_batch') + call read_dataset(current_gen, file_id, 'current_gen') + call read_dataset(n_particles, file_id, 'n_particles') + call read_dataset(tempstr, file_id, 'run_mode') + select case (tempstr) case ('k-eigenvalue') previous_run_mode = MODE_EIGENVALUE case ('fixed source') previous_run_mode = MODE_FIXEDSOURCE end select - call read_dataset(file_id, 'id', p%id) - call read_dataset(file_id, 'weight', p%wgt) - call read_dataset(file_id, 'energy', p%E) - call read_dataset(file_id, 'energy_group', p%g) - call read_dataset(file_id, 'xyz', p%coord(1)%xyz) - call read_dataset(file_id, 'uvw', p%coord(1)%uvw) + call read_dataset(p % id, file_id, 'id') + call read_dataset(p % wgt, file_id, 'weight') + call read_dataset(p % E, file_id, 'energy') + call read_dataset(p % g, file_id, 'energy_group') + call read_dataset(p % coord(1) % xyz, file_id, 'xyz') + call read_dataset(p % coord(1) % uvw, file_id, 'uvw') ! Set particle last attributes - p%last_wgt = p%wgt - p%last_xyz = p%coord(1)%xyz - p%last_uvw = p%coord(1)%uvw - p%last_E = p%E - p%last_g = p%g + p % last_wgt = p % wgt + p % last_xyz = p % coord(1)%xyz + p % last_uvw = p % coord(1)%uvw + p % last_E = p % E + p % last_g = p % g ! Close hdf5 file call file_close(file_id) diff --git a/src/source.F90 b/src/source.F90 index ad565c95c..194c8c6ad 100644 --- a/src/source.F90 +++ b/src/source.F90 @@ -53,7 +53,7 @@ contains file_id = file_open(path_source, 'r', parallel=.true.) ! Read the file type - call read_dataset(file_id, "filetype", filetype) + call read_dataset(filetype, file_id, "filetype") ! Check to make sure this is a source file if (filetype /= 'source') then diff --git a/src/state_point.F90 b/src/state_point.F90 index cbd6c017a..f37950134 100644 --- a/src/state_point.F90 +++ b/src/state_point.F90 @@ -334,11 +334,11 @@ contains MOMENT_LOOP: do j = 1, tally % n_user_score_bins select case(tally % score_bins(k)) case (SCORE_SCATTER_N, SCORE_NU_SCATTER_N) - str_array(k) = 'P' // trim(to_str(tally % moment_order(k))) + str_array(k) = trim(to_str(tally % moment_order(k))) k = k + 1 case (SCORE_SCATTER_PN, SCORE_NU_SCATTER_PN) do n_order = 0, tally % moment_order(k) - str_array(k) = 'P' // trim(to_str(n_order)) + str_array(k) = trim(to_str(n_order)) k = k + 1 end do case (SCORE_SCATTER_YN, SCORE_NU_SCATTER_YN, SCORE_FLUX_YN, & @@ -703,25 +703,25 @@ contains file_id = file_open(path_state_point, 'r', parallel=.true.) ! Read filetype - call read_dataset(file_id, "filetype", word) + call read_dataset(word, file_id, "filetype") if (word /= 'statepoint') then call fatal_error("OpenMC tried to restart from a non-statepoint file.") end if ! Read revision number for state point file and make sure it matches with ! current version - call read_dataset(file_id, "revision", int_array(1)) + call read_dataset(int_array(1), file_id, "revision") if (int_array(1) /= REVISION_STATEPOINT) then call fatal_error("State point version does not match current version & &in OpenMC.") end if ! Read and overwrite random number seed - call read_dataset(file_id, "seed", seed) + call read_dataset(seed, file_id, "seed") ! It is not impossible for a state point to be generated from a CE run but ! to be loaded in to an MG run (or vice versa), check to prevent that. - call read_dataset(file_id, "run_CE", sp_run_CE) + call read_dataset(sp_run_CE, file_id, "run_CE") if (sp_run_CE == 0 .and. run_CE) then call fatal_error("State point file is from multi-group run but & & current run is continous-energy!") @@ -731,24 +731,24 @@ contains end if ! Read and overwrite run information except number of batches - call read_dataset(file_id, "run_mode", word) + call read_dataset(word, file_id, "run_mode") select case(word) case ('fixed source') run_mode = MODE_FIXEDSOURCE case ('k-eigenvalue') run_mode = MODE_EIGENVALUE end select - call read_dataset(file_id, "n_particles", n_particles) - call read_dataset(file_id, "n_batches", int_array(1)) + call read_dataset(n_particles, file_id, "n_particles") + call read_dataset(int_array(1), file_id, "n_batches") ! Take maximum of statepoint n_batches and input n_batches n_batches = max(n_batches, int_array(1)) ! Read batch number to restart at - call read_dataset(file_id, "current_batch", restart_batch) + call read_dataset(restart_batch, file_id, "current_batch") ! Check for source in statepoint if needed - call read_dataset(file_id, "source_present", int_array(1)) + call read_dataset(int_array(1), file_id, "source_present") if (int_array(1) == 1) then source_present = .true. else @@ -762,37 +762,37 @@ contains ! Read information specific to eigenvalue run if (run_mode == MODE_EIGENVALUE) then - call read_dataset(file_id, "n_inactive", int_array(1)) - call read_dataset(file_id, "gen_per_batch", gen_per_batch) - call read_dataset(file_id, "k_generation", & - k_generation(1:restart_batch*gen_per_batch)) - call read_dataset(file_id, "entropy", & - entropy(1:restart_batch*gen_per_batch)) - call read_dataset(file_id, "k_col_abs", k_col_abs) - call read_dataset(file_id, "k_col_tra", k_col_tra) - call read_dataset(file_id, "k_abs_tra", k_abs_tra) - call read_dataset(file_id, "k_combined", real_array(1:2)) + call read_dataset(int_array(1), file_id, "n_inactive") + call read_dataset(gen_per_batch, file_id, "gen_per_batch") + call read_dataset(k_generation(1:restart_batch*gen_per_batch), & + file_id, "k_generation") + call read_dataset(entropy(1:restart_batch*gen_per_batch), & + file_id, "entropy") + call read_dataset(k_col_abs, file_id, "k_col_abs") + call read_dataset(k_col_tra, file_id, "k_col_tra") + call read_dataset(k_abs_tra, file_id, "k_abs_tra") + call read_dataset(real_array(1:2), file_id, "k_combined") ! Take maximum of statepoint n_inactive and input n_inactive n_inactive = max(n_inactive, int_array(1)) ! Read in to see if CMFD was on - call read_dataset(file_id, "cmfd_on", int_array(1)) + call read_dataset(int_array(1), file_id, "cmfd_on") ! Read in CMFD info if (int_array(1) == 1) then cmfd_group = open_group(file_id, "cmfd") - call read_dataset(cmfd_group, "indices", cmfd%indices) - call read_dataset(cmfd_group, "k_cmfd", cmfd%k_cmfd(1:restart_batch)) - call read_dataset(cmfd_group, "cmfd_src", cmfd%cmfd_src) - call read_dataset(cmfd_group, "cmfd_entropy", & - cmfd%entropy(1:restart_batch)) - call read_dataset(cmfd_group, "cmfd_balance", & - cmfd%balance(1:restart_batch)) - call read_dataset(cmfd_group, "cmfd_dominance", & - cmfd%dom(1:restart_batch)) - call read_dataset(cmfd_group, "cmfd_srccmp", & - cmfd%src_cmp(1:restart_batch)) + call read_dataset(cmfd % indices, cmfd_group, "indices") + call read_dataset(cmfd % k_cmfd(1:restart_batch), cmfd_group, "k_cmfd") + call read_dataset(cmfd % cmfd_src, cmfd_group, "cmfd_src") + call read_dataset(cmfd % entropy(1:restart_batch), cmfd_group, & + "cmfd_entropy") + call read_dataset(cmfd % balance(1:restart_batch), cmfd_group, & + "cmfd_balance") + call read_dataset(cmfd % dom(1:restart_batch), cmfd_group, & + "cmfd_dominance") + call read_dataset(cmfd % src_cmp(1:restart_batch), cmfd_group, & + "cmfd_srccmp") call close_group(cmfd_group) end if end if @@ -812,14 +812,14 @@ contains #endif ! Read number of realizations for global tallies - call read_dataset(file_id, "n_realizations", n_realizations, indep=.true.) + call read_dataset(n_realizations, file_id, "n_realizations", indep=.true.) ! Read global tally data call read_dataset(file_id, "global_tallies", global_tallies) ! Check if tally results are present tallies_group = open_group(file_id, "tallies") - call read_dataset(tallies_group, "tallies_present", int_array(1), & + call read_dataset(int_array(1), tallies_group, "tallies_present", & indep=.true.) ! Read in sum and sum squared @@ -832,8 +832,8 @@ contains tally_group = open_group(tallies_group, "tally " // & trim(to_str(tally % id))) call read_dataset(tally_group, "results", tally % results) - call read_dataset(tally_group, "n_realizations", & - tally % n_realizations) + call read_dataset(tally % n_realizations, tally_group, & + "n_realizations") call close_group(tally_group) end do TALLY_RESULTS end if @@ -859,7 +859,7 @@ contains file_id = file_open(path_source_point, 'r', parallel=.true.) ! Read file type - call read_dataset(file_id, "filetype", int_array(1)) + call read_dataset(int_array(1), file_id, "filetype") end if diff --git a/tests/test_mgxs_library_condense/inputs_true.dat b/tests/test_mgxs_library_condense/inputs_true.dat index 51fc95c60..3643c9a2e 100644 --- a/tests/test_mgxs_library_condense/inputs_true.dat +++ b/tests/test_mgxs_library_condense/inputs_true.dat @@ -1 +1 @@ -3e7b4ee62e0a53b92d4241f33493786532934f20ebcf47d92825bb1ee2f67c52aa8e7832cf28a9911221f802da205fba2b23c7228899780089da69e21042743c \ No newline at end of file +104e7fb527770ac5d3fc636da7716e8fb05d55761253d30516c899f466e6b38ffd881611a3d0cdf65c6af058c32f6f6758c68782be7a170d21024bdae751862f \ 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 438215372..184be68bf 100644 --- a/tests/test_mgxs_library_condense/results_true.dat +++ b/tests/test_mgxs_library_condense/results_true.dat @@ -1,49 +1,85 @@ material group in nuclide mean std. dev. 0 1 1 total 0.412084 0.02359 material group in nuclide mean std. dev. -0 1 1 total 0.076425 0.003691 material group in group out nuclide mean std. dev. -0 1 1 1 total 0.345643 0.021487 material group out nuclide mean std. dev. +0 1 1 total 0.076425 0.003691 material group in group out nuclide moment mean std. dev. +0 1 1 1 total P0 0.384780 0.022253 +1 1 1 1 total P1 0.039277 0.004308 +2 1 1 1 total P2 0.017574 0.002402 +3 1 1 1 total P3 0.012203 0.002164 material group out nuclide mean std. dev. 0 1 1 total 1.0 0.055333 material group in nuclide mean std. dev. 0 2 1 total 0.241262 0.00841 material group in nuclide mean std. dev. -0 2 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 2 1 1 total 0.241262 0.00841 material group out nuclide mean std. dev. +0 2 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 2 1 1 total P0 0.272369 0.006872 +1 2 1 1 total P1 0.031107 0.005483 +2 2 1 1 total P2 0.025999 0.006151 +3 2 1 1 total P3 0.003219 0.003312 material group out nuclide mean std. dev. 0 2 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 3 1 total 0.400028 0.034667 material group in nuclide mean std. dev. -0 3 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 3 1 1 total 0.393462 0.033646 material group out nuclide mean std. dev. +0 3 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 3 1 1 total P0 0.794999 0.036548 +1 3 1 1 total P1 0.401537 0.016175 +2 3 1 1 total P2 0.143623 0.008719 +3 3 1 1 total P3 0.001991 0.004433 material group out nuclide mean std. dev. 0 3 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 4 1 total 0.377402 0.072937 material group in nuclide mean std. dev. -0 4 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 4 1 1 total 0.371473 0.071226 material group out nuclide mean std. dev. +0 4 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 4 1 1 total P0 0.727311 0.080096 +1 4 1 1 total P1 0.355839 0.037901 +2 4 1 1 total P2 0.124483 0.015823 +3 4 1 1 total P3 0.012168 0.006224 material group out nuclide mean std. dev. 0 4 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 5 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 5 1 1 total 0.0 0.0 material group out nuclide mean std. dev. +0 5 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 5 1 1 total P0 0.0 0.0 +1 5 1 1 total P1 0.0 0.0 +2 5 1 1 total P2 0.0 0.0 +3 5 1 1 total P3 0.0 0.0 material group out nuclide mean std. dev. 0 5 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 6 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 6 1 1 total 0.0 0.0 material group out nuclide mean std. dev. +0 6 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 6 1 1 total P0 0.0 0.0 +1 6 1 1 total P1 0.0 0.0 +2 6 1 1 total P2 0.0 0.0 +3 6 1 1 total P3 0.0 0.0 material group out nuclide mean std. dev. 0 6 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 7 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 7 1 1 total 0.0 0.0 material group out nuclide mean std. dev. +0 7 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 7 1 1 total P0 0.0 0.0 +1 7 1 1 total P1 0.0 0.0 +2 7 1 1 total P2 0.0 0.0 +3 7 1 1 total P3 0.0 0.0 material group out nuclide mean std. dev. 0 7 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. -0 8 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 8 1 1 total 0.0 0.0 material group out nuclide mean std. dev. +0 8 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 8 1 1 total P0 0.0 0.0 +1 8 1 1 total P1 0.0 0.0 +2 8 1 1 total P2 0.0 0.0 +3 8 1 1 total P3 0.0 0.0 material group out nuclide mean std. dev. 0 8 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 9 1 total 0.600536 0.748875 material group in nuclide mean std. dev. -0 9 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 9 1 1 total 0.600536 0.748875 material group out nuclide mean std. dev. +0 9 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 9 1 1 total P0 0.720380 0.771015 +1 9 1 1 total P1 0.119844 0.184691 +2 9 1 1 total P2 0.038522 0.064485 +3 9 1 1 total P3 0.056023 0.050595 material group out nuclide mean std. dev. 0 9 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 10 1 total 0.235515 0.613974 material group in nuclide mean std. dev. -0 10 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 10 1 1 total 0.235515 0.613974 material group out nuclide mean std. dev. +0 10 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 10 1 1 total P0 0.501009 0.708534 +1 10 1 1 total P1 0.265494 0.375465 +2 10 1 1 total P2 0.141979 0.200788 +3 10 1 1 total P3 0.074258 0.105017 material group out nuclide mean std. dev. 0 10 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 11 1 total 0.510145 0.741941 material group in nuclide mean std. dev. -0 11 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 11 1 1 total 0.491857 0.715554 material group out nuclide mean std. dev. +0 11 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 11 1 1 total P0 0.804661 0.817658 +1 11 1 1 total P1 0.312803 0.315315 +2 11 1 1 total P2 0.168113 0.172935 +3 11 1 1 total P3 0.003808 0.037911 material group out nuclide mean std. dev. 0 11 1 total 0.0 0.0 material group in nuclide mean std. dev. 0 12 1 total 0.73836 0.825631 material group in nuclide mean std. dev. -0 12 1 total 0.0 0.0 material group in group out nuclide mean std. dev. -0 12 1 1 total 0.723265 0.808231 material group out nuclide mean std. dev. +0 12 1 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +0 12 1 1 total P0 0.943429 0.856119 +1 12 1 1 total P1 0.220164 0.163180 +2 12 1 1 total P2 0.052884 0.042440 +3 12 1 1 total P3 0.039939 0.032867 material group out nuclide mean std. dev. 0 12 1 total 0.0 0.0 \ No newline at end of file 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 3ca98904f..561232b22 100644 --- a/tests/test_mgxs_library_condense/test_mgxs_library_condense.py +++ b/tests/test_mgxs_library_condense/test_mgxs_library_condense.py @@ -28,6 +28,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi'] self.mgxs_lib.energy_groups = energy_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 78ffa3faf..21927c800 100644 --- a/tests/test_mgxs_library_distribcell/inputs_true.dat +++ b/tests/test_mgxs_library_distribcell/inputs_true.dat @@ -1 +1 @@ -2c078f650fed5fc241f42b2d7404fb7fae59d782102fad66b4cd2c8a4b1f266d64e8ce1ec0556117c2a2b1fe49aa583f340dc43df3ddc9320557aa97bb554c05 \ No newline at end of file +018bbbc2099f7b94180b391e46e42fc9a82498c60b3f8f7f4c91480ea373427932d287fe571d53b2397f329e71485e7155d7644f0f995bbcb458ba3e872ab043 \ 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 0d5c7c7b4..fa55249d1 100644 --- a/tests/test_mgxs_library_distribcell/results_true.dat +++ b/tests/test_mgxs_library_distribcell/results_true.dat @@ -1,5 +1,8 @@ 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 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 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.695166 0.510606 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 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 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 \ No newline at end of file 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 d488e8ec9..32f5ea1bd 100644 --- a/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py +++ b/tests/test_mgxs_library_distribcell/test_mgxs_library_distribcell.py @@ -29,6 +29,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi'] self.mgxs_lib.energy_groups = energy_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]] diff --git a/tests/test_mgxs_library_hdf5/inputs_true.dat b/tests/test_mgxs_library_hdf5/inputs_true.dat index 51fc95c60..3643c9a2e 100644 --- a/tests/test_mgxs_library_hdf5/inputs_true.dat +++ b/tests/test_mgxs_library_hdf5/inputs_true.dat @@ -1 +1 @@ -3e7b4ee62e0a53b92d4241f33493786532934f20ebcf47d92825bb1ee2f67c52aa8e7832cf28a9911221f802da205fba2b23c7228899780089da69e21042743c \ No newline at end of file +104e7fb527770ac5d3fc636da7716e8fb05d55761253d30516c899f466e6b38ffd881611a3d0cdf65c6af058c32f6f6758c68782be7a170d21024bdae751862f \ 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 e19b9ffa5..3cae57747 100644 --- a/tests/test_mgxs_library_hdf5/results_true.dat +++ b/tests/test_mgxs_library_hdf5/results_true.dat @@ -5,10 +5,16 @@ domain=1 type=nu-fission [ 0.02178897 0.71407658] [ 0.00118187 0.04055185] domain=1 type=nu-scatter matrix -[[ 0.3373971 0.00155945] - [ 0. 0.42205129]] -[[ 0.02303884 0.00051015] - [ 0. 0.02161702]] +[[[ 3.81546297e-01 4.43012537e-02 2.06462886e-02 1.36952959e-02] + [ 1.55945353e-03 -5.97269486e-04 -2.38789528e-04 1.75508083e-04]] + + [[ 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00] + [ 4.03915981e-01 -1.13103276e-02 -1.48065932e-02 -6.85505346e-03]]] +[[[ 0.02403322 0.00472203 0.00253903 0.00222437] + [ 0.00051015 0.00022485 0.00022157 0.00020939]] + + [[ 0. 0. 0. 0. ] + [ 0.01896646 0.00783919 0.00862908 0.00904704]]] domain=1 type=chi [ 1. 0.] [ 0.05533329 0. ] @@ -19,10 +25,16 @@ domain=2 type=nu-fission [ 0. 0.] [ 0. 0.] domain=2 type=nu-scatter matrix -[[ 0.23725441 0. ] - [ 0. 0.28593027]] -[[ 0.00818357 0. ] - [ 0. 0.04879593]] +[[[ 0.27311543 0.03586102 0.02970389 0.00224892] + [ 0. 0. 0. 0. ]] + + [[ 0. 0. 0. 0. ] + [ 0.26405068 -0.02187959 -0.01529469 0.01403395]]] +[[[ 0.00625287 0.00587756 0.00664018 0.00337568] + [ 0. 0. 0. 0. ]] + + [[ 0. 0. 0. 0. ] + [ 0.04539742 0.01221814 0.01027609 0.01431818]]] domain=2 type=chi [ 0. 0.] [ 0. 0.] @@ -33,10 +45,16 @@ domain=3 type=nu-fission [ 0. 0.] [ 0. 0.] domain=3 type=nu-scatter matrix -[[ 0.25993686 0.02618721] - [ 0. 1.35952132]] -[[ 0.02611466 0.00166461] - [ 0. 0.2585046 ]] +[[[ 0.64334557 0.38340871 0.15218526 0.00303724] + [ 0.02618721 0.00736219 -0.00273849 -0.00271989]] + + [[ 0. 0. 0. 0. ] + [ 1.92421362 0.4984312 0.09120485 0.01705441]]] +[[[ 0.02837604 0.01644677 0.00957372 0.00464802] + [ 0.00166461 0.00093414 0.00075617 0.00055807]] + + [[ 0. 0. 0. 0. ] + [ 0.28406198 0.06342067 0.01372628 0.01391602]]] domain=3 type=chi [ 0. 0.] [ 0. 0.] @@ -47,10 +65,16 @@ domain=4 type=nu-fission [ 0. 0.] [ 0. 0.] domain=4 type=nu-scatter matrix -[[ 0.2179296 0.023662 ] - [ 0. 1.21507398]] -[[ 0.0585649 0.00308328] - [ 0. 0.3810251 ]] +[[[ 0.54394096 0.32601136 0.13113269 0.01210477] + [ 0.023662 0.00752551 -0.00272975 -0.0031405 ]] + + [[ 0. 0. 0. 0. ] + [ 1.76464845 0.50069481 0.09902596 0.03297543]]] +[[[ 0.06542705 0.03860196 0.0174751 0.00607268] + [ 0.00308328 0.00130111 0.00084112 0.00057761]] + + [[ 0. 0. 0. 0. ] + [ 0.41620952 0.12217802 0.03871874 0.02510259]]] domain=4 type=chi [ 0. 0.] [ 0. 0.] @@ -61,10 +85,16 @@ domain=5 type=nu-fission [ 0. 0.] [ 0. 0.] domain=5 type=nu-scatter matrix -[[ 0. 0.] - [ 0. 0.]] -[[ 0. 0.] - [ 0. 0.]] +[[[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] + + [[ 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=5 type=chi [ 0. 0.] [ 0. 0.] @@ -75,10 +105,16 @@ domain=6 type=nu-fission [ 0. 0.] [ 0. 0.] domain=6 type=nu-scatter matrix -[[ 0. 0.] - [ 0. 0.]] -[[ 0. 0.] - [ 0. 0.]] +[[[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] + + [[ 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=6 type=chi [ 0. 0.] [ 0. 0.] @@ -89,10 +125,16 @@ domain=7 type=nu-fission [ 0. 0.] [ 0. 0.] domain=7 type=nu-scatter matrix -[[ 0. 0.] - [ 0. 0.]] -[[ 0. 0.] - [ 0. 0.]] +[[[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] + + [[ 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=7 type=chi [ 0. 0.] [ 0. 0.] @@ -103,10 +145,16 @@ domain=8 type=nu-fission [ 0. 0.] [ 0. 0.] domain=8 type=nu-scatter matrix -[[ 0. 0.] - [ 0. 0.]] -[[ 0. 0.] - [ 0. 0.]] +[[[ 0. 0. 0. 0.] + [ 0. 0. 0. 0.]] + + [[ 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=8 type=chi [ 0. 0.] [ 0. 0.] @@ -117,10 +165,16 @@ domain=9 type=nu-fission [ 0. 0.] [ 0. 0.] domain=9 type=nu-scatter matrix -[[ 0.60053598 0. ] - [ 0. 0. ]] -[[ 0.74887543 0. ] - [ 0. 0. ]] +[[[ 0.72037987 0.11984389 0.03852204 0.05602285] + [ 0. 0. 0. 0. ]] + + [[ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ]]] +[[[ 0.77101455 0.18469083 0.06448453 0.05059534] + [ 0. 0. 0. 0. ]] + + [[ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ]]] domain=9 type=chi [ 0. 0.] [ 0. 0.] @@ -131,10 +185,16 @@ domain=10 type=nu-fission [ 0. 0.] [ 0. 0.] domain=10 type=nu-scatter matrix -[[ 0.23551495 0. ] - [ 0. 0. ]] -[[ 0.61397415 0. ] - [ 0. 0. ]] +[[[ 0.50100891 0.26549396 0.14197875 0.07425836] + [ 0. 0. 0. 0. ]] + + [[ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ]]] +[[[ 0.70853359 0.37546516 0.20078827 0.10501718] + [ 0. 0. 0. 0. ]] + + [[ 0. 0. 0. 0. ] + [ 0. 0. 0. 0. ]]] domain=10 type=chi [ 0. 0.] [ 0. 0.] @@ -145,10 +205,16 @@ domain=11 type=nu-fission [ 0. 0.] [ 0. 0.] domain=11 type=nu-scatter matrix -[[ 0.15444875 0.03187517] - [ 0. 0.90308451]] -[[ 0.59768579 0.0450783 ] - [ 0. 1.53214394]] +[[[ 0.47812753 0.32367878 0.14337507 0.05400336] + [ 0.03187517 0.00858456 -0.01246962 -0.01132019]] + + [[ 0. 0. 0. 0. ] + [ 1.20124973 0.28661101 0.21819147 -0.04851424]]] +[[[ 0.67617444 0.45775092 0.20276296 0.07637229] + [ 0.0450783 0.0121404 0.01763471 0.01600917]] + + [[ 0. 0. 0. 0. ] + [ 1.69882367 0.40532917 0.30856933 0.0686095 ]]] domain=11 type=chi [ 0. 0.] [ 0. 0.] @@ -159,10 +225,16 @@ domain=12 type=nu-fission [ 0. 0.] [ 0. 0.] domain=12 type=nu-scatter matrix -[[ 0.18605249 0.02723959] - [ 0. 1.35711799]] -[[ 0.25763254 0.02955488] - [ 0. 2.08984614]] +[[[ 0.40859392 0.22254143 0.0909719 0.03100368] + [ 0.02723959 -0.01008785 -0.00694631 0.00969231]] + + [[ 0. 0. 0. 0. ] + [ 1.57432766 0.22974802 0.01417839 0.03899727]]] +[[[ 0.27812309 0.14577636 0.06962553 0.03598053] + [ 0.02955488 0.01094529 0.00753673 0.01051613]] + + [[ 0. 0. 0. 0. ] + [ 2.22643553 0.32491277 0.02005128 0.05515046]]] domain=12 type=chi [ 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 91bb036e3..2d7ed2ef3 100644 --- a/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py +++ b/tests/test_mgxs_library_hdf5/test_mgxs_library_hdf5.py @@ -29,6 +29,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi'] self.mgxs_lib.energy_groups = energy_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_no_nuclides/inputs_true.dat b/tests/test_mgxs_library_no_nuclides/inputs_true.dat index 51fc95c60..3643c9a2e 100644 --- a/tests/test_mgxs_library_no_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_no_nuclides/inputs_true.dat @@ -1 +1 @@ -3e7b4ee62e0a53b92d4241f33493786532934f20ebcf47d92825bb1ee2f67c52aa8e7832cf28a9911221f802da205fba2b23c7228899780089da69e21042743c \ No newline at end of file +104e7fb527770ac5d3fc636da7716e8fb05d55761253d30516c899f466e6b38ffd881611a3d0cdf65c6af058c32f6f6758c68782be7a170d21024bdae751862f \ 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 442b8ac7b..94150a202 100644 --- a/tests/test_mgxs_library_no_nuclides/results_true.dat +++ b/tests/test_mgxs_library_no_nuclides/results_true.dat @@ -2,120 +2,264 @@ 1 1 1 total 0.372745 0.024269 0 1 2 total 0.861607 0.032349 material group in nuclide mean std. dev. 1 1 1 total 0.021789 0.001182 -0 1 2 total 0.714077 0.040552 material group in group out nuclide mean std. dev. -3 1 1 1 total 0.337397 0.023039 -2 1 1 2 total 0.001559 0.000510 -1 1 2 1 total 0.000000 0.000000 -0 1 2 2 total 0.422051 0.021617 material group out nuclide mean std. dev. +0 1 2 total 0.714077 0.040552 material group in group out nuclide moment mean std. dev. +12 1 1 1 total P0 0.381546 0.024033 +13 1 1 1 total P1 0.044301 0.004722 +14 1 1 1 total P2 0.020646 0.002539 +15 1 1 1 total P3 0.013695 0.002224 +8 1 1 2 total P0 0.001559 0.000510 +9 1 1 2 total P1 -0.000597 0.000225 +10 1 1 2 total P2 -0.000239 0.000222 +11 1 1 2 total P3 0.000176 0.000209 +4 1 2 1 total P0 0.000000 0.000000 +5 1 2 1 total P1 0.000000 0.000000 +6 1 2 1 total P2 0.000000 0.000000 +7 1 2 1 total P3 0.000000 0.000000 +0 1 2 2 total P0 0.403916 0.018966 +1 1 2 2 total P1 -0.011310 0.007839 +2 1 2 2 total P2 -0.014807 0.008629 +3 1 2 2 total P3 -0.006855 0.009047 material group out nuclide mean std. dev. 1 1 1 total 1.0 0.055333 0 1 2 total 0.0 0.000000 material group in nuclide mean std. dev. 1 2 1 total 0.237254 0.008184 0 2 2 total 0.285930 0.048796 material group in nuclide mean std. dev. 1 2 1 total 0.0 0.0 -0 2 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 2 1 1 total 0.237254 0.008184 -2 2 1 2 total 0.000000 0.000000 -1 2 2 1 total 0.000000 0.000000 -0 2 2 2 total 0.285930 0.048796 material group out nuclide mean std. dev. +0 2 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +12 2 1 1 total P0 0.273115 0.006253 +13 2 1 1 total P1 0.035861 0.005878 +14 2 1 1 total P2 0.029704 0.006640 +15 2 1 1 total P3 0.002249 0.003376 +8 2 1 2 total P0 0.000000 0.000000 +9 2 1 2 total P1 0.000000 0.000000 +10 2 1 2 total P2 0.000000 0.000000 +11 2 1 2 total P3 0.000000 0.000000 +4 2 2 1 total P0 0.000000 0.000000 +5 2 2 1 total P1 0.000000 0.000000 +6 2 2 1 total P2 0.000000 0.000000 +7 2 2 1 total P3 0.000000 0.000000 +0 2 2 2 total P0 0.264051 0.045397 +1 2 2 2 total P1 -0.021880 0.012218 +2 2 2 2 total P2 -0.015295 0.010276 +3 2 2 2 total P3 0.014034 0.014318 material group out nuclide mean std. dev. 1 2 1 total 0.0 0.0 0 2 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 3 1 total 0.286906 0.027401 0 3 2 total 1.418151 0.265308 material group in nuclide mean std. dev. 1 3 1 total 0.0 0.0 -0 3 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 3 1 1 total 0.259937 0.026115 -2 3 1 2 total 0.026187 0.001665 -1 3 2 1 total 0.000000 0.000000 -0 3 2 2 total 1.359521 0.258505 material group out nuclide mean std. dev. +0 3 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +12 3 1 1 total P0 0.643346 0.028376 +13 3 1 1 total P1 0.383409 0.016447 +14 3 1 1 total P2 0.152185 0.009574 +15 3 1 1 total P3 0.003037 0.004648 +8 3 1 2 total P0 0.026187 0.001665 +9 3 1 2 total P1 0.007362 0.000934 +10 3 1 2 total P2 -0.002738 0.000756 +11 3 1 2 total P3 -0.002720 0.000558 +4 3 2 1 total P0 0.000000 0.000000 +5 3 2 1 total P1 0.000000 0.000000 +6 3 2 1 total P2 0.000000 0.000000 +7 3 2 1 total P3 0.000000 0.000000 +0 3 2 2 total P0 1.924214 0.284062 +1 3 2 2 total P1 0.498431 0.063421 +2 3 2 2 total P2 0.091205 0.013726 +3 3 2 2 total P3 0.017054 0.013916 material group out nuclide mean std. dev. 1 3 1 total 0.0 0.0 0 3 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 4 1 total 0.242447 0.061031 0 4 2 total 1.253959 0.388363 material group in nuclide mean std. dev. 1 4 1 total 0.0 0.0 -0 4 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 4 1 1 total 0.217930 0.058565 -2 4 1 2 total 0.023662 0.003083 -1 4 2 1 total 0.000000 0.000000 -0 4 2 2 total 1.215074 0.381025 material group out nuclide mean std. dev. +0 4 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +12 4 1 1 total P0 0.543941 0.065427 +13 4 1 1 total P1 0.326011 0.038602 +14 4 1 1 total P2 0.131133 0.017475 +15 4 1 1 total P3 0.012105 0.006073 +8 4 1 2 total P0 0.023662 0.003083 +9 4 1 2 total P1 0.007526 0.001301 +10 4 1 2 total P2 -0.002730 0.000841 +11 4 1 2 total P3 -0.003140 0.000578 +4 4 2 1 total P0 0.000000 0.000000 +5 4 2 1 total P1 0.000000 0.000000 +6 4 2 1 total P2 0.000000 0.000000 +7 4 2 1 total P3 0.000000 0.000000 +0 4 2 2 total P0 1.764648 0.416210 +1 4 2 2 total P1 0.500695 0.122178 +2 4 2 2 total P2 0.099026 0.038719 +3 4 2 2 total P3 0.032975 0.025103 material group out nuclide mean std. dev. 1 4 1 total 0.0 0.0 0 4 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 5 1 total 0.0 0.0 0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 5 1 total 0.0 0.0 -0 5 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 5 1 1 total 0.0 0.0 -2 5 1 2 total 0.0 0.0 -1 5 2 1 total 0.0 0.0 -0 5 2 2 total 0.0 0.0 material group out nuclide mean std. dev. +0 5 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +12 5 1 1 total P0 0.0 0.0 +13 5 1 1 total P1 0.0 0.0 +14 5 1 1 total P2 0.0 0.0 +15 5 1 1 total P3 0.0 0.0 +8 5 1 2 total P0 0.0 0.0 +9 5 1 2 total P1 0.0 0.0 +10 5 1 2 total P2 0.0 0.0 +11 5 1 2 total P3 0.0 0.0 +4 5 2 1 total P0 0.0 0.0 +5 5 2 1 total P1 0.0 0.0 +6 5 2 1 total P2 0.0 0.0 +7 5 2 1 total P3 0.0 0.0 +0 5 2 2 total P0 0.0 0.0 +1 5 2 2 total P1 0.0 0.0 +2 5 2 2 total P2 0.0 0.0 +3 5 2 2 total P3 0.0 0.0 material group out nuclide mean std. dev. 1 5 1 total 0.0 0.0 0 5 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 6 1 total 0.0 0.0 0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 6 1 total 0.0 0.0 -0 6 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 6 1 1 total 0.0 0.0 -2 6 1 2 total 0.0 0.0 -1 6 2 1 total 0.0 0.0 -0 6 2 2 total 0.0 0.0 material group out nuclide mean std. dev. +0 6 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +12 6 1 1 total P0 0.0 0.0 +13 6 1 1 total P1 0.0 0.0 +14 6 1 1 total P2 0.0 0.0 +15 6 1 1 total P3 0.0 0.0 +8 6 1 2 total P0 0.0 0.0 +9 6 1 2 total P1 0.0 0.0 +10 6 1 2 total P2 0.0 0.0 +11 6 1 2 total P3 0.0 0.0 +4 6 2 1 total P0 0.0 0.0 +5 6 2 1 total P1 0.0 0.0 +6 6 2 1 total P2 0.0 0.0 +7 6 2 1 total P3 0.0 0.0 +0 6 2 2 total P0 0.0 0.0 +1 6 2 2 total P1 0.0 0.0 +2 6 2 2 total P2 0.0 0.0 +3 6 2 2 total P3 0.0 0.0 material group out nuclide mean std. dev. 1 6 1 total 0.0 0.0 0 6 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 7 1 total 0.0 0.0 0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 7 1 total 0.0 0.0 -0 7 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 7 1 1 total 0.0 0.0 -2 7 1 2 total 0.0 0.0 -1 7 2 1 total 0.0 0.0 -0 7 2 2 total 0.0 0.0 material group out nuclide mean std. dev. +0 7 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +12 7 1 1 total P0 0.0 0.0 +13 7 1 1 total P1 0.0 0.0 +14 7 1 1 total P2 0.0 0.0 +15 7 1 1 total P3 0.0 0.0 +8 7 1 2 total P0 0.0 0.0 +9 7 1 2 total P1 0.0 0.0 +10 7 1 2 total P2 0.0 0.0 +11 7 1 2 total P3 0.0 0.0 +4 7 2 1 total P0 0.0 0.0 +5 7 2 1 total P1 0.0 0.0 +6 7 2 1 total P2 0.0 0.0 +7 7 2 1 total P3 0.0 0.0 +0 7 2 2 total P0 0.0 0.0 +1 7 2 2 total P1 0.0 0.0 +2 7 2 2 total P2 0.0 0.0 +3 7 2 2 total P3 0.0 0.0 material group out nuclide mean std. dev. 1 7 1 total 0.0 0.0 0 7 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 8 1 total 0.0 0.0 0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 8 1 total 0.0 0.0 -0 8 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 8 1 1 total 0.0 0.0 -2 8 1 2 total 0.0 0.0 -1 8 2 1 total 0.0 0.0 -0 8 2 2 total 0.0 0.0 material group out nuclide mean std. dev. +0 8 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +12 8 1 1 total P0 0.0 0.0 +13 8 1 1 total P1 0.0 0.0 +14 8 1 1 total P2 0.0 0.0 +15 8 1 1 total P3 0.0 0.0 +8 8 1 2 total P0 0.0 0.0 +9 8 1 2 total P1 0.0 0.0 +10 8 1 2 total P2 0.0 0.0 +11 8 1 2 total P3 0.0 0.0 +4 8 2 1 total P0 0.0 0.0 +5 8 2 1 total P1 0.0 0.0 +6 8 2 1 total P2 0.0 0.0 +7 8 2 1 total P3 0.0 0.0 +0 8 2 2 total P0 0.0 0.0 +1 8 2 2 total P1 0.0 0.0 +2 8 2 2 total P2 0.0 0.0 +3 8 2 2 total P3 0.0 0.0 material group out nuclide mean std. dev. 1 8 1 total 0.0 0.0 0 8 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 9 1 total 0.600536 0.748875 0 9 2 total 0.000000 0.000000 material group in nuclide mean std. dev. 1 9 1 total 0.0 0.0 -0 9 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 9 1 1 total 0.600536 0.748875 -2 9 1 2 total 0.000000 0.000000 -1 9 2 1 total 0.000000 0.000000 -0 9 2 2 total 0.000000 0.000000 material group out nuclide mean std. dev. +0 9 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +12 9 1 1 total P0 0.720380 0.771015 +13 9 1 1 total P1 0.119844 0.184691 +14 9 1 1 total P2 0.038522 0.064485 +15 9 1 1 total P3 0.056023 0.050595 +8 9 1 2 total P0 0.000000 0.000000 +9 9 1 2 total P1 0.000000 0.000000 +10 9 1 2 total P2 0.000000 0.000000 +11 9 1 2 total P3 0.000000 0.000000 +4 9 2 1 total P0 0.000000 0.000000 +5 9 2 1 total P1 0.000000 0.000000 +6 9 2 1 total P2 0.000000 0.000000 +7 9 2 1 total P3 0.000000 0.000000 +0 9 2 2 total P0 0.000000 0.000000 +1 9 2 2 total P1 0.000000 0.000000 +2 9 2 2 total P2 0.000000 0.000000 +3 9 2 2 total P3 0.000000 0.000000 material group out nuclide mean std. dev. 1 9 1 total 0.0 0.0 0 9 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 10 1 total 0.235515 0.613974 0 10 2 total 0.000000 0.000000 material group in nuclide mean std. dev. 1 10 1 total 0.0 0.0 -0 10 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 10 1 1 total 0.235515 0.613974 -2 10 1 2 total 0.000000 0.000000 -1 10 2 1 total 0.000000 0.000000 -0 10 2 2 total 0.000000 0.000000 material group out nuclide mean std. dev. +0 10 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +12 10 1 1 total P0 0.501009 0.708534 +13 10 1 1 total P1 0.265494 0.375465 +14 10 1 1 total P2 0.141979 0.200788 +15 10 1 1 total P3 0.074258 0.105017 +8 10 1 2 total P0 0.000000 0.000000 +9 10 1 2 total P1 0.000000 0.000000 +10 10 1 2 total P2 0.000000 0.000000 +11 10 1 2 total P3 0.000000 0.000000 +4 10 2 1 total P0 0.000000 0.000000 +5 10 2 1 total P1 0.000000 0.000000 +6 10 2 1 total P2 0.000000 0.000000 +7 10 2 1 total P3 0.000000 0.000000 +0 10 2 2 total P0 0.000000 0.000000 +1 10 2 2 total P1 0.000000 0.000000 +2 10 2 2 total P2 0.000000 0.000000 +3 10 2 2 total P3 0.000000 0.000000 material group out nuclide mean std. dev. 1 10 1 total 0.0 0.0 0 10 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 11 1 total 0.186324 0.632129 0 11 2 total 0.945986 1.591133 material group in nuclide mean std. dev. 1 11 1 total 0.0 0.0 -0 11 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 11 1 1 total 0.154449 0.597686 -2 11 1 2 total 0.031875 0.045078 -1 11 2 1 total 0.000000 0.000000 -0 11 2 2 total 0.903085 1.532144 material group out nuclide mean std. dev. +0 11 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +12 11 1 1 total P0 0.478128 0.676174 +13 11 1 1 total P1 0.323679 0.457751 +14 11 1 1 total P2 0.143375 0.202763 +15 11 1 1 total P3 0.054003 0.076372 +8 11 1 2 total P0 0.031875 0.045078 +9 11 1 2 total P1 0.008585 0.012140 +10 11 1 2 total P2 -0.012470 0.017635 +11 11 1 2 total P3 -0.011320 0.016009 +4 11 2 1 total P0 0.000000 0.000000 +5 11 2 1 total P1 0.000000 0.000000 +6 11 2 1 total P2 0.000000 0.000000 +7 11 2 1 total P3 0.000000 0.000000 +0 11 2 2 total P0 1.201250 1.698824 +1 11 2 2 total P1 0.286611 0.405329 +2 11 2 2 total P2 0.218191 0.308569 +3 11 2 2 total P3 -0.048514 0.068609 material group out nuclide mean std. dev. 1 11 1 total 0.0 0.0 0 11 2 total 0.0 0.0 material group in nuclide mean std. dev. 1 12 1 total 0.213292 0.271444 0 12 2 total 1.390975 2.137346 material group in nuclide mean std. dev. 1 12 1 total 0.0 0.0 -0 12 2 total 0.0 0.0 material group in group out nuclide mean std. dev. -3 12 1 1 total 0.186052 0.257633 -2 12 1 2 total 0.027240 0.029555 -1 12 2 1 total 0.000000 0.000000 -0 12 2 2 total 1.357118 2.089846 material group out nuclide mean std. dev. +0 12 2 total 0.0 0.0 material group in group out nuclide moment mean std. dev. +12 12 1 1 total P0 0.408594 0.278123 +13 12 1 1 total P1 0.222541 0.145776 +14 12 1 1 total P2 0.090972 0.069626 +15 12 1 1 total P3 0.031004 0.035981 +8 12 1 2 total P0 0.027240 0.029555 +9 12 1 2 total P1 -0.010088 0.010945 +10 12 1 2 total P2 -0.006946 0.007537 +11 12 1 2 total P3 0.009692 0.010516 +4 12 2 1 total P0 0.000000 0.000000 +5 12 2 1 total P1 0.000000 0.000000 +6 12 2 1 total P2 0.000000 0.000000 +7 12 2 1 total P3 0.000000 0.000000 +0 12 2 2 total P0 1.574328 2.226436 +1 12 2 2 total P1 0.229748 0.324913 +2 12 2 2 total P2 0.014178 0.020051 +3 12 2 2 total P3 0.038997 0.055150 material group out nuclide mean std. dev. 1 12 1 total 0.0 0.0 0 12 2 total 0.0 0.0 \ No newline at end of file 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 15f90cb87..6ee8813d0 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 @@ -28,6 +28,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi'] self.mgxs_lib.energy_groups = energy_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 9436f03a0..9e25fe96a 100644 --- a/tests/test_mgxs_library_nuclides/inputs_true.dat +++ b/tests/test_mgxs_library_nuclides/inputs_true.dat @@ -1 +1 @@ -b035f783fa75ada619b0a58675913e318fef94e519c85cae6982f650d7655cb130f625572fde2058e005b490359180cb9d1e1095f5d35d41c9a0f8ff6e0dc3c1 \ No newline at end of file +791a2bd647b8bae03aafc39e29ff1ce1ffc44063b0d757ccba4e1eda6eb73b8a275020f4f5774b17dede49fbf15549787279c8b2fc45caba0097155b32e56fa8 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/results_true.dat b/tests/test_mgxs_library_nuclides/results_true.dat index 145521964..06f838206 100644 --- a/tests/test_mgxs_library_nuclides/results_true.dat +++ b/tests/test_mgxs_library_nuclides/results_true.dat @@ -1,1971 +1 @@ - material group in nuclide mean std. dev. -34 1 1 U-234 0.000173 0.000173 -35 1 1 U-235 0.010677 0.001889 -36 1 1 U-236 0.002390 0.001055 -37 1 1 U-238 0.213680 0.013272 -38 1 1 Np-237 0.000000 0.000000 -39 1 1 Pu-238 0.000000 0.000000 -40 1 1 Pu-239 0.002911 0.000639 -41 1 1 Pu-240 0.004426 0.000806 -42 1 1 Pu-241 0.000690 0.000387 -43 1 1 Pu-242 0.000000 0.000000 -44 1 1 Am-241 0.000173 0.000173 -45 1 1 Am-242m 0.000000 0.000000 -46 1 1 Am-243 0.000000 0.000000 -47 1 1 Cm-242 0.000000 0.000000 -48 1 1 Cm-243 0.000000 0.000000 -49 1 1 Cm-244 0.000000 0.000000 -50 1 1 Cm-245 0.000000 0.000000 -51 1 1 Mo-95 0.000000 0.000000 -52 1 1 Tc-99 0.000173 0.000173 -53 1 1 Ru-101 0.000238 0.000254 -54 1 1 Ru-103 0.000002 0.000243 -55 1 1 Ag-109 0.000000 0.000000 -56 1 1 Xe-135 0.000000 0.000000 -57 1 1 Cs-133 0.000347 0.000213 -58 1 1 Nd-143 0.000447 0.000292 -59 1 1 Nd-145 0.000564 0.000294 -60 1 1 Sm-147 0.000000 0.000000 -61 1 1 Sm-149 0.000000 0.000000 -62 1 1 Sm-150 0.000472 0.000239 -63 1 1 Sm-151 0.000000 0.000000 -64 1 1 Sm-152 0.000492 0.000352 -65 1 1 Eu-153 0.000173 0.000173 -66 1 1 Gd-155 0.000000 0.000000 -67 1 1 O-16 0.134715 0.009801 -0 1 2 U-234 0.000000 0.000000 -1 1 2 U-235 0.199907 0.007776 -2 1 2 U-236 0.001501 0.002037 -3 1 2 U-238 0.255355 0.029743 -4 1 2 Np-237 0.000000 0.000000 -5 1 2 Pu-238 0.000000 0.000000 -6 1 2 Pu-239 0.160378 0.011366 -7 1 2 Pu-240 0.007920 0.003710 -8 1 2 Pu-241 0.017820 0.003733 -9 1 2 Pu-242 0.000000 0.000000 -10 1 2 Am-241 0.000000 0.000000 -11 1 2 Am-242m 0.000000 0.000000 -12 1 2 Am-243 0.000000 0.000000 -13 1 2 Cm-242 0.000000 0.000000 -14 1 2 Cm-243 0.000000 0.000000 -15 1 2 Cm-244 0.000000 0.000000 -16 1 2 Cm-245 0.000000 0.000000 -17 1 2 Mo-95 0.000000 0.000000 -18 1 2 Tc-99 0.000000 0.000000 -19 1 2 Ru-101 0.000000 0.000000 -20 1 2 Ru-103 0.000000 0.000000 -21 1 2 Ag-109 0.000000 0.000000 -22 1 2 Xe-135 0.013860 0.003976 -23 1 2 Cs-133 0.000000 0.000000 -24 1 2 Nd-143 0.003960 0.002427 -25 1 2 Nd-145 0.000000 0.000000 -26 1 2 Sm-147 0.000000 0.000000 -27 1 2 Sm-149 0.001980 0.001981 -28 1 2 Sm-150 0.000000 0.000000 -29 1 2 Sm-151 0.001980 0.001981 -30 1 2 Sm-152 0.000000 0.000000 -31 1 2 Eu-153 0.000000 0.000000 -32 1 2 Gd-155 0.000000 0.000000 -33 1 2 O-16 0.196946 0.014729 material group in nuclide mean std. dev. -34 1 1 U-234 7.274440e-06 4.419477e-07 -35 1 1 U-235 9.587803e-03 5.936922e-04 -36 1 1 U-236 7.566099e-05 7.523935e-06 -37 1 1 U-238 7.178367e-03 6.505680e-04 -38 1 1 Np-237 1.315682e-05 8.036501e-07 -39 1 1 Pu-238 7.746151e-06 3.992835e-07 -40 1 1 Pu-239 3.805294e-03 3.637600e-04 -41 1 1 Pu-240 6.941319e-05 4.729737e-06 -42 1 1 Pu-241 1.033844e-03 9.083913e-05 -43 1 1 Pu-242 5.995332e-06 3.821721e-07 -44 1 1 Am-241 1.148585e-06 8.271648e-08 -45 1 1 Am-242m 1.100215e-06 6.159956e-08 -46 1 1 Am-243 8.323826e-07 5.841792e-08 -47 1 1 Cm-242 5.088970e-07 5.258007e-08 -48 1 1 Cm-243 2.245435e-07 1.459025e-08 -49 1 1 Cm-244 2.993206e-07 2.746129e-08 -50 1 1 Cm-245 3.063611e-07 3.057751e-08 -51 1 1 Mo-95 0.000000e+00 0.000000e+00 -52 1 1 Tc-99 0.000000e+00 0.000000e+00 -53 1 1 Ru-101 0.000000e+00 0.000000e+00 -54 1 1 Ru-103 0.000000e+00 0.000000e+00 -55 1 1 Ag-109 0.000000e+00 0.000000e+00 -56 1 1 Xe-135 0.000000e+00 0.000000e+00 -57 1 1 Cs-133 0.000000e+00 0.000000e+00 -58 1 1 Nd-143 0.000000e+00 0.000000e+00 -59 1 1 Nd-145 0.000000e+00 0.000000e+00 -60 1 1 Sm-147 0.000000e+00 0.000000e+00 -61 1 1 Sm-149 0.000000e+00 0.000000e+00 -62 1 1 Sm-150 0.000000e+00 0.000000e+00 -63 1 1 Sm-151 0.000000e+00 0.000000e+00 -64 1 1 Sm-152 0.000000e+00 0.000000e+00 -65 1 1 Eu-153 0.000000e+00 0.000000e+00 -66 1 1 Gd-155 0.000000e+00 0.000000e+00 -67 1 1 O-16 0.000000e+00 0.000000e+00 -0 1 2 U-234 4.408576e-07 2.828309e-08 -1 1 2 U-235 3.768094e-01 2.445671e-02 -2 1 2 U-236 6.097538e-06 3.733038e-07 -3 1 2 U-238 5.353074e-07 3.310544e-08 -4 1 2 Np-237 2.702971e-07 2.098939e-08 -5 1 2 Pu-238 3.463109e-05 2.638394e-06 -6 1 2 Pu-239 2.889643e-01 1.376004e-02 -7 1 2 Pu-240 4.533642e-06 2.544289e-07 -8 1 2 Pu-241 4.809366e-02 2.778345e-03 -9 1 2 Pu-242 8.715325e-08 5.460893e-09 -10 1 2 Am-241 4.611736e-06 2.155039e-07 -11 1 2 Am-242m 1.428047e-04 8.436437e-06 -12 1 2 Am-243 7.883895e-08 4.734503e-09 -13 1 2 Cm-242 9.731025e-07 6.143750e-08 -14 1 2 Cm-243 1.825830e-06 1.074849e-07 -15 1 2 Cm-244 1.581823e-07 9.938064e-09 -16 1 2 Cm-245 1.213386e-05 8.812019e-07 -17 1 2 Mo-95 0.000000e+00 0.000000e+00 -18 1 2 Tc-99 0.000000e+00 0.000000e+00 -19 1 2 Ru-101 0.000000e+00 0.000000e+00 -20 1 2 Ru-103 0.000000e+00 0.000000e+00 -21 1 2 Ag-109 0.000000e+00 0.000000e+00 -22 1 2 Xe-135 0.000000e+00 0.000000e+00 -23 1 2 Cs-133 0.000000e+00 0.000000e+00 -24 1 2 Nd-143 0.000000e+00 0.000000e+00 -25 1 2 Nd-145 0.000000e+00 0.000000e+00 -26 1 2 Sm-147 0.000000e+00 0.000000e+00 -27 1 2 Sm-149 0.000000e+00 0.000000e+00 -28 1 2 Sm-150 0.000000e+00 0.000000e+00 -29 1 2 Sm-151 0.000000e+00 0.000000e+00 -30 1 2 Sm-152 0.000000e+00 0.000000e+00 -31 1 2 Eu-153 0.000000e+00 0.000000e+00 -32 1 2 Gd-155 0.000000e+00 0.000000e+00 -33 1 2 O-16 0.000000e+00 0.000000e+00 material group in group out nuclide mean std. dev. -102 1 1 1 U-234 0.000000 0.000000 -103 1 1 1 U-235 0.003226 0.001139 -104 1 1 1 U-236 0.001697 0.000923 -105 1 1 1 U-238 0.194620 0.013297 -106 1 1 1 Np-237 0.000000 0.000000 -107 1 1 1 Pu-238 0.000000 0.000000 -108 1 1 1 Pu-239 0.001005 0.000477 -109 1 1 1 Pu-240 0.001307 0.000295 -110 1 1 1 Pu-241 0.000344 0.000244 -111 1 1 1 Pu-242 0.000000 0.000000 -112 1 1 1 Am-241 0.000000 0.000000 -113 1 1 1 Am-242m 0.000000 0.000000 -114 1 1 1 Am-243 0.000000 0.000000 -115 1 1 1 Cm-242 0.000000 0.000000 -116 1 1 1 Cm-243 0.000000 0.000000 -117 1 1 1 Cm-244 0.000000 0.000000 -118 1 1 1 Cm-245 0.000000 0.000000 -119 1 1 1 Mo-95 0.000000 0.000000 -120 1 1 1 Tc-99 0.000000 0.000000 -121 1 1 1 Ru-101 0.000238 0.000254 -122 1 1 1 Ru-103 0.000002 0.000243 -123 1 1 1 Ag-109 0.000000 0.000000 -124 1 1 1 Xe-135 0.000000 0.000000 -125 1 1 1 Cs-133 0.000000 0.000000 -126 1 1 1 Nd-143 0.000447 0.000292 -127 1 1 1 Nd-145 0.000564 0.000294 -128 1 1 1 Sm-147 0.000000 0.000000 -129 1 1 1 Sm-149 0.000000 0.000000 -130 1 1 1 Sm-150 0.000299 0.000238 -131 1 1 1 Sm-151 0.000000 0.000000 -132 1 1 1 Sm-152 0.000492 0.000352 -133 1 1 1 Eu-153 0.000000 0.000000 -134 1 1 1 Gd-155 0.000000 0.000000 -135 1 1 1 O-16 0.133156 0.009821 -68 1 1 2 U-234 0.000000 0.000000 -69 1 1 2 U-235 0.000000 0.000000 -70 1 1 2 U-236 0.000000 0.000000 -71 1 1 2 U-238 0.000173 0.000173 -72 1 1 2 Np-237 0.000000 0.000000 -73 1 1 2 Pu-238 0.000000 0.000000 -74 1 1 2 Pu-239 0.000000 0.000000 -75 1 1 2 Pu-240 0.000000 0.000000 -76 1 1 2 Pu-241 0.000000 0.000000 -77 1 1 2 Pu-242 0.000000 0.000000 -78 1 1 2 Am-241 0.000000 0.000000 -79 1 1 2 Am-242m 0.000000 0.000000 -80 1 1 2 Am-243 0.000000 0.000000 -81 1 1 2 Cm-242 0.000000 0.000000 -82 1 1 2 Cm-243 0.000000 0.000000 -83 1 1 2 Cm-244 0.000000 0.000000 -84 1 1 2 Cm-245 0.000000 0.000000 -85 1 1 2 Mo-95 0.000000 0.000000 -86 1 1 2 Tc-99 0.000000 0.000000 -87 1 1 2 Ru-101 0.000000 0.000000 -88 1 1 2 Ru-103 0.000000 0.000000 -89 1 1 2 Ag-109 0.000000 0.000000 -90 1 1 2 Xe-135 0.000000 0.000000 -91 1 1 2 Cs-133 0.000000 0.000000 -92 1 1 2 Nd-143 0.000000 0.000000 -93 1 1 2 Nd-145 0.000000 0.000000 -94 1 1 2 Sm-147 0.000000 0.000000 -95 1 1 2 Sm-149 0.000000 0.000000 -96 1 1 2 Sm-150 0.000000 0.000000 -97 1 1 2 Sm-151 0.000000 0.000000 -98 1 1 2 Sm-152 0.000000 0.000000 -99 1 1 2 Eu-153 0.000000 0.000000 -100 1 1 2 Gd-155 0.000000 0.000000 -101 1 1 2 O-16 0.001386 0.000446 -34 1 2 1 U-234 0.000000 0.000000 -35 1 2 1 U-235 0.000000 0.000000 -36 1 2 1 U-236 0.000000 0.000000 -37 1 2 1 U-238 0.000000 0.000000 -38 1 2 1 Np-237 0.000000 0.000000 -39 1 2 1 Pu-238 0.000000 0.000000 -40 1 2 1 Pu-239 0.000000 0.000000 -41 1 2 1 Pu-240 0.000000 0.000000 -42 1 2 1 Pu-241 0.000000 0.000000 -43 1 2 1 Pu-242 0.000000 0.000000 -44 1 2 1 Am-241 0.000000 0.000000 -45 1 2 1 Am-242m 0.000000 0.000000 -46 1 2 1 Am-243 0.000000 0.000000 -47 1 2 1 Cm-242 0.000000 0.000000 -48 1 2 1 Cm-243 0.000000 0.000000 -49 1 2 1 Cm-244 0.000000 0.000000 -50 1 2 1 Cm-245 0.000000 0.000000 -51 1 2 1 Mo-95 0.000000 0.000000 -52 1 2 1 Tc-99 0.000000 0.000000 -53 1 2 1 Ru-101 0.000000 0.000000 -54 1 2 1 Ru-103 0.000000 0.000000 -55 1 2 1 Ag-109 0.000000 0.000000 -56 1 2 1 Xe-135 0.000000 0.000000 -57 1 2 1 Cs-133 0.000000 0.000000 -58 1 2 1 Nd-143 0.000000 0.000000 -59 1 2 1 Nd-145 0.000000 0.000000 -60 1 2 1 Sm-147 0.000000 0.000000 -61 1 2 1 Sm-149 0.000000 0.000000 -62 1 2 1 Sm-150 0.000000 0.000000 -63 1 2 1 Sm-151 0.000000 0.000000 -64 1 2 1 Sm-152 0.000000 0.000000 -65 1 2 1 Eu-153 0.000000 0.000000 -66 1 2 1 Gd-155 0.000000 0.000000 -67 1 2 1 O-16 0.000000 0.000000 -0 1 2 2 U-234 0.000000 0.000000 -1 1 2 2 U-235 0.003889 0.003962 -2 1 2 2 U-236 0.001501 0.002037 -3 1 2 2 U-238 0.219715 0.025984 -4 1 2 2 Np-237 0.000000 0.000000 -5 1 2 2 Pu-238 0.000000 0.000000 -6 1 2 2 Pu-239 0.000000 0.000000 -7 1 2 2 Pu-240 0.000000 0.000000 -8 1 2 2 Pu-241 0.000000 0.000000 -9 1 2 2 Pu-242 0.000000 0.000000 -10 1 2 2 Am-241 0.000000 0.000000 -11 1 2 2 Am-242m 0.000000 0.000000 -12 1 2 2 Am-243 0.000000 0.000000 -13 1 2 2 Cm-242 0.000000 0.000000 -14 1 2 2 Cm-243 0.000000 0.000000 -15 1 2 2 Cm-244 0.000000 0.000000 -16 1 2 2 Cm-245 0.000000 0.000000 -17 1 2 2 Mo-95 0.000000 0.000000 -18 1 2 2 Tc-99 0.000000 0.000000 -19 1 2 2 Ru-101 0.000000 0.000000 -20 1 2 2 Ru-103 0.000000 0.000000 -21 1 2 2 Ag-109 0.000000 0.000000 -22 1 2 2 Xe-135 0.000000 0.000000 -23 1 2 2 Cs-133 0.000000 0.000000 -24 1 2 2 Nd-143 0.000000 0.000000 -25 1 2 2 Nd-145 0.000000 0.000000 -26 1 2 2 Sm-147 0.000000 0.000000 -27 1 2 2 Sm-149 0.000000 0.000000 -28 1 2 2 Sm-150 0.000000 0.000000 -29 1 2 2 Sm-151 0.000000 0.000000 -30 1 2 2 Sm-152 0.000000 0.000000 -31 1 2 2 Eu-153 0.000000 0.000000 -32 1 2 2 Gd-155 0.000000 0.000000 -33 1 2 2 O-16 0.196946 0.014729 material group out nuclide mean std. dev. -34 1 1 U-234 0.0 0.000000 -35 1 1 U-235 1.0 0.066362 -36 1 1 U-236 0.0 0.000000 -37 1 1 U-238 1.0 0.093082 -38 1 1 Np-237 0.0 0.000000 -39 1 1 Pu-238 0.0 0.000000 -40 1 1 Pu-239 1.0 0.104567 -41 1 1 Pu-240 0.0 0.000000 -42 1 1 Pu-241 1.0 0.263696 -43 1 1 Pu-242 0.0 0.000000 -44 1 1 Am-241 0.0 0.000000 -45 1 1 Am-242m 0.0 0.000000 -46 1 1 Am-243 0.0 0.000000 -47 1 1 Cm-242 0.0 0.000000 -48 1 1 Cm-243 0.0 0.000000 -49 1 1 Cm-244 0.0 0.000000 -50 1 1 Cm-245 0.0 0.000000 -51 1 1 Mo-95 0.0 0.000000 -52 1 1 Tc-99 0.0 0.000000 -53 1 1 Ru-101 0.0 0.000000 -54 1 1 Ru-103 0.0 0.000000 -55 1 1 Ag-109 0.0 0.000000 -56 1 1 Xe-135 0.0 0.000000 -57 1 1 Cs-133 0.0 0.000000 -58 1 1 Nd-143 0.0 0.000000 -59 1 1 Nd-145 0.0 0.000000 -60 1 1 Sm-147 0.0 0.000000 -61 1 1 Sm-149 0.0 0.000000 -62 1 1 Sm-150 0.0 0.000000 -63 1 1 Sm-151 0.0 0.000000 -64 1 1 Sm-152 0.0 0.000000 -65 1 1 Eu-153 0.0 0.000000 -66 1 1 Gd-155 0.0 0.000000 -67 1 1 O-16 0.0 0.000000 -0 1 2 U-234 0.0 0.000000 -1 1 2 U-235 0.0 0.000000 -2 1 2 U-236 0.0 0.000000 -3 1 2 U-238 0.0 0.000000 -4 1 2 Np-237 0.0 0.000000 -5 1 2 Pu-238 0.0 0.000000 -6 1 2 Pu-239 0.0 0.000000 -7 1 2 Pu-240 0.0 0.000000 -8 1 2 Pu-241 0.0 0.000000 -9 1 2 Pu-242 0.0 0.000000 -10 1 2 Am-241 0.0 0.000000 -11 1 2 Am-242m 0.0 0.000000 -12 1 2 Am-243 0.0 0.000000 -13 1 2 Cm-242 0.0 0.000000 -14 1 2 Cm-243 0.0 0.000000 -15 1 2 Cm-244 0.0 0.000000 -16 1 2 Cm-245 0.0 0.000000 -17 1 2 Mo-95 0.0 0.000000 -18 1 2 Tc-99 0.0 0.000000 -19 1 2 Ru-101 0.0 0.000000 -20 1 2 Ru-103 0.0 0.000000 -21 1 2 Ag-109 0.0 0.000000 -22 1 2 Xe-135 0.0 0.000000 -23 1 2 Cs-133 0.0 0.000000 -24 1 2 Nd-143 0.0 0.000000 -25 1 2 Nd-145 0.0 0.000000 -26 1 2 Sm-147 0.0 0.000000 -27 1 2 Sm-149 0.0 0.000000 -28 1 2 Sm-150 0.0 0.000000 -29 1 2 Sm-151 0.0 0.000000 -30 1 2 Sm-152 0.0 0.000000 -31 1 2 Eu-153 0.0 0.000000 -32 1 2 Gd-155 0.0 0.000000 -33 1 2 O-16 0.0 0.000000 material group in nuclide mean std. dev. -5 2 1 Zr-90 0.104734 0.008915 -6 2 1 Zr-91 0.036155 0.003735 -7 2 1 Zr-92 0.042422 0.003029 -8 2 1 Zr-94 0.046148 0.006251 -9 2 1 Zr-96 0.007794 0.001536 -0 2 2 Zr-90 0.121688 0.034934 -1 2 2 Zr-91 0.061792 0.024317 -2 2 2 Zr-92 0.041633 0.016323 -3 2 2 Zr-94 0.060818 0.021483 -4 2 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -5 2 1 Zr-90 0.0 0.0 -6 2 1 Zr-91 0.0 0.0 -7 2 1 Zr-92 0.0 0.0 -8 2 1 Zr-94 0.0 0.0 -9 2 1 Zr-96 0.0 0.0 -0 2 2 Zr-90 0.0 0.0 -1 2 2 Zr-91 0.0 0.0 -2 2 2 Zr-92 0.0 0.0 -3 2 2 Zr-94 0.0 0.0 -4 2 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. -15 2 1 1 Zr-90 0.104734 0.008915 -16 2 1 1 Zr-91 0.036155 0.003735 -17 2 1 1 Zr-92 0.042422 0.003029 -18 2 1 1 Zr-94 0.046148 0.006251 -19 2 1 1 Zr-96 0.007794 0.001536 -10 2 1 2 Zr-90 0.000000 0.000000 -11 2 1 2 Zr-91 0.000000 0.000000 -12 2 1 2 Zr-92 0.000000 0.000000 -13 2 1 2 Zr-94 0.000000 0.000000 -14 2 1 2 Zr-96 0.000000 0.000000 -5 2 2 1 Zr-90 0.000000 0.000000 -6 2 2 1 Zr-91 0.000000 0.000000 -7 2 2 1 Zr-92 0.000000 0.000000 -8 2 2 1 Zr-94 0.000000 0.000000 -9 2 2 1 Zr-96 0.000000 0.000000 -0 2 2 2 Zr-90 0.121688 0.034934 -1 2 2 2 Zr-91 0.061792 0.024317 -2 2 2 2 Zr-92 0.041633 0.016323 -3 2 2 2 Zr-94 0.060818 0.021483 -4 2 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. -5 2 1 Zr-90 0.0 0.0 -6 2 1 Zr-91 0.0 0.0 -7 2 1 Zr-92 0.0 0.0 -8 2 1 Zr-94 0.0 0.0 -9 2 1 Zr-96 0.0 0.0 -0 2 2 Zr-90 0.0 0.0 -1 2 2 Zr-91 0.0 0.0 -2 2 2 Zr-92 0.0 0.0 -3 2 2 Zr-94 0.0 0.0 -4 2 2 Zr-96 0.0 0.0 material group in nuclide mean std. dev. -4 3 1 H-1 0.207103 0.023028 -5 3 1 O-16 0.079282 0.005197 -6 3 1 B-10 0.000521 0.000244 -7 3 1 B-11 0.000000 0.000000 -0 3 2 H-1 1.283344 0.250946 -1 3 2 O-16 0.085363 0.014001 -2 3 2 B-10 0.049249 0.008232 -3 3 2 B-11 0.000195 0.001527 material group in nuclide mean std. dev. -4 3 1 H-1 0.0 0.0 -5 3 1 O-16 0.0 0.0 -6 3 1 B-10 0.0 0.0 -7 3 1 B-11 0.0 0.0 -0 3 2 H-1 0.0 0.0 -1 3 2 O-16 0.0 0.0 -2 3 2 B-10 0.0 0.0 -3 3 2 B-11 0.0 0.0 material group in group out nuclide mean std. dev. -12 3 1 1 H-1 0.181306 0.022102 -13 3 1 1 O-16 0.078631 0.005044 -14 3 1 1 B-10 0.000000 0.000000 -15 3 1 1 B-11 0.000000 0.000000 -8 3 1 2 H-1 0.025666 0.001582 -9 3 1 2 O-16 0.000521 0.000131 -10 3 1 2 B-10 0.000000 0.000000 -11 3 1 2 B-11 0.000000 0.000000 -4 3 2 1 H-1 0.000000 0.000000 -5 3 2 1 O-16 0.000000 0.000000 -6 3 2 1 B-10 0.000000 0.000000 -7 3 2 1 B-11 0.000000 0.000000 -0 3 2 2 H-1 1.273963 0.250623 -1 3 2 2 O-16 0.085363 0.014001 -2 3 2 2 B-10 0.000000 0.000000 -3 3 2 2 B-11 0.000195 0.001527 material group out nuclide mean std. dev. -4 3 1 H-1 0.0 0.0 -5 3 1 O-16 0.0 0.0 -6 3 1 B-10 0.0 0.0 -7 3 1 B-11 0.0 0.0 -0 3 2 H-1 0.0 0.0 -1 3 2 O-16 0.0 0.0 -2 3 2 B-10 0.0 0.0 -3 3 2 B-11 0.0 0.0 material group in nuclide mean std. dev. -4 4 1 H-1 0.175242 0.053715 -5 4 1 O-16 0.066545 0.010083 -6 4 1 B-10 0.000570 0.000352 -7 4 1 B-11 0.000089 0.000346 -0 4 2 H-1 1.142895 0.365140 -1 4 2 O-16 0.085141 0.028073 -2 4 2 B-10 0.025923 0.007276 -3 4 2 B-11 0.000000 0.000000 material group in nuclide mean std. dev. -4 4 1 H-1 0.0 0.0 -5 4 1 O-16 0.0 0.0 -6 4 1 B-10 0.0 0.0 -7 4 1 B-11 0.0 0.0 -0 4 2 H-1 0.0 0.0 -1 4 2 O-16 0.0 0.0 -2 4 2 B-10 0.0 0.0 -3 4 2 B-11 0.0 0.0 material group in group out nuclide mean std. dev. -12 4 1 1 H-1 0.151295 0.051491 -13 4 1 1 O-16 0.066545 0.010083 -14 4 1 1 B-10 0.000000 0.000000 -15 4 1 1 B-11 0.000089 0.000346 -8 4 1 2 H-1 0.023662 0.003083 -9 4 1 2 O-16 0.000000 0.000000 -10 4 1 2 B-10 0.000000 0.000000 -11 4 1 2 B-11 0.000000 0.000000 -4 4 2 1 H-1 0.000000 0.000000 -5 4 2 1 O-16 0.000000 0.000000 -6 4 2 1 B-10 0.000000 0.000000 -7 4 2 1 B-11 0.000000 0.000000 -0 4 2 2 H-1 1.129933 0.361681 -1 4 2 2 O-16 0.085141 0.028073 -2 4 2 2 B-10 0.000000 0.000000 -3 4 2 2 B-11 0.000000 0.000000 material group out nuclide mean std. dev. -4 4 1 H-1 0.0 0.0 -5 4 1 O-16 0.0 0.0 -6 4 1 B-10 0.0 0.0 -7 4 1 B-11 0.0 0.0 -0 4 2 H-1 0.0 0.0 -1 4 2 O-16 0.0 0.0 -2 4 2 B-10 0.0 0.0 -3 4 2 B-11 0.0 0.0 material group in nuclide mean std. dev. -27 5 1 Fe-54 0.0 0.0 -28 5 1 Fe-56 0.0 0.0 -29 5 1 Fe-57 0.0 0.0 -30 5 1 Fe-58 0.0 0.0 -31 5 1 Ni-58 0.0 0.0 -32 5 1 Ni-60 0.0 0.0 -33 5 1 Ni-61 0.0 0.0 -34 5 1 Ni-62 0.0 0.0 -35 5 1 Ni-64 0.0 0.0 -36 5 1 Mn-55 0.0 0.0 -37 5 1 Mo-92 0.0 0.0 -38 5 1 Mo-94 0.0 0.0 -39 5 1 Mo-95 0.0 0.0 -40 5 1 Mo-96 0.0 0.0 -41 5 1 Mo-97 0.0 0.0 -42 5 1 Mo-98 0.0 0.0 -43 5 1 Mo-100 0.0 0.0 -44 5 1 Si-28 0.0 0.0 -45 5 1 Si-29 0.0 0.0 -46 5 1 Si-30 0.0 0.0 -47 5 1 Cr-50 0.0 0.0 -48 5 1 Cr-52 0.0 0.0 -49 5 1 Cr-53 0.0 0.0 -50 5 1 Cr-54 0.0 0.0 -51 5 1 C-Nat 0.0 0.0 -52 5 1 Cu-63 0.0 0.0 -53 5 1 Cu-65 0.0 0.0 -0 5 2 Fe-54 0.0 0.0 -1 5 2 Fe-56 0.0 0.0 -2 5 2 Fe-57 0.0 0.0 -3 5 2 Fe-58 0.0 0.0 -4 5 2 Ni-58 0.0 0.0 -5 5 2 Ni-60 0.0 0.0 -6 5 2 Ni-61 0.0 0.0 -7 5 2 Ni-62 0.0 0.0 -8 5 2 Ni-64 0.0 0.0 -9 5 2 Mn-55 0.0 0.0 -10 5 2 Mo-92 0.0 0.0 -11 5 2 Mo-94 0.0 0.0 -12 5 2 Mo-95 0.0 0.0 -13 5 2 Mo-96 0.0 0.0 -14 5 2 Mo-97 0.0 0.0 -15 5 2 Mo-98 0.0 0.0 -16 5 2 Mo-100 0.0 0.0 -17 5 2 Si-28 0.0 0.0 -18 5 2 Si-29 0.0 0.0 -19 5 2 Si-30 0.0 0.0 -20 5 2 Cr-50 0.0 0.0 -21 5 2 Cr-52 0.0 0.0 -22 5 2 Cr-53 0.0 0.0 -23 5 2 Cr-54 0.0 0.0 -24 5 2 C-Nat 0.0 0.0 -25 5 2 Cu-63 0.0 0.0 -26 5 2 Cu-65 0.0 0.0 material group in nuclide mean std. dev. -27 5 1 Fe-54 0.0 0.0 -28 5 1 Fe-56 0.0 0.0 -29 5 1 Fe-57 0.0 0.0 -30 5 1 Fe-58 0.0 0.0 -31 5 1 Ni-58 0.0 0.0 -32 5 1 Ni-60 0.0 0.0 -33 5 1 Ni-61 0.0 0.0 -34 5 1 Ni-62 0.0 0.0 -35 5 1 Ni-64 0.0 0.0 -36 5 1 Mn-55 0.0 0.0 -37 5 1 Mo-92 0.0 0.0 -38 5 1 Mo-94 0.0 0.0 -39 5 1 Mo-95 0.0 0.0 -40 5 1 Mo-96 0.0 0.0 -41 5 1 Mo-97 0.0 0.0 -42 5 1 Mo-98 0.0 0.0 -43 5 1 Mo-100 0.0 0.0 -44 5 1 Si-28 0.0 0.0 -45 5 1 Si-29 0.0 0.0 -46 5 1 Si-30 0.0 0.0 -47 5 1 Cr-50 0.0 0.0 -48 5 1 Cr-52 0.0 0.0 -49 5 1 Cr-53 0.0 0.0 -50 5 1 Cr-54 0.0 0.0 -51 5 1 C-Nat 0.0 0.0 -52 5 1 Cu-63 0.0 0.0 -53 5 1 Cu-65 0.0 0.0 -0 5 2 Fe-54 0.0 0.0 -1 5 2 Fe-56 0.0 0.0 -2 5 2 Fe-57 0.0 0.0 -3 5 2 Fe-58 0.0 0.0 -4 5 2 Ni-58 0.0 0.0 -5 5 2 Ni-60 0.0 0.0 -6 5 2 Ni-61 0.0 0.0 -7 5 2 Ni-62 0.0 0.0 -8 5 2 Ni-64 0.0 0.0 -9 5 2 Mn-55 0.0 0.0 -10 5 2 Mo-92 0.0 0.0 -11 5 2 Mo-94 0.0 0.0 -12 5 2 Mo-95 0.0 0.0 -13 5 2 Mo-96 0.0 0.0 -14 5 2 Mo-97 0.0 0.0 -15 5 2 Mo-98 0.0 0.0 -16 5 2 Mo-100 0.0 0.0 -17 5 2 Si-28 0.0 0.0 -18 5 2 Si-29 0.0 0.0 -19 5 2 Si-30 0.0 0.0 -20 5 2 Cr-50 0.0 0.0 -21 5 2 Cr-52 0.0 0.0 -22 5 2 Cr-53 0.0 0.0 -23 5 2 Cr-54 0.0 0.0 -24 5 2 C-Nat 0.0 0.0 -25 5 2 Cu-63 0.0 0.0 -26 5 2 Cu-65 0.0 0.0 material group in group out nuclide mean std. dev. -81 5 1 1 Fe-54 0.0 0.0 -82 5 1 1 Fe-56 0.0 0.0 -83 5 1 1 Fe-57 0.0 0.0 -84 5 1 1 Fe-58 0.0 0.0 -85 5 1 1 Ni-58 0.0 0.0 -86 5 1 1 Ni-60 0.0 0.0 -87 5 1 1 Ni-61 0.0 0.0 -88 5 1 1 Ni-62 0.0 0.0 -89 5 1 1 Ni-64 0.0 0.0 -90 5 1 1 Mn-55 0.0 0.0 -91 5 1 1 Mo-92 0.0 0.0 -92 5 1 1 Mo-94 0.0 0.0 -93 5 1 1 Mo-95 0.0 0.0 -94 5 1 1 Mo-96 0.0 0.0 -95 5 1 1 Mo-97 0.0 0.0 -96 5 1 1 Mo-98 0.0 0.0 -97 5 1 1 Mo-100 0.0 0.0 -98 5 1 1 Si-28 0.0 0.0 -99 5 1 1 Si-29 0.0 0.0 -100 5 1 1 Si-30 0.0 0.0 -101 5 1 1 Cr-50 0.0 0.0 -102 5 1 1 Cr-52 0.0 0.0 -103 5 1 1 Cr-53 0.0 0.0 -104 5 1 1 Cr-54 0.0 0.0 -105 5 1 1 C-Nat 0.0 0.0 -106 5 1 1 Cu-63 0.0 0.0 -107 5 1 1 Cu-65 0.0 0.0 -54 5 1 2 Fe-54 0.0 0.0 -55 5 1 2 Fe-56 0.0 0.0 -56 5 1 2 Fe-57 0.0 0.0 -57 5 1 2 Fe-58 0.0 0.0 -58 5 1 2 Ni-58 0.0 0.0 -59 5 1 2 Ni-60 0.0 0.0 -60 5 1 2 Ni-61 0.0 0.0 -61 5 1 2 Ni-62 0.0 0.0 -62 5 1 2 Ni-64 0.0 0.0 -63 5 1 2 Mn-55 0.0 0.0 -64 5 1 2 Mo-92 0.0 0.0 -65 5 1 2 Mo-94 0.0 0.0 -66 5 1 2 Mo-95 0.0 0.0 -67 5 1 2 Mo-96 0.0 0.0 -68 5 1 2 Mo-97 0.0 0.0 -69 5 1 2 Mo-98 0.0 0.0 -70 5 1 2 Mo-100 0.0 0.0 -71 5 1 2 Si-28 0.0 0.0 -72 5 1 2 Si-29 0.0 0.0 -73 5 1 2 Si-30 0.0 0.0 -74 5 1 2 Cr-50 0.0 0.0 -75 5 1 2 Cr-52 0.0 0.0 -76 5 1 2 Cr-53 0.0 0.0 -77 5 1 2 Cr-54 0.0 0.0 -78 5 1 2 C-Nat 0.0 0.0 -79 5 1 2 Cu-63 0.0 0.0 -80 5 1 2 Cu-65 0.0 0.0 -27 5 2 1 Fe-54 0.0 0.0 -28 5 2 1 Fe-56 0.0 0.0 -29 5 2 1 Fe-57 0.0 0.0 -30 5 2 1 Fe-58 0.0 0.0 -31 5 2 1 Ni-58 0.0 0.0 -32 5 2 1 Ni-60 0.0 0.0 -33 5 2 1 Ni-61 0.0 0.0 -34 5 2 1 Ni-62 0.0 0.0 -35 5 2 1 Ni-64 0.0 0.0 -36 5 2 1 Mn-55 0.0 0.0 -37 5 2 1 Mo-92 0.0 0.0 -38 5 2 1 Mo-94 0.0 0.0 -39 5 2 1 Mo-95 0.0 0.0 -40 5 2 1 Mo-96 0.0 0.0 -41 5 2 1 Mo-97 0.0 0.0 -42 5 2 1 Mo-98 0.0 0.0 -43 5 2 1 Mo-100 0.0 0.0 -44 5 2 1 Si-28 0.0 0.0 -45 5 2 1 Si-29 0.0 0.0 -46 5 2 1 Si-30 0.0 0.0 -47 5 2 1 Cr-50 0.0 0.0 -48 5 2 1 Cr-52 0.0 0.0 -49 5 2 1 Cr-53 0.0 0.0 -50 5 2 1 Cr-54 0.0 0.0 -51 5 2 1 C-Nat 0.0 0.0 -52 5 2 1 Cu-63 0.0 0.0 -53 5 2 1 Cu-65 0.0 0.0 -0 5 2 2 Fe-54 0.0 0.0 -1 5 2 2 Fe-56 0.0 0.0 -2 5 2 2 Fe-57 0.0 0.0 -3 5 2 2 Fe-58 0.0 0.0 -4 5 2 2 Ni-58 0.0 0.0 -5 5 2 2 Ni-60 0.0 0.0 -6 5 2 2 Ni-61 0.0 0.0 -7 5 2 2 Ni-62 0.0 0.0 -8 5 2 2 Ni-64 0.0 0.0 -9 5 2 2 Mn-55 0.0 0.0 -10 5 2 2 Mo-92 0.0 0.0 -11 5 2 2 Mo-94 0.0 0.0 -12 5 2 2 Mo-95 0.0 0.0 -13 5 2 2 Mo-96 0.0 0.0 -14 5 2 2 Mo-97 0.0 0.0 -15 5 2 2 Mo-98 0.0 0.0 -16 5 2 2 Mo-100 0.0 0.0 -17 5 2 2 Si-28 0.0 0.0 -18 5 2 2 Si-29 0.0 0.0 -19 5 2 2 Si-30 0.0 0.0 -20 5 2 2 Cr-50 0.0 0.0 -21 5 2 2 Cr-52 0.0 0.0 -22 5 2 2 Cr-53 0.0 0.0 -23 5 2 2 Cr-54 0.0 0.0 -24 5 2 2 C-Nat 0.0 0.0 -25 5 2 2 Cu-63 0.0 0.0 -26 5 2 2 Cu-65 0.0 0.0 material group out nuclide mean std. dev. -27 5 1 Fe-54 0.0 0.0 -28 5 1 Fe-56 0.0 0.0 -29 5 1 Fe-57 0.0 0.0 -30 5 1 Fe-58 0.0 0.0 -31 5 1 Ni-58 0.0 0.0 -32 5 1 Ni-60 0.0 0.0 -33 5 1 Ni-61 0.0 0.0 -34 5 1 Ni-62 0.0 0.0 -35 5 1 Ni-64 0.0 0.0 -36 5 1 Mn-55 0.0 0.0 -37 5 1 Mo-92 0.0 0.0 -38 5 1 Mo-94 0.0 0.0 -39 5 1 Mo-95 0.0 0.0 -40 5 1 Mo-96 0.0 0.0 -41 5 1 Mo-97 0.0 0.0 -42 5 1 Mo-98 0.0 0.0 -43 5 1 Mo-100 0.0 0.0 -44 5 1 Si-28 0.0 0.0 -45 5 1 Si-29 0.0 0.0 -46 5 1 Si-30 0.0 0.0 -47 5 1 Cr-50 0.0 0.0 -48 5 1 Cr-52 0.0 0.0 -49 5 1 Cr-53 0.0 0.0 -50 5 1 Cr-54 0.0 0.0 -51 5 1 C-Nat 0.0 0.0 -52 5 1 Cu-63 0.0 0.0 -53 5 1 Cu-65 0.0 0.0 -0 5 2 Fe-54 0.0 0.0 -1 5 2 Fe-56 0.0 0.0 -2 5 2 Fe-57 0.0 0.0 -3 5 2 Fe-58 0.0 0.0 -4 5 2 Ni-58 0.0 0.0 -5 5 2 Ni-60 0.0 0.0 -6 5 2 Ni-61 0.0 0.0 -7 5 2 Ni-62 0.0 0.0 -8 5 2 Ni-64 0.0 0.0 -9 5 2 Mn-55 0.0 0.0 -10 5 2 Mo-92 0.0 0.0 -11 5 2 Mo-94 0.0 0.0 -12 5 2 Mo-95 0.0 0.0 -13 5 2 Mo-96 0.0 0.0 -14 5 2 Mo-97 0.0 0.0 -15 5 2 Mo-98 0.0 0.0 -16 5 2 Mo-100 0.0 0.0 -17 5 2 Si-28 0.0 0.0 -18 5 2 Si-29 0.0 0.0 -19 5 2 Si-30 0.0 0.0 -20 5 2 Cr-50 0.0 0.0 -21 5 2 Cr-52 0.0 0.0 -22 5 2 Cr-53 0.0 0.0 -23 5 2 Cr-54 0.0 0.0 -24 5 2 C-Nat 0.0 0.0 -25 5 2 Cu-63 0.0 0.0 -26 5 2 Cu-65 0.0 0.0 material group in nuclide mean std. dev. -21 6 1 H-1 0.0 0.0 -22 6 1 O-16 0.0 0.0 -23 6 1 B-10 0.0 0.0 -24 6 1 B-11 0.0 0.0 -25 6 1 Fe-54 0.0 0.0 -26 6 1 Fe-56 0.0 0.0 -27 6 1 Fe-57 0.0 0.0 -28 6 1 Fe-58 0.0 0.0 -29 6 1 Ni-58 0.0 0.0 -30 6 1 Ni-60 0.0 0.0 -31 6 1 Ni-61 0.0 0.0 -32 6 1 Ni-62 0.0 0.0 -33 6 1 Ni-64 0.0 0.0 -34 6 1 Mn-55 0.0 0.0 -35 6 1 Si-28 0.0 0.0 -36 6 1 Si-29 0.0 0.0 -37 6 1 Si-30 0.0 0.0 -38 6 1 Cr-50 0.0 0.0 -39 6 1 Cr-52 0.0 0.0 -40 6 1 Cr-53 0.0 0.0 -41 6 1 Cr-54 0.0 0.0 -0 6 2 H-1 0.0 0.0 -1 6 2 O-16 0.0 0.0 -2 6 2 B-10 0.0 0.0 -3 6 2 B-11 0.0 0.0 -4 6 2 Fe-54 0.0 0.0 -5 6 2 Fe-56 0.0 0.0 -6 6 2 Fe-57 0.0 0.0 -7 6 2 Fe-58 0.0 0.0 -8 6 2 Ni-58 0.0 0.0 -9 6 2 Ni-60 0.0 0.0 -10 6 2 Ni-61 0.0 0.0 -11 6 2 Ni-62 0.0 0.0 -12 6 2 Ni-64 0.0 0.0 -13 6 2 Mn-55 0.0 0.0 -14 6 2 Si-28 0.0 0.0 -15 6 2 Si-29 0.0 0.0 -16 6 2 Si-30 0.0 0.0 -17 6 2 Cr-50 0.0 0.0 -18 6 2 Cr-52 0.0 0.0 -19 6 2 Cr-53 0.0 0.0 -20 6 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 6 1 H-1 0.0 0.0 -22 6 1 O-16 0.0 0.0 -23 6 1 B-10 0.0 0.0 -24 6 1 B-11 0.0 0.0 -25 6 1 Fe-54 0.0 0.0 -26 6 1 Fe-56 0.0 0.0 -27 6 1 Fe-57 0.0 0.0 -28 6 1 Fe-58 0.0 0.0 -29 6 1 Ni-58 0.0 0.0 -30 6 1 Ni-60 0.0 0.0 -31 6 1 Ni-61 0.0 0.0 -32 6 1 Ni-62 0.0 0.0 -33 6 1 Ni-64 0.0 0.0 -34 6 1 Mn-55 0.0 0.0 -35 6 1 Si-28 0.0 0.0 -36 6 1 Si-29 0.0 0.0 -37 6 1 Si-30 0.0 0.0 -38 6 1 Cr-50 0.0 0.0 -39 6 1 Cr-52 0.0 0.0 -40 6 1 Cr-53 0.0 0.0 -41 6 1 Cr-54 0.0 0.0 -0 6 2 H-1 0.0 0.0 -1 6 2 O-16 0.0 0.0 -2 6 2 B-10 0.0 0.0 -3 6 2 B-11 0.0 0.0 -4 6 2 Fe-54 0.0 0.0 -5 6 2 Fe-56 0.0 0.0 -6 6 2 Fe-57 0.0 0.0 -7 6 2 Fe-58 0.0 0.0 -8 6 2 Ni-58 0.0 0.0 -9 6 2 Ni-60 0.0 0.0 -10 6 2 Ni-61 0.0 0.0 -11 6 2 Ni-62 0.0 0.0 -12 6 2 Ni-64 0.0 0.0 -13 6 2 Mn-55 0.0 0.0 -14 6 2 Si-28 0.0 0.0 -15 6 2 Si-29 0.0 0.0 -16 6 2 Si-30 0.0 0.0 -17 6 2 Cr-50 0.0 0.0 -18 6 2 Cr-52 0.0 0.0 -19 6 2 Cr-53 0.0 0.0 -20 6 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. -63 6 1 1 H-1 0.0 0.0 -64 6 1 1 O-16 0.0 0.0 -65 6 1 1 B-10 0.0 0.0 -66 6 1 1 B-11 0.0 0.0 -67 6 1 1 Fe-54 0.0 0.0 -68 6 1 1 Fe-56 0.0 0.0 -69 6 1 1 Fe-57 0.0 0.0 -70 6 1 1 Fe-58 0.0 0.0 -71 6 1 1 Ni-58 0.0 0.0 -72 6 1 1 Ni-60 0.0 0.0 -73 6 1 1 Ni-61 0.0 0.0 -74 6 1 1 Ni-62 0.0 0.0 -75 6 1 1 Ni-64 0.0 0.0 -76 6 1 1 Mn-55 0.0 0.0 -77 6 1 1 Si-28 0.0 0.0 -78 6 1 1 Si-29 0.0 0.0 -79 6 1 1 Si-30 0.0 0.0 -80 6 1 1 Cr-50 0.0 0.0 -81 6 1 1 Cr-52 0.0 0.0 -82 6 1 1 Cr-53 0.0 0.0 -83 6 1 1 Cr-54 0.0 0.0 -42 6 1 2 H-1 0.0 0.0 -43 6 1 2 O-16 0.0 0.0 -44 6 1 2 B-10 0.0 0.0 -45 6 1 2 B-11 0.0 0.0 -46 6 1 2 Fe-54 0.0 0.0 -47 6 1 2 Fe-56 0.0 0.0 -48 6 1 2 Fe-57 0.0 0.0 -49 6 1 2 Fe-58 0.0 0.0 -50 6 1 2 Ni-58 0.0 0.0 -51 6 1 2 Ni-60 0.0 0.0 -52 6 1 2 Ni-61 0.0 0.0 -53 6 1 2 Ni-62 0.0 0.0 -54 6 1 2 Ni-64 0.0 0.0 -55 6 1 2 Mn-55 0.0 0.0 -56 6 1 2 Si-28 0.0 0.0 -57 6 1 2 Si-29 0.0 0.0 -58 6 1 2 Si-30 0.0 0.0 -59 6 1 2 Cr-50 0.0 0.0 -60 6 1 2 Cr-52 0.0 0.0 -61 6 1 2 Cr-53 0.0 0.0 -62 6 1 2 Cr-54 0.0 0.0 -21 6 2 1 H-1 0.0 0.0 -22 6 2 1 O-16 0.0 0.0 -23 6 2 1 B-10 0.0 0.0 -24 6 2 1 B-11 0.0 0.0 -25 6 2 1 Fe-54 0.0 0.0 -26 6 2 1 Fe-56 0.0 0.0 -27 6 2 1 Fe-57 0.0 0.0 -28 6 2 1 Fe-58 0.0 0.0 -29 6 2 1 Ni-58 0.0 0.0 -30 6 2 1 Ni-60 0.0 0.0 -31 6 2 1 Ni-61 0.0 0.0 -32 6 2 1 Ni-62 0.0 0.0 -33 6 2 1 Ni-64 0.0 0.0 -34 6 2 1 Mn-55 0.0 0.0 -35 6 2 1 Si-28 0.0 0.0 -36 6 2 1 Si-29 0.0 0.0 -37 6 2 1 Si-30 0.0 0.0 -38 6 2 1 Cr-50 0.0 0.0 -39 6 2 1 Cr-52 0.0 0.0 -40 6 2 1 Cr-53 0.0 0.0 -41 6 2 1 Cr-54 0.0 0.0 -0 6 2 2 H-1 0.0 0.0 -1 6 2 2 O-16 0.0 0.0 -2 6 2 2 B-10 0.0 0.0 -3 6 2 2 B-11 0.0 0.0 -4 6 2 2 Fe-54 0.0 0.0 -5 6 2 2 Fe-56 0.0 0.0 -6 6 2 2 Fe-57 0.0 0.0 -7 6 2 2 Fe-58 0.0 0.0 -8 6 2 2 Ni-58 0.0 0.0 -9 6 2 2 Ni-60 0.0 0.0 -10 6 2 2 Ni-61 0.0 0.0 -11 6 2 2 Ni-62 0.0 0.0 -12 6 2 2 Ni-64 0.0 0.0 -13 6 2 2 Mn-55 0.0 0.0 -14 6 2 2 Si-28 0.0 0.0 -15 6 2 2 Si-29 0.0 0.0 -16 6 2 2 Si-30 0.0 0.0 -17 6 2 2 Cr-50 0.0 0.0 -18 6 2 2 Cr-52 0.0 0.0 -19 6 2 2 Cr-53 0.0 0.0 -20 6 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. -21 6 1 H-1 0.0 0.0 -22 6 1 O-16 0.0 0.0 -23 6 1 B-10 0.0 0.0 -24 6 1 B-11 0.0 0.0 -25 6 1 Fe-54 0.0 0.0 -26 6 1 Fe-56 0.0 0.0 -27 6 1 Fe-57 0.0 0.0 -28 6 1 Fe-58 0.0 0.0 -29 6 1 Ni-58 0.0 0.0 -30 6 1 Ni-60 0.0 0.0 -31 6 1 Ni-61 0.0 0.0 -32 6 1 Ni-62 0.0 0.0 -33 6 1 Ni-64 0.0 0.0 -34 6 1 Mn-55 0.0 0.0 -35 6 1 Si-28 0.0 0.0 -36 6 1 Si-29 0.0 0.0 -37 6 1 Si-30 0.0 0.0 -38 6 1 Cr-50 0.0 0.0 -39 6 1 Cr-52 0.0 0.0 -40 6 1 Cr-53 0.0 0.0 -41 6 1 Cr-54 0.0 0.0 -0 6 2 H-1 0.0 0.0 -1 6 2 O-16 0.0 0.0 -2 6 2 B-10 0.0 0.0 -3 6 2 B-11 0.0 0.0 -4 6 2 Fe-54 0.0 0.0 -5 6 2 Fe-56 0.0 0.0 -6 6 2 Fe-57 0.0 0.0 -7 6 2 Fe-58 0.0 0.0 -8 6 2 Ni-58 0.0 0.0 -9 6 2 Ni-60 0.0 0.0 -10 6 2 Ni-61 0.0 0.0 -11 6 2 Ni-62 0.0 0.0 -12 6 2 Ni-64 0.0 0.0 -13 6 2 Mn-55 0.0 0.0 -14 6 2 Si-28 0.0 0.0 -15 6 2 Si-29 0.0 0.0 -16 6 2 Si-30 0.0 0.0 -17 6 2 Cr-50 0.0 0.0 -18 6 2 Cr-52 0.0 0.0 -19 6 2 Cr-53 0.0 0.0 -20 6 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 7 1 H-1 0.0 0.0 -22 7 1 O-16 0.0 0.0 -23 7 1 B-10 0.0 0.0 -24 7 1 B-11 0.0 0.0 -25 7 1 Fe-54 0.0 0.0 -26 7 1 Fe-56 0.0 0.0 -27 7 1 Fe-57 0.0 0.0 -28 7 1 Fe-58 0.0 0.0 -29 7 1 Ni-58 0.0 0.0 -30 7 1 Ni-60 0.0 0.0 -31 7 1 Ni-61 0.0 0.0 -32 7 1 Ni-62 0.0 0.0 -33 7 1 Ni-64 0.0 0.0 -34 7 1 Mn-55 0.0 0.0 -35 7 1 Si-28 0.0 0.0 -36 7 1 Si-29 0.0 0.0 -37 7 1 Si-30 0.0 0.0 -38 7 1 Cr-50 0.0 0.0 -39 7 1 Cr-52 0.0 0.0 -40 7 1 Cr-53 0.0 0.0 -41 7 1 Cr-54 0.0 0.0 -0 7 2 H-1 0.0 0.0 -1 7 2 O-16 0.0 0.0 -2 7 2 B-10 0.0 0.0 -3 7 2 B-11 0.0 0.0 -4 7 2 Fe-54 0.0 0.0 -5 7 2 Fe-56 0.0 0.0 -6 7 2 Fe-57 0.0 0.0 -7 7 2 Fe-58 0.0 0.0 -8 7 2 Ni-58 0.0 0.0 -9 7 2 Ni-60 0.0 0.0 -10 7 2 Ni-61 0.0 0.0 -11 7 2 Ni-62 0.0 0.0 -12 7 2 Ni-64 0.0 0.0 -13 7 2 Mn-55 0.0 0.0 -14 7 2 Si-28 0.0 0.0 -15 7 2 Si-29 0.0 0.0 -16 7 2 Si-30 0.0 0.0 -17 7 2 Cr-50 0.0 0.0 -18 7 2 Cr-52 0.0 0.0 -19 7 2 Cr-53 0.0 0.0 -20 7 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 7 1 H-1 0.0 0.0 -22 7 1 O-16 0.0 0.0 -23 7 1 B-10 0.0 0.0 -24 7 1 B-11 0.0 0.0 -25 7 1 Fe-54 0.0 0.0 -26 7 1 Fe-56 0.0 0.0 -27 7 1 Fe-57 0.0 0.0 -28 7 1 Fe-58 0.0 0.0 -29 7 1 Ni-58 0.0 0.0 -30 7 1 Ni-60 0.0 0.0 -31 7 1 Ni-61 0.0 0.0 -32 7 1 Ni-62 0.0 0.0 -33 7 1 Ni-64 0.0 0.0 -34 7 1 Mn-55 0.0 0.0 -35 7 1 Si-28 0.0 0.0 -36 7 1 Si-29 0.0 0.0 -37 7 1 Si-30 0.0 0.0 -38 7 1 Cr-50 0.0 0.0 -39 7 1 Cr-52 0.0 0.0 -40 7 1 Cr-53 0.0 0.0 -41 7 1 Cr-54 0.0 0.0 -0 7 2 H-1 0.0 0.0 -1 7 2 O-16 0.0 0.0 -2 7 2 B-10 0.0 0.0 -3 7 2 B-11 0.0 0.0 -4 7 2 Fe-54 0.0 0.0 -5 7 2 Fe-56 0.0 0.0 -6 7 2 Fe-57 0.0 0.0 -7 7 2 Fe-58 0.0 0.0 -8 7 2 Ni-58 0.0 0.0 -9 7 2 Ni-60 0.0 0.0 -10 7 2 Ni-61 0.0 0.0 -11 7 2 Ni-62 0.0 0.0 -12 7 2 Ni-64 0.0 0.0 -13 7 2 Mn-55 0.0 0.0 -14 7 2 Si-28 0.0 0.0 -15 7 2 Si-29 0.0 0.0 -16 7 2 Si-30 0.0 0.0 -17 7 2 Cr-50 0.0 0.0 -18 7 2 Cr-52 0.0 0.0 -19 7 2 Cr-53 0.0 0.0 -20 7 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. -63 7 1 1 H-1 0.0 0.0 -64 7 1 1 O-16 0.0 0.0 -65 7 1 1 B-10 0.0 0.0 -66 7 1 1 B-11 0.0 0.0 -67 7 1 1 Fe-54 0.0 0.0 -68 7 1 1 Fe-56 0.0 0.0 -69 7 1 1 Fe-57 0.0 0.0 -70 7 1 1 Fe-58 0.0 0.0 -71 7 1 1 Ni-58 0.0 0.0 -72 7 1 1 Ni-60 0.0 0.0 -73 7 1 1 Ni-61 0.0 0.0 -74 7 1 1 Ni-62 0.0 0.0 -75 7 1 1 Ni-64 0.0 0.0 -76 7 1 1 Mn-55 0.0 0.0 -77 7 1 1 Si-28 0.0 0.0 -78 7 1 1 Si-29 0.0 0.0 -79 7 1 1 Si-30 0.0 0.0 -80 7 1 1 Cr-50 0.0 0.0 -81 7 1 1 Cr-52 0.0 0.0 -82 7 1 1 Cr-53 0.0 0.0 -83 7 1 1 Cr-54 0.0 0.0 -42 7 1 2 H-1 0.0 0.0 -43 7 1 2 O-16 0.0 0.0 -44 7 1 2 B-10 0.0 0.0 -45 7 1 2 B-11 0.0 0.0 -46 7 1 2 Fe-54 0.0 0.0 -47 7 1 2 Fe-56 0.0 0.0 -48 7 1 2 Fe-57 0.0 0.0 -49 7 1 2 Fe-58 0.0 0.0 -50 7 1 2 Ni-58 0.0 0.0 -51 7 1 2 Ni-60 0.0 0.0 -52 7 1 2 Ni-61 0.0 0.0 -53 7 1 2 Ni-62 0.0 0.0 -54 7 1 2 Ni-64 0.0 0.0 -55 7 1 2 Mn-55 0.0 0.0 -56 7 1 2 Si-28 0.0 0.0 -57 7 1 2 Si-29 0.0 0.0 -58 7 1 2 Si-30 0.0 0.0 -59 7 1 2 Cr-50 0.0 0.0 -60 7 1 2 Cr-52 0.0 0.0 -61 7 1 2 Cr-53 0.0 0.0 -62 7 1 2 Cr-54 0.0 0.0 -21 7 2 1 H-1 0.0 0.0 -22 7 2 1 O-16 0.0 0.0 -23 7 2 1 B-10 0.0 0.0 -24 7 2 1 B-11 0.0 0.0 -25 7 2 1 Fe-54 0.0 0.0 -26 7 2 1 Fe-56 0.0 0.0 -27 7 2 1 Fe-57 0.0 0.0 -28 7 2 1 Fe-58 0.0 0.0 -29 7 2 1 Ni-58 0.0 0.0 -30 7 2 1 Ni-60 0.0 0.0 -31 7 2 1 Ni-61 0.0 0.0 -32 7 2 1 Ni-62 0.0 0.0 -33 7 2 1 Ni-64 0.0 0.0 -34 7 2 1 Mn-55 0.0 0.0 -35 7 2 1 Si-28 0.0 0.0 -36 7 2 1 Si-29 0.0 0.0 -37 7 2 1 Si-30 0.0 0.0 -38 7 2 1 Cr-50 0.0 0.0 -39 7 2 1 Cr-52 0.0 0.0 -40 7 2 1 Cr-53 0.0 0.0 -41 7 2 1 Cr-54 0.0 0.0 -0 7 2 2 H-1 0.0 0.0 -1 7 2 2 O-16 0.0 0.0 -2 7 2 2 B-10 0.0 0.0 -3 7 2 2 B-11 0.0 0.0 -4 7 2 2 Fe-54 0.0 0.0 -5 7 2 2 Fe-56 0.0 0.0 -6 7 2 2 Fe-57 0.0 0.0 -7 7 2 2 Fe-58 0.0 0.0 -8 7 2 2 Ni-58 0.0 0.0 -9 7 2 2 Ni-60 0.0 0.0 -10 7 2 2 Ni-61 0.0 0.0 -11 7 2 2 Ni-62 0.0 0.0 -12 7 2 2 Ni-64 0.0 0.0 -13 7 2 2 Mn-55 0.0 0.0 -14 7 2 2 Si-28 0.0 0.0 -15 7 2 2 Si-29 0.0 0.0 -16 7 2 2 Si-30 0.0 0.0 -17 7 2 2 Cr-50 0.0 0.0 -18 7 2 2 Cr-52 0.0 0.0 -19 7 2 2 Cr-53 0.0 0.0 -20 7 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. -21 7 1 H-1 0.0 0.0 -22 7 1 O-16 0.0 0.0 -23 7 1 B-10 0.0 0.0 -24 7 1 B-11 0.0 0.0 -25 7 1 Fe-54 0.0 0.0 -26 7 1 Fe-56 0.0 0.0 -27 7 1 Fe-57 0.0 0.0 -28 7 1 Fe-58 0.0 0.0 -29 7 1 Ni-58 0.0 0.0 -30 7 1 Ni-60 0.0 0.0 -31 7 1 Ni-61 0.0 0.0 -32 7 1 Ni-62 0.0 0.0 -33 7 1 Ni-64 0.0 0.0 -34 7 1 Mn-55 0.0 0.0 -35 7 1 Si-28 0.0 0.0 -36 7 1 Si-29 0.0 0.0 -37 7 1 Si-30 0.0 0.0 -38 7 1 Cr-50 0.0 0.0 -39 7 1 Cr-52 0.0 0.0 -40 7 1 Cr-53 0.0 0.0 -41 7 1 Cr-54 0.0 0.0 -0 7 2 H-1 0.0 0.0 -1 7 2 O-16 0.0 0.0 -2 7 2 B-10 0.0 0.0 -3 7 2 B-11 0.0 0.0 -4 7 2 Fe-54 0.0 0.0 -5 7 2 Fe-56 0.0 0.0 -6 7 2 Fe-57 0.0 0.0 -7 7 2 Fe-58 0.0 0.0 -8 7 2 Ni-58 0.0 0.0 -9 7 2 Ni-60 0.0 0.0 -10 7 2 Ni-61 0.0 0.0 -11 7 2 Ni-62 0.0 0.0 -12 7 2 Ni-64 0.0 0.0 -13 7 2 Mn-55 0.0 0.0 -14 7 2 Si-28 0.0 0.0 -15 7 2 Si-29 0.0 0.0 -16 7 2 Si-30 0.0 0.0 -17 7 2 Cr-50 0.0 0.0 -18 7 2 Cr-52 0.0 0.0 -19 7 2 Cr-53 0.0 0.0 -20 7 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 8 1 H-1 0.0 0.0 -22 8 1 O-16 0.0 0.0 -23 8 1 B-10 0.0 0.0 -24 8 1 B-11 0.0 0.0 -25 8 1 Fe-54 0.0 0.0 -26 8 1 Fe-56 0.0 0.0 -27 8 1 Fe-57 0.0 0.0 -28 8 1 Fe-58 0.0 0.0 -29 8 1 Ni-58 0.0 0.0 -30 8 1 Ni-60 0.0 0.0 -31 8 1 Ni-61 0.0 0.0 -32 8 1 Ni-62 0.0 0.0 -33 8 1 Ni-64 0.0 0.0 -34 8 1 Mn-55 0.0 0.0 -35 8 1 Si-28 0.0 0.0 -36 8 1 Si-29 0.0 0.0 -37 8 1 Si-30 0.0 0.0 -38 8 1 Cr-50 0.0 0.0 -39 8 1 Cr-52 0.0 0.0 -40 8 1 Cr-53 0.0 0.0 -41 8 1 Cr-54 0.0 0.0 -0 8 2 H-1 0.0 0.0 -1 8 2 O-16 0.0 0.0 -2 8 2 B-10 0.0 0.0 -3 8 2 B-11 0.0 0.0 -4 8 2 Fe-54 0.0 0.0 -5 8 2 Fe-56 0.0 0.0 -6 8 2 Fe-57 0.0 0.0 -7 8 2 Fe-58 0.0 0.0 -8 8 2 Ni-58 0.0 0.0 -9 8 2 Ni-60 0.0 0.0 -10 8 2 Ni-61 0.0 0.0 -11 8 2 Ni-62 0.0 0.0 -12 8 2 Ni-64 0.0 0.0 -13 8 2 Mn-55 0.0 0.0 -14 8 2 Si-28 0.0 0.0 -15 8 2 Si-29 0.0 0.0 -16 8 2 Si-30 0.0 0.0 -17 8 2 Cr-50 0.0 0.0 -18 8 2 Cr-52 0.0 0.0 -19 8 2 Cr-53 0.0 0.0 -20 8 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 8 1 H-1 0.0 0.0 -22 8 1 O-16 0.0 0.0 -23 8 1 B-10 0.0 0.0 -24 8 1 B-11 0.0 0.0 -25 8 1 Fe-54 0.0 0.0 -26 8 1 Fe-56 0.0 0.0 -27 8 1 Fe-57 0.0 0.0 -28 8 1 Fe-58 0.0 0.0 -29 8 1 Ni-58 0.0 0.0 -30 8 1 Ni-60 0.0 0.0 -31 8 1 Ni-61 0.0 0.0 -32 8 1 Ni-62 0.0 0.0 -33 8 1 Ni-64 0.0 0.0 -34 8 1 Mn-55 0.0 0.0 -35 8 1 Si-28 0.0 0.0 -36 8 1 Si-29 0.0 0.0 -37 8 1 Si-30 0.0 0.0 -38 8 1 Cr-50 0.0 0.0 -39 8 1 Cr-52 0.0 0.0 -40 8 1 Cr-53 0.0 0.0 -41 8 1 Cr-54 0.0 0.0 -0 8 2 H-1 0.0 0.0 -1 8 2 O-16 0.0 0.0 -2 8 2 B-10 0.0 0.0 -3 8 2 B-11 0.0 0.0 -4 8 2 Fe-54 0.0 0.0 -5 8 2 Fe-56 0.0 0.0 -6 8 2 Fe-57 0.0 0.0 -7 8 2 Fe-58 0.0 0.0 -8 8 2 Ni-58 0.0 0.0 -9 8 2 Ni-60 0.0 0.0 -10 8 2 Ni-61 0.0 0.0 -11 8 2 Ni-62 0.0 0.0 -12 8 2 Ni-64 0.0 0.0 -13 8 2 Mn-55 0.0 0.0 -14 8 2 Si-28 0.0 0.0 -15 8 2 Si-29 0.0 0.0 -16 8 2 Si-30 0.0 0.0 -17 8 2 Cr-50 0.0 0.0 -18 8 2 Cr-52 0.0 0.0 -19 8 2 Cr-53 0.0 0.0 -20 8 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. -63 8 1 1 H-1 0.0 0.0 -64 8 1 1 O-16 0.0 0.0 -65 8 1 1 B-10 0.0 0.0 -66 8 1 1 B-11 0.0 0.0 -67 8 1 1 Fe-54 0.0 0.0 -68 8 1 1 Fe-56 0.0 0.0 -69 8 1 1 Fe-57 0.0 0.0 -70 8 1 1 Fe-58 0.0 0.0 -71 8 1 1 Ni-58 0.0 0.0 -72 8 1 1 Ni-60 0.0 0.0 -73 8 1 1 Ni-61 0.0 0.0 -74 8 1 1 Ni-62 0.0 0.0 -75 8 1 1 Ni-64 0.0 0.0 -76 8 1 1 Mn-55 0.0 0.0 -77 8 1 1 Si-28 0.0 0.0 -78 8 1 1 Si-29 0.0 0.0 -79 8 1 1 Si-30 0.0 0.0 -80 8 1 1 Cr-50 0.0 0.0 -81 8 1 1 Cr-52 0.0 0.0 -82 8 1 1 Cr-53 0.0 0.0 -83 8 1 1 Cr-54 0.0 0.0 -42 8 1 2 H-1 0.0 0.0 -43 8 1 2 O-16 0.0 0.0 -44 8 1 2 B-10 0.0 0.0 -45 8 1 2 B-11 0.0 0.0 -46 8 1 2 Fe-54 0.0 0.0 -47 8 1 2 Fe-56 0.0 0.0 -48 8 1 2 Fe-57 0.0 0.0 -49 8 1 2 Fe-58 0.0 0.0 -50 8 1 2 Ni-58 0.0 0.0 -51 8 1 2 Ni-60 0.0 0.0 -52 8 1 2 Ni-61 0.0 0.0 -53 8 1 2 Ni-62 0.0 0.0 -54 8 1 2 Ni-64 0.0 0.0 -55 8 1 2 Mn-55 0.0 0.0 -56 8 1 2 Si-28 0.0 0.0 -57 8 1 2 Si-29 0.0 0.0 -58 8 1 2 Si-30 0.0 0.0 -59 8 1 2 Cr-50 0.0 0.0 -60 8 1 2 Cr-52 0.0 0.0 -61 8 1 2 Cr-53 0.0 0.0 -62 8 1 2 Cr-54 0.0 0.0 -21 8 2 1 H-1 0.0 0.0 -22 8 2 1 O-16 0.0 0.0 -23 8 2 1 B-10 0.0 0.0 -24 8 2 1 B-11 0.0 0.0 -25 8 2 1 Fe-54 0.0 0.0 -26 8 2 1 Fe-56 0.0 0.0 -27 8 2 1 Fe-57 0.0 0.0 -28 8 2 1 Fe-58 0.0 0.0 -29 8 2 1 Ni-58 0.0 0.0 -30 8 2 1 Ni-60 0.0 0.0 -31 8 2 1 Ni-61 0.0 0.0 -32 8 2 1 Ni-62 0.0 0.0 -33 8 2 1 Ni-64 0.0 0.0 -34 8 2 1 Mn-55 0.0 0.0 -35 8 2 1 Si-28 0.0 0.0 -36 8 2 1 Si-29 0.0 0.0 -37 8 2 1 Si-30 0.0 0.0 -38 8 2 1 Cr-50 0.0 0.0 -39 8 2 1 Cr-52 0.0 0.0 -40 8 2 1 Cr-53 0.0 0.0 -41 8 2 1 Cr-54 0.0 0.0 -0 8 2 2 H-1 0.0 0.0 -1 8 2 2 O-16 0.0 0.0 -2 8 2 2 B-10 0.0 0.0 -3 8 2 2 B-11 0.0 0.0 -4 8 2 2 Fe-54 0.0 0.0 -5 8 2 2 Fe-56 0.0 0.0 -6 8 2 2 Fe-57 0.0 0.0 -7 8 2 2 Fe-58 0.0 0.0 -8 8 2 2 Ni-58 0.0 0.0 -9 8 2 2 Ni-60 0.0 0.0 -10 8 2 2 Ni-61 0.0 0.0 -11 8 2 2 Ni-62 0.0 0.0 -12 8 2 2 Ni-64 0.0 0.0 -13 8 2 2 Mn-55 0.0 0.0 -14 8 2 2 Si-28 0.0 0.0 -15 8 2 2 Si-29 0.0 0.0 -16 8 2 2 Si-30 0.0 0.0 -17 8 2 2 Cr-50 0.0 0.0 -18 8 2 2 Cr-52 0.0 0.0 -19 8 2 2 Cr-53 0.0 0.0 -20 8 2 2 Cr-54 0.0 0.0 material group out nuclide mean std. dev. -21 8 1 H-1 0.0 0.0 -22 8 1 O-16 0.0 0.0 -23 8 1 B-10 0.0 0.0 -24 8 1 B-11 0.0 0.0 -25 8 1 Fe-54 0.0 0.0 -26 8 1 Fe-56 0.0 0.0 -27 8 1 Fe-57 0.0 0.0 -28 8 1 Fe-58 0.0 0.0 -29 8 1 Ni-58 0.0 0.0 -30 8 1 Ni-60 0.0 0.0 -31 8 1 Ni-61 0.0 0.0 -32 8 1 Ni-62 0.0 0.0 -33 8 1 Ni-64 0.0 0.0 -34 8 1 Mn-55 0.0 0.0 -35 8 1 Si-28 0.0 0.0 -36 8 1 Si-29 0.0 0.0 -37 8 1 Si-30 0.0 0.0 -38 8 1 Cr-50 0.0 0.0 -39 8 1 Cr-52 0.0 0.0 -40 8 1 Cr-53 0.0 0.0 -41 8 1 Cr-54 0.0 0.0 -0 8 2 H-1 0.0 0.0 -1 8 2 O-16 0.0 0.0 -2 8 2 B-10 0.0 0.0 -3 8 2 B-11 0.0 0.0 -4 8 2 Fe-54 0.0 0.0 -5 8 2 Fe-56 0.0 0.0 -6 8 2 Fe-57 0.0 0.0 -7 8 2 Fe-58 0.0 0.0 -8 8 2 Ni-58 0.0 0.0 -9 8 2 Ni-60 0.0 0.0 -10 8 2 Ni-61 0.0 0.0 -11 8 2 Ni-62 0.0 0.0 -12 8 2 Ni-64 0.0 0.0 -13 8 2 Mn-55 0.0 0.0 -14 8 2 Si-28 0.0 0.0 -15 8 2 Si-29 0.0 0.0 -16 8 2 Si-30 0.0 0.0 -17 8 2 Cr-50 0.0 0.0 -18 8 2 Cr-52 0.0 0.0 -19 8 2 Cr-53 0.0 0.0 -20 8 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 9 1 H-1 0.150655 0.480993 -22 9 1 O-16 0.116221 0.114089 -23 9 1 B-10 0.000000 0.000000 -24 9 1 B-11 0.000000 0.000000 -25 9 1 Fe-54 0.000000 0.000000 -26 9 1 Fe-56 0.186217 0.199795 -27 9 1 Fe-57 0.000000 0.000000 -28 9 1 Fe-58 0.000000 0.000000 -29 9 1 Ni-58 0.000000 0.000000 -30 9 1 Ni-60 0.000000 0.000000 -31 9 1 Ni-61 0.000000 0.000000 -32 9 1 Ni-62 0.000000 0.000000 -33 9 1 Ni-64 0.000000 0.000000 -34 9 1 Mn-55 0.000000 0.000000 -35 9 1 Si-28 0.000000 0.000000 -36 9 1 Si-29 0.000000 0.000000 -37 9 1 Si-30 0.000000 0.000000 -38 9 1 Cr-50 0.000000 0.000000 -39 9 1 Cr-52 0.000000 0.000000 -40 9 1 Cr-53 0.147443 0.139574 -41 9 1 Cr-54 0.000000 0.000000 -0 9 2 H-1 0.000000 0.000000 -1 9 2 O-16 0.000000 0.000000 -2 9 2 B-10 0.000000 0.000000 -3 9 2 B-11 0.000000 0.000000 -4 9 2 Fe-54 0.000000 0.000000 -5 9 2 Fe-56 0.000000 0.000000 -6 9 2 Fe-57 0.000000 0.000000 -7 9 2 Fe-58 0.000000 0.000000 -8 9 2 Ni-58 0.000000 0.000000 -9 9 2 Ni-60 0.000000 0.000000 -10 9 2 Ni-61 0.000000 0.000000 -11 9 2 Ni-62 0.000000 0.000000 -12 9 2 Ni-64 0.000000 0.000000 -13 9 2 Mn-55 0.000000 0.000000 -14 9 2 Si-28 0.000000 0.000000 -15 9 2 Si-29 0.000000 0.000000 -16 9 2 Si-30 0.000000 0.000000 -17 9 2 Cr-50 0.000000 0.000000 -18 9 2 Cr-52 0.000000 0.000000 -19 9 2 Cr-53 0.000000 0.000000 -20 9 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. -21 9 1 H-1 0.0 0.0 -22 9 1 O-16 0.0 0.0 -23 9 1 B-10 0.0 0.0 -24 9 1 B-11 0.0 0.0 -25 9 1 Fe-54 0.0 0.0 -26 9 1 Fe-56 0.0 0.0 -27 9 1 Fe-57 0.0 0.0 -28 9 1 Fe-58 0.0 0.0 -29 9 1 Ni-58 0.0 0.0 -30 9 1 Ni-60 0.0 0.0 -31 9 1 Ni-61 0.0 0.0 -32 9 1 Ni-62 0.0 0.0 -33 9 1 Ni-64 0.0 0.0 -34 9 1 Mn-55 0.0 0.0 -35 9 1 Si-28 0.0 0.0 -36 9 1 Si-29 0.0 0.0 -37 9 1 Si-30 0.0 0.0 -38 9 1 Cr-50 0.0 0.0 -39 9 1 Cr-52 0.0 0.0 -40 9 1 Cr-53 0.0 0.0 -41 9 1 Cr-54 0.0 0.0 -0 9 2 H-1 0.0 0.0 -1 9 2 O-16 0.0 0.0 -2 9 2 B-10 0.0 0.0 -3 9 2 B-11 0.0 0.0 -4 9 2 Fe-54 0.0 0.0 -5 9 2 Fe-56 0.0 0.0 -6 9 2 Fe-57 0.0 0.0 -7 9 2 Fe-58 0.0 0.0 -8 9 2 Ni-58 0.0 0.0 -9 9 2 Ni-60 0.0 0.0 -10 9 2 Ni-61 0.0 0.0 -11 9 2 Ni-62 0.0 0.0 -12 9 2 Ni-64 0.0 0.0 -13 9 2 Mn-55 0.0 0.0 -14 9 2 Si-28 0.0 0.0 -15 9 2 Si-29 0.0 0.0 -16 9 2 Si-30 0.0 0.0 -17 9 2 Cr-50 0.0 0.0 -18 9 2 Cr-52 0.0 0.0 -19 9 2 Cr-53 0.0 0.0 -20 9 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. -63 9 1 1 H-1 0.150655 0.480993 -64 9 1 1 O-16 0.116221 0.114089 -65 9 1 1 B-10 0.000000 0.000000 -66 9 1 1 B-11 0.000000 0.000000 -67 9 1 1 Fe-54 0.000000 0.000000 -68 9 1 1 Fe-56 0.186217 0.199795 -69 9 1 1 Fe-57 0.000000 0.000000 -70 9 1 1 Fe-58 0.000000 0.000000 -71 9 1 1 Ni-58 0.000000 0.000000 -72 9 1 1 Ni-60 0.000000 0.000000 -73 9 1 1 Ni-61 0.000000 0.000000 -74 9 1 1 Ni-62 0.000000 0.000000 -75 9 1 1 Ni-64 0.000000 0.000000 -76 9 1 1 Mn-55 0.000000 0.000000 -77 9 1 1 Si-28 0.000000 0.000000 -78 9 1 1 Si-29 0.000000 0.000000 -79 9 1 1 Si-30 0.000000 0.000000 -80 9 1 1 Cr-50 0.000000 0.000000 -81 9 1 1 Cr-52 0.000000 0.000000 -82 9 1 1 Cr-53 0.147443 0.139574 -83 9 1 1 Cr-54 0.000000 0.000000 -42 9 1 2 H-1 0.000000 0.000000 -43 9 1 2 O-16 0.000000 0.000000 -44 9 1 2 B-10 0.000000 0.000000 -45 9 1 2 B-11 0.000000 0.000000 -46 9 1 2 Fe-54 0.000000 0.000000 -47 9 1 2 Fe-56 0.000000 0.000000 -48 9 1 2 Fe-57 0.000000 0.000000 -49 9 1 2 Fe-58 0.000000 0.000000 -50 9 1 2 Ni-58 0.000000 0.000000 -51 9 1 2 Ni-60 0.000000 0.000000 -52 9 1 2 Ni-61 0.000000 0.000000 -53 9 1 2 Ni-62 0.000000 0.000000 -54 9 1 2 Ni-64 0.000000 0.000000 -55 9 1 2 Mn-55 0.000000 0.000000 -56 9 1 2 Si-28 0.000000 0.000000 -57 9 1 2 Si-29 0.000000 0.000000 -58 9 1 2 Si-30 0.000000 0.000000 -59 9 1 2 Cr-50 0.000000 0.000000 -60 9 1 2 Cr-52 0.000000 0.000000 -61 9 1 2 Cr-53 0.000000 0.000000 -62 9 1 2 Cr-54 0.000000 0.000000 -21 9 2 1 H-1 0.000000 0.000000 -22 9 2 1 O-16 0.000000 0.000000 -23 9 2 1 B-10 0.000000 0.000000 -24 9 2 1 B-11 0.000000 0.000000 -25 9 2 1 Fe-54 0.000000 0.000000 -26 9 2 1 Fe-56 0.000000 0.000000 -27 9 2 1 Fe-57 0.000000 0.000000 -28 9 2 1 Fe-58 0.000000 0.000000 -29 9 2 1 Ni-58 0.000000 0.000000 -30 9 2 1 Ni-60 0.000000 0.000000 -31 9 2 1 Ni-61 0.000000 0.000000 -32 9 2 1 Ni-62 0.000000 0.000000 -33 9 2 1 Ni-64 0.000000 0.000000 -34 9 2 1 Mn-55 0.000000 0.000000 -35 9 2 1 Si-28 0.000000 0.000000 -36 9 2 1 Si-29 0.000000 0.000000 -37 9 2 1 Si-30 0.000000 0.000000 -38 9 2 1 Cr-50 0.000000 0.000000 -39 9 2 1 Cr-52 0.000000 0.000000 -40 9 2 1 Cr-53 0.000000 0.000000 -41 9 2 1 Cr-54 0.000000 0.000000 -0 9 2 2 H-1 0.000000 0.000000 -1 9 2 2 O-16 0.000000 0.000000 -2 9 2 2 B-10 0.000000 0.000000 -3 9 2 2 B-11 0.000000 0.000000 -4 9 2 2 Fe-54 0.000000 0.000000 -5 9 2 2 Fe-56 0.000000 0.000000 -6 9 2 2 Fe-57 0.000000 0.000000 -7 9 2 2 Fe-58 0.000000 0.000000 -8 9 2 2 Ni-58 0.000000 0.000000 -9 9 2 2 Ni-60 0.000000 0.000000 -10 9 2 2 Ni-61 0.000000 0.000000 -11 9 2 2 Ni-62 0.000000 0.000000 -12 9 2 2 Ni-64 0.000000 0.000000 -13 9 2 2 Mn-55 0.000000 0.000000 -14 9 2 2 Si-28 0.000000 0.000000 -15 9 2 2 Si-29 0.000000 0.000000 -16 9 2 2 Si-30 0.000000 0.000000 -17 9 2 2 Cr-50 0.000000 0.000000 -18 9 2 2 Cr-52 0.000000 0.000000 -19 9 2 2 Cr-53 0.000000 0.000000 -20 9 2 2 Cr-54 0.000000 0.000000 material group out nuclide mean std. dev. -21 9 1 H-1 0.0 0.0 -22 9 1 O-16 0.0 0.0 -23 9 1 B-10 0.0 0.0 -24 9 1 B-11 0.0 0.0 -25 9 1 Fe-54 0.0 0.0 -26 9 1 Fe-56 0.0 0.0 -27 9 1 Fe-57 0.0 0.0 -28 9 1 Fe-58 0.0 0.0 -29 9 1 Ni-58 0.0 0.0 -30 9 1 Ni-60 0.0 0.0 -31 9 1 Ni-61 0.0 0.0 -32 9 1 Ni-62 0.0 0.0 -33 9 1 Ni-64 0.0 0.0 -34 9 1 Mn-55 0.0 0.0 -35 9 1 Si-28 0.0 0.0 -36 9 1 Si-29 0.0 0.0 -37 9 1 Si-30 0.0 0.0 -38 9 1 Cr-50 0.0 0.0 -39 9 1 Cr-52 0.0 0.0 -40 9 1 Cr-53 0.0 0.0 -41 9 1 Cr-54 0.0 0.0 -0 9 2 H-1 0.0 0.0 -1 9 2 O-16 0.0 0.0 -2 9 2 B-10 0.0 0.0 -3 9 2 B-11 0.0 0.0 -4 9 2 Fe-54 0.0 0.0 -5 9 2 Fe-56 0.0 0.0 -6 9 2 Fe-57 0.0 0.0 -7 9 2 Fe-58 0.0 0.0 -8 9 2 Ni-58 0.0 0.0 -9 9 2 Ni-60 0.0 0.0 -10 9 2 Ni-61 0.0 0.0 -11 9 2 Ni-62 0.0 0.0 -12 9 2 Ni-64 0.0 0.0 -13 9 2 Mn-55 0.0 0.0 -14 9 2 Si-28 0.0 0.0 -15 9 2 Si-29 0.0 0.0 -16 9 2 Si-30 0.0 0.0 -17 9 2 Cr-50 0.0 0.0 -18 9 2 Cr-52 0.0 0.0 -19 9 2 Cr-53 0.0 0.0 -20 9 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -21 10 1 H-1 0.123944 0.541390 -22 10 1 O-16 0.000000 0.000000 -23 10 1 B-10 0.000000 0.000000 -24 10 1 B-11 0.000000 0.000000 -25 10 1 Fe-54 0.000000 0.000000 -26 10 1 Fe-56 0.000000 0.000000 -27 10 1 Fe-57 0.000000 0.000000 -28 10 1 Fe-58 0.000000 0.000000 -29 10 1 Ni-58 0.000000 0.000000 -30 10 1 Ni-60 0.000000 0.000000 -31 10 1 Ni-61 0.000000 0.000000 -32 10 1 Ni-62 0.000000 0.000000 -33 10 1 Ni-64 0.000000 0.000000 -34 10 1 Mn-55 0.000000 0.000000 -35 10 1 Si-28 0.000000 0.000000 -36 10 1 Si-29 0.000000 0.000000 -37 10 1 Si-30 0.000000 0.000000 -38 10 1 Cr-50 0.111571 0.138458 -39 10 1 Cr-52 0.000000 0.000000 -40 10 1 Cr-53 0.000000 0.000000 -41 10 1 Cr-54 0.000000 0.000000 -0 10 2 H-1 0.000000 0.000000 -1 10 2 O-16 0.000000 0.000000 -2 10 2 B-10 0.000000 0.000000 -3 10 2 B-11 0.000000 0.000000 -4 10 2 Fe-54 0.000000 0.000000 -5 10 2 Fe-56 0.000000 0.000000 -6 10 2 Fe-57 0.000000 0.000000 -7 10 2 Fe-58 0.000000 0.000000 -8 10 2 Ni-58 0.000000 0.000000 -9 10 2 Ni-60 0.000000 0.000000 -10 10 2 Ni-61 0.000000 0.000000 -11 10 2 Ni-62 0.000000 0.000000 -12 10 2 Ni-64 0.000000 0.000000 -13 10 2 Mn-55 0.000000 0.000000 -14 10 2 Si-28 0.000000 0.000000 -15 10 2 Si-29 0.000000 0.000000 -16 10 2 Si-30 0.000000 0.000000 -17 10 2 Cr-50 0.000000 0.000000 -18 10 2 Cr-52 0.000000 0.000000 -19 10 2 Cr-53 0.000000 0.000000 -20 10 2 Cr-54 0.000000 0.000000 material group in nuclide mean std. dev. -21 10 1 H-1 0.0 0.0 -22 10 1 O-16 0.0 0.0 -23 10 1 B-10 0.0 0.0 -24 10 1 B-11 0.0 0.0 -25 10 1 Fe-54 0.0 0.0 -26 10 1 Fe-56 0.0 0.0 -27 10 1 Fe-57 0.0 0.0 -28 10 1 Fe-58 0.0 0.0 -29 10 1 Ni-58 0.0 0.0 -30 10 1 Ni-60 0.0 0.0 -31 10 1 Ni-61 0.0 0.0 -32 10 1 Ni-62 0.0 0.0 -33 10 1 Ni-64 0.0 0.0 -34 10 1 Mn-55 0.0 0.0 -35 10 1 Si-28 0.0 0.0 -36 10 1 Si-29 0.0 0.0 -37 10 1 Si-30 0.0 0.0 -38 10 1 Cr-50 0.0 0.0 -39 10 1 Cr-52 0.0 0.0 -40 10 1 Cr-53 0.0 0.0 -41 10 1 Cr-54 0.0 0.0 -0 10 2 H-1 0.0 0.0 -1 10 2 O-16 0.0 0.0 -2 10 2 B-10 0.0 0.0 -3 10 2 B-11 0.0 0.0 -4 10 2 Fe-54 0.0 0.0 -5 10 2 Fe-56 0.0 0.0 -6 10 2 Fe-57 0.0 0.0 -7 10 2 Fe-58 0.0 0.0 -8 10 2 Ni-58 0.0 0.0 -9 10 2 Ni-60 0.0 0.0 -10 10 2 Ni-61 0.0 0.0 -11 10 2 Ni-62 0.0 0.0 -12 10 2 Ni-64 0.0 0.0 -13 10 2 Mn-55 0.0 0.0 -14 10 2 Si-28 0.0 0.0 -15 10 2 Si-29 0.0 0.0 -16 10 2 Si-30 0.0 0.0 -17 10 2 Cr-50 0.0 0.0 -18 10 2 Cr-52 0.0 0.0 -19 10 2 Cr-53 0.0 0.0 -20 10 2 Cr-54 0.0 0.0 material group in group out nuclide mean std. dev. -63 10 1 1 H-1 0.123944 0.541390 -64 10 1 1 O-16 0.000000 0.000000 -65 10 1 1 B-10 0.000000 0.000000 -66 10 1 1 B-11 0.000000 0.000000 -67 10 1 1 Fe-54 0.000000 0.000000 -68 10 1 1 Fe-56 0.000000 0.000000 -69 10 1 1 Fe-57 0.000000 0.000000 -70 10 1 1 Fe-58 0.000000 0.000000 -71 10 1 1 Ni-58 0.000000 0.000000 -72 10 1 1 Ni-60 0.000000 0.000000 -73 10 1 1 Ni-61 0.000000 0.000000 -74 10 1 1 Ni-62 0.000000 0.000000 -75 10 1 1 Ni-64 0.000000 0.000000 -76 10 1 1 Mn-55 0.000000 0.000000 -77 10 1 1 Si-28 0.000000 0.000000 -78 10 1 1 Si-29 0.000000 0.000000 -79 10 1 1 Si-30 0.000000 0.000000 -80 10 1 1 Cr-50 0.111571 0.138458 -81 10 1 1 Cr-52 0.000000 0.000000 -82 10 1 1 Cr-53 0.000000 0.000000 -83 10 1 1 Cr-54 0.000000 0.000000 -42 10 1 2 H-1 0.000000 0.000000 -43 10 1 2 O-16 0.000000 0.000000 -44 10 1 2 B-10 0.000000 0.000000 -45 10 1 2 B-11 0.000000 0.000000 -46 10 1 2 Fe-54 0.000000 0.000000 -47 10 1 2 Fe-56 0.000000 0.000000 -48 10 1 2 Fe-57 0.000000 0.000000 -49 10 1 2 Fe-58 0.000000 0.000000 -50 10 1 2 Ni-58 0.000000 0.000000 -51 10 1 2 Ni-60 0.000000 0.000000 -52 10 1 2 Ni-61 0.000000 0.000000 -53 10 1 2 Ni-62 0.000000 0.000000 -54 10 1 2 Ni-64 0.000000 0.000000 -55 10 1 2 Mn-55 0.000000 0.000000 -56 10 1 2 Si-28 0.000000 0.000000 -57 10 1 2 Si-29 0.000000 0.000000 -58 10 1 2 Si-30 0.000000 0.000000 -59 10 1 2 Cr-50 0.000000 0.000000 -60 10 1 2 Cr-52 0.000000 0.000000 -61 10 1 2 Cr-53 0.000000 0.000000 -62 10 1 2 Cr-54 0.000000 0.000000 -21 10 2 1 H-1 0.000000 0.000000 -22 10 2 1 O-16 0.000000 0.000000 -23 10 2 1 B-10 0.000000 0.000000 -24 10 2 1 B-11 0.000000 0.000000 -25 10 2 1 Fe-54 0.000000 0.000000 -26 10 2 1 Fe-56 0.000000 0.000000 -27 10 2 1 Fe-57 0.000000 0.000000 -28 10 2 1 Fe-58 0.000000 0.000000 -29 10 2 1 Ni-58 0.000000 0.000000 -30 10 2 1 Ni-60 0.000000 0.000000 -31 10 2 1 Ni-61 0.000000 0.000000 -32 10 2 1 Ni-62 0.000000 0.000000 -33 10 2 1 Ni-64 0.000000 0.000000 -34 10 2 1 Mn-55 0.000000 0.000000 -35 10 2 1 Si-28 0.000000 0.000000 -36 10 2 1 Si-29 0.000000 0.000000 -37 10 2 1 Si-30 0.000000 0.000000 -38 10 2 1 Cr-50 0.000000 0.000000 -39 10 2 1 Cr-52 0.000000 0.000000 -40 10 2 1 Cr-53 0.000000 0.000000 -41 10 2 1 Cr-54 0.000000 0.000000 -0 10 2 2 H-1 0.000000 0.000000 -1 10 2 2 O-16 0.000000 0.000000 -2 10 2 2 B-10 0.000000 0.000000 -3 10 2 2 B-11 0.000000 0.000000 -4 10 2 2 Fe-54 0.000000 0.000000 -5 10 2 2 Fe-56 0.000000 0.000000 -6 10 2 2 Fe-57 0.000000 0.000000 -7 10 2 2 Fe-58 0.000000 0.000000 -8 10 2 2 Ni-58 0.000000 0.000000 -9 10 2 2 Ni-60 0.000000 0.000000 -10 10 2 2 Ni-61 0.000000 0.000000 -11 10 2 2 Ni-62 0.000000 0.000000 -12 10 2 2 Ni-64 0.000000 0.000000 -13 10 2 2 Mn-55 0.000000 0.000000 -14 10 2 2 Si-28 0.000000 0.000000 -15 10 2 2 Si-29 0.000000 0.000000 -16 10 2 2 Si-30 0.000000 0.000000 -17 10 2 2 Cr-50 0.000000 0.000000 -18 10 2 2 Cr-52 0.000000 0.000000 -19 10 2 2 Cr-53 0.000000 0.000000 -20 10 2 2 Cr-54 0.000000 0.000000 material group out nuclide mean std. dev. -21 10 1 H-1 0.0 0.0 -22 10 1 O-16 0.0 0.0 -23 10 1 B-10 0.0 0.0 -24 10 1 B-11 0.0 0.0 -25 10 1 Fe-54 0.0 0.0 -26 10 1 Fe-56 0.0 0.0 -27 10 1 Fe-57 0.0 0.0 -28 10 1 Fe-58 0.0 0.0 -29 10 1 Ni-58 0.0 0.0 -30 10 1 Ni-60 0.0 0.0 -31 10 1 Ni-61 0.0 0.0 -32 10 1 Ni-62 0.0 0.0 -33 10 1 Ni-64 0.0 0.0 -34 10 1 Mn-55 0.0 0.0 -35 10 1 Si-28 0.0 0.0 -36 10 1 Si-29 0.0 0.0 -37 10 1 Si-30 0.0 0.0 -38 10 1 Cr-50 0.0 0.0 -39 10 1 Cr-52 0.0 0.0 -40 10 1 Cr-53 0.0 0.0 -41 10 1 Cr-54 0.0 0.0 -0 10 2 H-1 0.0 0.0 -1 10 2 O-16 0.0 0.0 -2 10 2 B-10 0.0 0.0 -3 10 2 B-11 0.0 0.0 -4 10 2 Fe-54 0.0 0.0 -5 10 2 Fe-56 0.0 0.0 -6 10 2 Fe-57 0.0 0.0 -7 10 2 Fe-58 0.0 0.0 -8 10 2 Ni-58 0.0 0.0 -9 10 2 Ni-60 0.0 0.0 -10 10 2 Ni-61 0.0 0.0 -11 10 2 Ni-62 0.0 0.0 -12 10 2 Ni-64 0.0 0.0 -13 10 2 Mn-55 0.0 0.0 -14 10 2 Si-28 0.0 0.0 -15 10 2 Si-29 0.0 0.0 -16 10 2 Si-30 0.0 0.0 -17 10 2 Cr-50 0.0 0.0 -18 10 2 Cr-52 0.0 0.0 -19 10 2 Cr-53 0.0 0.0 -20 10 2 Cr-54 0.0 0.0 material group in nuclide mean std. dev. -9 11 1 H-1 0.131470 0.476035 -10 11 1 O-16 0.028684 0.043000 -11 11 1 B-10 0.000000 0.000000 -12 11 1 B-11 0.000000 0.000000 -13 11 1 Zr-90 0.021980 0.039963 -14 11 1 Zr-91 0.000000 0.000000 -15 11 1 Zr-92 0.000000 0.000000 -16 11 1 Zr-94 0.004191 0.087344 -17 11 1 Zr-96 0.000000 0.000000 -0 11 2 H-1 0.687243 1.239217 -1 11 2 O-16 0.000000 0.000000 -2 11 2 B-10 0.042902 0.060672 -3 11 2 B-11 0.000000 0.000000 -4 11 2 Zr-90 0.039576 0.105193 -5 11 2 Zr-91 0.000000 0.000000 -6 11 2 Zr-92 0.084226 0.103161 -7 11 2 Zr-94 0.092039 0.125985 -8 11 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -9 11 1 H-1 0.0 0.0 -10 11 1 O-16 0.0 0.0 -11 11 1 B-10 0.0 0.0 -12 11 1 B-11 0.0 0.0 -13 11 1 Zr-90 0.0 0.0 -14 11 1 Zr-91 0.0 0.0 -15 11 1 Zr-92 0.0 0.0 -16 11 1 Zr-94 0.0 0.0 -17 11 1 Zr-96 0.0 0.0 -0 11 2 H-1 0.0 0.0 -1 11 2 O-16 0.0 0.0 -2 11 2 B-10 0.0 0.0 -3 11 2 B-11 0.0 0.0 -4 11 2 Zr-90 0.0 0.0 -5 11 2 Zr-91 0.0 0.0 -6 11 2 Zr-92 0.0 0.0 -7 11 2 Zr-94 0.0 0.0 -8 11 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. -27 11 1 1 H-1 0.099594 0.442578 -28 11 1 1 O-16 0.028684 0.043000 -29 11 1 1 B-10 0.000000 0.000000 -30 11 1 1 B-11 0.000000 0.000000 -31 11 1 1 Zr-90 0.021980 0.039963 -32 11 1 1 Zr-91 0.000000 0.000000 -33 11 1 1 Zr-92 0.000000 0.000000 -34 11 1 1 Zr-94 0.004191 0.087344 -35 11 1 1 Zr-96 0.000000 0.000000 -18 11 1 2 H-1 0.031875 0.045078 -19 11 1 2 O-16 0.000000 0.000000 -20 11 1 2 B-10 0.000000 0.000000 -21 11 1 2 B-11 0.000000 0.000000 -22 11 1 2 Zr-90 0.000000 0.000000 -23 11 1 2 Zr-91 0.000000 0.000000 -24 11 1 2 Zr-92 0.000000 0.000000 -25 11 1 2 Zr-94 0.000000 0.000000 -26 11 1 2 Zr-96 0.000000 0.000000 -9 11 2 1 H-1 0.000000 0.000000 -10 11 2 1 O-16 0.000000 0.000000 -11 11 2 1 B-10 0.000000 0.000000 -12 11 2 1 B-11 0.000000 0.000000 -13 11 2 1 Zr-90 0.000000 0.000000 -14 11 2 1 Zr-91 0.000000 0.000000 -15 11 2 1 Zr-92 0.000000 0.000000 -16 11 2 1 Zr-94 0.000000 0.000000 -17 11 2 1 Zr-96 0.000000 0.000000 -0 11 2 2 H-1 0.687243 1.239217 -1 11 2 2 O-16 0.000000 0.000000 -2 11 2 2 B-10 0.000000 0.000000 -3 11 2 2 B-11 0.000000 0.000000 -4 11 2 2 Zr-90 0.039576 0.105193 -5 11 2 2 Zr-91 0.000000 0.000000 -6 11 2 2 Zr-92 0.084226 0.103161 -7 11 2 2 Zr-94 0.092039 0.125985 -8 11 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. -9 11 1 H-1 0.0 0.0 -10 11 1 O-16 0.0 0.0 -11 11 1 B-10 0.0 0.0 -12 11 1 B-11 0.0 0.0 -13 11 1 Zr-90 0.0 0.0 -14 11 1 Zr-91 0.0 0.0 -15 11 1 Zr-92 0.0 0.0 -16 11 1 Zr-94 0.0 0.0 -17 11 1 Zr-96 0.0 0.0 -0 11 2 H-1 0.0 0.0 -1 11 2 O-16 0.0 0.0 -2 11 2 B-10 0.0 0.0 -3 11 2 B-11 0.0 0.0 -4 11 2 Zr-90 0.0 0.0 -5 11 2 Zr-91 0.0 0.0 -6 11 2 Zr-92 0.0 0.0 -7 11 2 Zr-94 0.0 0.0 -8 11 2 Zr-96 0.0 0.0 material group in nuclide mean std. dev. -9 12 1 H-1 0.098944 0.178543 -10 12 1 O-16 0.013270 0.020403 -11 12 1 B-10 0.000000 0.000000 -12 12 1 B-11 0.000000 0.000000 -13 12 1 Zr-90 0.089997 0.075538 -14 12 1 Zr-91 0.000000 0.000000 -15 12 1 Zr-92 0.003501 0.017031 -16 12 1 Zr-94 0.004850 0.016327 -17 12 1 Zr-96 0.002730 0.017476 -0 12 2 H-1 1.261686 1.980336 -1 12 2 O-16 0.079159 0.104796 -2 12 2 B-10 0.016928 0.023940 -3 12 2 B-11 0.000000 0.000000 -4 12 2 Zr-90 0.000000 0.000000 -5 12 2 Zr-91 0.033201 0.040665 -6 12 2 Zr-92 0.000000 0.000000 -7 12 2 Zr-94 0.000000 0.000000 -8 12 2 Zr-96 0.000000 0.000000 material group in nuclide mean std. dev. -9 12 1 H-1 0.0 0.0 -10 12 1 O-16 0.0 0.0 -11 12 1 B-10 0.0 0.0 -12 12 1 B-11 0.0 0.0 -13 12 1 Zr-90 0.0 0.0 -14 12 1 Zr-91 0.0 0.0 -15 12 1 Zr-92 0.0 0.0 -16 12 1 Zr-94 0.0 0.0 -17 12 1 Zr-96 0.0 0.0 -0 12 2 H-1 0.0 0.0 -1 12 2 O-16 0.0 0.0 -2 12 2 B-10 0.0 0.0 -3 12 2 B-11 0.0 0.0 -4 12 2 Zr-90 0.0 0.0 -5 12 2 Zr-91 0.0 0.0 -6 12 2 Zr-92 0.0 0.0 -7 12 2 Zr-94 0.0 0.0 -8 12 2 Zr-96 0.0 0.0 material group in group out nuclide mean std. dev. -27 12 1 1 H-1 0.071704 0.167588 -28 12 1 1 O-16 0.013270 0.020403 -29 12 1 1 B-10 0.000000 0.000000 -30 12 1 1 B-11 0.000000 0.000000 -31 12 1 1 Zr-90 0.089997 0.075538 -32 12 1 1 Zr-91 0.000000 0.000000 -33 12 1 1 Zr-92 0.003501 0.017031 -34 12 1 1 Zr-94 0.004850 0.016327 -35 12 1 1 Zr-96 0.002730 0.017476 -18 12 1 2 H-1 0.027240 0.029555 -19 12 1 2 O-16 0.000000 0.000000 -20 12 1 2 B-10 0.000000 0.000000 -21 12 1 2 B-11 0.000000 0.000000 -22 12 1 2 Zr-90 0.000000 0.000000 -23 12 1 2 Zr-91 0.000000 0.000000 -24 12 1 2 Zr-92 0.000000 0.000000 -25 12 1 2 Zr-94 0.000000 0.000000 -26 12 1 2 Zr-96 0.000000 0.000000 -9 12 2 1 H-1 0.000000 0.000000 -10 12 2 1 O-16 0.000000 0.000000 -11 12 2 1 B-10 0.000000 0.000000 -12 12 2 1 B-11 0.000000 0.000000 -13 12 2 1 Zr-90 0.000000 0.000000 -14 12 2 1 Zr-91 0.000000 0.000000 -15 12 2 1 Zr-92 0.000000 0.000000 -16 12 2 1 Zr-94 0.000000 0.000000 -17 12 2 1 Zr-96 0.000000 0.000000 -0 12 2 2 H-1 1.244758 1.956675 -1 12 2 2 O-16 0.079159 0.104796 -2 12 2 2 B-10 0.000000 0.000000 -3 12 2 2 B-11 0.000000 0.000000 -4 12 2 2 Zr-90 0.000000 0.000000 -5 12 2 2 Zr-91 0.033201 0.040665 -6 12 2 2 Zr-92 0.000000 0.000000 -7 12 2 2 Zr-94 0.000000 0.000000 -8 12 2 2 Zr-96 0.000000 0.000000 material group out nuclide mean std. dev. -9 12 1 H-1 0.0 0.0 -10 12 1 O-16 0.0 0.0 -11 12 1 B-10 0.0 0.0 -12 12 1 B-11 0.0 0.0 -13 12 1 Zr-90 0.0 0.0 -14 12 1 Zr-91 0.0 0.0 -15 12 1 Zr-92 0.0 0.0 -16 12 1 Zr-94 0.0 0.0 -17 12 1 Zr-96 0.0 0.0 -0 12 2 H-1 0.0 0.0 -1 12 2 O-16 0.0 0.0 -2 12 2 B-10 0.0 0.0 -3 12 2 B-11 0.0 0.0 -4 12 2 Zr-90 0.0 0.0 -5 12 2 Zr-91 0.0 0.0 -6 12 2 Zr-92 0.0 0.0 -7 12 2 Zr-94 0.0 0.0 -8 12 2 Zr-96 0.0 0.0 \ No newline at end of file +1ee58383dc8ac46c5e0d72321cbc34b0dba531435d5e0e632cbbf9572eb7d669c8c8ad9f370345325afa0bdeb2f818b0f5204b7c4a7c4aaf58ded7acbd715ef8 \ No newline at end of file diff --git a/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py b/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py index 113f2aa41..47c1ec60a 100644 --- a/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py +++ b/tests/test_mgxs_library_nuclides/test_mgxs_library_nuclides.py @@ -28,6 +28,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.mgxs_types = ['transport', 'nu-fission', 'nu-scatter matrix', 'chi'] self.mgxs_lib.energy_groups = energy_groups + self.mgxs_lib.legendre_order = 3 self.mgxs_lib.domain_type = 'material' self.mgxs_lib.build_library() @@ -36,7 +37,7 @@ class MGXSTestHarness(PyAPITestHarness): self.mgxs_lib.add_to_tallies_file(self._input_set.tallies, merge=False) self._input_set.tallies.export_to_xml() - def _get_results(self, hash_output=False): + def _get_results(self, hash_output=True): """Digest info in the statepoint and return as a string.""" # Read the statepoint file.