\n",
@@ -1187,7 +1187,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
- "version": "2.7.6"
+ "version": "2.7.10"
}
},
"nbformat": 4,
diff --git a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb
index 6194b154ac..b41b322410 100644
--- a/docs/source/pythonapi/examples/mgxs-part-ii.ipynb
+++ b/docs/source/pythonapi/examples/mgxs-part-ii.ipynb
@@ -34,14 +34,14 @@
"name": "stderr",
"output_type": "stream",
"text": [
- "/usr/lib/pymodules/python2.7/matplotlib/__init__.py:1173: UserWarning: This call to matplotlib.use() has no effect\n",
+ "/usr/local/lib/python2.7/dist-packages/matplotlib/__init__.py:1318: UserWarning: This call to matplotlib.use() has no effect\n",
"because the backend has already been chosen;\n",
"matplotlib.use() must be called *before* pylab, matplotlib.pyplot,\n",
"or matplotlib.backends is imported for the first time.\n",
"\n",
" warnings.warn(_use_error_msg)\n",
- "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:9: QAWarning: pyne.rxname is not yet QA compliant.\n",
- "/usr/local/lib/python2.7/dist-packages/IPython/kernel/__main__.py:9: QAWarning: pyne.ace is not yet QA compliant.\n"
+ "/usr/local/lib/python2.7/dist-packages/ipykernel/__main__.py:11: QAWarning: pyne.rxname is not yet QA compliant.\n",
+ "/usr/local/lib/python2.7/dist-packages/ipykernel/__main__.py:11: QAWarning: pyne.ace is not yet QA compliant.\n"
]
}
],
@@ -52,6 +52,8 @@
"\n",
"import openmc\n",
"import openmc.mgxs as mgxs\n",
+ "from openmc.source import Source\n",
+ "from openmc.stats import Box\n",
"import openmoc\n",
"from openmoc.compatible import get_openmoc_geometry\n",
"import pyne.ace\n",
@@ -286,7 +288,8 @@
"settings_file.particles = particles\n",
"settings_file.output = {'tallies': True, 'summary': True}\n",
"bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n",
- "settings_file.set_source_space('fission', bounds)\n",
+ "settings_file.source = Source(space=Box(\n",
+ " bounds[:3], bounds[3:], only_fissionable=True))\n",
"\n",
"# Activate tally precision triggers\n",
"settings_file.trigger_active = True\n",
@@ -446,10 +449,9 @@
"\n",
" Copyright: 2011-2015 Massachusetts Institute of Technology\n",
" License: http://mit-crpg.github.io/openmc/license.html\n",
- " Version: 0.7.0\n",
- " Git SHA1: c4b14a5ef87f004528d35cbf33fef3ed15a386ca\n",
- " Date/Time: 2015-12-02 09:13:42\n",
- " MPI Processes: 3\n",
+ " Version: 0.7.1\n",
+ " Git SHA1: ea9fb637f63f9374c7436456141afa850b84acf9\n",
+ " Date/Time: 2016-01-14 08:03:40\n",
"\n",
" ===========================================================================\n",
" ========================> INITIALIZATION <=========================\n",
@@ -568,20 +570,20 @@
"\n",
" =======================> TIMING STATISTICS <=======================\n",
"\n",
- " Total time for initialization = 7.5700E-01 seconds\n",
- " Reading cross sections = 1.5800E-01 seconds\n",
- " Total time in simulation = 1.4921E+02 seconds\n",
- " Time in transport only = 1.4336E+02 seconds\n",
- " Time in inactive batches = 8.6210E+00 seconds\n",
- " Time in active batches = 1.4059E+02 seconds\n",
- " Time synchronizing fission bank = 5.6060E+00 seconds\n",
- " Sampling source sites = 1.4000E-02 seconds\n",
- " SEND/RECV source sites = 4.0000E-03 seconds\n",
- " Time accumulating tallies = 6.0000E-03 seconds\n",
- " Total time for finalization = 1.3000E-02 seconds\n",
- " Total time elapsed = 1.5002E+02 seconds\n",
- " Calculation Rate (inactive) = 11599.6 neutrons/second\n",
- " Calculation Rate (active) = 2845.11 neutrons/second\n",
+ " Total time for initialization = 3.8300E-01 seconds\n",
+ " Reading cross sections = 1.0700E-01 seconds\n",
+ " Total time in simulation = 2.5629E+02 seconds\n",
+ " Time in transport only = 2.5623E+02 seconds\n",
+ " Time in inactive batches = 1.5743E+01 seconds\n",
+ " Time in active batches = 2.4055E+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 = 1.0000E-03 seconds\n",
+ " Total time for finalization = 7.0000E-03 seconds\n",
+ " Total time elapsed = 2.5674E+02 seconds\n",
+ " Calculation Rate (inactive) = 6352.03 neutrons/second\n",
+ " Calculation Rate (active) = 1662.87 neutrons/second\n",
"\n",
" ============================> RESULTS <============================\n",
"\n",
@@ -607,7 +609,7 @@
"source": [
"# Run OpenMC\n",
"executor = openmc.Executor()\n",
- "executor.run_simulation(output=True, mpi_procs=3)"
+ "executor.run_simulation(output=True)"
]
},
{
@@ -801,10 +803,20 @@
"collapsed": false
},
"outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n",
+ " return c.reshape(shape_out)\n",
+ "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n",
+ " return c.reshape(shape_out)\n"
+ ]
+ },
{
"data": {
"text/html": [
- "
\n",
+ "
\n",
"
\n",
" \n",
"
\n",
@@ -1012,10 +1024,20 @@
"collapsed": false
},
"outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n",
+ " return c.reshape(shape_out)\n",
+ "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n",
+ " return c.reshape(shape_out)\n"
+ ]
+ },
{
"data": {
"text/html": [
- "
\n",
+ "
\n",
"
\n",
" \n",
"
\n",
@@ -1189,13 +1211,14 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "[ NORMAL ] Importing ray tracing data from file...\n",
+ "[ NORMAL ] Ray tracing for track segmentation...\n",
+ "[ NORMAL ] Dumping tracks to file...\n",
"[ NORMAL ] Computing the eigenvalue...\n",
- "[ NORMAL ] Iteration 0:\tk_eff = 0.574633\tres = 1.959E-316\n",
+ "[ NORMAL ] Iteration 0:\tk_eff = 0.574633\tres = 0.000E+00\n",
"[ NORMAL ] Iteration 1:\tk_eff = 0.679931\tres = 4.254E-01\n",
"[ NORMAL ] Iteration 2:\tk_eff = 0.660910\tres = 1.832E-01\n",
- "[ NORMAL ] Iteration 3:\tk_eff = 0.658975\tres = 2.797E-02\n",
- "[ NORMAL ] Iteration 4:\tk_eff = 0.642976\tres = 2.928E-03\n",
+ "[ NORMAL ] Iteration 3:\tk_eff = 0.658975\tres = 2.798E-02\n",
+ "[ NORMAL ] Iteration 4:\tk_eff = 0.642976\tres = 2.927E-03\n",
"[ NORMAL ] Iteration 5:\tk_eff = 0.625710\tres = 2.428E-02\n",
"[ NORMAL ] Iteration 6:\tk_eff = 0.606520\tres = 2.685E-02\n",
"[ NORMAL ] Iteration 7:\tk_eff = 0.587277\tres = 3.067E-02\n",
@@ -1206,20 +1229,20 @@
"[ NORMAL ] Iteration 12:\tk_eff = 0.510221\tres = 2.575E-02\n",
"[ NORMAL ] Iteration 13:\tk_eff = 0.500691\tres = 2.241E-02\n",
"[ NORMAL ] Iteration 14:\tk_eff = 0.493392\tres = 1.868E-02\n",
- "[ NORMAL ] Iteration 15:\tk_eff = 0.488317\tres = 1.458E-02\n",
+ "[ NORMAL ] Iteration 15:\tk_eff = 0.488318\tres = 1.458E-02\n",
"[ NORMAL ] Iteration 16:\tk_eff = 0.485438\tres = 1.028E-02\n",
"[ NORMAL ] Iteration 17:\tk_eff = 0.484705\tres = 5.896E-03\n",
- "[ NORMAL ] Iteration 18:\tk_eff = 0.486045\tres = 1.510E-03\n",
+ "[ NORMAL ] Iteration 18:\tk_eff = 0.486046\tres = 1.510E-03\n",
"[ NORMAL ] Iteration 19:\tk_eff = 0.489362\tres = 2.766E-03\n",
"[ NORMAL ] Iteration 20:\tk_eff = 0.494546\tres = 6.824E-03\n",
"[ NORMAL ] Iteration 21:\tk_eff = 0.501481\tres = 1.059E-02\n",
- "[ NORMAL ] Iteration 22:\tk_eff = 0.510041\tres = 1.402E-02\n",
- "[ NORMAL ] Iteration 23:\tk_eff = 0.520094\tres = 1.707E-02\n",
- "[ NORMAL ] Iteration 24:\tk_eff = 0.531507\tres = 1.971E-02\n",
+ "[ NORMAL ] Iteration 22:\tk_eff = 0.510042\tres = 1.402E-02\n",
+ "[ NORMAL ] Iteration 23:\tk_eff = 0.520095\tres = 1.707E-02\n",
+ "[ NORMAL ] Iteration 24:\tk_eff = 0.531508\tres = 1.971E-02\n",
"[ NORMAL ] Iteration 25:\tk_eff = 0.544144\tres = 2.194E-02\n",
"[ NORMAL ] Iteration 26:\tk_eff = 0.557872\tres = 2.378E-02\n",
"[ NORMAL ] Iteration 27:\tk_eff = 0.572557\tres = 2.523E-02\n",
- "[ NORMAL ] Iteration 28:\tk_eff = 0.588072\tres = 2.632E-02\n",
+ "[ NORMAL ] Iteration 28:\tk_eff = 0.588073\tres = 2.632E-02\n",
"[ NORMAL ] Iteration 29:\tk_eff = 0.604293\tres = 2.710E-02\n",
"[ NORMAL ] Iteration 30:\tk_eff = 0.621101\tres = 2.758E-02\n",
"[ NORMAL ] Iteration 31:\tk_eff = 0.638382\tres = 2.781E-02\n",
@@ -1231,128 +1254,129 @@
"[ NORMAL ] Iteration 37:\tk_eff = 0.746558\tres = 2.562E-02\n",
"[ NORMAL ] Iteration 38:\tk_eff = 0.764569\tres = 2.490E-02\n",
"[ NORMAL ] Iteration 39:\tk_eff = 0.782396\tres = 2.412E-02\n",
- "[ NORMAL ] Iteration 40:\tk_eff = 0.799989\tres = 2.332E-02\n",
+ "[ NORMAL ] Iteration 40:\tk_eff = 0.799990\tres = 2.332E-02\n",
"[ NORMAL ] Iteration 41:\tk_eff = 0.817301\tres = 2.249E-02\n",
"[ NORMAL ] Iteration 42:\tk_eff = 0.834292\tres = 2.164E-02\n",
- "[ NORMAL ] Iteration 43:\tk_eff = 0.850927\tres = 2.079E-02\n",
- "[ NORMAL ] Iteration 44:\tk_eff = 0.867177\tres = 1.994E-02\n",
- "[ NORMAL ] Iteration 45:\tk_eff = 0.883017\tres = 1.910E-02\n",
+ "[ NORMAL ] Iteration 43:\tk_eff = 0.850928\tres = 2.079E-02\n",
+ "[ NORMAL ] Iteration 44:\tk_eff = 0.867178\tres = 1.994E-02\n",
+ "[ NORMAL ] Iteration 45:\tk_eff = 0.883018\tres = 1.910E-02\n",
"[ NORMAL ] Iteration 46:\tk_eff = 0.898427\tres = 1.827E-02\n",
- "[ NORMAL ] Iteration 47:\tk_eff = 0.913389\tres = 1.745E-02\n",
- "[ NORMAL ] Iteration 48:\tk_eff = 0.927891\tres = 1.665E-02\n",
- "[ NORMAL ] Iteration 49:\tk_eff = 0.941925\tres = 1.588E-02\n",
- "[ NORMAL ] Iteration 50:\tk_eff = 0.955483\tres = 1.512E-02\n",
- "[ NORMAL ] Iteration 51:\tk_eff = 0.968562\tres = 1.439E-02\n",
- "[ NORMAL ] Iteration 52:\tk_eff = 0.981161\tres = 1.369E-02\n",
- "[ NORMAL ] Iteration 53:\tk_eff = 0.993282\tres = 1.301E-02\n",
- "[ NORMAL ] Iteration 54:\tk_eff = 1.004928\tres = 1.235E-02\n",
- "[ NORMAL ] Iteration 55:\tk_eff = 1.016104\tres = 1.172E-02\n",
- "[ NORMAL ] Iteration 56:\tk_eff = 1.026816\tres = 1.112E-02\n",
- "[ NORMAL ] Iteration 57:\tk_eff = 1.037073\tres = 1.054E-02\n",
- "[ NORMAL ] Iteration 58:\tk_eff = 1.046883\tres = 9.989E-03\n",
- "[ NORMAL ] Iteration 59:\tk_eff = 1.056257\tres = 9.460E-03\n",
- "[ NORMAL ] Iteration 60:\tk_eff = 1.065205\tres = 8.954E-03\n",
- "[ NORMAL ] Iteration 61:\tk_eff = 1.073739\tres = 8.472E-03\n",
- "[ NORMAL ] Iteration 62:\tk_eff = 1.081871\tres = 8.012E-03\n",
- "[ NORMAL ] Iteration 63:\tk_eff = 1.089613\tres = 7.573E-03\n",
- "[ NORMAL ] Iteration 64:\tk_eff = 1.096979\tres = 7.156E-03\n",
- "[ NORMAL ] Iteration 65:\tk_eff = 1.103980\tres = 6.760E-03\n",
+ "[ NORMAL ] Iteration 47:\tk_eff = 0.913390\tres = 1.745E-02\n",
+ "[ NORMAL ] Iteration 48:\tk_eff = 0.927892\tres = 1.665E-02\n",
+ "[ NORMAL ] Iteration 49:\tk_eff = 0.941926\tres = 1.588E-02\n",
+ "[ NORMAL ] Iteration 50:\tk_eff = 0.955484\tres = 1.512E-02\n",
+ "[ NORMAL ] Iteration 51:\tk_eff = 0.968563\tres = 1.439E-02\n",
+ "[ NORMAL ] Iteration 52:\tk_eff = 0.981162\tres = 1.369E-02\n",
+ "[ NORMAL ] Iteration 53:\tk_eff = 0.993283\tres = 1.301E-02\n",
+ "[ NORMAL ] Iteration 54:\tk_eff = 1.004929\tres = 1.235E-02\n",
+ "[ NORMAL ] Iteration 55:\tk_eff = 1.016105\tres = 1.172E-02\n",
+ "[ NORMAL ] Iteration 56:\tk_eff = 1.026818\tres = 1.112E-02\n",
+ "[ NORMAL ] Iteration 57:\tk_eff = 1.037075\tres = 1.054E-02\n",
+ "[ NORMAL ] Iteration 58:\tk_eff = 1.046885\tres = 9.989E-03\n",
+ "[ NORMAL ] Iteration 59:\tk_eff = 1.056259\tres = 9.459E-03\n",
+ "[ NORMAL ] Iteration 60:\tk_eff = 1.065206\tres = 8.954E-03\n",
+ "[ NORMAL ] Iteration 61:\tk_eff = 1.073740\tres = 8.471E-03\n",
+ "[ NORMAL ] Iteration 62:\tk_eff = 1.081872\tres = 8.012E-03\n",
+ "[ NORMAL ] Iteration 63:\tk_eff = 1.089614\tres = 7.573E-03\n",
+ "[ NORMAL ] Iteration 64:\tk_eff = 1.096980\tres = 7.156E-03\n",
+ "[ NORMAL ] Iteration 65:\tk_eff = 1.103981\tres = 6.760E-03\n",
"[ NORMAL ] Iteration 66:\tk_eff = 1.110631\tres = 6.382E-03\n",
- "[ NORMAL ] Iteration 67:\tk_eff = 1.116943\tres = 6.024E-03\n",
- "[ NORMAL ] Iteration 68:\tk_eff = 1.122931\tres = 5.684E-03\n",
- "[ NORMAL ] Iteration 69:\tk_eff = 1.128607\tres = 5.361E-03\n",
- "[ NORMAL ] Iteration 70:\tk_eff = 1.133984\tres = 5.055E-03\n",
- "[ NORMAL ] Iteration 71:\tk_eff = 1.139075\tres = 4.764E-03\n",
- "[ NORMAL ] Iteration 72:\tk_eff = 1.143892\tres = 4.489E-03\n",
- "[ NORMAL ] Iteration 73:\tk_eff = 1.148447\tres = 4.229E-03\n",
- "[ NORMAL ] Iteration 74:\tk_eff = 1.152752\tres = 3.982E-03\n",
+ "[ NORMAL ] Iteration 67:\tk_eff = 1.116944\tres = 6.024E-03\n",
+ "[ NORMAL ] Iteration 68:\tk_eff = 1.122932\tres = 5.684E-03\n",
+ "[ NORMAL ] Iteration 69:\tk_eff = 1.128608\tres = 5.361E-03\n",
+ "[ NORMAL ] Iteration 70:\tk_eff = 1.133985\tres = 5.055E-03\n",
+ "[ NORMAL ] Iteration 71:\tk_eff = 1.139076\tres = 4.764E-03\n",
+ "[ NORMAL ] Iteration 72:\tk_eff = 1.143892\tres = 4.490E-03\n",
+ "[ NORMAL ] Iteration 73:\tk_eff = 1.148447\tres = 4.228E-03\n",
+ "[ NORMAL ] Iteration 74:\tk_eff = 1.152753\tres = 3.982E-03\n",
"[ NORMAL ] Iteration 75:\tk_eff = 1.156819\tres = 3.749E-03\n",
"[ NORMAL ] Iteration 76:\tk_eff = 1.160659\tres = 3.528E-03\n",
- "[ NORMAL ] Iteration 77:\tk_eff = 1.164282\tres = 3.319E-03\n",
+ "[ NORMAL ] Iteration 77:\tk_eff = 1.164283\tres = 3.319E-03\n",
"[ NORMAL ] Iteration 78:\tk_eff = 1.167701\tres = 3.122E-03\n",
"[ NORMAL ] Iteration 79:\tk_eff = 1.170923\tres = 2.936E-03\n",
- "[ NORMAL ] Iteration 80:\tk_eff = 1.173961\tres = 2.760E-03\n",
+ "[ NORMAL ] Iteration 80:\tk_eff = 1.173960\tres = 2.759E-03\n",
"[ NORMAL ] Iteration 81:\tk_eff = 1.176822\tres = 2.594E-03\n",
"[ NORMAL ] Iteration 82:\tk_eff = 1.179516\tres = 2.437E-03\n",
"[ NORMAL ] Iteration 83:\tk_eff = 1.182052\tres = 2.289E-03\n",
"[ NORMAL ] Iteration 84:\tk_eff = 1.184438\tres = 2.150E-03\n",
- "[ NORMAL ] Iteration 85:\tk_eff = 1.186682\tres = 2.019E-03\n",
+ "[ NORMAL ] Iteration 85:\tk_eff = 1.186682\tres = 2.018E-03\n",
"[ NORMAL ] Iteration 86:\tk_eff = 1.188792\tres = 1.895E-03\n",
"[ NORMAL ] Iteration 87:\tk_eff = 1.190775\tres = 1.778E-03\n",
"[ NORMAL ] Iteration 88:\tk_eff = 1.192639\tres = 1.668E-03\n",
"[ NORMAL ] Iteration 89:\tk_eff = 1.194389\tres = 1.565E-03\n",
"[ NORMAL ] Iteration 90:\tk_eff = 1.196032\tres = 1.468E-03\n",
- "[ NORMAL ] Iteration 91:\tk_eff = 1.197575\tres = 1.376E-03\n",
+ "[ NORMAL ] Iteration 91:\tk_eff = 1.197575\tres = 1.375E-03\n",
"[ NORMAL ] Iteration 92:\tk_eff = 1.199023\tres = 1.290E-03\n",
"[ NORMAL ] Iteration 93:\tk_eff = 1.200381\tres = 1.209E-03\n",
"[ NORMAL ] Iteration 94:\tk_eff = 1.201654\tres = 1.133E-03\n",
- "[ NORMAL ] Iteration 95:\tk_eff = 1.202849\tres = 1.061E-03\n",
- "[ NORMAL ] Iteration 96:\tk_eff = 1.203968\tres = 9.939E-04\n",
- "[ NORMAL ] Iteration 97:\tk_eff = 1.205017\tres = 9.307E-04\n",
- "[ NORMAL ] Iteration 98:\tk_eff = 1.206000\tres = 8.714E-04\n",
- "[ NORMAL ] Iteration 99:\tk_eff = 1.206921\tres = 8.157E-04\n",
- "[ NORMAL ] Iteration 100:\tk_eff = 1.207783\tres = 7.634E-04\n",
- "[ NORMAL ] Iteration 101:\tk_eff = 1.208590\tres = 7.144E-04\n",
- "[ NORMAL ] Iteration 102:\tk_eff = 1.209346\tres = 6.684E-04\n",
- "[ NORMAL ] Iteration 103:\tk_eff = 1.210053\tres = 6.252E-04\n",
- "[ NORMAL ] Iteration 104:\tk_eff = 1.210715\tres = 5.848E-04\n",
- "[ NORMAL ] Iteration 105:\tk_eff = 1.211334\tres = 5.468E-04\n",
- "[ NORMAL ] Iteration 106:\tk_eff = 1.211913\tres = 5.113E-04\n",
- "[ NORMAL ] Iteration 107:\tk_eff = 1.212454\tres = 4.779E-04\n",
- "[ NORMAL ] Iteration 108:\tk_eff = 1.212960\tres = 4.467E-04\n",
- "[ NORMAL ] Iteration 109:\tk_eff = 1.213434\tres = 4.175E-04\n",
- "[ NORMAL ] Iteration 110:\tk_eff = 1.213876\tres = 3.901E-04\n",
- "[ NORMAL ] Iteration 111:\tk_eff = 1.214289\tres = 3.644E-04\n",
- "[ NORMAL ] Iteration 112:\tk_eff = 1.214675\tres = 3.404E-04\n",
- "[ NORMAL ] Iteration 113:\tk_eff = 1.215036\tres = 3.180E-04\n",
- "[ NORMAL ] Iteration 114:\tk_eff = 1.215373\tres = 2.969E-04\n",
- "[ NORMAL ] Iteration 115:\tk_eff = 1.215687\tres = 2.773E-04\n",
- "[ NORMAL ] Iteration 116:\tk_eff = 1.215981\tres = 2.589E-04\n",
+ "[ NORMAL ] Iteration 95:\tk_eff = 1.202848\tres = 1.061E-03\n",
+ "[ NORMAL ] Iteration 96:\tk_eff = 1.203968\tres = 9.941E-04\n",
+ "[ NORMAL ] Iteration 97:\tk_eff = 1.205016\tres = 9.308E-04\n",
+ "[ NORMAL ] Iteration 98:\tk_eff = 1.205999\tres = 8.707E-04\n",
+ "[ NORMAL ] Iteration 99:\tk_eff = 1.206921\tres = 8.159E-04\n",
+ "[ NORMAL ] Iteration 100:\tk_eff = 1.207783\tres = 7.635E-04\n",
+ "[ NORMAL ] Iteration 101:\tk_eff = 1.208590\tres = 7.145E-04\n",
+ "[ NORMAL ] Iteration 102:\tk_eff = 1.209345\tres = 6.684E-04\n",
+ "[ NORMAL ] Iteration 103:\tk_eff = 1.210053\tres = 6.250E-04\n",
+ "[ NORMAL ] Iteration 104:\tk_eff = 1.210714\tres = 5.848E-04\n",
+ "[ NORMAL ] Iteration 105:\tk_eff = 1.211333\tres = 5.466E-04\n",
+ "[ NORMAL ] Iteration 106:\tk_eff = 1.211913\tres = 5.115E-04\n",
+ "[ NORMAL ] Iteration 107:\tk_eff = 1.212453\tres = 4.784E-04\n",
+ "[ NORMAL ] Iteration 108:\tk_eff = 1.212960\tres = 4.462E-04\n",
+ "[ NORMAL ] Iteration 109:\tk_eff = 1.213433\tres = 4.175E-04\n",
+ "[ NORMAL ] Iteration 110:\tk_eff = 1.213875\tres = 3.901E-04\n",
+ "[ NORMAL ] Iteration 111:\tk_eff = 1.214288\tres = 3.643E-04\n",
+ "[ NORMAL ] Iteration 112:\tk_eff = 1.214674\tres = 3.404E-04\n",
+ "[ NORMAL ] Iteration 113:\tk_eff = 1.215036\tres = 3.181E-04\n",
+ "[ NORMAL ] Iteration 114:\tk_eff = 1.215372\tres = 2.972E-04\n",
+ "[ NORMAL ] Iteration 115:\tk_eff = 1.215686\tres = 2.772E-04\n",
+ "[ NORMAL ] Iteration 116:\tk_eff = 1.215980\tres = 2.586E-04\n",
"[ NORMAL ] Iteration 117:\tk_eff = 1.216255\tres = 2.416E-04\n",
- "[ NORMAL ] Iteration 118:\tk_eff = 1.216511\tres = 2.256E-04\n",
- "[ NORMAL ] Iteration 119:\tk_eff = 1.216750\tres = 2.105E-04\n",
- "[ NORMAL ] Iteration 120:\tk_eff = 1.216973\tres = 1.964E-04\n",
- "[ NORMAL ] Iteration 121:\tk_eff = 1.217181\tres = 1.833E-04\n",
- "[ NORMAL ] Iteration 122:\tk_eff = 1.217376\tres = 1.710E-04\n",
- "[ NORMAL ] Iteration 123:\tk_eff = 1.217557\tres = 1.595E-04\n",
- "[ NORMAL ] Iteration 124:\tk_eff = 1.217726\tres = 1.488E-04\n",
- "[ NORMAL ] Iteration 125:\tk_eff = 1.217883\tres = 1.388E-04\n",
- "[ NORMAL ] Iteration 126:\tk_eff = 1.218030\tres = 1.294E-04\n",
- "[ NORMAL ] Iteration 127:\tk_eff = 1.218167\tres = 1.207E-04\n",
- "[ NORMAL ] Iteration 128:\tk_eff = 1.218295\tres = 1.125E-04\n",
- "[ NORMAL ] Iteration 129:\tk_eff = 1.218414\tres = 1.049E-04\n",
- "[ NORMAL ] Iteration 130:\tk_eff = 1.218525\tres = 9.777E-05\n",
- "[ NORMAL ] Iteration 131:\tk_eff = 1.218629\tres = 9.113E-05\n",
- "[ NORMAL ] Iteration 132:\tk_eff = 1.218725\tres = 8.494E-05\n",
- "[ NORMAL ] Iteration 133:\tk_eff = 1.218815\tres = 7.916E-05\n",
+ "[ NORMAL ] Iteration 118:\tk_eff = 1.216511\tres = 2.258E-04\n",
+ "[ NORMAL ] Iteration 119:\tk_eff = 1.216749\tres = 2.105E-04\n",
+ "[ NORMAL ] Iteration 120:\tk_eff = 1.216973\tres = 1.963E-04\n",
+ "[ NORMAL ] Iteration 121:\tk_eff = 1.217181\tres = 1.834E-04\n",
+ "[ NORMAL ] Iteration 122:\tk_eff = 1.217375\tres = 1.710E-04\n",
+ "[ NORMAL ] Iteration 123:\tk_eff = 1.217556\tres = 1.595E-04\n",
+ "[ NORMAL ] Iteration 124:\tk_eff = 1.217725\tres = 1.488E-04\n",
+ "[ NORMAL ] Iteration 125:\tk_eff = 1.217883\tres = 1.389E-04\n",
+ "[ NORMAL ] Iteration 126:\tk_eff = 1.218030\tres = 1.296E-04\n",
+ "[ NORMAL ] Iteration 127:\tk_eff = 1.218167\tres = 1.208E-04\n",
+ "[ NORMAL ] Iteration 128:\tk_eff = 1.218294\tres = 1.128E-04\n",
+ "[ NORMAL ] Iteration 129:\tk_eff = 1.218414\tres = 1.041E-04\n",
+ "[ NORMAL ] Iteration 130:\tk_eff = 1.218525\tres = 9.793E-05\n",
+ "[ NORMAL ] Iteration 131:\tk_eff = 1.218628\tres = 9.128E-05\n",
+ "[ NORMAL ] Iteration 132:\tk_eff = 1.218725\tres = 8.502E-05\n",
+ "[ NORMAL ] Iteration 133:\tk_eff = 1.218815\tres = 7.903E-05\n",
"[ NORMAL ] Iteration 134:\tk_eff = 1.218899\tres = 7.376E-05\n",
- "[ NORMAL ] Iteration 135:\tk_eff = 1.218977\tres = 6.873E-05\n",
- "[ NORMAL ] Iteration 136:\tk_eff = 1.219050\tres = 6.404E-05\n",
- "[ NORMAL ] Iteration 137:\tk_eff = 1.219117\tres = 5.966E-05\n",
- "[ NORMAL ] Iteration 138:\tk_eff = 1.219180\tres = 5.557E-05\n",
- "[ NORMAL ] Iteration 139:\tk_eff = 1.219239\tres = 5.177E-05\n",
- "[ NORMAL ] Iteration 140:\tk_eff = 1.219294\tres = 4.822E-05\n",
- "[ NORMAL ] Iteration 141:\tk_eff = 1.219345\tres = 4.491E-05\n",
- "[ NORMAL ] Iteration 142:\tk_eff = 1.219392\tres = 4.182E-05\n",
- "[ NORMAL ] Iteration 143:\tk_eff = 1.219437\tres = 3.894E-05\n",
- "[ NORMAL ] Iteration 144:\tk_eff = 1.219478\tres = 3.626E-05\n",
- "[ NORMAL ] Iteration 145:\tk_eff = 1.219516\tres = 3.376E-05\n",
- "[ NORMAL ] Iteration 146:\tk_eff = 1.219552\tres = 3.144E-05\n",
- "[ NORMAL ] Iteration 147:\tk_eff = 1.219585\tres = 2.927E-05\n",
- "[ NORMAL ] Iteration 148:\tk_eff = 1.219616\tres = 2.724E-05\n",
- "[ NORMAL ] Iteration 149:\tk_eff = 1.219645\tres = 2.536E-05\n",
- "[ NORMAL ] Iteration 150:\tk_eff = 1.219672\tres = 2.361E-05\n",
- "[ NORMAL ] Iteration 151:\tk_eff = 1.219696\tres = 2.197E-05\n",
- "[ NORMAL ] Iteration 152:\tk_eff = 1.219720\tres = 2.045E-05\n",
+ "[ NORMAL ] Iteration 135:\tk_eff = 1.218976\tres = 6.888E-05\n",
+ "[ NORMAL ] Iteration 136:\tk_eff = 1.219049\tres = 6.362E-05\n",
+ "[ NORMAL ] Iteration 137:\tk_eff = 1.219117\tres = 5.979E-05\n",
+ "[ NORMAL ] Iteration 138:\tk_eff = 1.219180\tres = 5.591E-05\n",
+ "[ NORMAL ] Iteration 139:\tk_eff = 1.219239\tres = 5.181E-05\n",
+ "[ NORMAL ] Iteration 140:\tk_eff = 1.219294\tres = 4.824E-05\n",
+ "[ NORMAL ] Iteration 141:\tk_eff = 1.219345\tres = 4.496E-05\n",
+ "[ NORMAL ] Iteration 142:\tk_eff = 1.219392\tres = 4.197E-05\n",
+ "[ NORMAL ] Iteration 143:\tk_eff = 1.219437\tres = 3.871E-05\n",
+ "[ NORMAL ] Iteration 144:\tk_eff = 1.219478\tres = 3.666E-05\n",
+ "[ NORMAL ] Iteration 145:\tk_eff = 1.219516\tres = 3.373E-05\n",
+ "[ NORMAL ] Iteration 146:\tk_eff = 1.219552\tres = 3.112E-05\n",
+ "[ NORMAL ] Iteration 147:\tk_eff = 1.219585\tres = 2.941E-05\n",
+ "[ NORMAL ] Iteration 148:\tk_eff = 1.219616\tres = 2.711E-05\n",
+ "[ NORMAL ] Iteration 149:\tk_eff = 1.219645\tres = 2.542E-05\n",
+ "[ NORMAL ] Iteration 150:\tk_eff = 1.219671\tres = 2.369E-05\n",
+ "[ NORMAL ] Iteration 151:\tk_eff = 1.219696\tres = 2.207E-05\n",
+ "[ NORMAL ] Iteration 152:\tk_eff = 1.219720\tres = 2.049E-05\n",
"[ NORMAL ] Iteration 153:\tk_eff = 1.219741\tres = 1.903E-05\n",
- "[ NORMAL ] Iteration 154:\tk_eff = 1.219761\tres = 1.771E-05\n",
- "[ NORMAL ] Iteration 155:\tk_eff = 1.219780\tres = 1.648E-05\n",
- "[ NORMAL ] Iteration 156:\tk_eff = 1.219797\tres = 1.534E-05\n",
- "[ NORMAL ] Iteration 157:\tk_eff = 1.219814\tres = 1.427E-05\n",
- "[ NORMAL ] Iteration 158:\tk_eff = 1.219829\tres = 1.328E-05\n",
- "[ NORMAL ] Iteration 159:\tk_eff = 1.219843\tres = 1.235E-05\n",
- "[ NORMAL ] Iteration 160:\tk_eff = 1.219856\tres = 1.149E-05\n",
- "[ NORMAL ] Iteration 161:\tk_eff = 1.219868\tres = 1.069E-05\n"
+ "[ NORMAL ] Iteration 154:\tk_eff = 1.219761\tres = 1.770E-05\n",
+ "[ NORMAL ] Iteration 155:\tk_eff = 1.219780\tres = 1.639E-05\n",
+ "[ NORMAL ] Iteration 156:\tk_eff = 1.219797\tres = 1.533E-05\n",
+ "[ NORMAL ] Iteration 157:\tk_eff = 1.219813\tres = 1.396E-05\n",
+ "[ NORMAL ] Iteration 158:\tk_eff = 1.219828\tres = 1.319E-05\n",
+ "[ NORMAL ] Iteration 159:\tk_eff = 1.219842\tres = 1.216E-05\n",
+ "[ NORMAL ] Iteration 160:\tk_eff = 1.219854\tres = 1.152E-05\n",
+ "[ NORMAL ] Iteration 161:\tk_eff = 1.219867\tres = 1.049E-05\n",
+ "[ NORMAL ] Iteration 162:\tk_eff = 1.219878\tres = 1.005E-05\n"
]
}
],
@@ -1386,8 +1410,8 @@
"output_type": "stream",
"text": [
"openmc keff = 1.223729\n",
- "openmoc keff = 1.219868\n",
- "bias [pcm]: -386.1\n"
+ "openmoc keff = 1.219878\n",
+ "bias [pcm]: -385.1\n"
]
}
],
@@ -1462,237 +1486,237 @@
"text": [
"[ NORMAL ] Importing ray tracing data from file...\n",
"[ NORMAL ] Computing the eigenvalue...\n",
- "[ NORMAL ] Iteration 0:\tk_eff = 0.495594\tres = 1.959E-316\n",
- "[ NORMAL ] Iteration 1:\tk_eff = 0.557312\tres = 5.044E-01\n",
+ "[ NORMAL ] Iteration 0:\tk_eff = 0.495594\tres = 0.000E+00\n",
+ "[ NORMAL ] Iteration 1:\tk_eff = 0.557313\tres = 5.044E-01\n",
"[ NORMAL ] Iteration 2:\tk_eff = 0.518115\tres = 1.245E-01\n",
- "[ NORMAL ] Iteration 3:\tk_eff = 0.509016\tres = 7.033E-02\n",
- "[ NORMAL ] Iteration 4:\tk_eff = 0.496279\tres = 1.756E-02\n",
- "[ NORMAL ] Iteration 5:\tk_eff = 0.488357\tres = 2.502E-02\n",
- "[ NORMAL ] Iteration 6:\tk_eff = 0.482659\tres = 1.596E-02\n",
- "[ NORMAL ] Iteration 7:\tk_eff = 0.479523\tres = 1.167E-02\n",
- "[ NORMAL ] Iteration 8:\tk_eff = 0.478568\tres = 6.497E-03\n",
- "[ NORMAL ] Iteration 9:\tk_eff = 0.479590\tres = 1.991E-03\n",
- "[ NORMAL ] Iteration 10:\tk_eff = 0.482388\tres = 2.136E-03\n",
+ "[ NORMAL ] Iteration 3:\tk_eff = 0.509017\tres = 7.033E-02\n",
+ "[ NORMAL ] Iteration 4:\tk_eff = 0.496280\tres = 1.756E-02\n",
+ "[ NORMAL ] Iteration 5:\tk_eff = 0.488358\tres = 2.502E-02\n",
+ "[ NORMAL ] Iteration 6:\tk_eff = 0.482660\tres = 1.596E-02\n",
+ "[ NORMAL ] Iteration 7:\tk_eff = 0.479524\tres = 1.167E-02\n",
+ "[ NORMAL ] Iteration 8:\tk_eff = 0.478569\tres = 6.497E-03\n",
+ "[ NORMAL ] Iteration 9:\tk_eff = 0.479591\tres = 1.992E-03\n",
+ "[ NORMAL ] Iteration 10:\tk_eff = 0.482389\tres = 2.136E-03\n",
"[ NORMAL ] Iteration 11:\tk_eff = 0.486774\tres = 5.834E-03\n",
- "[ NORMAL ] Iteration 12:\tk_eff = 0.492575\tres = 9.091E-03\n",
+ "[ NORMAL ] Iteration 12:\tk_eff = 0.492576\tres = 9.091E-03\n",
"[ NORMAL ] Iteration 13:\tk_eff = 0.499632\tres = 1.192E-02\n",
- "[ NORMAL ] Iteration 14:\tk_eff = 0.507799\tres = 1.433E-02\n",
- "[ NORMAL ] Iteration 15:\tk_eff = 0.516943\tres = 1.635E-02\n",
+ "[ NORMAL ] Iteration 14:\tk_eff = 0.507800\tres = 1.433E-02\n",
+ "[ NORMAL ] Iteration 15:\tk_eff = 0.516944\tres = 1.635E-02\n",
"[ NORMAL ] Iteration 16:\tk_eff = 0.526942\tres = 1.801E-02\n",
- "[ NORMAL ] Iteration 17:\tk_eff = 0.537681\tres = 1.934E-02\n",
- "[ NORMAL ] Iteration 18:\tk_eff = 0.549060\tres = 2.038E-02\n",
- "[ NORMAL ] Iteration 19:\tk_eff = 0.560984\tres = 2.116E-02\n",
+ "[ NORMAL ] Iteration 17:\tk_eff = 0.537682\tres = 1.934E-02\n",
+ "[ NORMAL ] Iteration 18:\tk_eff = 0.549061\tres = 2.038E-02\n",
+ "[ NORMAL ] Iteration 19:\tk_eff = 0.560985\tres = 2.116E-02\n",
"[ NORMAL ] Iteration 20:\tk_eff = 0.573368\tres = 2.172E-02\n",
"[ NORMAL ] Iteration 21:\tk_eff = 0.586133\tres = 2.207E-02\n",
- "[ NORMAL ] Iteration 22:\tk_eff = 0.599207\tres = 2.226E-02\n",
+ "[ NORMAL ] Iteration 22:\tk_eff = 0.599208\tres = 2.226E-02\n",
"[ NORMAL ] Iteration 23:\tk_eff = 0.612528\tres = 2.231E-02\n",
"[ NORMAL ] Iteration 24:\tk_eff = 0.626035\tres = 2.223E-02\n",
"[ NORMAL ] Iteration 25:\tk_eff = 0.639676\tres = 2.205E-02\n",
"[ NORMAL ] Iteration 26:\tk_eff = 0.653402\tres = 2.179E-02\n",
- "[ NORMAL ] Iteration 27:\tk_eff = 0.667170\tres = 2.146E-02\n",
+ "[ NORMAL ] Iteration 27:\tk_eff = 0.667171\tres = 2.146E-02\n",
"[ NORMAL ] Iteration 28:\tk_eff = 0.680942\tres = 2.107E-02\n",
"[ NORMAL ] Iteration 29:\tk_eff = 0.694681\tres = 2.064E-02\n",
"[ NORMAL ] Iteration 30:\tk_eff = 0.708356\tres = 2.018E-02\n",
"[ NORMAL ] Iteration 31:\tk_eff = 0.721940\tres = 1.969E-02\n",
- "[ NORMAL ] Iteration 32:\tk_eff = 0.735406\tres = 1.918E-02\n",
+ "[ NORMAL ] Iteration 32:\tk_eff = 0.735407\tres = 1.918E-02\n",
"[ NORMAL ] Iteration 33:\tk_eff = 0.748734\tres = 1.865E-02\n",
"[ NORMAL ] Iteration 34:\tk_eff = 0.761904\tres = 1.812E-02\n",
"[ NORMAL ] Iteration 35:\tk_eff = 0.774897\tres = 1.759E-02\n",
"[ NORMAL ] Iteration 36:\tk_eff = 0.787700\tres = 1.705E-02\n",
"[ NORMAL ] Iteration 37:\tk_eff = 0.800299\tres = 1.652E-02\n",
- "[ NORMAL ] Iteration 38:\tk_eff = 0.812684\tres = 1.600E-02\n",
- "[ NORMAL ] Iteration 39:\tk_eff = 0.824844\tres = 1.547E-02\n",
- "[ NORMAL ] Iteration 40:\tk_eff = 0.836772\tres = 1.496E-02\n",
+ "[ NORMAL ] Iteration 38:\tk_eff = 0.812684\tres = 1.599E-02\n",
+ "[ NORMAL ] Iteration 39:\tk_eff = 0.824844\tres = 1.548E-02\n",
+ "[ NORMAL ] Iteration 40:\tk_eff = 0.836773\tres = 1.496E-02\n",
"[ NORMAL ] Iteration 41:\tk_eff = 0.848462\tres = 1.446E-02\n",
"[ NORMAL ] Iteration 42:\tk_eff = 0.859908\tres = 1.397E-02\n",
"[ NORMAL ] Iteration 43:\tk_eff = 0.871105\tres = 1.349E-02\n",
"[ NORMAL ] Iteration 44:\tk_eff = 0.882052\tres = 1.302E-02\n",
"[ NORMAL ] Iteration 45:\tk_eff = 0.892745\tres = 1.257E-02\n",
"[ NORMAL ] Iteration 46:\tk_eff = 0.903184\tres = 1.212E-02\n",
- "[ NORMAL ] Iteration 47:\tk_eff = 0.913367\tres = 1.169E-02\n",
- "[ NORMAL ] Iteration 48:\tk_eff = 0.923297\tres = 1.128E-02\n",
+ "[ NORMAL ] Iteration 47:\tk_eff = 0.913368\tres = 1.169E-02\n",
+ "[ NORMAL ] Iteration 48:\tk_eff = 0.923296\tres = 1.128E-02\n",
"[ NORMAL ] Iteration 49:\tk_eff = 0.932972\tres = 1.087E-02\n",
"[ NORMAL ] Iteration 50:\tk_eff = 0.942394\tres = 1.048E-02\n",
- "[ NORMAL ] Iteration 51:\tk_eff = 0.951566\tres = 1.010E-02\n",
- "[ NORMAL ] Iteration 52:\tk_eff = 0.960490\tres = 9.733E-03\n",
+ "[ NORMAL ] Iteration 51:\tk_eff = 0.951567\tres = 1.010E-02\n",
+ "[ NORMAL ] Iteration 52:\tk_eff = 0.960491\tres = 9.733E-03\n",
"[ NORMAL ] Iteration 53:\tk_eff = 0.969168\tres = 9.378E-03\n",
"[ NORMAL ] Iteration 54:\tk_eff = 0.977604\tres = 9.035E-03\n",
- "[ NORMAL ] Iteration 55:\tk_eff = 0.985800\tres = 8.704E-03\n",
- "[ NORMAL ] Iteration 56:\tk_eff = 0.993761\tres = 8.384E-03\n",
+ "[ NORMAL ] Iteration 55:\tk_eff = 0.985801\tres = 8.704E-03\n",
+ "[ NORMAL ] Iteration 56:\tk_eff = 0.993762\tres = 8.384E-03\n",
"[ NORMAL ] Iteration 57:\tk_eff = 1.001491\tres = 8.076E-03\n",
"[ NORMAL ] Iteration 58:\tk_eff = 1.008992\tres = 7.778E-03\n",
"[ NORMAL ] Iteration 59:\tk_eff = 1.016271\tres = 7.490E-03\n",
- "[ NORMAL ] Iteration 60:\tk_eff = 1.023330\tres = 7.213E-03\n",
- "[ NORMAL ] Iteration 61:\tk_eff = 1.030174\tres = 6.946E-03\n",
- "[ NORMAL ] Iteration 62:\tk_eff = 1.036809\tres = 6.688E-03\n",
- "[ NORMAL ] Iteration 63:\tk_eff = 1.043238\tres = 6.440E-03\n",
- "[ NORMAL ] Iteration 64:\tk_eff = 1.049466\tres = 6.201E-03\n",
+ "[ NORMAL ] Iteration 60:\tk_eff = 1.023329\tres = 7.214E-03\n",
+ "[ NORMAL ] Iteration 61:\tk_eff = 1.030174\tres = 6.945E-03\n",
+ "[ NORMAL ] Iteration 62:\tk_eff = 1.036809\tres = 6.689E-03\n",
+ "[ NORMAL ] Iteration 63:\tk_eff = 1.043238\tres = 6.441E-03\n",
+ "[ NORMAL ] Iteration 64:\tk_eff = 1.049466\tres = 6.200E-03\n",
"[ NORMAL ] Iteration 65:\tk_eff = 1.055498\tres = 5.970E-03\n",
- "[ NORMAL ] Iteration 66:\tk_eff = 1.061339\tres = 5.748E-03\n",
- "[ NORMAL ] Iteration 67:\tk_eff = 1.066993\tres = 5.534E-03\n",
- "[ NORMAL ] Iteration 68:\tk_eff = 1.072465\tres = 5.327E-03\n",
- "[ NORMAL ] Iteration 69:\tk_eff = 1.077760\tres = 5.129E-03\n",
+ "[ NORMAL ] Iteration 66:\tk_eff = 1.061338\tres = 5.748E-03\n",
+ "[ NORMAL ] Iteration 67:\tk_eff = 1.066993\tres = 5.533E-03\n",
+ "[ NORMAL ] Iteration 68:\tk_eff = 1.072465\tres = 5.328E-03\n",
+ "[ NORMAL ] Iteration 69:\tk_eff = 1.077760\tres = 5.128E-03\n",
"[ NORMAL ] Iteration 70:\tk_eff = 1.082882\tres = 4.937E-03\n",
- "[ NORMAL ] Iteration 71:\tk_eff = 1.087837\tres = 4.753E-03\n",
- "[ NORMAL ] Iteration 72:\tk_eff = 1.092628\tres = 4.575E-03\n",
+ "[ NORMAL ] Iteration 71:\tk_eff = 1.087836\tres = 4.753E-03\n",
+ "[ NORMAL ] Iteration 72:\tk_eff = 1.092627\tres = 4.575E-03\n",
"[ NORMAL ] Iteration 73:\tk_eff = 1.097260\tres = 4.404E-03\n",
- "[ NORMAL ] Iteration 74:\tk_eff = 1.101737\tres = 4.239E-03\n",
- "[ NORMAL ] Iteration 75:\tk_eff = 1.106065\tres = 4.081E-03\n",
- "[ NORMAL ] Iteration 76:\tk_eff = 1.110247\tres = 3.928E-03\n",
+ "[ NORMAL ] Iteration 74:\tk_eff = 1.101737\tres = 4.240E-03\n",
+ "[ NORMAL ] Iteration 75:\tk_eff = 1.106065\tres = 4.080E-03\n",
+ "[ NORMAL ] Iteration 76:\tk_eff = 1.110247\tres = 3.929E-03\n",
"[ NORMAL ] Iteration 77:\tk_eff = 1.114288\tres = 3.781E-03\n",
"[ NORMAL ] Iteration 78:\tk_eff = 1.118191\tres = 3.639E-03\n",
- "[ NORMAL ] Iteration 79:\tk_eff = 1.121961\tres = 3.503E-03\n",
- "[ NORMAL ] Iteration 80:\tk_eff = 1.125603\tres = 3.372E-03\n",
+ "[ NORMAL ] Iteration 79:\tk_eff = 1.121961\tres = 3.502E-03\n",
+ "[ NORMAL ] Iteration 80:\tk_eff = 1.125602\tres = 3.372E-03\n",
"[ NORMAL ] Iteration 81:\tk_eff = 1.129119\tres = 3.245E-03\n",
"[ NORMAL ] Iteration 82:\tk_eff = 1.132513\tres = 3.124E-03\n",
- "[ NORMAL ] Iteration 83:\tk_eff = 1.135790\tres = 3.007E-03\n",
+ "[ NORMAL ] Iteration 83:\tk_eff = 1.135790\tres = 3.006E-03\n",
"[ NORMAL ] Iteration 84:\tk_eff = 1.138954\tres = 2.894E-03\n",
- "[ NORMAL ] Iteration 85:\tk_eff = 1.142007\tres = 2.785E-03\n",
- "[ NORMAL ] Iteration 86:\tk_eff = 1.144953\tres = 2.681E-03\n",
- "[ NORMAL ] Iteration 87:\tk_eff = 1.147796\tres = 2.580E-03\n",
+ "[ NORMAL ] Iteration 85:\tk_eff = 1.142008\tres = 2.786E-03\n",
+ "[ NORMAL ] Iteration 86:\tk_eff = 1.144954\tres = 2.681E-03\n",
+ "[ NORMAL ] Iteration 87:\tk_eff = 1.147797\tres = 2.580E-03\n",
"[ NORMAL ] Iteration 88:\tk_eff = 1.150539\tres = 2.483E-03\n",
- "[ NORMAL ] Iteration 89:\tk_eff = 1.153185\tres = 2.390E-03\n",
+ "[ NORMAL ] Iteration 89:\tk_eff = 1.153185\tres = 2.389E-03\n",
"[ NORMAL ] Iteration 90:\tk_eff = 1.155738\tres = 2.300E-03\n",
- "[ NORMAL ] Iteration 91:\tk_eff = 1.158200\tres = 2.214E-03\n",
+ "[ NORMAL ] Iteration 91:\tk_eff = 1.158201\tres = 2.214E-03\n",
"[ NORMAL ] Iteration 92:\tk_eff = 1.160575\tres = 2.130E-03\n",
"[ NORMAL ] Iteration 93:\tk_eff = 1.162865\tres = 2.050E-03\n",
- "[ NORMAL ] Iteration 94:\tk_eff = 1.165073\tres = 1.973E-03\n",
+ "[ NORMAL ] Iteration 94:\tk_eff = 1.165074\tres = 1.973E-03\n",
"[ NORMAL ] Iteration 95:\tk_eff = 1.167202\tres = 1.899E-03\n",
- "[ NORMAL ] Iteration 96:\tk_eff = 1.169255\tres = 1.828E-03\n",
- "[ NORMAL ] Iteration 97:\tk_eff = 1.171234\tres = 1.759E-03\n",
+ "[ NORMAL ] Iteration 96:\tk_eff = 1.169255\tres = 1.827E-03\n",
+ "[ NORMAL ] Iteration 97:\tk_eff = 1.171235\tres = 1.759E-03\n",
"[ NORMAL ] Iteration 98:\tk_eff = 1.173142\tres = 1.693E-03\n",
- "[ NORMAL ] Iteration 99:\tk_eff = 1.174980\tres = 1.629E-03\n",
- "[ NORMAL ] Iteration 100:\tk_eff = 1.176753\tres = 1.567E-03\n",
+ "[ NORMAL ] Iteration 99:\tk_eff = 1.174981\tres = 1.629E-03\n",
+ "[ NORMAL ] Iteration 100:\tk_eff = 1.176753\tres = 1.568E-03\n",
"[ NORMAL ] Iteration 101:\tk_eff = 1.178461\tres = 1.508E-03\n",
- "[ NORMAL ] Iteration 102:\tk_eff = 1.180107\tres = 1.452E-03\n",
+ "[ NORMAL ] Iteration 102:\tk_eff = 1.180108\tres = 1.452E-03\n",
"[ NORMAL ] Iteration 103:\tk_eff = 1.181694\tres = 1.397E-03\n",
- "[ NORMAL ] Iteration 104:\tk_eff = 1.183222\tres = 1.344E-03\n",
- "[ NORMAL ] Iteration 105:\tk_eff = 1.184695\tres = 1.294E-03\n",
+ "[ NORMAL ] Iteration 104:\tk_eff = 1.183223\tres = 1.344E-03\n",
+ "[ NORMAL ] Iteration 105:\tk_eff = 1.184696\tres = 1.294E-03\n",
"[ NORMAL ] Iteration 106:\tk_eff = 1.186115\tres = 1.245E-03\n",
"[ NORMAL ] Iteration 107:\tk_eff = 1.187482\tres = 1.198E-03\n",
- "[ NORMAL ] Iteration 108:\tk_eff = 1.188799\tres = 1.153E-03\n",
- "[ NORMAL ] Iteration 109:\tk_eff = 1.190068\tres = 1.109E-03\n",
+ "[ NORMAL ] Iteration 108:\tk_eff = 1.188800\tres = 1.152E-03\n",
+ "[ NORMAL ] Iteration 109:\tk_eff = 1.190069\tres = 1.110E-03\n",
"[ NORMAL ] Iteration 110:\tk_eff = 1.191290\tres = 1.067E-03\n",
- "[ NORMAL ] Iteration 111:\tk_eff = 1.192468\tres = 1.027E-03\n",
- "[ NORMAL ] Iteration 112:\tk_eff = 1.193602\tres = 9.883E-04\n",
- "[ NORMAL ] Iteration 113:\tk_eff = 1.194694\tres = 9.510E-04\n",
- "[ NORMAL ] Iteration 114:\tk_eff = 1.195746\tres = 9.151E-04\n",
- "[ NORMAL ] Iteration 115:\tk_eff = 1.196759\tres = 8.805E-04\n",
- "[ NORMAL ] Iteration 116:\tk_eff = 1.197735\tres = 8.473E-04\n",
- "[ NORMAL ] Iteration 117:\tk_eff = 1.198674\tres = 8.152E-04\n",
- "[ NORMAL ] Iteration 118:\tk_eff = 1.199579\tres = 7.844E-04\n",
- "[ NORMAL ] Iteration 119:\tk_eff = 1.200450\tres = 7.548E-04\n",
- "[ NORMAL ] Iteration 120:\tk_eff = 1.201289\tres = 7.262E-04\n",
- "[ NORMAL ] Iteration 121:\tk_eff = 1.202097\tres = 6.988E-04\n",
- "[ NORMAL ] Iteration 122:\tk_eff = 1.202874\tres = 6.723E-04\n",
- "[ NORMAL ] Iteration 123:\tk_eff = 1.203623\tres = 6.469E-04\n",
- "[ NORMAL ] Iteration 124:\tk_eff = 1.204344\tres = 6.224E-04\n",
- "[ NORMAL ] Iteration 125:\tk_eff = 1.205038\tres = 5.989E-04\n",
- "[ NORMAL ] Iteration 126:\tk_eff = 1.205706\tres = 5.762E-04\n",
- "[ NORMAL ] Iteration 127:\tk_eff = 1.206349\tres = 5.544E-04\n",
- "[ NORMAL ] Iteration 128:\tk_eff = 1.206968\tres = 5.334E-04\n",
- "[ NORMAL ] Iteration 129:\tk_eff = 1.207564\tres = 5.132E-04\n",
- "[ NORMAL ] Iteration 130:\tk_eff = 1.208138\tres = 4.938E-04\n",
- "[ NORMAL ] Iteration 131:\tk_eff = 1.208690\tres = 4.751E-04\n",
- "[ NORMAL ] Iteration 132:\tk_eff = 1.209221\tres = 4.570E-04\n",
- "[ NORMAL ] Iteration 133:\tk_eff = 1.209733\tres = 4.397E-04\n",
- "[ NORMAL ] Iteration 134:\tk_eff = 1.210225\tres = 4.231E-04\n",
- "[ NORMAL ] Iteration 135:\tk_eff = 1.210699\tres = 4.070E-04\n",
- "[ NORMAL ] Iteration 136:\tk_eff = 1.211155\tres = 3.916E-04\n",
- "[ NORMAL ] Iteration 137:\tk_eff = 1.211594\tres = 3.767E-04\n",
- "[ NORMAL ] Iteration 138:\tk_eff = 1.212017\tres = 3.624E-04\n",
- "[ NORMAL ] Iteration 139:\tk_eff = 1.212423\tres = 3.487E-04\n",
- "[ NORMAL ] Iteration 140:\tk_eff = 1.212815\tres = 3.355E-04\n",
+ "[ NORMAL ] Iteration 111:\tk_eff = 1.192469\tres = 1.026E-03\n",
+ "[ NORMAL ] Iteration 112:\tk_eff = 1.193602\tres = 9.889E-04\n",
+ "[ NORMAL ] Iteration 113:\tk_eff = 1.194694\tres = 9.503E-04\n",
+ "[ NORMAL ] Iteration 114:\tk_eff = 1.195747\tres = 9.154E-04\n",
+ "[ NORMAL ] Iteration 115:\tk_eff = 1.196759\tres = 8.808E-04\n",
+ "[ NORMAL ] Iteration 116:\tk_eff = 1.197735\tres = 8.464E-04\n",
+ "[ NORMAL ] Iteration 117:\tk_eff = 1.198674\tres = 8.155E-04\n",
+ "[ NORMAL ] Iteration 118:\tk_eff = 1.199579\tres = 7.845E-04\n",
+ "[ NORMAL ] Iteration 119:\tk_eff = 1.200450\tres = 7.550E-04\n",
+ "[ NORMAL ] Iteration 120:\tk_eff = 1.201289\tres = 7.263E-04\n",
+ "[ NORMAL ] Iteration 121:\tk_eff = 1.202097\tres = 6.984E-04\n",
+ "[ NORMAL ] Iteration 122:\tk_eff = 1.202875\tres = 6.728E-04\n",
+ "[ NORMAL ] Iteration 123:\tk_eff = 1.203623\tres = 6.470E-04\n",
+ "[ NORMAL ] Iteration 124:\tk_eff = 1.204344\tres = 6.220E-04\n",
+ "[ NORMAL ] Iteration 125:\tk_eff = 1.205037\tres = 5.994E-04\n",
+ "[ NORMAL ] Iteration 126:\tk_eff = 1.205706\tres = 5.757E-04\n",
+ "[ NORMAL ] Iteration 127:\tk_eff = 1.206349\tres = 5.551E-04\n",
+ "[ NORMAL ] Iteration 128:\tk_eff = 1.206968\tres = 5.328E-04\n",
+ "[ NORMAL ] Iteration 129:\tk_eff = 1.207565\tres = 5.132E-04\n",
+ "[ NORMAL ] Iteration 130:\tk_eff = 1.208138\tres = 4.944E-04\n",
+ "[ NORMAL ] Iteration 131:\tk_eff = 1.208690\tres = 4.749E-04\n",
+ "[ NORMAL ] Iteration 132:\tk_eff = 1.209221\tres = 4.566E-04\n",
+ "[ NORMAL ] Iteration 133:\tk_eff = 1.209733\tres = 4.395E-04\n",
+ "[ NORMAL ] Iteration 134:\tk_eff = 1.210226\tres = 4.232E-04\n",
+ "[ NORMAL ] Iteration 135:\tk_eff = 1.210700\tres = 4.076E-04\n",
+ "[ NORMAL ] Iteration 136:\tk_eff = 1.211156\tres = 3.916E-04\n",
+ "[ NORMAL ] Iteration 137:\tk_eff = 1.211595\tres = 3.767E-04\n",
+ "[ NORMAL ] Iteration 138:\tk_eff = 1.212017\tres = 3.628E-04\n",
+ "[ NORMAL ] Iteration 139:\tk_eff = 1.212423\tres = 3.486E-04\n",
+ "[ NORMAL ] Iteration 140:\tk_eff = 1.212814\tres = 3.350E-04\n",
"[ NORMAL ] Iteration 141:\tk_eff = 1.213191\tres = 3.227E-04\n",
- "[ NORMAL ] Iteration 142:\tk_eff = 1.213554\tres = 3.105E-04\n",
- "[ NORMAL ] Iteration 143:\tk_eff = 1.213902\tres = 2.987E-04\n",
- "[ NORMAL ] Iteration 144:\tk_eff = 1.214238\tres = 2.874E-04\n",
- "[ NORMAL ] Iteration 145:\tk_eff = 1.214561\tres = 2.764E-04\n",
+ "[ NORMAL ] Iteration 142:\tk_eff = 1.213554\tres = 3.107E-04\n",
+ "[ NORMAL ] Iteration 143:\tk_eff = 1.213902\tres = 2.989E-04\n",
+ "[ NORMAL ] Iteration 144:\tk_eff = 1.214238\tres = 2.869E-04\n",
+ "[ NORMAL ] Iteration 145:\tk_eff = 1.214561\tres = 2.770E-04\n",
"[ NORMAL ] Iteration 146:\tk_eff = 1.214872\tres = 2.659E-04\n",
"[ NORMAL ] Iteration 147:\tk_eff = 1.215171\tres = 2.558E-04\n",
- "[ NORMAL ] Iteration 148:\tk_eff = 1.215458\tres = 2.461E-04\n",
- "[ NORMAL ] Iteration 149:\tk_eff = 1.215735\tres = 2.368E-04\n",
- "[ NORMAL ] Iteration 150:\tk_eff = 1.216002\tres = 2.278E-04\n",
- "[ NORMAL ] Iteration 151:\tk_eff = 1.216258\tres = 2.191E-04\n",
- "[ NORMAL ] Iteration 152:\tk_eff = 1.216504\tres = 2.108E-04\n",
+ "[ NORMAL ] Iteration 148:\tk_eff = 1.215458\tres = 2.458E-04\n",
+ "[ NORMAL ] Iteration 149:\tk_eff = 1.215735\tres = 2.361E-04\n",
+ "[ NORMAL ] Iteration 150:\tk_eff = 1.216002\tres = 2.281E-04\n",
+ "[ NORMAL ] Iteration 151:\tk_eff = 1.216258\tres = 2.194E-04\n",
+ "[ NORMAL ] Iteration 152:\tk_eff = 1.216505\tres = 2.110E-04\n",
"[ NORMAL ] Iteration 153:\tk_eff = 1.216742\tres = 2.028E-04\n",
- "[ NORMAL ] Iteration 154:\tk_eff = 1.216970\tres = 1.951E-04\n",
- "[ NORMAL ] Iteration 155:\tk_eff = 1.217190\tres = 1.876E-04\n",
- "[ NORMAL ] Iteration 156:\tk_eff = 1.217401\tres = 1.805E-04\n",
- "[ NORMAL ] Iteration 157:\tk_eff = 1.217604\tres = 1.736E-04\n",
- "[ NORMAL ] Iteration 158:\tk_eff = 1.217800\tres = 1.670E-04\n",
- "[ NORMAL ] Iteration 159:\tk_eff = 1.217988\tres = 1.607E-04\n",
+ "[ NORMAL ] Iteration 154:\tk_eff = 1.216970\tres = 1.952E-04\n",
+ "[ NORMAL ] Iteration 155:\tk_eff = 1.217191\tres = 1.876E-04\n",
+ "[ NORMAL ] Iteration 156:\tk_eff = 1.217402\tres = 1.809E-04\n",
+ "[ NORMAL ] Iteration 157:\tk_eff = 1.217605\tres = 1.734E-04\n",
+ "[ NORMAL ] Iteration 158:\tk_eff = 1.217800\tres = 1.673E-04\n",
+ "[ NORMAL ] Iteration 159:\tk_eff = 1.217988\tres = 1.602E-04\n",
"[ NORMAL ] Iteration 160:\tk_eff = 1.218169\tres = 1.546E-04\n",
- "[ NORMAL ] Iteration 161:\tk_eff = 1.218344\tres = 1.487E-04\n",
- "[ NORMAL ] Iteration 162:\tk_eff = 1.218511\tres = 1.430E-04\n",
- "[ NORMAL ] Iteration 163:\tk_eff = 1.218673\tres = 1.376E-04\n",
- "[ NORMAL ] Iteration 164:\tk_eff = 1.218828\tres = 1.324E-04\n",
+ "[ NORMAL ] Iteration 161:\tk_eff = 1.218344\tres = 1.485E-04\n",
+ "[ NORMAL ] Iteration 162:\tk_eff = 1.218511\tres = 1.429E-04\n",
+ "[ NORMAL ] Iteration 163:\tk_eff = 1.218672\tres = 1.378E-04\n",
+ "[ NORMAL ] Iteration 164:\tk_eff = 1.218828\tres = 1.323E-04\n",
"[ NORMAL ] Iteration 165:\tk_eff = 1.218977\tres = 1.273E-04\n",
"[ NORMAL ] Iteration 166:\tk_eff = 1.219121\tres = 1.225E-04\n",
- "[ NORMAL ] Iteration 167:\tk_eff = 1.219259\tres = 1.178E-04\n",
- "[ NORMAL ] Iteration 168:\tk_eff = 1.219392\tres = 1.133E-04\n",
+ "[ NORMAL ] Iteration 167:\tk_eff = 1.219259\tres = 1.182E-04\n",
+ "[ NORMAL ] Iteration 168:\tk_eff = 1.219392\tres = 1.131E-04\n",
"[ NORMAL ] Iteration 169:\tk_eff = 1.219520\tres = 1.090E-04\n",
- "[ NORMAL ] Iteration 170:\tk_eff = 1.219643\tres = 1.049E-04\n",
- "[ NORMAL ] Iteration 171:\tk_eff = 1.219761\tres = 1.009E-04\n",
- "[ NORMAL ] Iteration 172:\tk_eff = 1.219875\tres = 9.702E-05\n",
- "[ NORMAL ] Iteration 173:\tk_eff = 1.219984\tres = 9.332E-05\n",
- "[ NORMAL ] Iteration 174:\tk_eff = 1.220090\tres = 8.976E-05\n",
- "[ NORMAL ] Iteration 175:\tk_eff = 1.220191\tres = 8.634E-05\n",
- "[ NORMAL ] Iteration 176:\tk_eff = 1.220288\tres = 8.305E-05\n",
- "[ NORMAL ] Iteration 177:\tk_eff = 1.220382\tres = 7.989E-05\n",
- "[ NORMAL ] Iteration 178:\tk_eff = 1.220472\tres = 7.684E-05\n",
- "[ NORMAL ] Iteration 179:\tk_eff = 1.220559\tres = 7.392E-05\n",
- "[ NORMAL ] Iteration 180:\tk_eff = 1.220643\tres = 7.110E-05\n",
- "[ NORMAL ] Iteration 181:\tk_eff = 1.220723\tres = 6.839E-05\n",
- "[ NORMAL ] Iteration 182:\tk_eff = 1.220800\tres = 6.578E-05\n",
- "[ NORMAL ] Iteration 183:\tk_eff = 1.220874\tres = 6.327E-05\n",
- "[ NORMAL ] Iteration 184:\tk_eff = 1.220946\tres = 6.086E-05\n",
- "[ NORMAL ] Iteration 185:\tk_eff = 1.221015\tres = 5.854E-05\n",
- "[ NORMAL ] Iteration 186:\tk_eff = 1.221081\tres = 5.631E-05\n",
- "[ NORMAL ] Iteration 187:\tk_eff = 1.221144\tres = 5.416E-05\n",
- "[ NORMAL ] Iteration 188:\tk_eff = 1.221206\tres = 5.209E-05\n",
- "[ NORMAL ] Iteration 189:\tk_eff = 1.221264\tres = 5.011E-05\n",
- "[ NORMAL ] Iteration 190:\tk_eff = 1.221321\tres = 4.820E-05\n",
- "[ NORMAL ] Iteration 191:\tk_eff = 1.221375\tres = 4.636E-05\n",
- "[ NORMAL ] Iteration 192:\tk_eff = 1.221428\tres = 4.459E-05\n",
- "[ NORMAL ] Iteration 193:\tk_eff = 1.221478\tres = 4.289E-05\n",
- "[ NORMAL ] Iteration 194:\tk_eff = 1.221527\tres = 4.125E-05\n",
- "[ NORMAL ] Iteration 195:\tk_eff = 1.221573\tres = 3.968E-05\n",
- "[ NORMAL ] Iteration 196:\tk_eff = 1.221618\tres = 3.816E-05\n",
- "[ NORMAL ] Iteration 197:\tk_eff = 1.221661\tres = 3.671E-05\n",
- "[ NORMAL ] Iteration 198:\tk_eff = 1.221703\tres = 3.531E-05\n",
- "[ NORMAL ] Iteration 199:\tk_eff = 1.221743\tres = 3.396E-05\n",
- "[ NORMAL ] Iteration 200:\tk_eff = 1.221781\tres = 3.266E-05\n",
- "[ NORMAL ] Iteration 201:\tk_eff = 1.221818\tres = 3.142E-05\n",
- "[ NORMAL ] Iteration 202:\tk_eff = 1.221853\tres = 3.022E-05\n",
- "[ NORMAL ] Iteration 203:\tk_eff = 1.221888\tres = 2.906E-05\n",
- "[ NORMAL ] Iteration 204:\tk_eff = 1.221920\tres = 2.795E-05\n",
- "[ NORMAL ] Iteration 205:\tk_eff = 1.221952\tres = 2.689E-05\n",
- "[ NORMAL ] Iteration 206:\tk_eff = 1.221982\tres = 2.586E-05\n",
- "[ NORMAL ] Iteration 207:\tk_eff = 1.222012\tres = 2.487E-05\n",
- "[ NORMAL ] Iteration 208:\tk_eff = 1.222040\tres = 2.392E-05\n",
- "[ NORMAL ] Iteration 209:\tk_eff = 1.222067\tres = 2.301E-05\n",
- "[ NORMAL ] Iteration 210:\tk_eff = 1.222093\tres = 2.213E-05\n",
- "[ NORMAL ] Iteration 211:\tk_eff = 1.222118\tres = 2.129E-05\n",
- "[ NORMAL ] Iteration 212:\tk_eff = 1.222142\tres = 2.047E-05\n",
- "[ NORMAL ] Iteration 213:\tk_eff = 1.222165\tres = 1.969E-05\n",
- "[ NORMAL ] Iteration 214:\tk_eff = 1.222187\tres = 1.894E-05\n",
- "[ NORMAL ] Iteration 215:\tk_eff = 1.222209\tres = 1.822E-05\n",
- "[ NORMAL ] Iteration 216:\tk_eff = 1.222229\tres = 1.752E-05\n",
- "[ NORMAL ] Iteration 217:\tk_eff = 1.222249\tres = 1.685E-05\n",
- "[ NORMAL ] Iteration 218:\tk_eff = 1.222268\tres = 1.621E-05\n",
- "[ NORMAL ] Iteration 219:\tk_eff = 1.222287\tres = 1.559E-05\n",
- "[ NORMAL ] Iteration 220:\tk_eff = 1.222304\tres = 1.499E-05\n",
- "[ NORMAL ] Iteration 221:\tk_eff = 1.222321\tres = 1.442E-05\n",
+ "[ NORMAL ] Iteration 170:\tk_eff = 1.219643\tres = 1.050E-04\n",
+ "[ NORMAL ] Iteration 171:\tk_eff = 1.219761\tres = 1.008E-04\n",
+ "[ NORMAL ] Iteration 172:\tk_eff = 1.219876\tres = 9.712E-05\n",
+ "[ NORMAL ] Iteration 173:\tk_eff = 1.219985\tres = 9.360E-05\n",
+ "[ NORMAL ] Iteration 174:\tk_eff = 1.220090\tres = 8.946E-05\n",
+ "[ NORMAL ] Iteration 175:\tk_eff = 1.220191\tres = 8.611E-05\n",
+ "[ NORMAL ] Iteration 176:\tk_eff = 1.220288\tres = 8.299E-05\n",
+ "[ NORMAL ] Iteration 177:\tk_eff = 1.220382\tres = 7.977E-05\n",
+ "[ NORMAL ] Iteration 178:\tk_eff = 1.220472\tres = 7.682E-05\n",
+ "[ NORMAL ] Iteration 179:\tk_eff = 1.220560\tres = 7.421E-05\n",
+ "[ NORMAL ] Iteration 180:\tk_eff = 1.220643\tres = 7.140E-05\n",
+ "[ NORMAL ] Iteration 181:\tk_eff = 1.220724\tres = 6.824E-05\n",
+ "[ NORMAL ] Iteration 182:\tk_eff = 1.220801\tres = 6.591E-05\n",
+ "[ NORMAL ] Iteration 183:\tk_eff = 1.220875\tres = 6.353E-05\n",
+ "[ NORMAL ] Iteration 184:\tk_eff = 1.220946\tres = 6.092E-05\n",
+ "[ NORMAL ] Iteration 185:\tk_eff = 1.221015\tres = 5.826E-05\n",
+ "[ NORMAL ] Iteration 186:\tk_eff = 1.221081\tres = 5.613E-05\n",
+ "[ NORMAL ] Iteration 187:\tk_eff = 1.221145\tres = 5.433E-05\n",
+ "[ NORMAL ] Iteration 188:\tk_eff = 1.221206\tres = 5.230E-05\n",
+ "[ NORMAL ] Iteration 189:\tk_eff = 1.221266\tres = 5.025E-05\n",
+ "[ NORMAL ] Iteration 190:\tk_eff = 1.221322\tres = 4.833E-05\n",
+ "[ NORMAL ] Iteration 191:\tk_eff = 1.221376\tres = 4.642E-05\n",
+ "[ NORMAL ] Iteration 192:\tk_eff = 1.221429\tres = 4.437E-05\n",
+ "[ NORMAL ] Iteration 193:\tk_eff = 1.221479\tres = 4.286E-05\n",
+ "[ NORMAL ] Iteration 194:\tk_eff = 1.221528\tres = 4.123E-05\n",
+ "[ NORMAL ] Iteration 195:\tk_eff = 1.221574\tres = 3.993E-05\n",
+ "[ NORMAL ] Iteration 196:\tk_eff = 1.221619\tres = 3.785E-05\n",
+ "[ NORMAL ] Iteration 197:\tk_eff = 1.221662\tres = 3.669E-05\n",
+ "[ NORMAL ] Iteration 198:\tk_eff = 1.221704\tres = 3.547E-05\n",
+ "[ NORMAL ] Iteration 199:\tk_eff = 1.221743\tres = 3.387E-05\n",
+ "[ NORMAL ] Iteration 200:\tk_eff = 1.221781\tres = 3.243E-05\n",
+ "[ NORMAL ] Iteration 201:\tk_eff = 1.221818\tres = 3.127E-05\n",
+ "[ NORMAL ] Iteration 202:\tk_eff = 1.221854\tres = 3.018E-05\n",
+ "[ NORMAL ] Iteration 203:\tk_eff = 1.221888\tres = 2.924E-05\n",
+ "[ NORMAL ] Iteration 204:\tk_eff = 1.221921\tres = 2.786E-05\n",
+ "[ NORMAL ] Iteration 205:\tk_eff = 1.221952\tres = 2.677E-05\n",
+ "[ NORMAL ] Iteration 206:\tk_eff = 1.221982\tres = 2.579E-05\n",
+ "[ NORMAL ] Iteration 207:\tk_eff = 1.222011\tres = 2.468E-05\n",
+ "[ NORMAL ] Iteration 208:\tk_eff = 1.222039\tres = 2.377E-05\n",
+ "[ NORMAL ] Iteration 209:\tk_eff = 1.222066\tres = 2.288E-05\n",
+ "[ NORMAL ] Iteration 210:\tk_eff = 1.222093\tres = 2.204E-05\n",
+ "[ NORMAL ] Iteration 211:\tk_eff = 1.222118\tres = 2.117E-05\n",
+ "[ NORMAL ] Iteration 212:\tk_eff = 1.222141\tres = 2.044E-05\n",
+ "[ NORMAL ] Iteration 213:\tk_eff = 1.222165\tres = 1.954E-05\n",
+ "[ NORMAL ] Iteration 214:\tk_eff = 1.222187\tres = 1.899E-05\n",
+ "[ NORMAL ] Iteration 215:\tk_eff = 1.222208\tres = 1.797E-05\n",
+ "[ NORMAL ] Iteration 216:\tk_eff = 1.222229\tres = 1.745E-05\n",
+ "[ NORMAL ] Iteration 217:\tk_eff = 1.222248\tres = 1.686E-05\n",
+ "[ NORMAL ] Iteration 218:\tk_eff = 1.222267\tres = 1.623E-05\n",
+ "[ NORMAL ] Iteration 219:\tk_eff = 1.222286\tres = 1.568E-05\n",
+ "[ NORMAL ] Iteration 220:\tk_eff = 1.222304\tres = 1.508E-05\n",
+ "[ NORMAL ] Iteration 221:\tk_eff = 1.222320\tres = 1.458E-05\n",
"[ NORMAL ] Iteration 222:\tk_eff = 1.222337\tres = 1.387E-05\n",
- "[ NORMAL ] Iteration 223:\tk_eff = 1.222353\tres = 1.334E-05\n",
- "[ NORMAL ] Iteration 224:\tk_eff = 1.222368\tres = 1.283E-05\n",
- "[ NORMAL ] Iteration 225:\tk_eff = 1.222383\tres = 1.234E-05\n",
- "[ NORMAL ] Iteration 226:\tk_eff = 1.222397\tres = 1.187E-05\n",
- "[ NORMAL ] Iteration 227:\tk_eff = 1.222410\tres = 1.142E-05\n",
- "[ NORMAL ] Iteration 228:\tk_eff = 1.222423\tres = 1.098E-05\n",
- "[ NORMAL ] Iteration 229:\tk_eff = 1.222435\tres = 1.056E-05\n",
- "[ NORMAL ] Iteration 230:\tk_eff = 1.222447\tres = 1.016E-05\n"
+ "[ NORMAL ] Iteration 223:\tk_eff = 1.222353\tres = 1.337E-05\n",
+ "[ NORMAL ] Iteration 224:\tk_eff = 1.222368\tres = 1.286E-05\n",
+ "[ NORMAL ] Iteration 225:\tk_eff = 1.222382\tres = 1.230E-05\n",
+ "[ NORMAL ] Iteration 226:\tk_eff = 1.222396\tres = 1.201E-05\n",
+ "[ NORMAL ] Iteration 227:\tk_eff = 1.222409\tres = 1.131E-05\n",
+ "[ NORMAL ] Iteration 228:\tk_eff = 1.222422\tres = 1.082E-05\n",
+ "[ NORMAL ] Iteration 229:\tk_eff = 1.222435\tres = 1.051E-05\n",
+ "[ NORMAL ] Iteration 230:\tk_eff = 1.222447\tres = 1.015E-05\n"
]
}
],
@@ -1809,9 +1833,9 @@
},
{
"data": {
- "image/png": "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\nRETE6eQvWE4Yr8iVHuYAAAAASUVORK5CYII=\n",
+ "image/png": "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\nHuXpp5/kt99+a/F9NifnkwJAYSFcc00NDz9cxbhxhVxwQRFr1qS7VMaYWCrPG02wtFO7HjNY2onK\n82K3EoBIZX7AAQczZ84bfPLJx5HZUd09mngc22effcLo0SMZPXokH3zwHj169OT7778DoHfvTZg8\n+QHuuOMefvllZeQ1m2++BQDffruMnXd2Zkrt1q07paWl/PbbrzHLC7DLLruSl5dHUVERW265FStW\n/NBi+ZrToU6bd989wJtvrueGGwoZOrSUu+6qYt99A+kuljEmSuWo0U128yRb796bUFVVyfPPP8O5\n546OzJoaCASorKzE5/OxdGnj+XU8Hg/BYF1dstNOuzB58gOR37t06cadd06gT59+dO3qdCF99NF/\n653xe73OOfoWW/Tl008/pl+/bfjll5WsW7eWzp03oKCggFWrfqFXr41ZsmQxffr0BZwWDTitjWXL\nlrLpppu36TPoUEkBoFMnmDixmjff9DNmTBGHHurnmmuqKSlJd8mMMekSPWi8//4H8vrr/8emm27G\nDz98j8fj4fjjT6o3S2n06wB23rk/Y8eOYcSIs2POjiqyLX/961huvvn6yDTYPXr04Kabbg0fKbLv\naaeNYPz4G3j77Teprq7i0kuvIi8vj1NO+TOXXDKGXr02pnPnzpH9169fz0UXjWLt2rWMGHFOveda\n9Vlk4iypItITmKmqA5vbr62zpP7+O1xxRRGffJLHPfdUMmBA8zc2ZNIshxYrs2KlOp7Fyq5YyYr3\n8cfzeeedN7n44ksTipVVs6SKiAe4BFiW7Fgbbgj33VfFFVdUc9ppxYwfX0CMRZGMMSYjRbdw2kvG\nJQXgXOBJIGVzn/7xj37eequChQvzOOSQEr78MhM/FmOMqa9//wFcdNEl7XrMlNZ+IrK7iLzlPvaK\nyP0i8r6IvCUiW7m7HQCMBAaJyHGpKlvPniGeeKKSs86q4dhji7nnnnwCNgZtjOlgUpYURORS4EGg\n0N10NFCgqnsClwO3A6jqcap6HjBPVV9IVfnAmVzvlFP8vPZaBbNn+zj66GKWLrVpMowxHUcqWwpf\nAcdSN8y+N/AagKrOA3aL3llV/5zCstWzxRYhXnyxksMO83PooSVMm5Zv02QYYzqElCUFVZ0ORK92\nUAaUR/0eEJGM6cz3euG882p5+eVKnnwyn5NPLubHH9NdKmOMSa503qdQjpMYwryqmtBk1z6fl86d\ni9u3VA0MHAjvvRdiwgQvgwd7uO22Ek44IfnNhlS8N4uVvfEsVnbFSnW8tsRKZ1KYCxwJPCcig4HP\nEj2A3x9M2XXGY8bAYYcVc8YZHl54IcStt1bRpUvy4uXq9dq5GivV8SxWdsVKdbw47lNo8rl0dNeE\nT7NfBKpEZC7OIPPFaShLQgYMgDlzKujVK8TQoaXMmZOX7iIZY0y7SmlLQVWXAXu6j0PAeamM3x6K\ni+HGG6s55BA/F15YxNChfsaNq6ZT+87fZYwxaZExA7vZZq+9Arz99noCARg6tJQPPrBWgzEm+1lS\naIOyMrjrrmpuvrmKc84p4rrrCmlmoSZjjMl4lhTawcEHB3j77Qq++87DgQeW8Nln9rEaY7KT1V7t\npGvXEA8/XMWYMTWcdFIxt99egN/f8uuMMSaTWFJoRx4PHH+8nzlzKvjwwzwOP7yEJUvsIzbGZA+r\nsZKgd+8Qzz5byUkn1XLkkcVMnZpPMKHb8owxJj0sKSSJxwMjRtQya1YFL72Uz/HHF/Pddza5njEm\ns1lSSLIttwwxY0YFQ4cGOOigEp55xmeT6xljMpYlhRTIy4MLL6zhuecquf/+Ak4/vYiVK63VYIzJ\nPJYUUmiHHYK8/noF22wTZNiwEmbOTOfUU8YY05glhRQrLISrr67h0UcrufHGQs4/v4g1a9JdKmOM\ncVhSSJNBg4K8+eZ6OnVyJtd7+22bJsMYk36WFNKotBRuvbWaO+6o4qKLirj88kLWr093qYwxHZkl\nhQwwbJgzud6aNR7237+U+fPtv8UYkx5W+2SIDTeE++6r4qqrqjn99GKuvdZLTU26S2WM6WgsKWSY\nI4/08+abFSxcCAcfXMLChfZfZIxJHatxMlDPniGefz7I2WfXcPzxxUyaVEAgkO5SGWM6AksKGcrj\ngVNO8fP66xW8+WYeRx1VzNKldsObMSa5LClkuM03DzF9eiVHHunn0ENLeOyxfJsmwxiTNJYUsoDX\nCyNH1vLKK5U89VQ+J51UzE8/WavBGNP+LClkkW22CfLqqxXsumuA/fazaTKMMe3PkkKWyc+Hyy6r\nYdq0Sm64oZAxY4pYty7dpTLG5ApLCllq4EBnmgyvN8SwYaX85z/2X2mMaTurSbJYp05w553VjBtX\nzYgRxUyYUEBtbbpLZYzJZpYUcsBhhzk3vH3ySR5HHFHC11/bILQxpnUsKeSInj1DPP10JSecUMvh\nh5cwbZpdumqMSZwlhRzi8cCZZzqXrj7+eD6nnVbML79Yq8EYE7+MSwoiMkBEHhWRx0SkR7rLk422\n2SbI//1fBdtuG2DYsBLeeMPWajDGxCfjkgJQCFwEvArskeayZK2CAmeFtwcfrOKKK4oYO9bWajDG\ntCzjkoKqvg9sB4wFPklzcbLeHnsEeOut9VRUOGs1LFiQcf/lxpgMktIaQkR2F5G33MdeEblfRN4X\nkbdEZCt3+0BgPnAo8NdUli9Xde4MU6ZUcfnl1Zx6ajF33GGzrhpjYmsyKbiV9mgR2dH9fYyIfCEi\nj4tI50QDicilwIM43UMARwMFqroncDlwu7u9E/AI8HfgH4nGMU07+mg/c+ZU8N57eRxzTDHff2+D\n0MaY+pprKYwHDgTWichewI04ff0fA5NaEesr4FggXBPtDbwGoKrzgN3cx2+p6mmqeqaq/qcVcUwz\nevcO8dxzley/f4CDDiphxgybP8kYU6e5GuFwoL+q1orIGOA5VZ0DzBGRRYkGUtXpItInalMZUB71\ne0BEvKoajPeYPp+Xzp2LEy1Kq6UyXrJjXXMNHHxwkNNPL+KDD+DWW4spLU1auIhc+gzTGc9iZVes\nVMdrS6zmkoJfVcOTJgzDaTmEtcdYRDlOYogcM5GEAOD3Bykvr2yHosSnc+filMVLRaxtt4U5c+Dq\nq0sZPNjDAw9UscMOCf0XJCzXPsN0xbNY2RUr1fFaitW9e1mTzzVXuVeIyBYisj2wLfAGgDvGsKZ1\nRa1nLnCYe8zBwGftcEyToLIyePTRIGPG1DB8eDFTp9qd0MZ0ZM0lhSuBD4B5wDhV/VVERgGzgWvb\nEDNc5bwIVInIXJxB5ovbcEzTRiec4GfWrAqmT8/n1FPtTmhjOqomu49U9W0R6QuUqOpv7uaPgCGq\nurg1wVR1GbCn+zgEnNea45jk6Ns3xIwZFdx6awH771/C3XdXMWyYXbtqTEfS3CWp56tqdVRCCF8l\ntFJEnk5J6UzK5ec7d0Lfc08VF11UxPXXF1JTk+5SZa7lyz0sWtT8EFsoBN98Yy0vkx2a+zYfLCLT\nRWTD8AYRGYbT928TJuS4IUMCvPlmBV9/7eWww2w67qYcfXQJQ4Y0f9nWRx95GTy4U4pKZEzbNHf1\n0VHA34D5InI2zqDwacC5qvpSKgrXkoJuG9E9xWtRdu9Asbrj3kgCCc9CFSztRMUlV1A5anTbCpbh\ngnFcrFVRYQnVZI8mWwqqGlLV24DrgH8BpwK7ZUpCAPDY4sQZy7t+HSV/H9/yjlnOa1NJmRzT7Fda\nRC4G7sQZEH4bmC4i/VJQrriEOlmTPJN51+d+0s6LY1ZyjzUUTBZpsvtIRP4FFAODVfUb4AERGQH8\nW0SuVtWHUlXIptSs+q3D3nySrlihEEyZks+UKQVMmlTF/vs3vjqpe4+Ep8bKWvFU+JYUTDZprqXw\nDrC3mxAAUNVHgX2BUckumMlMHg+cf34tDz9cxV//WsSECQVx9avnqrZ2H9XUgIi1eE3maG5M4YZY\n006oqmKL33R4gwcHmD27gvffz+OMM4roqMM7bW0pVFTAb79ZU8Jkjlad56hqdXsXxGSfHj1CPP98\nJd26hTj88BKWL+94lZt1H5lcY9dOmDYpKIDbb6/mz3+u5bDDSpg7t2OtB+3x1J8o6t//zuPOOwvS\nVBpj2s6SgmkzjwfOPLOW++6r4uyzi9JdnJRq2Aq4664Cxo8vjL2zMVmgxRVWROQM4DagS9TmkKp2\nrFNC06IhQwLMnFkBg9NdktRpmBRidRU1131kXUsm08Sz7NZ1wFBgoTuJnTFN2nLL+l+RmhqniylX\nxZMUmmPTlJtME0/30feq+oUlBNMap5xSzNq16S5F8rS1pRBOCpYcTKaIp6XwkYg8j7PITviqo5Cq\nPp68Yplc8c67+bBV/W3R8yxl+xxJ7dVSCAbjuzvamGSLp6WwIbAO596Eoe7PsOQVyWS7YGn8N2Pl\n2hxJid7MFgo5WaThDYDPPuuzq5hMWrTYUlDVM0SkABB3/y+i1m42ppGKS66g5O/j4577KJvnSGrr\nQHE4GTTsPpowoZDvv/dy8cW2mIVJrRbPa0RkN2AxMA14BFjurqlsTEyVo0azeumP/LKyvN7Pc8+u\np0f3II88XMEvK8vTXcx20dakYGMKJtPE09idBJyoqruqan/gWHebMQkZOjTAzJkBrr66kKlT89Nd\nnHbRMCk0V7kPGtR4MZ7w/iKdeOqpeIb4jEmueJJCqbsMJwCq+iHQse5QMu1m551hxowKpk3LzaTQ\n3D7LltX/c1P1suOOzvhLRYWHefOcpLBwoZfvv7f7Sk16xPPN+01Ejg7/IiLHAKuTVyST6zbfPOTc\n5NaCYBBWr87su7va0n3088+xXzxsWPPLexqTTPG0V88BnhSRhwEP8DXwp6SWyuS8jTaq/3tTazCU\n0InXBl/N0Fcyc7b2tiSFhl1NDedRMiYdWmwpqOpiVR0EbA5soaoD3emzjWmTeC5dLWMdh867iXff\nzcyL+BMZU2hJ+PJUY9KpyaQgIg+6/74lIm8BM4FX3N/fTFUBTe6quOSKuBJDp9A6Jk/OzGv242kp\n2JVFJps01310v/vvuKht9vU27aZy1Ohm72SO7lJauNDLkiVe+vXLrGXe2nNCO+s+MpmguZXXPnIf\nfgD8pqpvA5sCR+Dct2BMypx6ai2PP555Vyy1Z0vBuo9MJojn6qMngeNFZHfgeqAc50a2pBCR/UVk\nqog8KSI7JSuOyS6nnFLL88/7qE7zmn+//w7/+Ediyamt3Ue33VbA77/Ht+8331hiMW0TT1Loq6rX\nAMcBD6vqjcBGLbymLYpV9RycNRwOSmIck0X69g2x3XZBZs1K7w1eL7yQz8UXJ3abTnRS6NGjjOee\ni/0emuo+mjixkLffbvyaQAAqK+tvGzy4E4sW1f1ZL17s5dFHM6+FZTJXPEkhT0S6AUcDr4rIxkBJ\nsgqkqjNFpBS4EHgsWXFMduneozPv/jufc0aW0L1H50Y/Xfv2pnjK5JSXK54J8Bq2FBYujH0lVaLd\nR7fcUsAWW5Q12h7dmrrrrgIuu8zuNTXxiycp/B2YB8xS1c+Bt4EbWxNMRHZ3r2RCRLwicr+IvO9e\n0bSVu70bMBm4VlVXtSaOyQ2ZONtq46mynRp/6dKmK/SGM6C21+D0kiWx/3yjj29XPplExXOfwlOq\nupWqXiQiGwDDVfWZRAOJyKXAg0B4AdujgQJV3RO4HLjd3X470BMYLyLHJRrH5I54L1kNizXb6kMP\n5bNgQfKmjAhXwG+80XS3VlM3qSVy89o55xSzaJG3UXdRc2UypjXimSX1LBF5RER6AAuBZ0Xk5lbE\n+gpnMr3wV3Zv4DUAd26l3dzHp6vq4ap6mqq+0Io4JkfEmm117nvr6NUzwI8/1G1rzpVXFnHXXe13\nj0NTZ95NTYHd1LYePcr44gtvg/08TY43AAwZUsoddzR+LzvvXH9ajDPOKOaII4qbPI4xzYln1G4U\ncADO1BYvA2NwupOuSiSQqk4XkT5Rm8pwrmQKC4iIV1XjvhDd5/PSuXPqvvypjGexYtttN9hqKw/v\nvFPCscc2rm2jj+33O5XuBhvkJRxzzRrYYIPG2wsKnHOa9euL2Xhj8Pmc8YHi4nx8Pg8+X+NyFBfX\nP3UvKnIGfr/6qn4Fn5+fx/nn1x8UbljuQCCfzp3z8Pm8kVgrVtT/TL/7zst33znb8vO9MY+TiGz6\nfmRqrFSy3J96AAAgAElEQVTHa0usuC7lUNVfReQwYLKq+kWkPUauynESQ1hCCQHA7w9SXh5He7qd\ndO5cnLJ4Fqtp552Xx003FbLffpV4vfWX94w+9tdfFwNe1qwJUF5elVCMnj3L+PLLdXTtWj/xVFTk\nA3n07etj+fK1hELFgI+qqlr8fh9+P4CXFSsqKXVP4M8+u/6ZfHV1LVBIbW2A6Ma63+8H6icK5/2U\nRb3WT3l5NZ07F+P3hyKvr3vfZfVeW1tbBHgZPjzEww8n9hmEZdv3IxNjpTpeS7G6d298gUJYPJ2t\nC0VkJs5Ku7NF5Fngv4kWMoa5wGEA7qI9n7XDMU0HcNBBAQoK4NVXmz+n+fxzDz17BlmzpnWd7Oti\nLAgX3RUUCNT134f/DT/ft28ZP//s4b//9fLTT/X/zF5+Ob/RsQCCwfYdDFizpu7xjBl2WaqJTzxJ\nYQQwEdhdVWtwblw7qw0xw38KLwJVIjIXZ3D54jYc03QgHg9cfnk1N91U2OzNbJ9/7mGvvQL8/nti\nlW24so41YBsI1D0OBptfOe3dd/M4/PDG02B/+23sP7vp02PfixCrbA29917jy1z79Surt38wCN9+\na6PQpnlNnmqJyEhVfYC6sYNhIhJ+egBwQ6LBVHUZsKf7OAScl+gxjAHYb78AIgHuvbeApi5E/ewz\nOOKIAPPmJTbDaq27AnnDChnqn80HAnUDzMEgfPcdvPNO3Z/U008ndnZeU9O4wm54OetDDxWw444B\n9tij/vZjjy1h5cq1jV4/fXpdGZ591seFFxbH3M+YsHhaCrFOLex0w6TdzTdXN7msZyAACxZ42Gcf\nP2vXJvZ1ralx/m1YIUP9M3W/3xPZZ4MN4Lff6u/73nvJuft6zJhiBg1qfOxffmn+fZaX25+taVlz\n39oFAKp6fWqKYkxiNtssxNVX18BfGz+3eLGXHj2cVd7WrXMq83iv3w+3FPx+Dw0nBm7YHRMMeth2\n2wB+f+L3B8RzY1kiN59tv33z93TYjWwmHs21FB4IPxCR25vZz5i0OfXU2pjbZ8/2MWxYCJ8Piopg\n/fr4jxnuxnGuJKovuvUQHlMoKHD2TbTSbWtSeO21tg8eB4Oxu8lMxxXvrZ77JbUUxrRSw7Pzmhqo\nqoInn8zn5JOdGrysLJRQF1JzYwrRiSIQcH4KC+te094eeyx5Vw2tXw9/+1sh220X/13jJveld8pJ\nY9rZXnuVUloaYsCAAHvu6aG8vC4pbLxxy6fmixZ5WbXKSSCxkkJ05e90H0FhYYja2sT76+Ppbvro\no+QtQzpoUCm//JK8KUBMdrKkYHLK1KmVrFnjYZ99AoBzR2dZGayN84KbIUPqLiGN1X1UXV3/6qNw\nSyHWvi2ZObPlP79Yg92tFd0VVVNDvYTw+OP5DBvmZ7PNbOCho2vuW7mziES+ktGPgZCqZuZK6qZD\n69+/cS3aqVNi3UdhgUDj10Tf0BYK1bUUWpMUohNMU5I1OHzKKfWnQBg7tohTTqnhrrvSvIqRSbsm\nk4KqWrvS5IRExxTCYnUfVVVFtxQ8+P3OQHZrrj5KtTvvdCYofvppH+++G/tPf/lyDwMHdrJ7GTow\nq/hNzisriz1lRUtiJYXwPQwQvnLHQ2EhLF/upap1UwulzG+/OVlrzJjYE6WFQh6WLg3PpZSyYpkM\nY2MKJud17tx+LYXoaTUCAdyWQoinny7g99/bcQDAla57C3baqRPLlrUik5qsZy0Fk/Na230Ua5A3\nehwgfI1/obts1MqV7d9/lMqkEAzC5MnOLK0VFR4qKpzts2d76q37bHJbiy0FEfEC5wL7u/u/iTOF\ndvufFhnTRt17dK7/O3VL+nFry6+vVwef7CwJWnHJFVSOGg3E6j6C4uJQ5Pf2lsoby/75z/r3RPTp\nU8bKlWs58sg8dtqpiDlzKlJXGJM28aT/icBBOLOjPopzI9sdySyUMYlIZMnORDVc+7lhS8Hvd+5o\nhuSc1bfHXcvGJCKepHAQcJyqvqKqLwHHAYckt1jGxC/RtZwTFb32c8MxhWDQGWSG1t2rYEymiWeg\nOc/dL9yQ9QH29TcZo3LU6Ej3TrTw6lOzZ+fxyCMFPP1086teBYPQq1fdilShGJMBN+w+8vs9HHts\nLc88k5/TSeGzz/J488089tvPJkrKdfEkhX8Ab4vIUzhTZp8MPJ3UUhnTjpq6o3nVKg9duoTwuu3l\niji6zBvepxAIOFc3QW62FE49te7y1Wefzbek0AHEO6ZwI7CF+3OTqt6c1FIZ046auvpou+06MWlS\n3ZrIv//uweNpfmAgeu6jUMjpQiopcX7PxdlGZ8+uO2+Mvg8jFxOgccTTUviPqu4KzEp2YYxJhrKy\nEOvWxb5c9Icf6ravXOlh881DLF/e9KWl0d1H4bmPwlcf5XpFOWtWPoFAFbNm+TjzTFvBLVfFkxR+\nFpEhwDxVtYlRTNbp3j3E6tXOdffhs/qw6CuGfvnFw+abByMDx/WO4V7q+kv0xmOhBmCgeynryvYt\nd0baGP6C80OP1h2i4WW+JrPE0320G/A2UCkiQfcnBxvKJlcVF8Mf/hBkwYLm53BcudLLZpvV3WxQ\nU2jrDCRDw8t8TWZpMSmoandV9boT5PncxzZDqskqAwcG+M9/WkoKHnr2dJoOeXkh5h5wVVIvde3I\noi/zNZmlxaQgIsNEZG7dr7JURPZKcrmMaVeDBsWXFLp3d5LCBhuEmLf3Raxe+iO9egbwEGLFj+V4\nPUE8hPAQ4pGHKygqDLLy53I8hPDl1T3XEX4uu7Qq8viXleVx/ZjMF0/30R3ASABV/RI4FLg7mYUy\npr0NGhRg/vy8yFQU4UHh6DGFNWs8bLhhiIkTqzjwwEBk3/CU2OvXO11RYbW1kJdX93z0+gtdu+b+\nLDATJxamuwgmCeJJCoWq+kX4F1VdhM2uarJMjx4hNtooxMKFzlc+fE/C+vV1Ffm6dR46dQpxxhm1\nbLBBKHKJabjS79evjIqKuv1rapykEEtT243JdPFU7ioitwJP4Ny8dhKwOKmlMiYJhg+vZfLkAh54\noCpyiWr0DWvr1kEndwjB66VRUmiottbTZOWf38GmLKqsrN+KMtkrnpbCmUAnnLuYpwGlwNnJLJQx\nyXDeeTUsWuRl8uSCyIIzsVoK4Jzph7uDvFF/JY88UjdVRk0N+Hyxb3bzNXG61a1bbnYrbbFFWcs7\nmazQYktBVX8Fzk9BWeoRkf2Ak1XVEpBpF506wVNPVXLyycU8/7yPbt2C9bqDopOCz9e4+6i4OMQR\nR9TdoVZbW5cw7r+/knPPdU6Vd9ghwOGH+7n11sZ97pm+ZKcxTSYFEVmgqv1FJNapTSiZl6WKyFbA\nLkBRsmKYjmnTTUO8+moFU6cWsOWWQSZMqKu4o7uPnJaC8zhckZeV1W8V1NR4Ii2C6LUUHnywkv/9\nzwYVTHZqMimoan/335QvuaSqXwN3iMgTqY5tcl/nzjB2bA1+P/ztb0WsXu2ha9dQvZZC9JhC2AYb\n1E8K4auPAPbbz2lBDBgQYKutQnz5ZezY1lIwma65lsKfm3uhqj7emoAisjswQVWHuau6TQF2AqqB\ns9yEYEzS+Xxw6KF+nnoqn1GjaqisrJsGIy+v/jxH4CSTaNXVdQPKXbrAjBkBOnWqirzemGzUXCvg\nMeDvwMHAsBg/CRORS4EHgXCb/WigQFX3BC4nauVEY1Lh/PNrmDo1n9WrPZSU1I0RxOo+Ck+RHVZZ\n6aGgoG7bgQeG2H77oPua+vs++GDzazkYkymaSwq7Ao8AgjPf1zM4Z/IjVHVEK+N9BRwLkdVL9gZe\nA1DVeTjzLEWo6mmtjGNMXLbfPsguuwR58MH8SNcRhLuPnK9pU0mhqqrpS09Dofr9REcdVTdAHZ5V\n1ZhM1NyYwifAJ8AVIjIQOBG4RUT+C/xTVd9KNJiqTheRPlGbyoDoe98DIuJV1biu2/P5vHTunLqL\no1MZz2KlLtb553s444wCunYlsn9pqYe1az107uwlL8+p4Lt2zat3vGDQR0mJJ7ItOl5hYf2kEN6e\nl+fhm28CXH65l2nTUj5cl1SJ/r/G2j8Tvx/ZGK8tseK6M1lV/ysi84F9gAnAaTj3K7RVOU5iCIs7\nIQD4/UHKy1PXLA8v72ixcivWzjvDr7+W0a1bILJ/bW0+lZVeysurCYVKAQ/FxX7Ky6sJf2XXrg3g\n9Xoir4mOt2aND6j7o3S2lxEKhcjLq6SoqBCoW+AnF8TzWXdvYf9M/H5kY7yWYnXv3vR9Jc0mBXcg\neAhwPM6cR58Ck4CZrSloDHOBI4HnRGQw8Fk7HdeYuIXvxP3667oz93jGFJrrPopepcyYbNLc1Uf3\n4wwyLwCeBS5X1faa7zb81/UicGDULKytHaswpk2GDvXzxRd1SaH+NBfO17VxUvBQ0MTJ/gEHxF5y\nJJxgvLnVc2RySHMthXOA1UB/92e8iISfC6nqlq0JqKrLgD3dxyHgvNYcx5j2dM89VVRHrSvo88XX\nUthoo9iDxuEpuJsST1KYO3c9e+3VHr20qbFsmYc+fWwQPds1lxRaVekbk4169KhfmcXqPmp485rT\nUmhdJej11r1u/Pgq9t3Xz3ffeTnxxBLuuquSY47xZ90Ec4sWeenTxxZlzHbNXX20LIXlMCaj5OWF\nIpekhtdc2HDD+gmgupomu49aEt1S6NIlxNZbh9h6a6dCDQY9WZcQoPFluCY7Wc+mMTFEjykEg05l\n16VL8zevxSPWmELIelxMBrGkYEwMeXl1k9yFk8OGG9bfJ3qai0SOC7k5B9Lzz/tYtMiqlGxn/4PG\nxBA9plBY6JzKd+0a/9VH0ZYsWRt5HJ5VNTopNGwpZGvCmDEjn0cf7WCrC+UgSwrGxBCdFPLzYc6c\n9Y0q63hbChtsUPc4P79uFtawXOk+2mijEG+84WPFCg+LF3v55hsPN95YwEcfWTWTTWytZWNiiB5T\nWLPGU+9y1AUL1vHggwVMmVKQ8JhCrJZCtClTKjnkEH/sJzPc2LHVLFniZciQUrp0cRYp+vZbL5Mn\nF9KvX4C5cytaPohJO0vhxsTgjCl4CIVg9WoP3brVVf6bbBJi442dAYfmWgp/+EOAww+vrbctvH9T\n3UfHH++PLPSTbQIBmDixmn/+s4Kff/aw5ZZ1M9YsWWJziWcLaykYE4PPF8Lvh6VLPZSVhShtcA9Z\nOEk0N6bw5psVjVoE4W6jbB03aM733ztvbtddg/zvf+tYvdrDgAF1Ge7bbz315j4ymclaCsbEEB5T\nePddH0OGBBpV4r17O0mhuWmw8/Ia37kcbhU0N9CcraIXJSopgc02C/HFF3Uz4zz0UG5NAJirrKVg\nTAzhMYV3382L2cffo4fTNVJY2OipZoWTSC4mhVjvo0ePEPPmreP33z0cfHAp96W+WCZB1lIwJob8\nfOfMd+5cH/vs03jqhvAdx0VF8dfoc+asZ+pUZ/rU6KSQK11JTSW3vn1D9O8f5Oqrq+ttf+YZHw8/\nbJewZhpLCsbEUFIS4osv8igrC7Hxxo1ru3AyKCqK/5g77RSkZ8/GLYVcmTG14dxQDV14YU2D34u5\n4grnAwyFbLrxTJEjX0dj2ldxMaxf72HHHWNP8BYeYE6kpdCUXGkphBNeov71rzx69ixj883LIpcB\nm/SxpGBMDCUlTgW3ySaxK7rwWEIiLYWmJJIUGk7fnUl22inuRRMBuP56p2lw7rl1s/9ddpmXffct\nYd06GDeu0FoPaWBJwZgYwmMGTZ39hm9CS3Tuo7Do/vd4k8Ltt7e9hrzssuqWd2olny+xhDVqVC0/\n/riWNWvqPoB77vHy5Zd5PPlkPvfeW8CTT+azalWONKWyhF19ZEwM4ZZCr16xz37buoJaa5LCZpsF\n29zV1L9/8vpnWlM2n8+Z+qO21sOFF1az224+lizxc+21ThPsyiuLWLy4hokTq6mtdfbPle62TGVJ\nwZgYWmophEUvlpOIYFSuibeSa4/KMJkVamsvrV24cB2Fhc5n3rlzHuXlNdx4YyEnn1xLVRVMm5bP\nAQf4+dOfSnj00UoeeSSfKVOqWj2GYZpn3UfGxBBuATS13GZYw5lT47XvvonPb5SrZ8gbbkijRYU+\n/ngdf/97FWPH1hAKefjTn0oAGDGimH//28f77+flzP0dmcaSgjFNePjhSv7wh6YHT5ctW8uWW7au\nZhowoO64e+wRX5eOx9M4MRx6aN3cSiNH1tCnT2KDvZlq001DFBRAv35Bfv55LZdeWs28eXV3R48c\nWcwttxRYYojTqlUe5szJq3fXeVMsKRjThCOP9EcGlGMpKWmfOA3Xh25KrJbCtGlVLe4TLS8L56Xz\neGDs2Br69g1x5pk19OzpJL677y6kf/9SLrigiBkzfFQnbww9q02YUMDgwaVMnFjInnuWMmlS89ON\nWFIwJktED2oPH964RRDPWfPWW9d/3WGH1TaxZ2YaP76a995bzxtvrOfnn9fywgsVDBgQ4NFH89ll\nl1KuvLKQzz+3ai1M1cu0afl8+OF63nijgnvvreKnn5o/c7CBZmOywDPPVLD77nUT85WVNd4nVlLo\n1i3I1lsH+fBD5089nnGJvn2DLF2auRXrBhvALrs4yW2rrUJstVUtI0bUsny5h2eeyef004spLQ0x\naFCAnXcOsssuAbbdNhjXKnnZKhiEl17ykZ/vdLntsovzfbjqqkLGjKmJzOq7++4Bdt89ADT9YVhS\nMCZNNt00GJluuikiAVTz2G8/Z9zB4wkBsWv2eFoK4UttmzN79nq23jpG1mlBuvv3t9gixGWX1XDJ\nJTV88omXBQvymD8/j4ceymfFCi8nnljLmWc63VC5JBCAM88s4scfvfTqFWTJkjxWrvTQt28JoRCc\ndVZirUFLCsakSTyV6IgRtVx+eXwDAdED0T/+uJbevcsaxYleGrQpnTvHFa7NuveIHag91lw42P2p\nZ6r7086xmhMs7UTFJVdQOWp00mK89JKPn3/2MnNmRaQ15PcXM316LfvuG2h2XCyWzG0jGpPj4k0K\nP/+8NvJ7rG6jsOgxh3grgosuqn85SllZcs+ig6VZuqxcK3nXr6Pk7+OTGmPSpAIuu6y6XvdYly5w\nwgn+Vt3LkXFJQUT2FJHH3J84zmuMyU7xJIWGl6HOmFHB/Pnrmn5BgnHC92G0dD9G2KhRcVzT2IyK\nS67okIkhWVS9rFnjYciQ9rtTPRO7j84GzgF2B06kUYPPmNzQmj74Xr2aflFrbm7bdNMQs2atZ/PN\nQ+ywQ6cWj3H99dVMmdL6EdvKUaOb7Urp3LmY8vLKVh8/EQ1jrVjh4Z138njrLR9vveWjW7cg++0X\n4NBD/ey2WyDhBZWa6h6Lxe93WnqJTpsyc6aPww/3t+v065mYFPJUtUZEVgD7pbswxiRLew3M/vTT\nWnr1KmO77QK88UbjP+lQqPmafrfdgvz2W9vL0SnLGwAbbxzipJP8nHSSn1AI5s/38uabPi64oIia\nGjj55Fp22ilIMAi9ewfZfvtgo7W7mxJOEO09hjEh/ODBGDGbe2EzX76UJgUR2R2YoKrDRMQLTAF2\nAqqBs1T1a6BCRAqA3sBPqSyfMal0zjm1/PBD6+auiP6b9nph5Upn3OHuuxufzob3/fLL9u3GWLBg\nHf37d+LYY2u56abqyGWPucDjgYEDgwwcWMNll9WwaJGX55/38eKLPvLyYPlyL4sXe9lssyDHHuvn\n9NNrG015EiztlNSuo2RJWVIQkUuBPwHhT+looEBV93STxe3utqnAA27ZRqaqfMak2ujRbeufj6VL\nlxBff11/WzgpNDdPU7jbaJtt4p8mI7zWxEUX1eRUQohl222DXH11/f+v2lpYuNDLQw8VMGBAKUVF\nITbfPMRGG4UIheC47tcyovIGSoPZlRhS2VL4CjgWeML9fW/gNQBVnSciu7mPPwZGpLBcxmSdvfcO\nMWNG4wr8yScrqKxsufWx884BPv208aWuzz9f0eJrJ02q5MILi1vcL9fl5zs30d1zTxWTJ8PKlR6+\n/97Db7958HohP/98ZnvPp3//ACUlbR8v+f13eOstH5MmFeDzOfEeeqiSgQMbfw9aitVc11LKkoKq\nTheRPlGbyoDyqN8DIuJV1dyY0cuYJDr11BBHHtm4At9oo/ivJIK6FkL43/B8ToccUsvy5c6CNwC7\n7RZg/nzn8XHH+dlmm/WtL3wO8nicadaTOZ33hhvCMcf4OeooP7Nn51Fd7YmZENoqnQPN5TiJISzh\nhODzeencOXVnLKmMZ7GyK1aq48Ufy0NenlPjR++fl+eNbPN667qYwvu89BJMnAjXXutsHzcODj+8\n7vmhQ+sidOpU2G43vGXmZ5h58YYPDz+KvfRfW2KlMynMBY4EnhORwcBniR7A7w+m7PI1SO/lchYr\ns2OlOl58scoIhUL4/SEgL2r/MoLBYGSb14s7w2hZvWNWVxcAeXTqFGLgwApWroTy8voRjjuuiC5d\nqhptT+77yr5YqY7XYvdR96bvgkzHzWvh9tWLQJWIzMUZZL44DWUxJufdcksV995bv4IIdxeFWwhF\nRXVXMIX95S8tD4Tfd19Vu00hbjJDSlsKqroM2NN9HALOS2V8YzqiXXcNsuuuifc9l5XBAw9U0qVL\nDk8vahrJxJvXjDEZ4phj/HTunN9u3UMm81lSMCZHHXywn403brqFsGjR2qxcic0klyUFY3LUE080\nP6jZpUuKCmKySsbNkmqMMSZ9LCkY0wG1ZkZV0zFYUjDGGBNhScGYDiiRqTBMx2IDzcZ0MAsWrEv6\nspsme1lSMKaDCU95bUws1n1kjDEmwpKCMcaYCEsKxhhjIiwpGGOMibCkYIwxJsKSgjHGmAhLCsYY\nYyIsKRhjjImwpGCMMSbCkoIxxpgISwrGGGMiLCkYY4yJsKRgjDEmwpKCMcaYCEsKxhhjIiwpGGOM\nibCkYIwxJiIjk4KI7CciD6a7HMYY09FkXFIQka2AXYCidJfFGGM6moxLCqr6tareke5yGGNMR+RL\nRRAR2R2YoKrDRMQLTAF2AqqBs1T1axG5EdgaOE9Vf09FuYwxxtSX9KQgIpcCfwLWuZuOBgpUdU83\nWdwOHK2q1yS7LMYYY5qXiu6jr4BjAY/7+97AawCqOg/YLdaLVPW0FJTNGGNMlKQnBVWdDvijNpUB\n5VG/B9wuJWOMMWmWkjGFBspxEkOYV1WDrTlQYaHP0717Wcs7tqNUxrNY2RUr1fEsVnbFSnW81sZK\nxxn6XOAwABEZDHyWhjIYY4yJIZUthZD774vAgSIy1/19RArLYIwxphmeUCjU8l7GGGM6BBvgNcYY\nE2FJwRhjTIQlBWOMMRHpuCQ1aURkP+BkVT071u/JiiUiewLnuE+NUdU1SYh3AnAQUANcpaq/tXeM\nqFiHA8cB+cDtqvpJsmK58cbgTILYD3hSVe9PYqztgDFAAXCbqi5MYqydgcnA18A0VX07WbHceD2B\nmao6MMlxBgAX4NyQeqmqrkxyvP2BE4ESYKKqJvWKxWTWG1Exkl5nxIgZ1/vKmZZCw9lVkznbatSx\nC91NZ+P8Bz+M8+VNhqOAkcBDbrxkWgX0BjYBvktyLFT1bpzPb2EyE4LrLOB7oApYluRYg4AVODdv\nJi35RLmE5L8ncL73FwGvAnukIF6xqp4D3IZzYpQ0KZylORV1RkQi7ytnkkLD2VWTOdtq1LHDU3fk\nqWoNTgWwcTJi4pxxPggcCXRLUoyws4ETgFuBw5McK+wU4IUUxNkK57N8HvhzkmO9h5OEJgJjkxlI\nRM4DnsRJdkmlqu8D2+G8p6S2It14M0WkFLgQeCzJsVI1S3Mq6oyIRN5XRncfpXJ21TbGqhCRApyz\n65/aOeYNON0qz+JUMEOAHZP0/sKxSoD1OC2G7RKNlUC88Oc5CthHVc9KYqzwe/sFqAB+oxUnRQnG\negXnj/53WvG3lmCsHu5zg0TkOFVNKMEmGOsOYD5wKHAdTndcMt5b+PsxBpgAXKuqq5Icq82zNMcT\nj1bWGW2IF7eMTQqpnF21HWJNBR7A+TxHtnPMa9399wUexekLPzdJ7y8cazBOszaE0yWRkNZ8niJS\nkmicVr63ATgtLg8JVmatiLUHTqukFhiXzFhRr3u8FQkh0fc1DHgEZ3zrgURiJRjvGnf/aTit4/Ei\n8lIi7y/VszTHG49W1BltjBe3jE0K1M2u+oT7e73ZVUUkrtlV45xttU2xVPVjEr8zO6GYqvoO8E6C\nMVob60Pgw1bGSjieu/2UVMRS1Y+A01MU6wPgg1TEiorZmi6xRN/XW8BbrYjT2nit/f9KOFZUzNbO\n0hxXvFbWGa2OFxbP+8rYMYVUzq6ajplcc/n95ep7s1jtw95bZsfL2KQQQ7vNrpphsdIRM9XvL1ff\nm8XKvni5/N7aJV42JYVUzq6ajplcc/n95ep7s1jZFy+X31u7xMvkMYWwVM6umo6ZXHP5/eXqe7NY\n2Rcvl99bu8azWVKNMcZEZFP3kTHGmCSzpGCMMSbCkoIxxpgISwrGGGMiLCkYY4yJsKRgjDEmwpKC\nMcaYCEsKxhhjIrLhjmZjEiYifYDFNF7xbKqq3pf6EjlE5Ayc9QhewVmLYKlbpnOj9tkF+BgYoarT\nmjjOmcBwVT2kwfZHgQU4d7JuB/RT1W+T8FZMjrKkYHLZD6raP92FaCAEvKSqf3ET12rgYBGJnrjs\nRJzFgJqbbuCfwO0i0l1Vf4HImhSHA39V1UkisjRp78LkLEsKpkMSkRXAczjzz/uBE1R1mYgMxDmT\nL8FZeW6ku/1tnAp8e5xKW3AWzqnAOav34cxpf6Oq7uXGOB3YXVVHRYX2ULeMKziLoyzAWVHvbXfb\ngcCc8H4icogbKx+nZXG2qv4qIi+6ZbnHfd3RwL9U9be2fj6m47IxBZPLeovIggY/27vP9QTmqOqu\nwLvABSKSDzwEnKyqA3CSw4Pu/iHgU1XdFvgRuBPYD9gN6AKEVPVNoJeI9HVf82ec1fJa8ixwPICb\nlAstXl8AAAIcSURBVD7DWdUMEekOjAcOcsv6Bs7a2bjHjl6c6M84K6IZ02rWUjC57McWuo9ec//9\nAudMfRtgS2CGiIT3iZ6bfp777z7A+6q6AiLLRR7jPjcNOE1EHgN6qup/4yjnTOBmEfHgnPn/EzjJ\nfW53YHPgbbdMeTgtFoB/A93cbqgqnPGD2XHEM6ZJlhRMh6WqNe7DEE5XTR7wTTiRuCtW9Yp6SaX7\nr9/dNyy6O+gxnGRThZMg4inHOhH5FCfZDAMuoy4peIH3VPUot0xFuIlKVUNuQjrFjfdEw2Mbkyjr\nPjKmrlJfBHQRkb3d3/8C/CPG/h8AA0Wkl3t2fxLuoLB7pc/3wHkkVkk/C0wA/quqAXdbCKd1soeI\n9HO3XQ1MjHrdNOA4nO6neLqqjGmWtRRMLustIgsabHtHVS+i/pU9IZwxgRoRGQ7c7Z6RrwEaLRqv\nqr+IyIXAbJwz9GXUtSLA6f45RlV/ilGmhlcUhX+fCTwMXNUg1s8i8hfgWRHJA74D/hT1/PcishJn\n2cXlMeIZkxBbZMeYBIlIF+BCYJzbhXM3sFhV7xWR8FVI/1TVl2K89gxgX1VN5mp+4VhL3Vh2n4KJ\nm3UfGZMgVf0V2BD4wh0LKAMedLuSfgD8sRKCKwT80R2ITgoRKRKRT4CNkxXD5C5rKRhjjImwloIx\nxpgISwrGGGMiLCkYY4yJsKRgjDEmwpKCMcaYCEsKxhhjIv4ffmxiGcOR8bsAAAAASUVORK5CYII=\n",
"text/plain": [
- ""
+ ""
]
},
"metadata": {},
@@ -1857,7 +1881,18 @@
"metadata": {
"collapsed": false
},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n",
+ " return c.reshape(shape_out)\n",
+ "/usr/local/lib/python2.7/dist-packages/numpy/lib/shape_base.py:872: DeprecationWarning: using a non-integer number instead of an integer will result in an error in the future\n",
+ " return c.reshape(shape_out)\n"
+ ]
+ }
+ ],
"source": [
"# Construct a Pandas DataFrame for the microscopic nu-scattering matrix\n",
"nuscatter = xs_library[moderator_cell.id]['nu-scatter']\n",
@@ -1892,9 +1927,9 @@
"outputs": [
{
"data": {
- "image/png": "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\nRK5CYII=\n",
+ "image/png": "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\nq6n/BzrS9bjl9QXqAAAAAElFTkSuQmCC\n",
"text/plain": [
- ""
+ ""
]
},
"metadata": {},
@@ -1939,7 +1974,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
- "version": "2.7.6"
+ "version": "2.7.10"
}
},
"nbformat": 4,
diff --git a/docs/source/pythonapi/examples/mgxs-part-iii.ipynb b/docs/source/pythonapi/examples/mgxs-part-iii.ipynb
index 9302036600..119fd0b564 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": [
- "/usr/lib/pymodules/python2.7/matplotlib/__init__.py:1173: UserWarning: This call to matplotlib.use() has no effect\n",
+ "/usr/local/lib/python2.7/dist-packages/matplotlib/__init__.py:1318: 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",
@@ -52,6 +52,8 @@
"import openmc.mgxs\n",
"from openmc.statepoint import StatePoint\n",
"from openmc.summary import Summary\n",
+ "from openmc.source import Source\n",
+ "from openmc.stats import Box\n",
"\n",
"import openmoc\n",
"import openmoc.process\n",
@@ -392,7 +394,8 @@
"settings_file.particles = particles\n",
"settings_file.output = {'tallies': False, 'summary': True}\n",
"source_bounds = [-10.71, -10.71, -10, 10.71, 10.71, 10.]\n",
- "settings_file.set_source_space('fission', source_bounds)\n",
+ "settings_file.source = Source(Box(\n",
+ " source_bounds[:3], source_bounds[3:], only_fissionable=True))\n",
"\n",
"# Export to \"settings.xml\"\n",
"settings_file.export_to_xml()"
@@ -467,7 +470,7 @@
"outputs": [
{
"data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAAAFzUkdC\nAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAxQTFRF\n////chIS6YCRTb/E6kGE+wAAAAFiS0dEAIgFHUgAAAAJcEhZcwAAAEgAAABIAEbJaz4AAASWSURB\nVGje7Zs7buMwEEBzieRcaYaB48KVisSFj7Cn4BFU2I37LVan8BFc5ABb2ICtpSSaHP5EUqOAzsIO\nAjwEGjjiZ/hEDZ+eiJ9noHxe6fHvW4BPDmwHEMAaYBdAEb+5Amu/YNlyQLgP4xGhiG9avmwvsBF/\nt/FkY2vj69NLD1f41Z6Yiw3Gvy728ceVuhLhwY8bA0fij8EgO/6wjH2pF/lKxvf3tNG3Z+BRt4oH\nh/Znt5bu+iQd+/Z/Xp8BmiO8X0X/n7KQNbWIZ1wMJjEUPwBuuI1hfcMZxv9Pj19/AexrYH84KASF\nV41nhe8Ku/4f+nSpu3eNsdadjpBLFPF6pIE76Hx4QeiMfy/yVQi/cf6mxx900jk4ScfGlc4/q9v8\nc9sPxhpN4wn3n+qepeqeAK5x/3WZfieGx+8h6Uv8DCNHeAfjv3Q8q0VjwJCesrFbP2X+7NZPidAj\nE7hAyGTSFOvnLX8erfw9YCV+BL4p7DL1gH3SNvK3Z/0Qn3HE64dn/eLifx1Fd/62eP4NVyLsJx1C\nce2bf/7mfL+Kt6UB+ivtm+YasT88u6Yi2z+M+lrpT432J4F9pw+mZOH+rP3pLP2pEzFhaiCdzESG\ncOvBO5g/peMt6d2lYo39d0ivNUvwXyE6KhVb/ssh7r8LMRAs/1XrD0DcfxfiP8DrD54/AFV0/av6\neP/6acQH/NcTr/KH6JCYCnezMOi/8v5H/be7f9N/tdNyluC/sv3V+rnWTvuxUNj/tbax81+u0fDf\nSuttOt7B/Ckd3zVvb7rafzFq6XWxifqv0f8x/2XZ+PBfw39tFb5YyPTz//z+u9P+a+KnTvoO3sH4\nLx3fiyzXTutgbxrgx8F/bdNNR+2/Uq/YuH9dLRXW60cVk14DK2P/aJkinQ7yDfZfR3pH/Feg47/5\n32/6r196/cgVDu3/liK9DgLyX2260U5vMfr9dxvBh/+i+CzptVHE73V69WOj/ddBT/53toKdTV8j\n/5vrT9b+7/eun9P2f6P+m7T/G/GPkP/m481/6xHpHcNu/PJhKFbi18SFi2DhHcyf0vHYf09Sb4ON\n/iXR9d/J/U8Zf5dZxj91/s3ovzzqv3b+IfvvSNL1o5V/belNzP8P/5XxqdLhxdn9N6ZiQf+d6n8z\n+OeP919K+5P7nzr+Ss+f0vHU/EfNv8T8T11/frr/Uv1jFv+l+Ffp8V88ng9YwTT/pz5/EPuf+vz1\nH/pv1vM39fmfvP9A3f8oPn8Kx1P336j7f8T9x//Bf4n7z6T9b+r+O9l/qe8fSs+f0vHU91/U92+z\n+m/++8d7eX869f0v9f0z+f039f176fFfOp5xWv0Htf4E9fSU+hfsv1Pqb/D4h2n1P9T6I2r9E6n+\nilr/Ra4/o9a/lZ4/peOp9ZcbYv0nsf70pXUe2rLqX19acv0ttf7XfmjOrT+2kxbE/Dd4fmZC/TW5\n/ptaf156/pSOp55/mNF/Wx8y238vD//1+++k80fk80/U81elx3/peMZp5/+o5w8b2vlH7/7viP8m\nnJ/JPf9Zev/X9oes87fYf21MOf9LPn9MPf9cdv78A0xugrwgDfcHAAAAJXRFWHRkYXRlOmNyZWF0\nZQAyMDE1LTExLTMwVDIxOjIwOjA3LTA1OjAwkFvB3QAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNS0x\nMS0zMFQyMToyMDowNy0wNTowMOEGeWEAAAAASUVORK5CYII=\n",
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+ABDg4MCdjYNQMAAASWSURBVGje7Zs7buMwEEBzieRc\naYaB48KVisSFj7Cn4BFU2I37LVan8BFc5ABb2ICtpSSaHP5EUqOAzsIOAjwEGjjiZ/hEDZ+eiJ9n\noHxe6fHvW4BPDmwHEMAaYBdAEb+5Amu/YNlyQLgP4xGhiG9avmwvsBF/t/FkY2vj69NLD1f41Z6Y\niw3Gvy728ceVuhLhwY8bA0fij8EgO/6wjH2pF/lKxvf3tNG3Z+BRt4oHh/Znt5bu+iQd+/Z/Xp8B\nmiO8X0X/n7KQNbWIZ1wMJjEUPwBuuI1hfcMZxv9Pj19/AexrYH84KASFV41nhe8Ku/4f+nSpu3eN\nsdadjpBLFPF6pIE76Hx4QeiMfy/yVQi/cf6mxx900jk4ScfGlc4/q9v8c9sPxhpN4wn3n+qepeqe\nAK5x/3WZfieGx+8h6Uv8DCNHeAfjv3Q8q0VjwJCesrFbP2X+7NZPidAjE7hAyGTSFOvnLX8erfw9\nYCV+BL4p7DL1gH3SNvK3Z/0Qn3HE64dn/eLifx1Fd/62eP4NVyLsJx1Cce2bf/7mfL+Kt6UB+ivt\nm+YasT88u6Yi2z+M+lrpT432J4F9pw+mZOH+rP3pLP2pEzFhaiCdzESGcOvBO5g/peMt6d2lYo39\nd0ivNUvwXyE6KhVb/ssh7r8LMRAs/1XrD0DcfxfiP8DrD54/AFV0/av6eP/6acQH/NcTr/KH6JCY\nCnezMOi/8v5H/be7f9N/tdNyluC/sv3V+rnWTvuxUNj/tbax81+u0fDfSuttOt7B/Ckd3zVvb7ra\nfzFq6XWxifqv0f8x/2XZ+PBfw39tFb5YyPTz//z+u9P+a+KnTvoO3sH4Lx3fiyzXTutgbxrgx8F/\nbdNNR+2/Uq/YuH9dLRXW60cVk14DK2P/aJkinQ7yDfZfR3pH/Feg47/532/6r196/cgVDu3/liK9\nDgLyX2260U5vMfr9dxvBh/+i+CzptVHE73V69WOj/ddBT/53toKdTV8j/5vrT9b+7/eun9P2f6P+\nm7T/G/GPkP/m481/6xHpHcNu/PJhKFbi18SFi2DhHcyf0vHYf09Sb4ON/iXR9d/J/U8Zf5dZxj91\n/s3ovzzqv3b+IfvvSNL1o5V/belNzP8P/5XxqdLhxdn9N6ZiQf+d6n8z+OeP919K+5P7nzr+Ss+f\n0vHU/EfNv8T8T11/frr/Uv1jFv+l+Ffp8V88ng9YwTT/pz5/EPuf+vz1H/pv1vM39fmfvP9A3f8o\nPn8Kx1P336j7f8T9x//Bf4n7z6T9b+r+O9l/qe8fSs+f0vHU91/U92+z+m/++8d7eX869f0v9f0z\n+f039f176fFfOp5xWv0Htf4E9fSU+hfsv1Pqb/D4h2n1P9T6I2r9E6n+ilr/Ra4/o9a/lZ4/peOp\n9ZcbYv0nsf70pXUe2rLqX19acv0ttf7XfmjOrT+2kxbE/Dd4fmZC/TW5/ptaf156/pSOp55/mNF/\nWx8y238vD//1+++k80fk80/U81elx3/peMZp5/+o5w8b2vlH7/7viP8mnJ/JPf9Zev/X9oes87fY\nf21MOf9LPn9MPf9cdv78A0xugrwgDfcHAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE2LTAxLTE0VDA4\nOjEyOjA5LTA2OjAwdS8nUQAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNi0wMS0xNFQwODoxMjowOS0w\nNjowMARyn+0AAAAASUVORK5CYII=\n",
"text/plain": [
""
]
@@ -733,10 +736,9 @@
"\n",
" Copyright: 2011-2015 Massachusetts Institute of Technology\n",
" License: http://mit-crpg.github.io/openmc/license.html\n",
- " Version: 0.7.0\n",
- " Git SHA1: c4b14a5ef87f004528d35cbf33fef3ed15a386ca\n",
- " Date/Time: 2015-11-30 21:20:07\n",
- " MPI Processes: 1\n",
+ " Version: 0.7.1\n",
+ " Git SHA1: ea9fb637f63f9374c7436456141afa850b84acf9\n",
+ " Date/Time: 2016-01-14 08:12:09\n",
"\n",
" ===========================================================================\n",
" ========================> INITIALIZATION <=========================\n",
@@ -822,20 +824,20 @@
"\n",
" =======================> TIMING STATISTICS <=======================\n",
"\n",
- " Total time for initialization = 4.2800E-01 seconds\n",
- " Reading cross sections = 9.1000E-02 seconds\n",
- " Total time in simulation = 4.1240E+01 seconds\n",
- " Time in transport only = 4.1215E+01 seconds\n",
- " Time in inactive batches = 4.0230E+00 seconds\n",
- " Time in active batches = 3.7217E+01 seconds\n",
- " Time synchronizing fission bank = 8.0000E-03 seconds\n",
- " Sampling source sites = 6.0000E-03 seconds\n",
- " SEND/RECV source sites = 2.0000E-03 seconds\n",
- " Time accumulating tallies = 2.0000E-03 seconds\n",
+ " Total time for initialization = 4.1800E-01 seconds\n",
+ " Reading cross sections = 1.4300E-01 seconds\n",
+ " Total time in simulation = 4.1206E+01 seconds\n",
+ " Time in transport only = 4.1193E+01 seconds\n",
+ " Time in inactive batches = 4.1760E+00 seconds\n",
+ " Time in active batches = 3.7030E+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",
+ " Time accumulating tallies = 0.0000E+00 seconds\n",
" Total time for finalization = 0.0000E+00 seconds\n",
- " Total time elapsed = 4.1683E+01 seconds\n",
- " Calculation Rate (inactive) = 6214.27 neutrons/second\n",
- " Calculation Rate (active) = 2686.94 neutrons/second\n",
+ " Total time elapsed = 4.1648E+01 seconds\n",
+ " Calculation Rate (inactive) = 5986.59 neutrons/second\n",
+ " Calculation Rate (active) = 2700.51 neutrons/second\n",
"\n",
" ============================> RESULTS <============================\n",
"\n",
@@ -921,17 +923,7 @@
"metadata": {
"collapsed": false
},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/tallies.py:1514: RuntimeWarning: invalid value encountered in true_divide\n",
- "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/tallies.py:1515: RuntimeWarning: invalid value encountered in true_divide\n",
- "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/tallies.py:1516: RuntimeWarning: invalid value encountered in true_divide\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"# Initialize MGXS Library with OpenMC statepoint data\n",
"mgxs_lib.load_from_statepoint(sp)"
@@ -990,13 +982,14 @@
"name": "stderr",
"output_type": "stream",
"text": [
- "/usr/local/lib/python2.7/dist-packages/openmc-0.7.0-py2.7.egg/openmc/mgxs/mgxs.py:1254: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison\n"
+ "/home/romano/openmc/openmc/tallies.py:1642: RuntimeWarning: invalid value encountered in true_divide\n",
+ " self_rel_err = data['self']['std. dev.'] / data['self']['mean']\n"
]
},
{
"data": {
"text/html": [
- "
\n",
@@ -1556,15 +1539,15 @@
],
"text/plain": [
" cell energy [MeV] nuclide score mean std. dev.\n",
- "0 10002 (1.0e-08 - 1.1e-07) H-1 scatter 4.630154 0.044512\n",
- "1 10002 (1.1e-07 - 1.2e-06) H-1 scatter 2.042984 0.011429\n",
- "2 10002 (1.2e-06 - 1.3e-05) H-1 scatter 1.657517 0.008617\n",
- "3 10002 (1.3e-05 - 1.4e-04) H-1 scatter 1.863326 0.008848\n",
- "4 10002 (1.4e-04 - 1.5e-03) H-1 scatter 2.043916 0.014195\n",
- "5 10002 (1.5e-03 - 1.6e-02) H-1 scatter 2.134458 0.007561\n",
- "6 10002 (1.6e-02 - 1.7e-01) H-1 scatter 2.209947 0.013848\n",
- "7 10002 (1.7e-01 - 1.9e+00) H-1 scatter 2.006967 0.009368\n",
- "8 10002 (1.9e+00 - 2.0e+01) H-1 scatter 0.373895 0.002964"
+ "0 10002 (1.0e-08 - 1.1e-07) H-1 scatter 4.619398 0.040124\n",
+ "1 10002 (1.1e-07 - 1.2e-06) H-1 scatter 2.030757 0.011239\n",
+ "2 10002 (1.2e-06 - 1.3e-05) H-1 scatter 1.658488 0.009777\n",
+ "3 10002 (1.3e-05 - 1.4e-04) H-1 scatter 1.853002 0.007378\n",
+ "4 10002 (1.4e-04 - 1.5e-03) H-1 scatter 2.050773 0.012484\n",
+ "5 10002 (1.5e-03 - 1.6e-02) H-1 scatter 2.131759 0.007821\n",
+ "6 10002 (1.6e-02 - 1.7e-01) H-1 scatter 2.213710 0.015159\n",
+ "7 10002 (1.7e-01 - 1.9e+00) H-1 scatter 2.011925 0.009406\n",
+ "8 10002 (1.9e+00 - 2.0e+01) H-1 scatter 0.371280 0.003949"
]
},
"execution_count": 38,
diff --git a/docs/source/pythonapi/index.rst b/docs/source/pythonapi/index.rst
index 6d513d5d5b..6dd2ae10d0 100644
--- a/docs/source/pythonapi/index.rst
+++ b/docs/source/pythonapi/index.rst
@@ -35,6 +35,8 @@ on a given module or class.
opencg_compatible
plots
settings
+ source
+ stats
surface
tallies
trigger
diff --git a/docs/source/pythonapi/source.rst b/docs/source/pythonapi/source.rst
new file mode 100644
index 0000000000..4bc770363a
--- /dev/null
+++ b/docs/source/pythonapi/source.rst
@@ -0,0 +1,8 @@
+.. _pythonapi_source:
+
+======
+Source
+======
+
+.. automodule:: openmc.source
+ :members:
diff --git a/docs/source/pythonapi/stats.rst b/docs/source/pythonapi/stats.rst
new file mode 100644
index 0000000000..58060cacbc
--- /dev/null
+++ b/docs/source/pythonapi/stats.rst
@@ -0,0 +1,58 @@
+.. _pythonapi_stats:
+
+=====================
+Statistical Functions
+=====================
+
+----------------------------
+Summary of Available Classes
+----------------------------
+
+Univariate Probability Distributions
+------------------------------------
+
+.. currentmodule:: openmc.stats.univariate
+
+.. autosummary::
+
+ Univariate
+ Discrete
+ Uniform
+ Maxwell
+ Watt
+ Tabular
+
+Angular Distributions
+---------------------
+
+.. currentmodule:: openmc.stats.multivariate
+
+.. autosummary::
+
+ UnitSphere
+ PolarAzimuthal
+ Isotropic
+ Monodirectional
+
+Spatial Distributions
+---------------------
+
+.. autosummary::
+
+ Spatial
+ CartesianIndependent
+ Box
+ Point
+
+
+Univariate Probability Distributions
+------------------------------------
+
+.. automodule:: openmc.stats.univariate
+ :members:
+
+Multivariate Probability Distributions
+--------------------------------------
+
+.. automodule:: openmc.stats.multivariate
+ :members:
diff --git a/docs/source/usersguide/input.rst b/docs/source/usersguide/input.rst
index c4538b889f..30e9ed07b9 100644
--- a/docs/source/usersguide/input.rst
+++ b/docs/source/usersguide/input.rst
@@ -424,9 +424,17 @@ pseudo-random number generator.
The ``source`` element gives information on an external source distribution to
be used either as the source for a fixed source calculation or the initial
-source guess for criticality calculations. It takes the following
+source guess for criticality calculations. Multiple ```` elements may be
+specified to define different source distributions. Each one takes the following
attributes/sub-elements:
+ :strength:
+ The strength of the source. If multiple sources are present, the source
+ strength indicates the relative probability of choosing one source over the
+ other.
+
+ *Default*: 1.0
+
:file:
If this attribute is given, it indicates that the source is to be read from
a binary source file whose path is given by the value of this element. Note,
@@ -440,13 +448,13 @@ attributes/sub-elements:
has the following attributes:
:type:
-
- The type of spatial distribution. Valid options are "box", "fission", and
- "point". A "box" spatial distribution has coordinates sampled uniformly in
- a parallelepiped. A "fission" spatial distribution samples locations from
- a "box" distribution but only locations in fissionable materials are
- accepted. A "point" spatial distribution has coordinates specified by a
- triplet.
+ The type of spatial distribution. Valid options are "box", "fission",
+ "point", and "cartesian". A "box" spatial distribution has coordinates
+ sampled uniformly in a parallelepiped. A "fission" spatial distribution
+ samples locations from a "box" distribution but only locations in
+ fissionable materials are accepted. A "point" spatial distribution has
+ coordinates specified by a triplet. An "cartesian" spatial distribution
+ specifies independent distributions of x-, y-, and z-coordinates.
*Default*: None
@@ -459,67 +467,123 @@ attributes/sub-elements:
For a "point" spatial distribution, ``parameters`` should be given as
three real numbers which specify the (x,y,z) location of an isotropic
- point source
+ point source.
+
+ For an "cartesian" distribution, no parameters are specified. Instead,
+ the ``x``, ``y``, and ``z`` elements must be specified.
*Default*: None
+ :x:
+ For an "cartesian" distribution, this element specifies the distribution
+ of x-coordinates. The necessary sub-elements/attributes are those of a
+ univariate probability distribution (see the description in
+ :ref:`univariate`).
+
+ :y:
+ For an "cartesian" distribution, this element specifies the distribution
+ of y-coordinates. The necessary sub-elements/attributes are those of a
+ univariate probability distribution (see the description in
+ :ref:`univariate`).
+
+ :z:
+ For an "cartesian" distribution, this element specifies the distribution
+ of z-coordinates. The necessary sub-elements/attributes are those of a
+ univariate probability distribution (see the description in
+ :ref:`univariate`).
+
:angle:
An element specifying the angular distribution of source sites. This element
has the following attributes:
:type:
- The type of angular distribution. Valid options are "isotropic" and
- "monodirectional". The angle of the particle emitted from a source site is
- isotropic if the "isotropic" option is given. The angle of the particle
- emitted from a source site is the direction specified in the
- attribute if "monodirectional" option is given.
+ The type of angular distribution. Valid options are "isotropic",
+ "monodirectional", and "mu-phi". The angle of the particle emitted from a
+ source site is isotropic if the "isotropic" option is given. The angle of
+ the particle emitted from a source site is the direction specified in the
+ ``reference_uvw`` element/attribute if "monodirectional" option is
+ given. The "mu-phi" option produces directions with the cosine of the
+ polar angle and the azimuthal angle explicitly specified.
*Default*: isotropic
- :parameters:
- For an "isotropic" angular distribution, ``parameters`` should not be
- specified.
+ :reference_uvw:
+ The direction from which the polar angle is measured. Represented by the
+ x-, y-, and z-components of a unit vector. For a monodirectional
+ distribution, this defines the direction of all sampled particles.
- For a "monodirectional" angular distribution, ``parameters`` should be
- given as three real numbers which specify the angular cosines with respect
- to each axis.
+ :mu:
+ An element specifying the distribution of the cosine of the polar
+ angle. Only relevant when the type is "mu-phi". The necessary
+ sub-elements/attributes are those of a univariate probability distribution
+ (see the description in :ref:`univariate`).
- *Default*: None
+ :phi:
+ An element specifying the distribution of the azimuthal angle. Only
+ relevant when the type is "mu-phi". The necessary sub-elements/attributes
+ are those of a univariate probability distribution (see the description in
+ :ref:`univariate`).
:energy:
- An element specifying the energy distribution of source sites. This element
- has the following attributes:
-
- :type:
-
- The type of energy distribution. Valid options are "monoenergetic",
- "watt", and "maxwell". The "monoenergetic" option produces source sites at
- a single energy. The "watt" option produces source sites whose energy is
- sampled from a Watt fission spectrum. The "maxwell" option produce source
- sites whose energy is sampled from a Maxwell fission spectrum.
-
- *Default*: watt
-
- :parameters:
- For a "monoenergetic" energy distribution, ``parameters`` should be
- given as the energy in MeV of the source sites.
-
- For a "watt" energy distribution, ``parameters`` should be given as two
- real numbers :math:`a` and :math:`b` that parameterize the distribution
- :math:`p(E) dE = c e^{-E/a} \sinh \sqrt{b \, E} dE`.
-
- For a "maxwell" energy distribution, ``parameters`` should be given as one
- real number :math:`a` that parameterizes the distribution :math:`p(E) dE =
- c E e^{-E/a} dE`.
-
- *Default*: 0.988 2.249
+ An element specifying the energy distribution of source sites. The necessary
+ sub-elements/attributes are those of a univariate probability distribution
+ (see the description in :ref:`univariate`).
:write_initial:
An element specifying whether to write out the initial source bank used at
the beginning of the first batch. The output file is named
- "initial_source.binary(h5)"
+ "initial_source.h5"
- *Default*: false
+ *Default*: false
+
+.. _univariate:
+
+Univariate Probability Distributions
+++++++++++++++++++++++++++++++++++++
+
+Various components of a source distribution involve probability distributions of
+a single random variable, e.g. the distribution of the energy, the distribution
+of the polar angle, and the distribution of x-coordinates. Each of these
+components supports the same syntax with an element whose tag signifies the
+variable and whose sub-elements/attributes are as follows:
+
+:type:
+ The type of the distribution. Valid options are "uniform", "discrete",
+ "tabular", "maxwell", and "watt". The "uniform" option produces variates
+ sampled from a uniform distribution over a finite interval. The "discrete"
+ option produces random variates that can assume a finite number of values
+ (i.e., a distribution characterized by a probability mass function). The
+ "tabular" option produces random variates sampled from a tabulated
+ distribution where the density function is either a histogram or
+ linearly-interpolated between tabulated points. The "watt" option produces
+ random variates is sampled from a Watt fission spectrum (only used for
+ energies). The "maxwell" option produce variates sampled from a Maxwell
+ fission spectrum (only used for energies).
+
+ *Default*: None
+
+:parameters:
+ For a "uniform" distribution, ``parameters`` should be given as two real
+ numbers :math:`a` and :math:`b` that define the interval :math:`[a,b]` over
+ which random variates are sampled.
+
+ For a "discrete" or "tabular" distribution, ``parameters`` provides the
+ :math:`(x,p)` pairs defining the discrete/tabular distribution. All :math:`x`
+ points are given first followed by corresponding :math:`p` points.
+
+ For a "watt" distribution, ``parameters`` should be given as two real numbers
+ :math:`a` and :math:`b` that parameterize the distribution :math:`p(x) dx = c
+ e^{-x/a} \sinh \sqrt{b \, x} dx`.
+
+ For a "maxwell" distribution, ``parameters`` should be given as one real
+ number :math:`a` that parameterizes the distribution :math:`p(x) dx = c x
+ e^{-x/a} dx`.
+
+:interpolation:
+ For a "tabular" distribution, ``interpolation`` can be set to "histogram" or
+ "linear-linear" thereby specifying how tabular points are to be interpolated.
+
+ *Default*: histogram
```` Element
-------------------------
diff --git a/examples/python/basic/build-xml.py b/examples/python/basic/build-xml.py
index 488603d33f..97591c9920 100644
--- a/examples/python/basic/build-xml.py
+++ b/examples/python/basic/build-xml.py
@@ -1,4 +1,6 @@
import openmc
+from openmc.source import Source
+from openmc.stats import Box
###############################################################################
# Simulation Input File Parameters
@@ -92,7 +94,7 @@ settings_file = openmc.SettingsFile()
settings_file.batches = batches
settings_file.inactive = inactive
settings_file.particles = particles
-settings_file.set_source_space('box', [-4, -4, -4, 4, 4, 4])
+settings_file.source = Source(space=Box([-4, -4, -4], [4, 4, 4]))
settings_file.export_to_xml()
diff --git a/examples/python/boxes/build-xml.py b/examples/python/boxes/build-xml.py
index 9c28d37bb3..2ae3ee6129 100644
--- a/examples/python/boxes/build-xml.py
+++ b/examples/python/boxes/build-xml.py
@@ -1,6 +1,8 @@
import numpy as np
import openmc
+from openmc.source import Source
+from openmc.stats import Box
###############################################################################
# Simulation Input File Parameters
@@ -117,7 +119,7 @@ settings_file = openmc.SettingsFile()
settings_file.batches = batches
settings_file.inactive = inactive
settings_file.particles = particles
-settings_file.set_source_space('box', np.concatenate(outer_cube.bounding_box))
+settings_file.source = Source(space=Box(*outer_cube.bounding_box))
settings_file.export_to_xml()
###############################################################################
diff --git a/examples/python/lattice/hexagonal/build-xml.py b/examples/python/lattice/hexagonal/build-xml.py
index 5fa0f9b1b9..1125e8ce04 100644
--- a/examples/python/lattice/hexagonal/build-xml.py
+++ b/examples/python/lattice/hexagonal/build-xml.py
@@ -1,5 +1,6 @@
import openmc
-
+from openmc.source import Source
+from openmc.stats import Box
###############################################################################
# Simulation Input File Parameters
@@ -125,7 +126,8 @@ settings_file = openmc.SettingsFile()
settings_file.batches = batches
settings_file.inactive = inactive
settings_file.particles = particles
-settings_file.set_source_space('box', [-1, -1, -1, 1, 1, 1])
+settings_file.source = Source(space=Box(
+ [-1, -1, -1], [1, 1, 1]))
settings_file.keff_trigger = {'type' : 'std_dev', 'threshold' : 5E-4}
settings_file.trigger_active = True
settings_file.trigger_max_batches = 100
diff --git a/examples/python/lattice/nested/build-xml.py b/examples/python/lattice/nested/build-xml.py
index 501b3ee4b4..389af8e9b7 100644
--- a/examples/python/lattice/nested/build-xml.py
+++ b/examples/python/lattice/nested/build-xml.py
@@ -1,5 +1,6 @@
import openmc
-
+from openmc.source import Source
+from openmc.stats import Box
###############################################################################
# Simulation Input File Parameters
@@ -136,7 +137,8 @@ settings_file = openmc.SettingsFile()
settings_file.batches = batches
settings_file.inactive = inactive
settings_file.particles = particles
-settings_file.set_source_space('box', [-1, -1, -1, 1, 1, 1])
+settings_file.source = Source(space=Box(
+ [-1, -1, -1], [1, 1, 1]))
settings_file.export_to_xml()
diff --git a/examples/python/lattice/simple/build-xml.py b/examples/python/lattice/simple/build-xml.py
index 00fbea22a4..e648c3d5b3 100644
--- a/examples/python/lattice/simple/build-xml.py
+++ b/examples/python/lattice/simple/build-xml.py
@@ -1,4 +1,6 @@
import openmc
+from openmc.source import Source
+from openmc.stats import Box
###############################################################################
# Simulation Input File Parameters
@@ -125,7 +127,8 @@ settings_file = openmc.SettingsFile()
settings_file.batches = batches
settings_file.inactive = inactive
settings_file.particles = particles
-settings_file.set_source_space('box', [-1, -1, -1, 1, 1, 1])
+settings_file.source = Source(space=Box(
+ [-1, -1, -1], [1, 1, 1]))
settings_file.trigger_active = True
settings_file.trigger_max_batches = 100
settings_file.export_to_xml()
diff --git a/examples/python/pincell/build-xml.py b/examples/python/pincell/build-xml.py
index b3bb932dc8..ca71b04e5c 100644
--- a/examples/python/pincell/build-xml.py
+++ b/examples/python/pincell/build-xml.py
@@ -1,4 +1,6 @@
import openmc
+from openmc.source import Source
+from openmc.stats import Box
###############################################################################
# Simulation Input File Parameters
@@ -168,8 +170,8 @@ settings_file = openmc.SettingsFile()
settings_file.batches = batches
settings_file.inactive = inactive
settings_file.particles = particles
-settings_file.set_source_space('box', [-0.62992, -0.62992, -1, \
- 0.62992, 0.62992, 1])
+settings_file.source = Source(space=Box(
+ [-0.62992, -0.62992, -1], [0.62992, 0.62992, 1]))
settings_file.entropy_lower_left = [-0.39218, -0.39218, -1.e50]
settings_file.entropy_upper_right = [0.39218, 0.39218, 1.e50]
settings_file.entropy_dimension = [10, 10, 1]
diff --git a/examples/python/reflective/build-xml.py b/examples/python/reflective/build-xml.py
index 44b544d20d..7e4fd30be5 100644
--- a/examples/python/reflective/build-xml.py
+++ b/examples/python/reflective/build-xml.py
@@ -1,6 +1,8 @@
import numpy as np
import openmc
+from openmc.stats import Box
+from openmc.source import Source
###############################################################################
# Simulation Input File Parameters
@@ -84,5 +86,5 @@ settings_file = openmc.SettingsFile()
settings_file.batches = batches
settings_file.inactive = inactive
settings_file.particles = particles
-settings_file.set_source_space('box', np.concatenate(cell.region.bounding_box))
+settings_file.source = Source(space=Box(*cell.region.bounding_box))
settings_file.export_to_xml()
diff --git a/openmc/settings.py b/openmc/settings.py
index e8ec6463af..4ad207c7a3 100644
--- a/openmc/settings.py
+++ b/openmc/settings.py
@@ -9,6 +9,7 @@ import numpy as np
from openmc.clean_xml import *
from openmc.checkvalue import (check_type, check_length, check_value,
check_greater_than, check_less_than)
+from openmc.source import Source
if sys.version_info[0] >= 3:
basestring = str
@@ -36,8 +37,8 @@ class SettingsFile(object):
type are 'variance', 'std_dev', and 'rel_err'. The threshold value
should be a float indicating the variance, standard deviation, or
relative error used.
- source_file : str
- Path to a source file
+ source : Iterable of openmc.source.Source
+ Distribution of source sites in space, angle, and energy
output : dict
Dictionary indicating what files to output. Valid keys are 'summary',
'cross_sections', 'tallies', and 'distribmats'. Values corresponding to
@@ -134,14 +135,7 @@ class SettingsFile(object):
self._keff_trigger = None
# Source subelement
- self._source_subelement = None
- self._source_file = None
- self._source_space_type = None
- self._source_space_params = None
- self._source_angle_type = None
- self._source_angle_params = None
- self._source_energy_type = None
- self._source_energy_params = None
+ self._source = None
self._confidence_intervals = None
self._cross_sections = None
@@ -228,32 +222,8 @@ class SettingsFile(object):
return self._keff_trigger
@property
- def source_file(self):
- return self._source_file
-
- @property
- def source_space_type(self):
- return self._source_space_type
-
- @property
- def source_space_params(self):
- return self._source_space_params
-
- @property
- def source_angle_type(self):
- return self._source_angle_type
-
- @property
- def source_angle_params(self):
- return self._source_angle_params
-
- @property
- def source_energy_type(self):
- return self._source_energy_type
-
- @property
- def source_energy_params(self):
- return self._source_energy_params
+ def source(self):
+ return self._source
@property
def confidence_intervals(self):
@@ -468,124 +438,13 @@ class SettingsFile(object):
self._keff_trigger = keff_trigger
- @source_file.setter
- def source_file(self, source_file):
- check_type('source file', source_file, basestring)
- self._source_file = source_file
-
- def set_source_space(self, stype, params):
- """Defined the spatial bounds of the external/starting source.
-
- Parameters
- ----------
- stype : str
- The type of spatial distribution. Valid options are "box",
- "fission", and "point". A "box" spatial distribution has coordinates
- sampled uniformly in a parallelepiped. A "fission" spatial
- distribution samples locations from a "box" distribution but only
- locations in fissionable materials are accepted. A "point" spatial
- distribution has coordinates specified by a triplet.
- params : Iterable of float
- For a "box" or "fission" spatial distribution, ``params`` should be
- given as six real numbers, the first three of which specify the
- lower-left corner of a parallelepiped and the last three of which
- specify the upper-right corner. Source sites are sampled uniformly
- through that parallelepiped.
-
- For a "point" spatial distribution, ``params`` should be given as
- three real numbers which specify the (x,y,z) location of an
- isotropic point source
-
- """
-
- check_type('source space type', stype, basestring)
- check_value('source space type', stype, ['box', 'fission', 'point'])
- check_type('source space parameters', params, Iterable, Real)
- if stype in ['box', 'fission']:
- check_length('source space parameters for a '
- 'box/fission distribution', params, 6)
- elif stype == 'point':
- check_length('source space parameters for a point source',
- params, 3)
-
- self._source_space_type = stype
- self._source_space_params = params
-
- def set_source_angle(self, stype, params=[]):
- """Defined the angular distribution of the external/starting source.
-
- Parameters
- ----------
- stype : str
- The type of angular distribution. Valid options are "isotropic" and
- "monodirectional". The angle of the particle emitted from a source
- site is isotropic if the "isotropic" option is given. The angle of
- the particle emitted from a source site is the direction specified
- in ``params`` if the "monodirectional" option is given.
- params : Iterable of float
- For an "isotropic" angular distribution, ``params`` should not
- be specified.
-
- For a "monodirectional" angular distribution, ``params`` should
- be given as three floats which specify the angular cosines
- with respect to each axis.
-
- """
-
- check_type('source angle type', stype, basestring)
- check_value('source angle type', stype,
- ['isotropic', 'monodirectional'])
- check_type('source angle parameters', params, Iterable, Real)
- if stype == 'isotropic' and params is not None:
- msg = 'Unable to set source angle parameters since they are not ' \
- 'it is not supported for isotropic type sources'
- raise ValueError(msg)
- elif stype == 'monodirectional':
- check_length('source angle parameters for a monodirectional '
- 'source', params, 3)
-
- self._source_angle_type = stype
- self._source_angle_params = params
-
- def set_source_energy(self, stype, params=[]):
- """Defined the energy distribution of the external/starting source.
-
- Parameters
- ----------
- stype : str
- The type of energy distribution. Valid options are "monoenergetic",
- "watt", and "maxwell". The "monoenergetic" option produces source
- sites at a single energy. The "watt" option produces source sites
- whose energy is sampled from a Watt fission spectrum. The "maxwell"
- option produce source sites whose energy is sampled from a Maxwell
- fission spectrum.
- params : Iterable of float
- For a "monoenergetic" energy distribution, ``params`` should be
- given as the energy in MeV of the source sites.
-
- For a "watt" energy distribution, ``params`` should be given as two
- real numbers :math:`a` and :math:`b` that parameterize the
- distribution :math:`p(E) dE = c e^{-E/a} \sinh \sqrt{b \, E} dE`.
-
- For a "maxwell" energy distribution, ``params`` should be given as
- one real number :math:`a` that parameterizes the distribution
- :math:`p(E) dE = c E e^{-E/a} dE`.
-
- """
-
- check_type('source energy type', stype, basestring)
- check_value('source energy type', stype,
- ['monoenergetic', 'watt', 'maxwell'])
- check_type('source energy parameters', params, Iterable, Real)
- if stype in ['monoenergetic', 'maxwell']:
- check_length('source energy parameters for a monoenergetic '
- 'or Maxwell source', params, 1)
- elif stype == 'watt':
- check_length('source energy parameters for a Watt source',
- params, 2)
-
- self._source_energy_type = stype
- self._source_energy_params = params
+ @source.setter
+ def source(self, source):
+ if isinstance(source, Source):
+ self._source = [source,]
+ else:
+ check_type('source distribution', source, Iterable, Source)
+ self._source = source
@output.setter
def output(self, output):
@@ -924,45 +783,9 @@ class SettingsFile(object):
subelement.text = str(self._keff_trigger[key]).lower()
def _create_source_subelement(self):
- self._create_source_space_subelement()
- self._create_source_energy_subelement()
- self._create_source_angle_subelement()
-
- def _create_source_space_subelement(self):
- if self._source_space_params is not None:
- if self._source_subelement is None:
- self._source_subelement = ET.SubElement(self._settings_file,
- "source")
-
- element = ET.SubElement(self._source_subelement, "space")
- element.set("type", self._source_space_type)
-
- subelement = ET.SubElement(element, "parameters")
- subelement.text = ' '.join(map(str, self._source_space_params))
-
- def _create_source_angle_subelement(self):
- if self._source_angle_params is not None:
- if self._source_subelement is None:
- self._source_subelement = ET.SubElement(self._settings_file,
- "source")
-
- element = ET.SubElement(self._source_subelement, "angle")
- element.set("type", self._source_angle_type)
-
- subelement = ET.SubElement(element, "parameters")
- subelement.text = ' '.join(map(str, self._source_angle_params))
-
- def _create_source_energy_subelement(self):
- if self._source_energy_params is not None:
- if self._source_subelement is None:
- self._source_subelement = ET.SubElement(self._settings_file,
- "source")
-
- element = ET.SubElement(self._source_subelement, "energy")
- element.set("type", self._source_energy_type)
-
- subelement = ET.SubElement(element, "parameters")
- subelement.text = ' '.join(map(str, self._source_energy_params))
+ if self.source is not None:
+ for source in self.source:
+ self._settings_file.append(source.to_xml())
def _create_output_subelement(self):
if self._output is not None:
diff --git a/openmc/source.py b/openmc/source.py
new file mode 100644
index 0000000000..36a36e5948
--- /dev/null
+++ b/openmc/source.py
@@ -0,0 +1,117 @@
+from numbers import Real
+import sys
+from xml.etree import ElementTree as ET
+
+from openmc.stats.univariate import Univariate
+from openmc.stats.multivariate import UnitSphere, Spatial
+import openmc.checkvalue as cv
+
+if sys.version_info[0] >= 3:
+ basestring = str
+
+
+class Source(object):
+ """Distribution of phase space coordinates for source sites.
+
+ Parameters
+ ----------
+ space : openmc.stats.Spatial, optional
+ Spatial distribution of source sites
+ angle : openmc.stats.UnitSphere, optional
+ Angular distribution of source sites
+ energy : openmc.stats.Univariate, optional
+ Energy distribution of source sites
+ filename : str, optional
+ Source file from which sites should be sampled
+ strength : Real
+ Strength of the source
+
+ Attributes
+ ----------
+ space : openmc.stats.Spatial or None
+ Spatial distribution of source sites
+ angle : openmc.stats.UnitSphere or None
+ Angular distribution of source sites
+ energy : openmc.stats.Univariate or None
+ Energy distribution of source sites
+ file : str or None
+ Source file from which sites should be sampled
+ strength : Real
+ Strength of the source
+
+ """
+
+ def __init__(self, space=None, angle=None, energy=None, filename=None, strength=1.0):
+ self._space = None
+ self._angle = None
+ self._energy = None
+ self._file = None
+
+ if space is not None:
+ self.space = space
+ if angle is not None:
+ self.angle = angle
+ if energy is not None:
+ self.energy = energy
+ if filename is not None:
+ self.file = filename
+ self.strength = strength
+
+ @property
+ def file(self):
+ return self._file
+
+ @property
+ def space(self):
+ return self._space
+
+ @property
+ def angle(self):
+ return self._angle
+
+ @property
+ def energy(self):
+ return self._energy
+
+ @property
+ def strength(self):
+ return self._strength
+
+ @file.setter
+ def file(self, filename):
+ cv.check_type('source file', filename, basestring)
+ self._file = filename
+
+ @space.setter
+ def space(self, space):
+ cv.check_type('spatial distribution', space, Spatial)
+ self._space = space
+
+ @angle.setter
+ def angle(self, angle):
+ cv.check_type('angular distribution', angle, UnitSphere)
+ self._angle = angle
+
+ @energy.setter
+ def energy(self, energy):
+ cv.check_type('energy distribution', energy, Univariate)
+ self._energy = energy
+
+ @strength.setter
+ def strength(self, strength):
+ cv.check_type('source strength', strength, Real)
+ cv.check_greater_than('source strength', strength, 0.0, True)
+ self._strength = strength
+
+ def to_xml(self):
+ element = ET.Element("source")
+ element.set("strength", str(self.strength))
+ if self.file is not None:
+ element.set("file", self.file)
+ if self.space is not None:
+ element.append(self.space.to_xml())
+ if self.angle is not None:
+ element.append(self.angle.to_xml())
+ if self.energy is not None:
+ element.append(self.energy.to_xml('energy'))
+ return element
diff --git a/openmc/stats/__init__.py b/openmc/stats/__init__.py
new file mode 100644
index 0000000000..3d7b80b281
--- /dev/null
+++ b/openmc/stats/__init__.py
@@ -0,0 +1,2 @@
+from openmc.stats.univariate import *
+from openmc.stats.multivariate import *
diff --git a/openmc/stats/multivariate.py b/openmc/stats/multivariate.py
new file mode 100644
index 0000000000..29258ee8dd
--- /dev/null
+++ b/openmc/stats/multivariate.py
@@ -0,0 +1,360 @@
+from abc import ABCMeta, abstractmethod
+from collections import Iterable
+from math import pi
+from numbers import Real
+import sys
+from xml.etree import ElementTree as ET
+
+import numpy as np
+
+import openmc.checkvalue as cv
+from openmc.stats.univariate import Univariate, Uniform
+
+if sys.version_info[0] >= 3:
+ basestring = str
+
+
+class UnitSphere(object):
+ """Distribution of points on the unit sphere.
+
+ This abstract class is used for angular distributions, since a direction is
+ represented as a unit vector (i.e., vector on the unit sphere).
+
+ Parameters
+ ----------
+ reference_uvw : Iterable of Real
+ Direction from which polar angle is measured
+
+ Attributes
+ ----------
+ reference_uvw : Iterable of Real
+ Direction from which polar angle is measured
+
+ """
+
+ __metaclass__ = ABCMeta
+
+ def __init__(self, reference_uvw=None):
+ self._reference_uvw = None
+ if reference_uvw is not None:
+ self.reference_uvw = reference_uvw
+
+ @property
+ def reference_uvw(self):
+ return self._reference_uvw
+
+ @reference_uvw.setter
+ def reference_uvw(self, uvw):
+ cv.check_type('reference direction', uvw, Iterable, Real)
+ uvw = np.asarray(uvw)
+ self._reference_uvw = uvw/np.linalg.norm(uvw)
+
+ @abstractmethod
+ def to_xml(self):
+ return ''
+
+
+class PolarAzimuthal(UnitSphere):
+ """Angular distribution represented by polar and azimuthal angles
+
+ This distribution allows one to specify the distribution of the cosine of
+ the polar angle and the azimuthal angle independently of once another.
+
+ Parameters
+ ----------
+ mu : Univariate
+ Distribution of the cosine of the polar angle
+ phi : Univariate
+ Distribution of the azimuthal angle in radians
+ reference_uvw : Iterable of Real
+ Direction from which polar angle is measured. Defaults to the positive
+ z-direction.
+
+ Attributes
+ ----------
+ mu : Univariate
+ Distribution of the cosine of the polar angle
+ phi : Univariate
+ Distribution of the azimuthal angle in radians
+
+ """
+
+ def __init__(self, mu=None, phi=None, reference_uvw=[0., 0., 1.]):
+ super(PolarAzimuthal, self).__init__(reference_uvw)
+ if mu is not None:
+ self.mu = mu
+ else:
+ self.mu = Uniform(-1., 1.)
+
+ if phi is not None:
+ self.phi = phi
+ else:
+ self.phi = Uniform(0., 2*pi)
+
+ @property
+ def mu(self):
+ return self._mu
+
+ @property
+ def phi(self):
+ return self._phi
+
+ @mu.setter
+ def mu(self, mu):
+ cv.check_type('cosine of polar angle', mu, Univariate)
+ self._mu = mu
+
+ @phi.setter
+ def phi(self, phi):
+ cv.check_type('azimuthal angle', phi, Univariate)
+ self._phi = phi
+
+ def to_xml(self):
+ element = ET.Element('angle')
+ element.set("type", "mu-phi")
+ if self.reference_uvw is not None:
+ element.set("reference_uvw", ' '.join(map(str, self.reference_uvw)))
+ element.append(self.mu.to_xml('mu'))
+ element.append(self.phi.to_xml('phi'))
+ return element
+
+
+class Isotropic(UnitSphere):
+ """Isotropic angular distribution.
+
+ """
+
+ def __init__(self):
+ super(Isotropic, self).__init__()
+
+ def to_xml(self):
+ element = ET.Element('angle')
+ element.set("type", "isotropic")
+ return element
+
+
+class Monodirectional(UnitSphere):
+ """Monodirectional angular distribution.
+
+ A monodirectional angular distribution is one for which the polar and
+ azimuthal angles are always the same. It is completely specified by the
+ reference direction vector.
+
+ Parameters
+ ----------
+ reference_uvw : Iterable of Real
+ Direction from which polar angle is measured. Defaults to the positive
+ x-direction.
+
+ """
+
+
+ def __init__(self, reference_uvw=[1., 0., 0.]):
+ super(Monodirectional, self).__init__(reference_uvw)
+
+ def to_xml(self):
+ element = ET.Element('angle')
+ element.set("type", "monodirectional")
+ if self.reference_uvw is not None:
+ element.set("reference_uvw", ' '.join(map(str, self.reference_uvw)))
+ return element
+
+
+class Spatial(object):
+ """Distribution of locations in three-dimensional Euclidean space.
+
+ Classes derived from this abstract class can be used for spatial
+ distributions of source sites.
+
+ """
+
+ __metaclass__ = ABCMeta
+
+ def __init__(self):
+ pass
+
+ @abstractmethod
+ def to_xml(self):
+ return ''
+
+
+class CartesianIndependent(Spatial):
+ """Spatial distribution with independent x, y, and z distributions.
+
+ This distribution allows one to specify a coordinates whose x-, y-, and z-
+ components are sampled independently from one another.
+
+ Parameters
+ ----------
+ x : Univariate
+ Distribution of x-coordinates
+ y : Univariate
+ Distribution of y-coordinates
+ z : Univariate
+ Distribution of z-coordinates
+
+ Attributes
+ ----------
+ x : Univariate
+ Distribution of x-coordinates
+ y : Univariate
+ Distribution of y-coordinates
+ z : Univariate
+ Distribution of z-coordinates
+
+ """
+
+
+ def __init__(self, x, y, z):
+ super(CartesianIndependent, self).__init__()
+ self.x = x
+ self.y = y
+ self.z = z
+
+ @property
+ def x(self):
+ return self._x
+
+ @property
+ def y(self):
+ return self._y
+
+ @property
+ def z(self):
+ return self._z
+
+ @x.setter
+ def x(self, x):
+ cv.check_type('x coordinate', x, Univariate)
+ self._x = x
+
+ @y.setter
+ def y(self, y):
+ cv.check_type('y coordinate', y, Univariate)
+ self._y = y
+
+ @z.setter
+ def z(self, z):
+ cv.check_type('z coordinate', z, Univariate)
+ self._z = z
+
+ def to_xml(self):
+ element = ET.Element('space')
+ element.set('type', 'cartesian')
+ element.append(self.x.to_xml('x'))
+ element.append(self.y.to_xml('y'))
+ element.append(self.z.to_xml('z'))
+ return element
+
+
+class Box(Spatial):
+ """Uniform distribution of coordinates in a rectangular cuboid.
+
+ Parameters
+ ----------
+ lower_left : Iterable of Real
+ Lower-left coordinates of cuboid
+ upper_right : Iterable of Real
+ Upper-right coordinates of cuboid
+ only_fissionable : bool, optional
+ Whether spatial sites should only be accepted if they occur in
+ fissionable materials
+
+ Attributes
+ ----------
+ lower_left : Iterable of Real
+ Lower-left coordinates of cuboid
+ upper_right : Iterable of Real
+ Upper-right coordinates of cuboid
+ only_fissionable : bool, optional
+ Whether spatial sites should only be accepted if they occur in
+ fissionable materials
+
+ """
+
+
+ def __init__(self, lower_left, upper_right, only_fissionable=False):
+ super(Box, self).__init__()
+ self.lower_left = lower_left
+ self.upper_right = upper_right
+ self.only_fissionable = only_fissionable
+
+ @property
+ def lower_left(self):
+ return self._lower_left
+
+ @property
+ def upper_right(self):
+ return self._upper_right
+
+ @property
+ def only_fissionable(self):
+ return self._only_fissionable
+
+ @lower_left.setter
+ def lower_left(self, lower_left):
+ cv.check_type('lower left coordinate', lower_left, Iterable, Real)
+ cv.check_length('lower left coordinate', lower_left, 3)
+ self._lower_left = lower_left
+
+ @upper_right.setter
+ def upper_right(self, upper_right):
+ cv.check_type('upper right coordinate', upper_right, Iterable, Real)
+ cv.check_length('upper right coordinate', upper_right, 3)
+ self._upper_right = upper_right
+
+ @only_fissionable.setter
+ def only_fissionable(self, only_fissionable):
+ cv.check_type('only fissionable', only_fissionable, bool)
+ self._only_fissionable = only_fissionable
+
+ def to_xml(self):
+ element = ET.Element('space')
+ if self.only_fissionable:
+ element.set("type", "fission")
+ else:
+ element.set("type", "box")
+ params = ET.SubElement(element, "parameters")
+ params.text = ' '.join(map(str, self.lower_left)) + ' ' + \
+ ' '.join(map(str, self.upper_right))
+ return element
+
+
+class Point(Spatial):
+ """Delta function in three dimensions.
+
+ This spatial distribution can be used for a point source where sites are
+ emitted at a specific location given by its Cartesian coordinates.
+
+ Parameters
+ ----------
+ xyz : Iterable of Real
+ Cartesian coordinates of location
+
+ Attributes
+ ----------
+ xyz : Iterable of Real
+ Cartesian coordinates of location
+
+ """
+
+ def __init__(self, xyz):
+ super(Point, self).__init__()
+ self.xyz = xyz
+
+ @property
+ def xyz(self):
+ return self._xyz
+
+ @xyz.setter
+ def xyz(self, xyz):
+ cv.check_type('coordinate', xyz, Iterable, Real)
+ cv.check_length('coordinate', xyz, 3)
+ self._xyz = xyz
+
+ def to_xml(self):
+ element = ET.Element('space')
+ element.set("type", "point")
+ params = ET.SubElement(element, "parameters")
+ params.text = ' '.join(map(str, self.xyz))
+ return element
diff --git a/openmc/stats/univariate.py b/openmc/stats/univariate.py
new file mode 100644
index 0000000000..04e70bd004
--- /dev/null
+++ b/openmc/stats/univariate.py
@@ -0,0 +1,310 @@
+from abc import ABCMeta, abstractmethod
+from collections import Iterable
+from numbers import Real
+import sys
+from xml.etree import ElementTree as ET
+
+import openmc.checkvalue as cv
+
+if sys.version_info[0] >= 3:
+ basestring = str
+
+
+class Univariate(object):
+ """Probability distribution of a single random variable.
+
+ The Univariate class is an abstract class that can be derived to implement a
+ specific probability distribution.
+
+ """
+
+ __metaclass__ = ABCMeta
+
+ def __init__(self):
+ pass
+
+ @abstractmethod
+ def to_xml(self):
+ return ''
+
+
+class Discrete(Univariate):
+ """Distribution characterized by a probability mass function.
+
+ The Discrete distribution assigns probability values to discrete values of a
+ random variable, rather than expressing the distribution as a continuous
+ random variable.
+
+ Parameters
+ ----------
+ x : Iterable of Real
+ Values of the random variable
+ p : Iterable of Real
+ Discrete probability for each value
+
+ Attributes
+ ----------
+ x : Iterable of Real
+ Values of the random variable
+ p : Iterable of Real
+ Discrete probability for each value
+
+ """
+
+ def __init__(self, x, p):
+ super(Discrete, self).__init__()
+ self.x = x
+ self.p = p
+
+ @property
+ def x(self):
+ return self._x
+
+ @property
+ def p(self):
+ return self._p
+
+ @x.setter
+ def x(self, x):
+ if cv._isinstance(x, Real):
+ x = [x]
+ cv.check_type('discrete values', x, Iterable, Real)
+ self._x = x
+
+ @p.setter
+ def p(self, p):
+ if cv._isinstance(p, Real):
+ p = [p]
+ cv.check_type('discrete probabilities', p, Iterable, Real)
+ for pk in p:
+ cv.check_greater_than('discrete probability', pk, 0.0, True)
+ self._p = p
+
+ def to_xml(self, element_name):
+ element = ET.Element(element_name)
+ element.set("type", "discrete")
+
+ params = ET.SubElement(element, "parameters")
+ params.text = ' '.join(map(str, self.x)) + ' ' + ' '.join(map(str, self.p))
+
+ return element
+
+
+class Uniform(Univariate):
+ """Distribution with constant probability over a finite interval [a,b]
+
+ Parameters
+ ----------
+ a : float, optional
+ Lower bound of the sampling interval. Defaults to zero.
+ b : float, optional
+ Upper bound of the sampling interval. Defaults to unity.
+
+ Attributes
+ ----------
+ a : float
+ Lower bound of the sampling interval
+ b : float
+ Upper bound of the sampling interval
+
+ """
+
+ def __init__(self, a=0.0, b=1.0):
+ super(Uniform, self).__init__()
+ self.a = a
+ self.b = b
+
+ @property
+ def a(self):
+ return self._a
+
+ @property
+ def b(self):
+ return self._b
+
+ @a.setter
+ def a(self, a):
+ cv.check_type('Uniform a', a, Real)
+ self._a = a
+
+ @b.setter
+ def b(self, b):
+ cv.check_type('Uniform b', b, Real)
+ self._b = b
+
+ def to_xml(self, element_name):
+ element = ET.Element(element_name)
+ element.set("type", "uniform")
+ element.set("parameters", '{} {}'.format(self.a, self.b))
+ return element
+
+
+class Maxwell(Univariate):
+ """Maxwellian distribution in energy.
+
+ The Maxwellian distribution in energy is characterized by a single parameter
+ :math:`\theta` and has a density function :math:`p(E) dE = c E e^{-E/\theta}
+ dE`.
+
+ Parameters
+ ----------
+ theta : float
+ Effective temperature for distribution
+
+ Attributes
+ ----------
+ theta : float
+ Effective temperature for distribution
+
+ """
+
+ def __init__(self, theta):
+ super(Maxwell, self).__init__()
+ self.theta = theta
+
+ @property
+ def theta(self):
+ return self._theta
+
+ @theta.setter
+ def theta(self, theta):
+ cv.check_type('Maxwell temperature', theta, Real)
+ cv.check_greater_than('Maxwell temperature', theta, 0.0)
+ self._theta = theta
+
+ def to_xml(self, element_name):
+ element = ET.Element(element_name)
+ element.set("type", "maxwell")
+ element.set("parameters", str(self.theta))
+ return element
+
+
+class Watt(Univariate):
+ """Watt fission energy spectrum.
+
+ The Watt fission energy spectrum is characterized by two parameters
+ :math:`a` and :math:`b` and has density function :math:`p(E) dE = c e^{-E/a}
+ \sinh \sqrt{b \, E} dE`.
+
+ Parameters
+ ----------
+ a : float
+ First parameter of distribution
+ b : float
+ Second parameter of distribution
+
+ Attributes
+ ----------
+ a : float
+ First parameter of distribution
+ b : float
+ Second parameter of distribution
+
+ """
+
+ def __init__(self, a=0.988, b=2.249):
+ super(Watt, self).__init__()
+ self.a = a
+ self.b = b
+
+ @property
+ def a(self):
+ return self._a
+
+ @property
+ def b(self):
+ return self._b
+
+ @a.setter
+ def a(self, a):
+ cv.check_type('Watt a', a, Real)
+ cv.check_greater_than('Watt a', a, 0.0)
+ self._a = a
+
+ @b.setter
+ def b(self, b):
+ cv.check_type('Watt b', b, Real)
+ cv.check_greater_than('Watt b', b, 0.0)
+ self._b = b
+
+ def to_xml(self, element_name):
+ element = ET.Element(element_name)
+ element.set("type", "watt")
+ element.set("parameters", '{} {}'.format(self.a, self.b))
+ return element
+
+
+class Tabular(Univariate):
+ """Piecewise continuous probability distribution.
+
+ This class is used to represent a probability distribution whose density
+ function is tabulated at specific values and is either histogram or linearly
+ interpolated between points.
+
+ Parameters
+ ----------
+ x : Iterable of Real
+ Tabulated values of the random variable
+ p : Iterable of Real
+ Tabulated probabilities
+ interpolation : {'histogram', 'linear-linear'}, optional
+ Indicate whether the density function is constant between tabulated
+ points or linearly-interpolated.
+
+ Attributes
+ ----------
+ x : Iterable of Real
+ Tabulated values of the random variable
+ p : Iterable of Real
+ Tabulated probabilities
+ interpolation : {'histogram', 'linear-linear'}, optional
+ Indicate whether the density function is constant between tabulated
+ points or linearly-interpolated.
+
+ """
+
+ def __init__(self, x, p, interpolation='linear-linear'):
+ super(Tabular, self).__init__()
+ self.x = x
+ self.p = p
+ self.interpolation = interpolation
+
+ @property
+ def x(self):
+ return self._x
+
+ @property
+ def p(self):
+ return self._p
+
+ @property
+ def interpolation(self):
+ return self._interpolation
+
+ @x.setter
+ def x(self, x):
+ cv.check_type('tabulated values', x, Iterable, Real)
+ self._x = x
+
+ @p.setter
+ def p(self, p):
+ cv.check_type('tabulated probabilities', p, Iterable, Real)
+ for pk in p:
+ cv.check_greater_than('tabulated probability', pk, 0.0, True)
+ self._p = p
+
+ @interpolation.setter
+ def interpolation(self, interpolation):
+ cv.check_value('interpolation', interpolation,
+ ['linear-linear', 'histogram'])
+ self._interpolation = interpolation
+
+ def to_xml(self, element_name):
+ element = ET.Element(element_name)
+ element.set("type", "tabular")
+ element.set("interpolation", self.interpolation)
+
+ params = ET.SubElement(element, "parameters")
+ params.text = ' '.join(map(str, self.x)) + ' ' + ' '.join(map(str, self.p))
+
+ return element
diff --git a/setup.py b/setup.py
index d401f5fbaf..0bf4549c03 100644
--- a/setup.py
+++ b/setup.py
@@ -11,7 +11,7 @@ except ImportError:
kwargs = {'name': 'openmc',
'version': '0.7.1',
- 'packages': ['openmc', 'openmc.mgxs'],
+ 'packages': ['openmc', 'openmc.mgxs', 'openmc.stats'],
'scripts': glob.glob('scripts/openmc-*'),
# Metadata
diff --git a/src/constants.F90 b/src/constants.F90
index e5585fcb92..1238677195 100644
--- a/src/constants.F90
+++ b/src/constants.F90
@@ -360,28 +360,6 @@ module constants
integer, parameter :: STREAM_TALLIES = 2
integer, parameter :: STREAM_SOURCE = 3
- ! ============================================================================
- ! EXTERNAL SOURCE PARAMETERS
-
- ! Source spatial distribution types
- integer, parameter :: &
- SRC_SPACE_BOX = 1, & ! Source in a rectangular prism
- SRC_SPACE_POINT = 2, & ! Source at a single point
- SRC_SPACE_FISSION = 3 ! Source in prism filtered by fissionable mats
-
- ! Source angular distribution types
- integer, parameter :: &
- SRC_ANGLE_ISOTROPIC = 1, & ! Isotropic angular
- SRC_ANGLE_MONO = 2, & ! Monodirectional source
- SRC_ANGLE_TABULAR = 3 ! Tabular distribution
-
- ! Source energy distribution types
- integer, parameter :: &
- SRC_ENERGY_MONO = 1, & ! Monoenergetic source
- SRC_ENERGY_MAXWELL = 2, & ! Maxwell fission spectrum
- SRC_ENERGY_WATT = 3, & ! Watt fission spectrum
- SRC_ENERGY_TABULAR = 4 ! Tabular distribution
-
! ============================================================================
! MISCELLANEOUS CONSTANTS
diff --git a/src/distribution_multivariate.F90 b/src/distribution_multivariate.F90
new file mode 100644
index 0000000000..c288c40c19
--- /dev/null
+++ b/src/distribution_multivariate.F90
@@ -0,0 +1,162 @@
+module distribution_multivariate
+
+ use constants, only: ONE, TWO, PI
+ use distribution_univariate, only: Distribution
+ use math, only: rotate_angle
+ use random_lcg, only: prn
+
+ implicit none
+
+!===============================================================================
+! UNITSPHEREDISTRIBUTION type defines a probability density function for points
+! on the unit sphere. Extensions of this type are used to sample angular
+! distributions for starting sources
+!===============================================================================
+
+ type, abstract :: UnitSphereDistribution
+ real(8) :: reference_uvw(3)
+ contains
+ procedure(iSample), deferred :: sample
+ end type UnitSphereDistribution
+
+ abstract interface
+ function iSample(this) result(uvw)
+ import UnitSphereDistribution
+ class(UnitSphereDistribution), intent(in) :: this
+ real(8) :: uvw(3)
+ end function iSample
+ end interface
+
+!===============================================================================
+! Derived classes of UnitSphereDistribution
+!===============================================================================
+
+ ! Explicit distribution of polar and azimuthal angles
+ type, extends(UnitSphereDistribution) :: PolarAzimuthal
+ class(Distribution), allocatable :: mu
+ class(Distribution), allocatable :: phi
+ contains
+ procedure :: sample => polar_azimuthal_sample
+ end type PolarAzimuthal
+
+ ! Uniform distribution on the unit sphere
+ type, extends(UnitSphereDistribution) :: Isotropic
+ contains
+ procedure :: sample => isotropic_sample
+ end type Isotropic
+
+ ! Monodirectional distribution
+ type, extends(UnitSphereDistribution) :: Monodirectional
+ contains
+ procedure :: sample => monodirectional_sample
+ end type Monodirectional
+
+!===============================================================================
+! SPATIALDISTRIBUTION type defines a probability density function for arbitrary
+! points in Euclidean space.
+!===============================================================================
+
+ type, abstract :: SpatialDistribution
+ contains
+ procedure(iSampleSpatial), deferred :: sample
+ end type SpatialDistribution
+
+ abstract interface
+ function iSampleSpatial(this) result(xyz)
+ import SpatialDistribution
+ class(SpatialDistribution), intent(in) :: this
+ real(8) :: xyz(3)
+ end function iSampleSpatial
+ end interface
+
+ type, extends(SpatialDistribution) :: CartesianIndependent
+ class(Distribution), allocatable :: x
+ class(Distribution), allocatable :: y
+ class(Distribution), allocatable :: z
+ contains
+ procedure :: sample => cartesian_independent_sample
+ end type CartesianIndependent
+
+ type, extends(SpatialDistribution) :: SpatialBox
+ real(8) :: lower_left(3)
+ real(8) :: upper_right(3)
+ logical :: only_fissionable = .false.
+ contains
+ procedure :: sample => spatial_box_sample
+ end type SpatialBox
+
+ type, extends(SpatialDistribution) :: SpatialPoint
+ real(8) :: xyz(3)
+ contains
+ procedure :: sample => spatial_point_sample
+ end type SpatialPoint
+
+contains
+
+ function polar_azimuthal_sample(this) result(uvw)
+ class(PolarAzimuthal), intent(in) :: this
+ real(8) :: uvw(3)
+
+ real(8) :: mu ! cosine of polar angle
+ real(8) :: phi ! azimuthal angle
+
+ ! Sample cosine of polar angle
+ mu = this % mu % sample()
+ if (mu == ONE) then
+ uvw(:) = this % reference_uvw
+ else
+ ! Sample azimuthal angle
+ phi = this % phi % sample()
+ uvw(:) = rotate_angle(this % reference_uvw, mu, phi)
+ end if
+ end function polar_azimuthal_sample
+
+ function isotropic_sample(this) result(uvw)
+ class(Isotropic), intent(in) :: this
+ real(8) :: uvw(3)
+
+ real(8) :: phi
+ real(8) :: mu
+
+ phi = TWO*PI*prn()
+ mu = TWO*prn() - ONE
+ uvw(1) = mu
+ uvw(2) = sqrt(ONE - mu*mu) * cos(phi)
+ uvw(3) = sqrt(ONE - mu*mu) * sin(phi)
+ end function isotropic_sample
+
+ function monodirectional_sample(this) result(uvw)
+ class(Monodirectional), intent(in) :: this
+ real(8) :: uvw(3)
+
+ uvw(:) = this % reference_uvw
+ end function monodirectional_sample
+
+ function cartesian_independent_sample(this) result(xyz)
+ class(CartesianIndependent), intent(in) :: this
+ real(8) :: xyz(3)
+
+ xyz(1) = this % x % sample()
+ xyz(2) = this % y % sample()
+ xyz(3) = this % z % sample()
+ end function cartesian_independent_sample
+
+ function spatial_box_sample(this) result(xyz)
+ class(SpatialBox), intent(in) :: this
+ real(8) :: xyz(3)
+
+ integer :: i
+ real(8) :: r(3)
+
+ r = [ (prn(), i = 1,3) ]
+ xyz(:) = this % lower_left + r*(this % upper_right - this % lower_left)
+ end function spatial_box_sample
+
+ function spatial_point_sample(this) result(xyz)
+ class(SpatialPoint), intent(in) :: this
+ real(8) :: xyz(3)
+
+ xyz(:) = this % xyz
+ end function spatial_point_sample
+
+end module distribution_multivariate
diff --git a/src/distribution_univariate.F90 b/src/distribution_univariate.F90
new file mode 100644
index 0000000000..b3d77e2f82
--- /dev/null
+++ b/src/distribution_univariate.F90
@@ -0,0 +1,347 @@
+module distribution_univariate
+
+ use constants, only: ZERO, HALF, HISTOGRAM, LINEAR_LINEAR, MAX_LINE_LEN, &
+ MAX_WORD_LEN
+ use error, only: fatal_error
+ use math, only: maxwell_spectrum, watt_spectrum
+ use random_lcg, only: prn
+ use string, only: to_lower
+ use xml_interface
+
+ implicit none
+
+!===============================================================================
+! DISTRIBUTION type defines a probability density function
+!===============================================================================
+
+ type, abstract :: Distribution
+ contains
+ procedure(iSample), deferred :: sample
+ end type Distribution
+
+ type DistributionContainer
+ class(Distribution), allocatable :: obj
+ end type DistributionContainer
+
+ abstract interface
+ function iSample(this) result(x)
+ import Distribution
+ class(Distribution), intent(in) :: this
+ real(8) :: x
+ end function iSample
+ end interface
+
+!===============================================================================
+! Derived classes of Distribution
+!===============================================================================
+
+ ! Discrete distribution
+ type, extends(Distribution) :: Discrete
+ real(8), allocatable :: x(:)
+ real(8), allocatable :: p(:)
+ contains
+ procedure :: sample => discrete_sample
+ procedure :: initialize => discrete_initialize
+ end type Discrete
+
+ ! Uniform distribution over the interval [a,b]
+ type, extends(Distribution) :: Uniform
+ real(8) :: a
+ real(8) :: b
+ contains
+ procedure :: sample => uniform_sample
+ end type Uniform
+
+ ! Maxwellian distribution of form c*E*exp(-E/a)
+ type, extends(Distribution) :: Maxwell
+ real(8) :: theta
+ contains
+ procedure :: sample => maxwell_sample
+ end type Maxwell
+
+ ! Watt fission spectrum with form c*exp(-E/a)*sinh(sqrt(b*E))
+ type, extends(Distribution) :: Watt
+ real(8) :: a
+ real(8) :: b
+ contains
+ procedure :: sample => watt_sample
+ end type Watt
+
+ ! Histogram or linear-linear interpolated tabular distribution
+ type, extends(Distribution) :: Tabular
+ integer :: interpolation
+ real(8), allocatable :: x(:) ! tabulated independent variable
+ real(8), allocatable :: p(:) ! tabulated probability density
+ real(8), allocatable :: c(:) ! cumulative distribution at tabulated values
+ contains
+ procedure :: sample => tabular_sample
+ procedure :: initialize => tabular_initialize
+ end type Tabular
+
+contains
+
+ function discrete_sample(this) result(x)
+ class(Discrete), intent(in) :: this
+ real(8) :: x
+
+ integer :: i ! loop counter
+ integer :: n ! size of distribution
+ real(8) :: c ! cumulative frequency
+ real(8) :: xi ! sampled CDF value
+
+ n = size(this%x)
+ if (n > 1) then
+ xi = prn()
+ c = ZERO
+ do i = 1, size(this%x)
+ c = c + this%p(i)
+ if (xi < c) exit
+ end do
+ x = this%x(i)
+ else
+ x = this%x(1)
+ end if
+ end function discrete_sample
+
+ subroutine discrete_initialize(this, x, p)
+ class(Discrete), intent(inout) :: this
+ real(8), intent(in) :: x(:)
+ real(8), intent(in) :: p(:)
+
+ integer :: n
+
+ ! Check length of x, p arrays
+ if (size(x) /= size(p)) then
+ call fatal_error('Tabulated probabilities not of same length as &
+ &independent variable.')
+ end if
+
+ ! Copy probability density function
+ n = size(x)
+ allocate(this%x(n), this%p(n))
+ this%x(:) = x(:)
+ this%p(:) = p(:)
+
+ ! Normalize density function
+ this%p(:) = this%p(:)/sum(this%p)
+ end subroutine
+
+ function uniform_sample(this) result(x)
+ class(Uniform), intent(in) :: this
+ real(8) :: x
+
+ x = this%a + prn()*(this%b - this%a)
+ end function uniform_sample
+
+ function maxwell_sample(this) result(x)
+ class(Maxwell), intent(in) :: this
+ real(8) :: x
+
+ x = maxwell_spectrum(this%theta)
+ end function maxwell_sample
+
+ function watt_sample(this) result(x)
+ class(Watt), intent(in) :: this
+ real(8) :: x
+
+ x = watt_spectrum(this%a, this%b)
+ end function watt_sample
+
+ function tabular_sample(this) result(x)
+ class(Tabular), intent(in) :: this
+ real(8) :: x
+
+ integer :: i
+ real(8) :: c ! sampled cumulative frequency
+ real(8) :: m ! slope of PDF
+ real(8) :: x_i, x_i1 ! i-th and (i+1)th x values
+ real(8) :: c_i, c_i1 ! i-th and (i+1)th cumulative distribution values
+ real(8) :: p_i, p_i1 ! i-th and (i+1)th probability density values
+
+ ! Sample value of CDF
+ c = prn()
+
+ ! Find first CDF bin which is above the sampled value
+ c_i = this%c(1)
+ do i = 1, size(this%c) - 1
+ c_i1 = this%c(i + 1)
+ if (c <= c_i1) exit
+ c_i = c_i1
+ end do
+
+ ! Determine bounding PDF values
+ x_i = this%x(i)
+ p_i = this%p(i)
+
+ if (this%interpolation == HISTOGRAM) then
+ ! Histogram interpolation
+ if (p_i > ZERO) then
+ x = x_i + (c - c_i)/p_i
+ else
+ x = x_i
+ end if
+ else
+ ! Linear-linear interpolation
+ x_i1 = this%x(i + 1)
+ p_i1 = this%p(i + 1)
+
+ m = (p_i1 - p_i)/(x_i1 - x_i)
+ if (m == ZERO) then
+ x = x_i + (c - c_i)/p_i
+ else
+ x = x_i + (sqrt(max(ZERO, p_i*p_i + 2*m*(c - c_i))) - p_i)/m
+ end if
+ end if
+ end function tabular_sample
+
+ subroutine tabular_initialize(this, x, p, interp)
+ class(Tabular), intent(inout) :: this
+ real(8), intent(in) :: x(:)
+ real(8), intent(in) :: p(:)
+ integer, intent(in) :: interp
+
+ integer :: i
+ integer :: n
+
+ ! Check interpolation parameter
+ if (interp /= HISTOGRAM .and. interp /= LINEAR_LINEAR) then
+ call fatal_error('Only histogram and linear-linear interpolation for tabular &
+ &distribution is supported.')
+ end if
+
+ ! Check length of x, p arrays
+ if (size(x) /= size(p)) then
+ call fatal_error('Tabulated probabilities not of same length as &
+ &independent variable.')
+ end if
+
+ ! Copy probability density function and interpolation parameter
+ n = size(x)
+ allocate(this%x(n), this%p(n), this%c(n))
+ this%interpolation = interp
+ this%x(:) = x(:)
+ this%p(:) = p(:)
+
+ ! Calculate cumulative distribution function
+ this%c(1) = ZERO
+ do i = 2, n
+ if (this%interpolation == HISTOGRAM) then
+ this%c(i) = this%c(i-1) + this%p(i-1)*(this%x(i) - this%x(i-1))
+ elseif (this%interpolation == LINEAR_LINEAR) then
+ this%c(i) = this%c(i-1) + HALF*(this%p(i-1) + this%p(i)) * &
+ (this%x(i) - this%x(i-1))
+ end if
+ end do
+
+ ! Normalize density and distribution functions
+ this%p(:) = this%p(:)/this%c(n)
+ this%c(:) = this%c(:)/this%c(n)
+ end subroutine tabular_initialize
+
+ subroutine distribution_from_xml(dist, node_dist)
+ class(Distribution), allocatable, intent(inout) :: dist
+ type(Node), pointer :: node_dist
+
+ character(MAX_WORD_LEN) :: type
+ character(MAX_LINE_LEN) :: temp_str
+ integer :: n
+ integer :: temp_int
+ real(8), allocatable :: temp_real(:)
+
+ if (check_for_node(node_dist, "type")) then
+ ! Determine type of distribution
+ call get_node_value(node_dist, "type", type)
+
+ ! Determine number of parameters specified
+ if (check_for_node(node_dist, "parameters")) then
+ n = get_arraysize_double(node_dist, "parameters")
+ else
+ n = 0
+ end if
+
+ ! Allocate extension of Distribution
+ select case (to_lower(type))
+ case ('uniform')
+ allocate(Uniform :: dist)
+ if (n /= 2) then
+ call fatal_error('Uniform distribution must have two &
+ ¶meters specified.')
+ end if
+
+ case ('maxwell')
+ allocate(Maxwell :: dist)
+ if (n /= 1) then
+ call fatal_error('Maxwell energy distribution must have one &
+ ¶meter specified.')
+ end if
+
+ case ('watt')
+ allocate(Watt :: dist)
+ if (n /= 2) then
+ call fatal_error('Watt energy distribution must have two &
+ ¶meters specified.')
+ end if
+
+ case ('discrete')
+ allocate(Discrete :: dist)
+
+ case ('tabular')
+ allocate(Tabular :: dist)
+
+ case default
+ call fatal_error('Invalid distribution type: ' // trim(type) // '.')
+
+ end select
+
+ ! Read parameters and interpolation for distribution
+ select type (dist)
+ type is (Uniform)
+ allocate(temp_real(2))
+ call get_node_array(node_dist, "parameters", temp_real)
+ dist%a = temp_real(1)
+ dist%b = temp_real(2)
+ deallocate(temp_real)
+
+ type is (Maxwell)
+ call get_node_value(node_dist, "parameters", dist%theta)
+
+ type is (Watt)
+ allocate(temp_real(2))
+ call get_node_array(node_dist, "parameters", temp_real)
+ dist%a = temp_real(1)
+ dist%b = temp_real(2)
+ deallocate(temp_real)
+
+ type is (Discrete)
+ allocate(temp_real(n))
+ call get_node_array(node_dist, "parameters", temp_real)
+ call dist%initialize(temp_real(1:n/2), temp_real(n/2+1:n))
+ deallocate(temp_real)
+
+ type is (Tabular)
+ ! Read interpolation
+ if (check_for_node(node_dist, "interpolation")) then
+ call get_node_value(node_dist, "interpolation", temp_str)
+ select case(to_lower(temp_str))
+ case ('histogram')
+ temp_int = HISTOGRAM
+ case ('linear-linear')
+ temp_int = LINEAR_LINEAR
+ case default
+ call fatal_error("Unknown interpolation type for distribution: " &
+ // trim(temp_str))
+ end select
+ else
+ temp_int = HISTOGRAM
+ end if
+
+ ! Read and initialize tabular distribution
+ allocate(temp_real(n))
+ call get_node_array(node_dist, "parameters", temp_real)
+ call dist%initialize(temp_real(1:n/2), temp_real(n/2+1:n), temp_int)
+ deallocate(temp_real)
+ end select
+ end if
+ end subroutine distribution_from_xml
+
+end module distribution_univariate
diff --git a/src/error.F90 b/src/error.F90
index ecd7eb4530..9e5ca84792 100644
--- a/src/error.F90
+++ b/src/error.F90
@@ -3,8 +3,6 @@ module error
use, intrinsic :: ISO_FORTRAN_ENV
use constants
- use global
-
#ifdef MPI
use message_passing
#endif
@@ -87,6 +85,9 @@ contains
integer :: line_wrap ! length of line
integer :: length ! length of message
integer :: indent ! length of indentation
+#ifdef MPI
+ integer :: mpi_err
+#endif
! set default error code
@@ -136,16 +137,6 @@ contains
end if
end do
- ! Write information on current batch, generation, and particle
- if (current_batch > 0) then
- write(ERROR_UNIT,'(1X,A,I12) ') 'Batch: ', current_batch
- write(ERROR_UNIT,'(1X,A,I12) ') 'Generation:', current_gen
- write(ERROR_UNIT,*)
- end if
-
- ! Release memory from all allocatable arrays
- call free_memory()
-
#ifdef MPI
! Abort MPI
call MPI_ABORT(MPI_COMM_WORLD, code, mpi_err)
diff --git a/src/global.F90 b/src/global.F90
index 88ace73b6d..a5943b6b74 100644
--- a/src/global.F90
+++ b/src/global.F90
@@ -12,7 +12,7 @@ module global
use plot_header, only: ObjectPlot
use set_header, only: SetInt
use surface_header, only: SurfaceContainer
- use source_header, only: ExtSource
+ use source_header, only: SourceDistribution
use tally_header, only: TallyObject, TallyMap, TallyResult
use trigger_header, only: KTrigger
use timer_header, only: Timer
@@ -182,7 +182,7 @@ module global
logical :: satisfy_triggers = .false. ! whether triggers are satisfied
! External source
- type(ExtSource), target :: external_source
+ type(SourceDistribution), allocatable :: external_source(:)
! Source and fission bank
type(Bank), allocatable, target :: source_bank(:)
@@ -289,9 +289,6 @@ module global
character(MAX_FILE_LEN) :: path_particle_restart ! Path to particle restart
character(MAX_FILE_LEN) :: path_output = '' ! Path to output directory
- ! Random number seed
- integer(8) :: seed = 1_8
-
! The verbosity controls how much information will be printed to the
! screen and in logs
integer :: verbosity = 7
@@ -453,12 +450,7 @@ contains
if (allocated(micro_xs)) deallocate(micro_xs)
! Deallocate external source
- if (allocated(external_source % params_space)) &
- deallocate(external_source % params_space)
- if (allocated(external_source % params_angle)) &
- deallocate(external_source % params_angle)
- if (allocated(external_source % params_energy)) &
- deallocate(external_source % params_energy)
+ if (allocated(external_source)) deallocate(external_source)
! Deallocate k and entropy
if (allocated(k_generation)) deallocate(k_generation)
diff --git a/src/input_xml.F90 b/src/input_xml.F90
index 1ca8cc8799..1427458901 100644
--- a/src/input_xml.F90
+++ b/src/input_xml.F90
@@ -3,6 +3,8 @@ module input_xml
use cmfd_input, only: configure_cmfd
use constants
use dict_header, only: DictIntInt, ElemKeyValueCI
+ use distribution_multivariate
+ use distribution_univariate
use energy_grid, only: grid_method, n_log_bins
use error, only: fatal_error, warning
use geometry_header, only: Cell, Lattice, RectLattice, HexLattice
@@ -11,7 +13,7 @@ module input_xml
use mesh_header, only: RegularMesh
use output, only: write_message
use plot_header
- use random_lcg, only: prn
+ use random_lcg, only: prn, seed
use surface_header
use stl_vector, only: VectorInt
use string, only: to_lower, to_str, str_to_int, str_to_real, &
@@ -54,11 +56,11 @@ contains
character(MAX_LINE_LEN) :: temp_str
integer :: i
integer :: n
- integer :: coeffs_reqd
integer :: temp_int
integer :: temp_int_array3(3)
integer, allocatable :: temp_int_array(:)
integer(8) :: temp_long
+ real(8), allocatable :: temp_real(:)
integer :: n_tracks
logical :: file_exists
character(MAX_FILE_LEN) :: env_variable
@@ -67,6 +69,8 @@ contains
type(Node), pointer :: doc => null()
type(Node), pointer :: node_mode => null()
type(Node), pointer :: node_source => null()
+ type(Node), pointer :: node_space => null()
+ type(Node), pointer :: node_angle => null()
type(Node), pointer :: node_dist => null()
type(Node), pointer :: node_cutoff => null()
type(Node), pointer :: node_entropy => null()
@@ -79,6 +83,7 @@ contains
type(Node), pointer :: node_trigger => null()
type(Node), pointer :: node_keff_trigger => null()
type(NodeList), pointer :: node_scat_list => null()
+ type(NodeList), pointer :: node_source_list => null()
! Display output message
call write_message("Reading settings XML file...", 5)
@@ -339,185 +344,249 @@ contains
! ==========================================================================
! EXTERNAL SOURCE
- ! Get pointer to source
- if (check_for_node(doc, "source")) then
- call get_node_ptr(doc, "source", node_source)
- else
- call fatal_error("No source specified in settings XML file.")
- end if
+ ! Get point to list of elements and make sure there is at least one
+ call get_node_list(doc, "source", node_source_list)
+ n = get_list_size(node_source_list)
+ if (n == 0) call fatal_error("No source specified in settings XML file.")
- ! Check if we want to write out source
- if (check_for_node(node_source, "write_initial")) then
- call get_node_value(node_source, "write_initial", temp_str)
- temp_str = to_lower(temp_str)
- if (trim(temp_str) == 'true' .or. trim(temp_str) == '1') &
- write_initial_source = .true.
- end if
+ ! Allocate array for sources
+ allocate(external_source(n))
- ! Check for external source file
- if (check_for_node(node_source, "file")) then
- ! Copy path of source file
- call get_node_value(node_source, "file", path_source)
+ ! Read each source
+ do i = 1, n
+ ! Get pointer to source
+ call get_list_item(node_source_list, i, node_source)
- ! Check if source file exists
- inquire(FILE=path_source, EXIST=file_exists)
- if (.not. file_exists) then
- call fatal_error("Binary source file '" // trim(path_source) &
- &// "' does not exist!")
+ ! Check if we want to write out source
+ if (check_for_node(node_source, "write_initial")) then
+ call get_node_value(node_source, "write_initial", temp_str)
+ temp_str = to_lower(temp_str)
+ if (trim(temp_str) == 'true' .or. trim(temp_str) == '1') &
+ write_initial_source = .true.
end if
- else
-
- ! Spatial distribution for external source
- if (check_for_node(node_source, "space")) then
-
- ! Get pointer to spatial distribution
- call get_node_ptr(node_source, "space", node_dist)
-
- ! Check for type of spatial distribution
- type = ''
- if (check_for_node(node_dist, "type")) &
- call get_node_value(node_dist, "type", type)
- select case (to_lower(type))
- case ('box')
- external_source % type_space = SRC_SPACE_BOX
- coeffs_reqd = 6
- case ('fission')
- external_source % type_space = SRC_SPACE_FISSION
- coeffs_reqd = 6
- case ('point')
- external_source % type_space = SRC_SPACE_POINT
- coeffs_reqd = 3
- case default
- call fatal_error("Invalid spatial distribution for external source: "&
- &// trim(type))
- end select
-
- ! Determine number of parameters specified
- if (check_for_node(node_dist, "parameters")) then
- n = get_arraysize_double(node_dist, "parameters")
- else
- n = 0
- end if
-
- ! Read parameters for spatial distribution
- if (n < coeffs_reqd) then
- call fatal_error("Not enough parameters specified for spatial &
- &distribution of external source.")
- elseif (n > coeffs_reqd) then
- call fatal_error("Too many parameters specified for spatial &
- &distribution of external source.")
- elseif (n > 0) then
- allocate(external_source % params_space(n))
- call get_node_array(node_dist, "parameters", &
- external_source % params_space)
- end if
+ ! Check for source strength
+ if (check_for_node(node_source, "strength")) then
+ call get_node_value(node_source, "strength", external_source(i)%strength)
else
- call fatal_error("No spatial distribution specified for external &
- &source.")
+ external_source(i)%strength = ONE
end if
- ! Determine external source angular distribution
- if (check_for_node(node_source, "angle")) then
+ ! Check for external source file
+ if (check_for_node(node_source, "file")) then
+ ! Copy path of source file
+ call get_node_value(node_source, "file", path_source)
- ! Get pointer to angular distribution
- call get_node_ptr(node_source, "angle", node_dist)
-
- ! Check for type of angular distribution
- type = ''
- if (check_for_node(node_dist, "type")) &
- call get_node_value(node_dist, "type", type)
- select case (to_lower(type))
- case ('isotropic')
- external_source % type_angle = SRC_ANGLE_ISOTROPIC
- coeffs_reqd = 0
- case ('monodirectional')
- external_source % type_angle = SRC_ANGLE_MONO
- coeffs_reqd = 3
- case ('tabular')
- external_source % type_angle = SRC_ANGLE_TABULAR
- case default
- call fatal_error("Invalid angular distribution for external source: "&
- &// trim(type))
- end select
-
- ! Determine number of parameters specified
- if (check_for_node(node_dist, "parameters")) then
- n = get_arraysize_double(node_dist, "parameters")
- else
- n = 0
+ ! Check if source file exists
+ inquire(FILE=path_source, EXIST=file_exists)
+ if (.not. file_exists) then
+ call fatal_error("Binary source file '" // trim(path_source) &
+ &// "' does not exist!")
end if
- ! Read parameters for angle distribution
- if (n < coeffs_reqd) then
- call fatal_error("Not enough parameters specified for angle &
- &distribution of external source.")
- elseif (n > coeffs_reqd) then
- call fatal_error("Too many parameters specified for angle &
- &distribution of external source.")
- elseif (n > 0) then
- allocate(external_source % params_angle(n))
- call get_node_array(node_dist, "parameters", &
- external_source % params_angle)
- end if
else
- ! Set default angular distribution isotropic
- external_source % type_angle = SRC_ANGLE_ISOTROPIC
- end if
- ! Determine external source energy distribution
- if (check_for_node(node_source, "energy")) then
+ ! Spatial distribution for external source
+ if (check_for_node(node_source, "space")) then
- ! Get pointer to energy distribution
- call get_node_ptr(node_source, "energy", node_dist)
+ ! Get pointer to spatial distribution
+ call get_node_ptr(node_source, "space", node_space)
- ! Check for type of energy distribution
- type = ''
- if (check_for_node(node_dist, "type")) &
- call get_node_value(node_dist, "type", type)
- select case (to_lower(type))
- case ('monoenergetic')
- external_source % type_energy = SRC_ENERGY_MONO
- coeffs_reqd = 1
- case ('maxwell')
- external_source % type_energy = SRC_ENERGY_MAXWELL
- coeffs_reqd = 1
- case ('watt')
- external_source % type_energy = SRC_ENERGY_WATT
- coeffs_reqd = 2
- case ('tabular')
- external_source % type_energy = SRC_ENERGY_TABULAR
- case default
- call fatal_error("Invalid energy distribution for external source: " &
- &// trim(type))
- end select
+ ! Check for type of spatial distribution
+ type = ''
+ if (check_for_node(node_space, "type")) &
+ call get_node_value(node_space, "type", type)
+ select case (to_lower(type))
+ case ('cartesian')
+ allocate(CartesianIndependent :: external_source(i)%space)
+
+ case ('box')
+ allocate(SpatialBox :: external_source(i)%space)
+
+ case ('fission')
+ allocate(SpatialBox :: external_source(i)%space)
+ select type(space => external_source(i)%space)
+ type is (SpatialBox)
+ space%only_fissionable = .true.
+ end select
+
+ case ('point')
+ allocate(SpatialPoint :: external_source(i)%space)
+
+ case default
+ call fatal_error("Invalid spatial distribution for external source: "&
+ // trim(type))
+ end select
+
+ select type (space => external_source(i)%space)
+ type is (CartesianIndependent)
+ ! Read distribution for x coordinate
+ if (check_for_node(node_space, "x")) then
+ call get_node_ptr(node_space, "x", node_dist)
+ call distribution_from_xml(space%x, node_dist)
+ else
+ allocate(Discrete :: space%x)
+ select type (dist => space%x)
+ type is (Discrete)
+ allocate(dist%x(1), dist%p(1))
+ dist%x(1) = ZERO
+ dist%p(1) = ONE
+ end select
+ end if
+
+ ! Read distribution for y coordinate
+ if (check_for_node(node_space, "y")) then
+ call get_node_ptr(node_space, "y", node_dist)
+ call distribution_from_xml(space%y, node_dist)
+ else
+ allocate(Discrete :: space%y)
+ select type (dist => space%y)
+ type is (Discrete)
+ allocate(dist%x(1), dist%p(1))
+ dist%x(1) = ZERO
+ dist%p(1) = ONE
+ end select
+ end if
+
+ if (check_for_node(node_space, "z")) then
+ call get_node_ptr(node_space, "z", node_dist)
+ call distribution_from_xml(space%z, node_dist)
+ else
+ allocate(Discrete :: space%z)
+ select type (dist => space%z)
+ type is (Discrete)
+ allocate(dist%x(1), dist%p(1))
+ dist%x(1) = ZERO
+ dist%p(1) = ONE
+ end select
+ end if
+
+ type is (SpatialBox)
+ ! Make sure correct number of parameters are given
+ if (get_arraysize_double(node_space, "parameters") /= 6) then
+ call fatal_error('Box/fission spatial source must have &
+ &six parameters specified.')
+ end if
+
+ ! Read lower-right/upper-left coordinates
+ allocate(temp_real(6))
+ call get_node_array(node_space, "parameters", temp_real)
+ space%lower_left(:) = temp_real(1:3)
+ space%upper_right(:) = temp_real(4:6)
+ deallocate(temp_real)
+
+ type is (SpatialPoint)
+ ! Make sure correct number of parameters are given
+ if (get_arraysize_double(node_space, "parameters") /= 3) then
+ call fatal_error('Point spatial source must have &
+ &three parameters specified.')
+ end if
+
+ ! Read location of point source
+ allocate(temp_real(3))
+ call get_node_array(node_space, "parameters", temp_real)
+ space%xyz(:) = temp_real
+ deallocate(temp_real)
+
+ end select
- ! Determine number of parameters specified
- if (check_for_node(node_dist, "parameters")) then
- n = get_arraysize_double(node_dist, "parameters")
else
- n = 0
+ call fatal_error("No spatial distribution specified for external &
+ &source.")
end if
- ! Read parameters for energy distribution
- if (n < coeffs_reqd) then
- call fatal_error("Not enough parameters specified for energy &
- &distribution of external source.")
- elseif (n > coeffs_reqd) then
- call fatal_error("Too many parameters specified for energy &
- &distribution of external source.")
- elseif (n > 0) then
- allocate(external_source % params_energy(n))
- call get_node_array(node_dist, "parameters", &
- external_source % params_energy)
+ ! Determine external source angular distribution
+ if (check_for_node(node_source, "angle")) then
+
+ ! Get pointer to angular distribution
+ call get_node_ptr(node_source, "angle", node_angle)
+
+ ! Check for type of angular distribution
+ type = ''
+ if (check_for_node(node_angle, "type")) &
+ call get_node_value(node_angle, "type", type)
+ select case (to_lower(type))
+ case ('isotropic')
+ allocate(Isotropic :: external_source(i)%angle)
+
+ case ('monodirectional')
+ allocate(Monodirectional :: external_source(i)%angle)
+
+ case ('mu-phi')
+ allocate(PolarAzimuthal :: external_source(i)%angle)
+
+ case default
+ call fatal_error("Invalid angular distribution for external source: "&
+ // trim(type))
+ end select
+
+ ! Read reference directional unit vector
+ if (check_for_node(node_angle, "reference_uvw")) then
+ n = get_arraysize_double(node_angle, "reference_uvw")
+ if (n /= 3) then
+ call fatal_error('Angular distribution reference direction must have &
+ &three parameters specified.')
+ end if
+ call get_node_array(node_angle, "reference_uvw", &
+ external_source(i)%angle%reference_uvw)
+ else
+ ! By default, set reference unit vector to be positive z-direction
+ external_source(i)%angle%reference_uvw(:) = [ZERO, ZERO, ONE]
+ end if
+
+ ! Read parameters for angle distribution
+ select type (angle => external_source(i)%angle)
+ type is (Monodirectional)
+ call get_node_array(node_angle, "reference_uvw", &
+ external_source(i)%angle%reference_uvw)
+
+ type is (PolarAzimuthal)
+ if (check_for_node(node_angle, "mu")) then
+ call get_node_ptr(node_angle, "mu", node_dist)
+ call distribution_from_xml(angle%mu, node_dist)
+ else
+ allocate(Uniform :: angle%mu)
+ select type (mu => angle%mu)
+ type is (Uniform)
+ mu%a = -ONE
+ mu%b = ONE
+ end select
+ end if
+
+ if (check_for_node(node_angle, "phi")) then
+ call get_node_ptr(node_angle, "phi", node_dist)
+ call distribution_from_xml(angle%phi, node_dist)
+ else
+ allocate(Uniform :: angle%phi)
+ select type (phi => angle%phi)
+ type is (Uniform)
+ phi%a = ZERO
+ phi%b = TWO*PI
+ end select
+ end if
+ end select
+
+ else
+ ! Set default angular distribution isotropic
+ allocate(Isotropic :: external_source(i)%angle)
+ external_source(i)%angle%reference_uvw(:) = [ZERO, ZERO, ONE]
+ end if
+
+ ! Determine external source energy distribution
+ if (check_for_node(node_source, "energy")) then
+ call get_node_ptr(node_source, "energy", node_dist)
+ call distribution_from_xml(external_source(i)%energy, node_dist)
+ else
+ ! Default to a Watt spectrum with parameters 0.988 MeV and 2.249 MeV^-1
+ allocate(Watt :: external_source(i)%energy)
+ select type(energy => external_source(i)%energy)
+ type is (Watt)
+ energy%a = 0.988_8
+ energy%b = 2.249_8
+ end select
end if
- else
- ! Set default energy distribution to Watt fission spectrum
- external_source % type_energy = SRC_ENERGY_WATT
- allocate(external_source % params_energy(2))
- external_source % params_energy = (/ 0.988_8, 2.249_8 /)
end if
- end if
+ end do
! Survival biasing
if (check_for_node(doc, "survival_biasing")) then
diff --git a/src/math.F90 b/src/math.F90
index 15aa672e15..9a64c88d7d 100644
--- a/src/math.F90
+++ b/src/math.F90
@@ -557,6 +557,60 @@ contains
end function calc_rn
+!===============================================================================
+! ROTATE_ANGLE rotates direction cosines through a polar angle whose cosine is
+! mu and through an azimuthal angle sampled uniformly. Note that this is done
+! with direct sampling rather than rejection as is done in MCNP and SERPENT.
+!===============================================================================
+
+ function rotate_angle(uvw0, mu, phi) result(uvw)
+ real(8), intent(in) :: uvw0(3) ! directional cosine
+ real(8), intent(in) :: mu ! cosine of angle in lab or CM
+ real(8), optional :: phi ! azimuthal angle
+ real(8) :: uvw(3) ! rotated directional cosine
+
+ real(8) :: phi_ ! azimuthal angle
+ real(8) :: sinphi ! sine of azimuthal angle
+ real(8) :: cosphi ! cosine of azimuthal angle
+ real(8) :: a ! sqrt(1 - mu^2)
+ real(8) :: b ! sqrt(1 - w^2)
+ real(8) :: u0 ! original cosine in x direction
+ real(8) :: v0 ! original cosine in y direction
+ real(8) :: w0 ! original cosine in z direction
+
+ ! Copy original directional cosines
+ u0 = uvw0(1)
+ v0 = uvw0(2)
+ w0 = uvw0(3)
+
+ ! Sample azimuthal angle in [0,2pi) if none provided
+ if (present(phi)) then
+ phi_ = phi
+ else
+ phi_ = TWO * PI * prn()
+ end if
+
+ ! Precompute factors to save flops
+ sinphi = sin(phi_)
+ cosphi = cos(phi_)
+ a = sqrt(max(ZERO, ONE - mu*mu))
+ b = sqrt(max(ZERO, ONE - w0*w0))
+
+ ! Need to treat special case where sqrt(1 - w**2) is close to zero by
+ ! expanding about the v component rather than the w component
+ if (b > 1e-10) then
+ uvw(1) = mu*u0 + a*(u0*w0*cosphi - v0*sinphi)/b
+ uvw(2) = mu*v0 + a*(v0*w0*cosphi + u0*sinphi)/b
+ uvw(3) = mu*w0 - a*b*cosphi
+ else
+ b = sqrt(ONE - v0*v0)
+ uvw(1) = mu*u0 + a*(u0*v0*cosphi + w0*sinphi)/b
+ uvw(2) = mu*v0 - a*b*cosphi
+ uvw(3) = mu*w0 + a*(v0*w0*cosphi - u0*sinphi)/b
+ end if
+
+ end function rotate_angle
+
!===============================================================================
! MAXWELL_SPECTRUM samples an energy from the Maxwell fission distribution based
! on a direct sampling scheme. The probability distribution function for a
diff --git a/src/physics.F90 b/src/physics.F90
index a01a3a30cb..217d232182 100644
--- a/src/physics.F90
+++ b/src/physics.F90
@@ -9,7 +9,7 @@ module physics
use global
use interpolation, only: interpolate_tab1
use material_header, only: Material
- use math, only: maxwell_spectrum, watt_spectrum
+ use math, only: rotate_angle, maxwell_spectrum, watt_spectrum
use mesh, only: get_mesh_indices
use output, only: write_message
use particle_header, only: Particle
@@ -1517,55 +1517,6 @@ contains
end function sample_angle
-!===============================================================================
-! ROTATE_ANGLE rotates direction cosines through a polar angle whose cosine is
-! mu and through an azimuthal angle sampled uniformly. Note that this is done
-! with direct sampling rather than rejection as is done in MCNP and SERPENT.
-!===============================================================================
-
- function rotate_angle(uvw0, mu) result(uvw)
- real(8), intent(in) :: uvw0(3) ! directional cosine
- real(8), intent(in) :: mu ! cosine of angle in lab or CM
- real(8) :: uvw(3) ! rotated directional cosine
-
- real(8) :: phi ! azimuthal angle
- real(8) :: sinphi ! sine of azimuthal angle
- real(8) :: cosphi ! cosine of azimuthal angle
- real(8) :: a ! sqrt(1 - mu^2)
- real(8) :: b ! sqrt(1 - w^2)
- real(8) :: u0 ! original cosine in x direction
- real(8) :: v0 ! original cosine in y direction
- real(8) :: w0 ! original cosine in z direction
-
- ! Copy original directional cosines
- u0 = uvw0(1)
- v0 = uvw0(2)
- w0 = uvw0(3)
-
- ! Sample azimuthal angle in [0,2pi)
- phi = TWO * PI * prn()
-
- ! Precompute factors to save flops
- sinphi = sin(phi)
- cosphi = cos(phi)
- a = sqrt(max(ZERO, ONE - mu*mu))
- b = sqrt(max(ZERO, ONE - w0*w0))
-
- ! Need to treat special case where sqrt(1 - w**2) is close to zero by
- ! expanding about the v component rather than the w component
- if (b > 1e-10) then
- uvw(1) = mu*u0 + a*(u0*w0*cosphi - v0*sinphi)/b
- uvw(2) = mu*v0 + a*(v0*w0*cosphi + u0*sinphi)/b
- uvw(3) = mu*w0 - a*b*cosphi
- else
- b = sqrt(ONE - v0*v0)
- uvw(1) = mu*u0 + a*(u0*v0*cosphi + w0*sinphi)/b
- uvw(2) = mu*v0 - a*b*cosphi
- uvw(3) = mu*w0 + a*(v0*w0*cosphi - u0*sinphi)/b
- end if
-
- end function rotate_angle
-
!===============================================================================
! SAMPLE_ENERGY samples an outgoing energy distribution, either for a secondary
! neutron from a collision or for a prompt/delayed fission neutron
diff --git a/src/random_lcg.F90 b/src/random_lcg.F90
index 1ebe651d3c..8f50477c5b 100644
--- a/src/random_lcg.F90
+++ b/src/random_lcg.F90
@@ -7,6 +7,9 @@ module random_lcg
private
save
+ ! Random number seed
+ integer(8), public :: seed = 1_8
+
integer(8) :: prn_seed0 ! original seed
integer(8) :: prn_seed(N_STREAMS) ! current seed
integer(8) :: prn_mult ! multiplication factor, g
@@ -56,8 +59,6 @@ contains
subroutine initialize_prng()
- use global, only: seed
-
integer :: i
prn_seed0 = seed
diff --git a/src/relaxng/settings.rnc b/src/relaxng/settings.rnc
index a95b1f297e..68f221f677 100644
--- a/src/relaxng/settings.rnc
+++ b/src/relaxng/settings.rnc
@@ -65,36 +65,36 @@ element settings {
element seed { xsd:positiveInteger }? &
element source {
- element file { xsd:string { maxLength = "255" } }? &
- element space {
- (element type { xsd:string { maxLength = "16" } } |
- attribute type { xsd:string { maxLength = "16" } }) &
- (element length { xsd:int } | attribute length { xsd:int })? &
- (element interpolation { xsd:string { maxLength = "10" } } |
- attribute interplation { xsd:string { maxLength = "10" } })? &
- (element parameters { list { xsd:double+ } } |
- attribute parameters { list { xsd:double+ } })?
- }? &
- element angle {
- (element type { xsd:string { maxLength = "16" } } |
- attribute type { xsd:string { maxLength = "16" } }) &
- (element length { xsd:int } | attribute length { xsd:int })? &
- (element interpolation { xsd:string { maxLength = "10" } } |
- attribute interplation { xsd:string { maxLength = "10" } })? &
- (element parameters { list { xsd:double+ } } |
- attribute parameters { list { xsd:double+ } })?
- }? &
- element energy {
- (element type { xsd:string { maxLength = "16" } } |
- attribute type { xsd:string { maxLength = "16" } }) &
- (element length { xsd:int } | attribute length { xsd:int })? &
- (element interpolation { xsd:string { maxLength = "10" } } |
- attribute interplation { xsd:string { maxLength = "10" } })? &
- (element parameters { list { xsd:double+ } } |
- attribute parameters { list { xsd:double+ } })?
- }? &
- (element write_initial { xsd:boolean } | attribute write_initial { xsd:boolean })?
- }? &
+ grammar {
+ start =
+ (element strength { xsd:double } | attribute strength { xsd:double })? &
+ (element file { xsd:string } | attribute file { xsd:string })? &
+ element space {
+ (element type { xsd:string } | attribute type { xsd:string }) &
+ (element parameters { list { xsd:double+ } } |
+ attribute parameters { list { xsd:double+ } })? &
+ element x { distribution }? &
+ element y { distribution }? &
+ element z { distribution }?
+ }? &
+ element angle {
+ (element type { xsd:string } | attribute type { xsd:string }) &
+ (element reference_uvw { list { xsd:double, xsd:double, xsd:double } } |
+ attribute reference_uvw { list { xsd:double, xsd:double, xsd:double } })? &
+ element mu { distribution }? &
+ element phi { distribution }?
+ }? &
+ element energy { distribution }? &
+ (element write_initial { xsd:boolean } | attribute write_initial { xsd:boolean })?
+ distribution =
+ (element type { xsd:string { maxLength = "16" } } |
+ attribute type { xsd:string { maxLength = "16" } }) &
+ (element interpolation { xsd:string } |
+ attribute interpolation { xsd:string })? &
+ (element parameters { list { xsd:double+ } } |
+ attribute parameters { list { xsd:double+ } })?
+ }
+ }* &
element state_point {
(
diff --git a/src/relaxng/settings.rng b/src/relaxng/settings.rng
index 8dd1a6febc..ea3efaff9f 100644
--- a/src/relaxng/settings.rng
+++ b/src/relaxng/settings.rng
@@ -264,209 +264,184 @@
-
+
-
-
-
-
- 255
-
-
-
-
-
-
+
+
+
+
-
-
- 16
-
+
+
-
-
- 16
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 10
-
-
-
-
- 10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
- 16
-
+
+
-
-
- 16
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 10
-
-
-
-
- 10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
- 16
-
+
+
-
-
- 16
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 10
-
-
-
-
- 10
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+ 16
+
+
+
+
+ 16
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/src/relaxng/tallies.rnc b/src/relaxng/tallies.rnc
index 75afb0f231..0f3672c6f2 100644
--- a/src/relaxng/tallies.rnc
+++ b/src/relaxng/tallies.rnc
@@ -41,7 +41,7 @@ element tallies {
(element type { xsd:string } | attribute type { xsd:string }) &
(element threshold { xsd:double} | attribute threshold { xsd:double }) &
(element scores { list { xsd:string { maxLength = "20" }+ } } | attribute scores { list { xsd:string { maxLength = "20"}+ } } )?
- }?
+ }*
}* &
element assume_separate { xsd:boolean }?
diff --git a/src/relaxng/tallies.rng b/src/relaxng/tallies.rng
index d35c170042..36bd5cb85f 100644
--- a/src/relaxng/tallies.rng
+++ b/src/relaxng/tallies.rng
@@ -145,10 +145,10 @@
meshenergyenergyout
- delayedgroupmupolarazimuthal
+ delayedgroup
@@ -162,10 +162,10 @@
meshenergyenergyout
- delayedgroupmupolarazimuthal
+ delayedgroup
@@ -208,7 +208,7 @@
-
+
@@ -251,7 +251,7 @@
-
+
diff --git a/src/source.F90 b/src/source.F90
index a16eb245d0..d1bead3804 100644
--- a/src/source.F90
+++ b/src/source.F90
@@ -2,6 +2,8 @@ module source
use bank_header, only: Bank
use constants
+ use distribution_univariate, only: Discrete
+ use distribution_multivariate, only: SpatialBox
use error, only: fatal_error
use geometry, only: find_cell
use geometry_header, only: BASE_UNIVERSE
@@ -99,13 +101,9 @@ contains
type(Bank), intent(inout) :: site ! source site
integer :: i ! dummy loop index
+ integer :: n_source ! number of source distributions
+ real(8) :: c ! cumulative frequency
real(8) :: r(3) ! sampled coordinates
- real(8) :: phi ! azimuthal angle
- real(8) :: mu ! cosine of polar angle
- real(8) :: p_min(3) ! minimum coordinates of source
- real(8) :: p_max(3) ! maximum coordinates of source
- real(8) :: a ! Arbitrary parameter 'a'
- real(8) :: b ! Arbitrary parameter 'b'
logical :: found ! Does the source particle exist within geometry?
type(Particle) :: p ! Temporary particle for using find_cell
integer, save :: num_resamples = 0 ! Number of resamples encountered
@@ -116,130 +114,80 @@ contains
! Set the random number generator to the source stream.
call prn_set_stream(STREAM_SOURCE)
- ! Sample position
- select case (external_source%type_space)
- case (SRC_SPACE_BOX)
+ ! Sample from among multiple source distributions
+ n_source = size(external_source)
+ if (n_source > 1) then
+ r(1) = prn()*sum(external_source(:)%strength)
+ c = ZERO
+ do i = 1, n_source
+ c = c + external_source(i)%strength
+ if (r(1) < c) exit
+ end do
+ else
+ i = 1
+ end if
+
+ ! Repeat sampling source location until a good site has been found
+ found = .false.
+ do while (.not.found)
! Set particle defaults
call p%initialize()
- ! Repeat sampling source location until a good site has been found
- found = .false.
- do while (.not.found)
- ! Coordinates sampled uniformly over a box
- p_min = external_source%params_space(1:3)
- p_max = external_source%params_space(4:6)
- r = (/ (prn(), i = 1,3) /)
- site%xyz = p_min + r*(p_max - p_min)
- ! Fill p with needed data
- p%coord(1)%xyz = site%xyz
- p%coord(1)%uvw = [ ONE, ZERO, ZERO ]
+ ! Sample spatial distribution
+ site%xyz(:) = external_source(i)%space%sample()
- ! Now search to see if location exists in geometry
- call find_cell(p, found)
- if (.not. found) then
- num_resamples = num_resamples + 1
- if (num_resamples == MAX_EXTSRC_RESAMPLES) then
- call fatal_error("Maximum number of external source spatial &
- &resamples reached!")
+ ! Fill p with needed data
+ p%coord(1)%xyz(:) = site%xyz
+ p%coord(1)%uvw(:) = [ ONE, ZERO, ZERO ]
+
+ ! Now search to see if location exists in geometry
+ call find_cell(p, found)
+ if (.not. found) then
+ num_resamples = num_resamples + 1
+ if (num_resamples == MAX_EXTSRC_RESAMPLES) then
+ call fatal_error("Maximum number of external source spatial &
+ &resamples reached!")
+ end if
+ end if
+
+ ! Check if spatial site is in fissionable material
+ select type (space => external_source(i)%space)
+ type is (SpatialBox)
+ if (space%only_fissionable) then
+ if (p%material == MATERIAL_VOID) then
+ found = .false.
+ elseif (.not. materials(p%material)%fissionable) then
+ found = .false.
end if
end if
- end do
- call p%clear()
+ end select
+ end do
- case (SRC_SPACE_FISSION)
- ! Repeat sampling source location until a good site has been found
- found = .false.
- do while (.not.found)
- ! Set particle defaults
- call p%initialize()
-
- ! Coordinates sampled uniformly over a box
- p_min = external_source%params_space(1:3)
- p_max = external_source%params_space(4:6)
- r = (/ (prn(), i = 1,3) /)
- site%xyz = p_min + r*(p_max - p_min)
-
- ! Fill p with needed data
- p%coord(1)%xyz = site%xyz
- p%coord(1)%uvw = [ ONE, ZERO, ZERO ]
-
- ! Now search to see if location exists in geometry
- call find_cell(p, found)
- if (.not. found) then
- num_resamples = num_resamples + 1
- if (num_resamples == MAX_EXTSRC_RESAMPLES) then
- call fatal_error("Maximum number of external source spatial &
- &resamples reached!")
- end if
- cycle
- end if
- if (p%material == MATERIAL_VOID) then
- found = .false.
- cycle
- end if
- if (.not. materials(p%material)%fissionable) found = .false.
- end do
- call p%clear()
-
- case (SRC_SPACE_POINT)
- ! Point source
- site%xyz = external_source%params_space
-
- end select
+ call p%clear()
! Sample angle
- select case (external_source%type_angle)
- case (SRC_ANGLE_ISOTROPIC)
- ! Sample isotropic distribution
- phi = TWO*PI*prn()
- mu = TWO*prn() - ONE
- site%uvw(1) = mu
- site%uvw(2) = sqrt(ONE - mu*mu) * cos(phi)
- site%uvw(3) = sqrt(ONE - mu*mu) * sin(phi)
+ site%uvw(:) = external_source(i)%angle%sample()
- case (SRC_ANGLE_MONO)
- ! Monodirectional source
- site%uvw = external_source%params_angle
-
- case default
- call fatal_error("No angle distribution specified for external source!")
- end select
-
- ! Sample energy distribution
- select case (external_source%type_energy)
- case (SRC_ENERGY_MONO)
- ! Monoenergtic source
- site%E = external_source%params_energy(1)
- if (site%E >= energy_max_neutron) then
+ ! Check for monoenergetic source above maximum neutron energy
+ select type (energy => external_source(i)%energy)
+ type is (Discrete)
+ if (any(energy%x >= energy_max_neutron)) then
call fatal_error("Source energy above range of energies of at least &
&one cross section table")
end if
-
- case (SRC_ENERGY_MAXWELL)
- a = external_source%params_energy(1)
- do
- ! Sample Maxwellian fission spectrum
- site%E = maxwell_spectrum(a)
-
- ! resample if energy is greater than maximum neutron energy
- if (site%E < energy_max_neutron) exit
- end do
-
- case (SRC_ENERGY_WATT)
- a = external_source%params_energy(1)
- b = external_source%params_energy(2)
- do
- ! Sample Watt fission spectrum
- site%E = watt_spectrum(a, b)
-
- ! resample if energy is greater than maximum neutron energy
- if (site%E < energy_max_neutron) exit
- end do
-
- case default
- call fatal_error("No energy distribution specified for external source!")
end select
+ do
+ ! Sample energy spectrum
+ site%E = external_source(i)%energy%sample()
+
+ ! resample if energy is greater than maximum neutron energy
+ if (site%E < energy_max_neutron) exit
+ end do
+
+ ! Set delayed group
+ site%delayed_group = 0
+
! Set the random number generator back to the tracking stream.
call prn_set_stream(STREAM_TRACKING)
diff --git a/src/source_header.F90 b/src/source_header.F90
index 11c74d110c..eefc007a47 100644
--- a/src/source_header.F90
+++ b/src/source_header.F90
@@ -1,19 +1,20 @@
module source_header
+ use distribution_univariate, only: Distribution
+ use distribution_multivariate, only: UnitSphereDistribution, SpatialDistribution
+
implicit none
!===============================================================================
-! EXTSOURCE describes an external source of neutrons for a fixed-source problem
-! or for the starting source in a k eigenvalue problem
+! SOURCEDISTRIBUTION describes an external source of particles for a
+! fixed-source problem or for the starting source in a k eigenvalue problem
!===============================================================================
- type ExtSource
- integer :: type_space ! spacial distribution, e.g. 'box' or 'point'
- integer :: type_angle ! angle distribution, e.g. 'isotropic'
- integer :: type_energy ! energy distribution, e.g. 'Watt'
- real(8), allocatable :: params_space(:) ! parameters for spatial distribution
- real(8), allocatable :: params_angle(:) ! parameters for angle distribution
- real(8), allocatable :: params_energy(:) ! parameters for energy distribution
- end type ExtSource
+ type SourceDistribution
+ real(8) :: strength ! source strength
+ class(SpatialDistribution), allocatable :: space ! spatial distribution
+ class(UnitSphereDistribution), allocatable :: angle ! angle distribution
+ class(Distribution), allocatable :: energy ! energy distribution
+ end type SourceDistribution
end module source_header
diff --git a/src/state_point.F90 b/src/state_point.F90
index 046c857fd2..e89cdf12a8 100644
--- a/src/state_point.F90
+++ b/src/state_point.F90
@@ -22,6 +22,7 @@ module state_point
use tally_header, only: TallyObject
use mesh_header, only: RegularMesh
use dict_header, only: ElemKeyValueII, ElemKeyValueCI
+ use random_lcg, only: seed
#ifdef MPI
use message_passing
diff --git a/src/string.F90 b/src/string.F90
index ce130a212d..b51763a611 100644
--- a/src/string.F90
+++ b/src/string.F90
@@ -3,7 +3,6 @@ module string
use constants, only: MAX_WORDS, MAX_LINE_LEN, ERROR_INT, ERROR_REAL, &
OP_LEFT_PAREN, OP_RIGHT_PAREN, OP_COMPLEMENT, OP_INTERSECTION, OP_UNION
use error, only: fatal_error, warning
- use global, only: master
use stl_vector, only: VectorInt
implicit none
@@ -50,8 +49,8 @@ contains
if (i_end > 0) then
n = n + 1
if (i_end - i_start + 1 > len(words(n))) then
- if (master) call warning("The word '" // string(i_start:i_end) &
- &// "' is longer than the space allocated for it.")
+ call warning("The word '" // string(i_start:i_end) &
+ // "' is longer than the space allocated for it.")
end if
words(n) = string(i_start:i_end)
! reset indices
diff --git a/tests/input_set.py b/tests/input_set.py
index 87b857f4a9..c13a4f9cc7 100644
--- a/tests/input_set.py
+++ b/tests/input_set.py
@@ -1,4 +1,6 @@
import openmc
+from openmc.source import Source
+from openmc.stats import Box
class InputSet(object):
@@ -558,7 +560,8 @@ class InputSet(object):
self.settings.batches = 10
self.settings.inactive = 5
self.settings.particles = 100
- self.settings.set_source_space('box', (-160, -160, -183, 160, 160, 183))
+ self.settings.source = Source(space=Box(
+ [-160, -160, -183], [160, 160, 183]))
def build_defualt_plots(self):
plot = openmc.Plot()
diff --git a/tests/test_distribmat/inputs_true.dat b/tests/test_distribmat/inputs_true.dat
index 9d0a70c471..fddab0a60d 100644
--- a/tests/test_distribmat/inputs_true.dat
+++ b/tests/test_distribmat/inputs_true.dat
@@ -1 +1 @@
-83a9f1412b1ddfdd8b9fa8c7e8b44be8137dc6aa785d44c3eea9f0928242475aea4ba73ba4eef01afdf63bd1bff18116e40b798eeafab50c856186de4c68d5a6
\ No newline at end of file
+401b8be1b296db7f21ccae089c7ac480044d953b7264ca0ae8e34bb79e24cbb57195bcb568deda6f2f7e07366bbfac408a92306351b9169edd04499723707e1b
\ No newline at end of file
diff --git a/tests/test_distribmat/test_distribmat.py b/tests/test_distribmat/test_distribmat.py
index b1252a8e7b..a0608c108a 100644
--- a/tests/test_distribmat/test_distribmat.py
+++ b/tests/test_distribmat/test_distribmat.py
@@ -5,6 +5,8 @@ import sys
sys.path.insert(0, os.pardir)
from testing_harness import TestHarness, PyAPITestHarness
import openmc
+from openmc.stats import Box
+from openmc.source import Source
class DistribmatTestHarness(PyAPITestHarness):
@@ -85,7 +87,7 @@ class DistribmatTestHarness(PyAPITestHarness):
sets_file.batches = 5
sets_file.inactive = 0
sets_file.particles = 1000
- sets_file.set_source_space('box', [-1, -1, -1, 1, 1, 1])
+ sets_file.source = Source(space=Box([-1, -1, -1], [1, 1, 1]))
sets_file.output = {'summary': True}
sets_file.export_to_xml()
diff --git a/tests/test_filter_azimuthal/inputs_true.dat b/tests/test_filter_azimuthal/inputs_true.dat
index 42b6e820be..e4a964700f 100644
--- a/tests/test_filter_azimuthal/inputs_true.dat
+++ b/tests/test_filter_azimuthal/inputs_true.dat
@@ -1 +1 @@
-1d5f81d12f607f4a8436dfb65167e2a2be55dbf86fbc2cc465cec274671be5eaff517d781a4d40e264bb695e3c66c7ff61a650217c99de2ca8c15ca747fe6b80
\ No newline at end of file
+57d6fd9cb5180c38efd2729a5dea0708cbd5fd0bf7dcf0c9d5c9cef5d818aeab5a926d03e70dedcf1b60d5740938fb3ba80e6ccdb09c661d159c0893da3bd593
\ No newline at end of file
diff --git a/tests/test_filter_cell/inputs_true.dat b/tests/test_filter_cell/inputs_true.dat
index 2320ff6ab4..d7f0a9e7f8 100644
--- a/tests/test_filter_cell/inputs_true.dat
+++ b/tests/test_filter_cell/inputs_true.dat
@@ -1 +1 @@
-caae173f01f7073d634a68a5c4ce97177423e13596a863976e1c40303dc8c05afed457d5a1aa0ae73627ec953143e4f9c1f45bdbd3b0cca76433062467d59777
\ No newline at end of file
+f8359184c02fbab5dca5368689a84924066ab1fb09cae575588ceddd696d5461db577498df9959365d89fe933e9b338390e44e362c603c6f2aa5bcf4acc14b20
\ No newline at end of file
diff --git a/tests/test_filter_cellborn/inputs_true.dat b/tests/test_filter_cellborn/inputs_true.dat
index 5aef4cbb06..a4f1a74b8f 100644
--- a/tests/test_filter_cellborn/inputs_true.dat
+++ b/tests/test_filter_cellborn/inputs_true.dat
@@ -1 +1 @@
-2f24eb86cda981982a8db5bb110c72e9cef542c06e15b748c1c7e459f96b0d8ba0978b51dffc006e813cd2e2ae1fa0357336f8322ae263189841afde01f0327b
\ No newline at end of file
+8ae662f8881ce8cdec550069c6233c2c91e9a10f7200af6892cf6f2d77712ccfa17895dbd2eee02e6daf3d665c6ed84b29e17d89ff519e70c37b36d75a431d53
\ No newline at end of file
diff --git a/tests/test_filter_delayedgroup/inputs_true.dat b/tests/test_filter_delayedgroup/inputs_true.dat
index 21bce00fd2..6b06d41735 100644
--- a/tests/test_filter_delayedgroup/inputs_true.dat
+++ b/tests/test_filter_delayedgroup/inputs_true.dat
@@ -1 +1 @@
-e771470681d3b4af57a70d148f5eb728df57f1fd7bdb5d6f76ac556b69f10bf0cdd5645fe488f1e17f07cbb72e9fb34af2fd7ede95c8e39c5ffa6ea9b6c5810e
\ No newline at end of file
+a7c8ce7ffbc3a7b965d8a3077a4d9132130561afef19047b279b2d23198e248b09664856a092a32394894e19fef7708cebad99b3839d735c4e98ae0c9af58cb7
\ No newline at end of file
diff --git a/tests/test_filter_energy/inputs_true.dat b/tests/test_filter_energy/inputs_true.dat
index b120e9fd62..4098aaece9 100644
--- a/tests/test_filter_energy/inputs_true.dat
+++ b/tests/test_filter_energy/inputs_true.dat
@@ -1 +1 @@
-49835200052ee1a4c9583a7bb4e9430de7d01a6d7a8d4f63ae37be9bbac4fd8c7ed9135ecbc4ab4cb075fd4d77b322265783463dd07c127decceee8c9fe25bfd
\ No newline at end of file
+51d3e2c43f36712a7b26c5fa26e0e2ca6fb9af205af04f0f8cd44c6b100e36382417c2c63d711e4677ce3c1958d15072727d5fd32424a3f6eb08d1f3b1c7db5a
\ No newline at end of file
diff --git a/tests/test_filter_energyout/inputs_true.dat b/tests/test_filter_energyout/inputs_true.dat
index 7096648e6c..be1ade923f 100644
--- a/tests/test_filter_energyout/inputs_true.dat
+++ b/tests/test_filter_energyout/inputs_true.dat
@@ -1 +1 @@
-183b4a06cbd0930cfa4f28d0c385cf3ae93ab97c171580c2ba9eec0e4b716102ad83f510d62258ef6769c446e72e1d5ba9f630b171ee239ec04c9bbd1e56742e
\ No newline at end of file
+f0810606c5f947a9fe03bcfc87de3883ce46f59d8603e02ed30f853ebf301b2dc6bdcd109889801ada9e6e0b7be4932efeca97d4beea875af8c8e3ecb7511444
\ No newline at end of file
diff --git a/tests/test_filter_group_transfer/inputs_true.dat b/tests/test_filter_group_transfer/inputs_true.dat
index 813bb43c18..9e3bbdd1ce 100644
--- a/tests/test_filter_group_transfer/inputs_true.dat
+++ b/tests/test_filter_group_transfer/inputs_true.dat
@@ -1 +1 @@
-461a6a4ec3b0b6dc7199c09fa8f527e51cc7a1ea4281a708f8b7bcdbb12f7162027928dfcef68a24eaf6c06037a68e151df9aac9eac6ce56617466f2f5270b71
\ No newline at end of file
+c4d4334d44956d6dc9abe854a5e9403d7f8a87ffb04a15a3d128e8d18eb4111f46ca277b751e1b0e836d69527502f9abba115a4b2fc64c38da63a9d57968d860
\ No newline at end of file
diff --git a/tests/test_filter_material/inputs_true.dat b/tests/test_filter_material/inputs_true.dat
index aaa4a4939f..59afbce647 100644
--- a/tests/test_filter_material/inputs_true.dat
+++ b/tests/test_filter_material/inputs_true.dat
@@ -1 +1 @@
-2fbd0986abff08126680925284929cf67bdad0cd564775197b78065ce3b0e6ad8094f5ca4d14ea69347db69a6cdcc9796a095178ae9b14a927b101f32f3cd0ec
\ No newline at end of file
+7689b2c88391128377b7f9bfcda347a42f77d69d194186629fa965ecd3fc51be0bfd1ac92fb9d7551128d8b6ed5241ead4fb94b27ae29d80230863e78fbbcb68
\ No newline at end of file
diff --git a/tests/test_filter_mu/inputs_true.dat b/tests/test_filter_mu/inputs_true.dat
index b0a607ad34..19d08cb457 100644
--- a/tests/test_filter_mu/inputs_true.dat
+++ b/tests/test_filter_mu/inputs_true.dat
@@ -1 +1 @@
-cd2aeb24baafe9a904e697955990f6cffb5f25618fdf8c972775715bfe6e92bc259e36fd2b5addff8181439de58ad6f530972ec391e827f46146a2aaace34358
\ No newline at end of file
+ecc649936e2cc364b079944f47e18fb81ec7290017b4bd5837e5aa1e24e1146df77897f44c7c2a88500e3f525566b51777cd9b84ec6a636f5883e411e4c1f75c
\ No newline at end of file
diff --git a/tests/test_filter_polar/inputs_true.dat b/tests/test_filter_polar/inputs_true.dat
index db67a890f1..b3773a9d6b 100644
--- a/tests/test_filter_polar/inputs_true.dat
+++ b/tests/test_filter_polar/inputs_true.dat
@@ -1 +1 @@
-2de29e0a083af0722039ebc246469f26e260d604ab8b76314b2ac472bbd23004e031aec7afe3dbfc4c6112428846cd0cf0c1430e878832b9dab36463d026dee6
\ No newline at end of file
+301824991a022884215609f39797a61933faf7ccacf81ad6bb883af08857563e8bd74ab946fc4fd072860168d77f76d0c76d1467375158072dce431fc6a1c449
\ No newline at end of file
diff --git a/tests/test_filter_universe/inputs_true.dat b/tests/test_filter_universe/inputs_true.dat
index 7cda1ab848..a55ba45f68 100644
--- a/tests/test_filter_universe/inputs_true.dat
+++ b/tests/test_filter_universe/inputs_true.dat
@@ -1 +1 @@
-51fcaf0aa527d1fd1022e5f312d4d25cd9bacc5fc9792d9f7702ee97cac43700a31f25be767a2cff769c37b5e1cdf3f922467977a9958fa34561e2a102bf8537
\ No newline at end of file
+164804414f48a818c93e197f2901ce6ae375d88071a03e89c920dbc4462e7a2c8d2c85acf6560fcd6eb3d7c0c53d3b426ab1cc4b7721266fe8adec3e7231149e
\ No newline at end of file
diff --git a/tests/test_mgxs_library_condense/inputs_true.dat b/tests/test_mgxs_library_condense/inputs_true.dat
index 37397c5947..b94f64122d 100644
--- a/tests/test_mgxs_library_condense/inputs_true.dat
+++ b/tests/test_mgxs_library_condense/inputs_true.dat
@@ -1 +1 @@
-35f99f1973b3bf3efcec6c2dddf56d6679a15dab8582ab5336e86e4fdf90967ce91036e5c30c345decb994ab9133a906b82dc8fad0cdd3398a612d9aa05c1c77
\ No newline at end of file
+53b1740921b71e4ead909ab9e4c25f7d43990fe7d7051fde6f66c39c0a6082177385640244010e1b9dbeaf5f34adf1627e9603088af729fadd6b589c19102edc
\ No newline at end of file
diff --git a/tests/test_mgxs_library_hdf5/inputs_true.dat b/tests/test_mgxs_library_hdf5/inputs_true.dat
index 37397c5947..b94f64122d 100644
--- a/tests/test_mgxs_library_hdf5/inputs_true.dat
+++ b/tests/test_mgxs_library_hdf5/inputs_true.dat
@@ -1 +1 @@
-35f99f1973b3bf3efcec6c2dddf56d6679a15dab8582ab5336e86e4fdf90967ce91036e5c30c345decb994ab9133a906b82dc8fad0cdd3398a612d9aa05c1c77
\ No newline at end of file
+53b1740921b71e4ead909ab9e4c25f7d43990fe7d7051fde6f66c39c0a6082177385640244010e1b9dbeaf5f34adf1627e9603088af729fadd6b589c19102edc
\ No newline at end of file
diff --git a/tests/test_mgxs_library_no_nuclides/inputs_true.dat b/tests/test_mgxs_library_no_nuclides/inputs_true.dat
index 37397c5947..b94f64122d 100644
--- a/tests/test_mgxs_library_no_nuclides/inputs_true.dat
+++ b/tests/test_mgxs_library_no_nuclides/inputs_true.dat
@@ -1 +1 @@
-35f99f1973b3bf3efcec6c2dddf56d6679a15dab8582ab5336e86e4fdf90967ce91036e5c30c345decb994ab9133a906b82dc8fad0cdd3398a612d9aa05c1c77
\ No newline at end of file
+53b1740921b71e4ead909ab9e4c25f7d43990fe7d7051fde6f66c39c0a6082177385640244010e1b9dbeaf5f34adf1627e9603088af729fadd6b589c19102edc
\ No newline at end of file
diff --git a/tests/test_mgxs_library_nuclides/inputs_true.dat b/tests/test_mgxs_library_nuclides/inputs_true.dat
index 2e299773a3..f87bc242dc 100644
--- a/tests/test_mgxs_library_nuclides/inputs_true.dat
+++ b/tests/test_mgxs_library_nuclides/inputs_true.dat
@@ -1 +1 @@
-7c1deb8a54fbe1a1ce6ef27cea4a11995210ad3e5ecf32bd83d7c80041edf0793378a7325ffe7ebf9c537e9c278fd4545642fec6c1e46b9c5418118f035d5e95
\ No newline at end of file
+c6a2a1c707bc723fd38bafd18efcfb22beaac0bd5953d7524ced1d47866cc1e1ee4152e39234d32a06fe43aff446fb12f8c5b62a44075607f274778b49110762
\ No newline at end of file
diff --git a/tests/test_score_MT/inputs_true.dat b/tests/test_score_MT/inputs_true.dat
index b361c28cf2..33e732bcba 100644
--- a/tests/test_score_MT/inputs_true.dat
+++ b/tests/test_score_MT/inputs_true.dat
@@ -1 +1 @@
-7270299e4a4dde19d250825b0124fa36b60df847f046e058ccdfc74d4690beaaaaf387e050f596cb3445caf793d6a390ddb2d19650a3dccd4eb60056ae3b1477
\ No newline at end of file
+0e8ecbc5afb7fb5e521913f239849febadbc969bbf99159b42d6d7e7930dcdb34f0e778e00a6e7c48170d4dd176b5776455ba96b722ad9cb6f2438e6ac3ce406
\ No newline at end of file
diff --git a/tests/test_score_absorption/inputs_true.dat b/tests/test_score_absorption/inputs_true.dat
index c4c133600a..7932cb78ec 100644
--- a/tests/test_score_absorption/inputs_true.dat
+++ b/tests/test_score_absorption/inputs_true.dat
@@ -1 +1 @@
-482760c362f56e453ce4b466083e77f84a461e636330d7cc2cb1cf7facced678a57a7c785ff9d039b3f575396cb435f99df05d6fa207f553c28ed3ce4f8151b3
\ No newline at end of file
+df0089700d7ca25e997d9e6da4aa7132575298feb14398b2e806961fdb2e1d9bfbd23beb7bbc2a71b2ce18abe324702c2ab654af32e826bba5571a068b00a848
\ No newline at end of file
diff --git a/tests/test_score_delayed_nufission/inputs_true.dat b/tests/test_score_delayed_nufission/inputs_true.dat
index 5a0ec8a211..11a92dea2c 100644
--- a/tests/test_score_delayed_nufission/inputs_true.dat
+++ b/tests/test_score_delayed_nufission/inputs_true.dat
@@ -1 +1 @@
-f3c246a1c83b1283163b22069f78231e3f6623fa3c2eb664ce400d0fff07105b6106d0fa8c6dfd49512a7eb676c80e4ee602e19063a9fc453394fe07a94a1bdd
\ No newline at end of file
+2fb062798cab618153187fe3d8aaee4c6fb61132ab8215742e5939633ab321fb937d4d33a85856271bdf465257aca9cbba1b52716f233c22202ecfbbb9c15b1f
\ No newline at end of file
diff --git a/tests/test_score_events/inputs_true.dat b/tests/test_score_events/inputs_true.dat
index bb0fef8e5d..4862547c16 100644
--- a/tests/test_score_events/inputs_true.dat
+++ b/tests/test_score_events/inputs_true.dat
@@ -1 +1 @@
-a97ae7049ac8c30b838987a3e87cbe5ff70b004ee0434e6204931def46c4c099bfef06e74658dab1114cc1035d3f404211a9bc94ef96e9cfb5b788da39d17bbd
\ No newline at end of file
+1e43a3ef68b15aededc0466c913d2f784d237adc88827a980a3dcdcfd64e9bb73679cc3114d69caf389f9c478c439a8771602c397461b90ae0db58a81bfb739a
\ No newline at end of file
diff --git a/tests/test_score_fission/inputs_true.dat b/tests/test_score_fission/inputs_true.dat
index d90ca274ee..fb5e6f8915 100644
--- a/tests/test_score_fission/inputs_true.dat
+++ b/tests/test_score_fission/inputs_true.dat
@@ -1 +1 @@
-5a0461d03b0d9653ee35fded4be23e9b8316e3b7e21d352f822bc1f9763c03e9edab922bdc431f30d2a647c4216d45deba396bf56203027a328b7b28d970e0b8
\ No newline at end of file
+dc94fe38751001e3950450f8f6e7a865a42e699be76372ac7846da863283b6bb963c32b477ace4217be60e1f7a473e946d27238b3faf17d3b7426dbd1a34f9e6
\ No newline at end of file
diff --git a/tests/test_score_flux/inputs_true.dat b/tests/test_score_flux/inputs_true.dat
index 2e7358c49e..934ab9d120 100644
--- a/tests/test_score_flux/inputs_true.dat
+++ b/tests/test_score_flux/inputs_true.dat
@@ -1 +1 @@
-33b7b97f55a337d7001e7927517db6d36d512efec01fa5512c80bbc76b0b581f691a72a3810251aa97491b8cdf25a8ddcc9c9b3e3f54ccc6c315a84e715567d3
\ No newline at end of file
+bd5362b44190406434cdaa086b7e7397e8f6841b86ad61eda2c3f604df03746832dbcff0e8e96e355f5ba5b4333d6a336358379f8ced51f7a1721ceacb620daa
\ No newline at end of file
diff --git a/tests/test_score_flux_yn/inputs_true.dat b/tests/test_score_flux_yn/inputs_true.dat
index c7a1a1b52e..5ece3ef1ba 100644
--- a/tests/test_score_flux_yn/inputs_true.dat
+++ b/tests/test_score_flux_yn/inputs_true.dat
@@ -1 +1 @@
-b1a63345fc721f87c8fc25babb06741b585ee5dff5f29bb6debfbabb2ad57cb762d98c14e544df998a27bc725fb2704092fcdde54315ff832dff96c3641551d0
\ No newline at end of file
+7909822f2ad84443506129719c664b71ac0eac875a7c234be42c553564435794b6028078b096b21e9fb5dad650495b84f2b53decf73e277c84a3ea52799c008e
\ No newline at end of file
diff --git a/tests/test_score_inverse_velocity/inputs_true.dat b/tests/test_score_inverse_velocity/inputs_true.dat
index 0546cf828f..96cbc7378a 100644
--- a/tests/test_score_inverse_velocity/inputs_true.dat
+++ b/tests/test_score_inverse_velocity/inputs_true.dat
@@ -1 +1 @@
-ba1010f940c50314d61aae9f729b7bb476a6b35c5556fbc689ba3fde70ff50b0ba5dad0db3b38349a1562d67817047090ac450a64d895c8f3393163fe7914763
\ No newline at end of file
+4eee301ac8b984041ded725f1b031602e823edec1dd0883481fba794d6301eb5b83a0e87cf77b1298901de518c783ee5a017a91b5ac962ab0db8b37bb9918053
\ No newline at end of file
diff --git a/tests/test_score_kappafission/inputs_true.dat b/tests/test_score_kappafission/inputs_true.dat
index ecb42ddb46..b89696c82b 100644
--- a/tests/test_score_kappafission/inputs_true.dat
+++ b/tests/test_score_kappafission/inputs_true.dat
@@ -1 +1 @@
-57e4aa7550789aec0fcbc4a8917e9d28b1f1ae098a09cde95b757fd87d0dd3924c1bb9d4b23c59cd3793446fb6bbc8af4e1bb46323d70d5e5acd13db1167f545
\ No newline at end of file
+32c8c6625dbeecd8ed670871234a0aa9878a29cd86d93328151d90eda209bf70ee83901418cb29f7e8ef66d6f9bdc74a350f2340b285abc64d772baf02ed6377
\ No newline at end of file
diff --git a/tests/test_score_nufission/inputs_true.dat b/tests/test_score_nufission/inputs_true.dat
index 52f7765fa7..0e6d19262d 100644
--- a/tests/test_score_nufission/inputs_true.dat
+++ b/tests/test_score_nufission/inputs_true.dat
@@ -1 +1 @@
-a42b2e165f59d3f499865d5db1e7db9b4cb25e48290f94080e569a9efc0b437d75cbb5773ac564f6cc95b19521fb7bc97a3eb641b491828c90cd086dc0c06a4b
\ No newline at end of file
+ef1c9dc1906068cb48427ffc8776d8b95810ca1aca4534692ab7f788d8dac84c5f4545c7edbd884b55fb3e2b35aa1f28b9277d359427fe89bed012b38bf6342e
\ No newline at end of file
diff --git a/tests/test_score_nuscatter/inputs_true.dat b/tests/test_score_nuscatter/inputs_true.dat
index 80840f900d..aaf16deca5 100644
--- a/tests/test_score_nuscatter/inputs_true.dat
+++ b/tests/test_score_nuscatter/inputs_true.dat
@@ -1 +1 @@
-764d3ba6b1bc86b462d44151242bd18fa5f0200b831bb7537cf881b728622799eb95a457f88a503487bfd30095c1fa995818d50a6bc41dd182009772c010e82b
\ No newline at end of file
+2ec83c8c9175d4fccd6421ef736cced51f90bf01f7e20992a0d1b49db04221132d483032467c9dcda5f562f10a67f5fde1967a025230e4ea2bf9668816881d21
\ No newline at end of file
diff --git a/tests/test_score_nuscatter_n/inputs_true.dat b/tests/test_score_nuscatter_n/inputs_true.dat
index c63f891d26..cd16f80122 100644
--- a/tests/test_score_nuscatter_n/inputs_true.dat
+++ b/tests/test_score_nuscatter_n/inputs_true.dat
@@ -1 +1 @@
-17541e365f35ebd25134465a02d9a66e46536c4e3f5769da62137ec94ee7c8fb46ef38b9039aa6430261329a4e1b0ce677174323563e5be2f1368dc0c552e312
\ No newline at end of file
+b304e586966abb31fbe625a7a48547e51ea563061928c61bc8bbec01df94b4a61b8c874dd4b5cac86a74508e81dd3f7dd8d801fcc4fe75ded5eeb3f73cf113a2
\ No newline at end of file
diff --git a/tests/test_score_nuscatter_pn/inputs_true.dat b/tests/test_score_nuscatter_pn/inputs_true.dat
index ef53ee8f65..ae7c108b7a 100644
--- a/tests/test_score_nuscatter_pn/inputs_true.dat
+++ b/tests/test_score_nuscatter_pn/inputs_true.dat
@@ -1 +1 @@
-8ae1b048b90a049d9ed42336a0a2e8f7a250a14d889cc15e0c2831ed71617a78b92570480a15f936f2dd623c75f55693e38c69041c3cae24aba082409b51bc9f
\ No newline at end of file
+9c3d305ad2c4ac642db896100805c32ce0cf0bbf89958718a30afde7e1dd1329fb7946c35fc628355d29270760e5f1c3700890dfba1afe8d31f4deab63de86ff
\ No newline at end of file
diff --git a/tests/test_score_nuscatter_yn/inputs_true.dat b/tests/test_score_nuscatter_yn/inputs_true.dat
index 632a144031..da8fc3f2fe 100644
--- a/tests/test_score_nuscatter_yn/inputs_true.dat
+++ b/tests/test_score_nuscatter_yn/inputs_true.dat
@@ -1 +1 @@
-205e5cac8129797b815f0e79dad6c41a1876157ba69fcffecf67c3603dc36ded5f0168f9961d51fcb7dc7db6d732e7a3e8f82d04947aa0309df56bb8333d4bc9
\ No newline at end of file
+c483f62afa60f7390bbd82d7372a1f629f6783f8fb85857c63a3912e8d980118eff38f356b53312d067daa0f190634ac89bebac19cfe15325fb2b440473addae
\ No newline at end of file
diff --git a/tests/test_score_scatter/inputs_true.dat b/tests/test_score_scatter/inputs_true.dat
index 35557cd3c5..28e2bebeee 100644
--- a/tests/test_score_scatter/inputs_true.dat
+++ b/tests/test_score_scatter/inputs_true.dat
@@ -1 +1 @@
-b5baba05419ce120bd22d935af9cdd6d206ad5dc5cae5991a9d160c70bb029f2d87040fa4e19f7190de64b908ac6a41a8b28db4a4f3883ec16e529b1449e983d
\ No newline at end of file
+b3e7dc8968d814e455866532c05702196bab7dbdaca3c6cd3eb4f22243efb67755b373a7c54de7d767c6f3e0c4b5db612c345832c8f07cd1f50bc08fc841b3b8
\ No newline at end of file
diff --git a/tests/test_score_scatter_n/inputs_true.dat b/tests/test_score_scatter_n/inputs_true.dat
index e6e3a395bd..ea71722993 100644
--- a/tests/test_score_scatter_n/inputs_true.dat
+++ b/tests/test_score_scatter_n/inputs_true.dat
@@ -1 +1 @@
-a153add0502ff0fd4b0670f01679e104be1bb05941e73fb35e426c7f1e41a6144c7eb81fdba0d62ea3f39c7c6798028ff6d5df8c7a50b3e3f9e9bfe72fd48c2f
\ No newline at end of file
+fae463e84fbb166a9ec03390824e359d162fae9f8556d44681c76907c22a0d48e69281dcce6ffd7f3d6e4b19dad3d705c516328d902878288300f87c4a72a671
\ No newline at end of file
diff --git a/tests/test_score_scatter_pn/inputs_true.dat b/tests/test_score_scatter_pn/inputs_true.dat
index 3878939c50..9c74a13f93 100644
--- a/tests/test_score_scatter_pn/inputs_true.dat
+++ b/tests/test_score_scatter_pn/inputs_true.dat
@@ -1 +1 @@
-fe56d58827d1803c1a49391711ad682be4a7cbc51519248812554f66e3e46266edc179f4254291a5f455751d3cdc13a17bbd103b9810c8818f36e4d283b503be
\ No newline at end of file
+2d2e8de66740bbed327dd926f59d75120b04d30ffb9d7c96876ba21c7768c367c63e3624c3ee40553dc40d9a5379fa0052a932a6c5f45d1ad4327c4ac83cdff2
\ No newline at end of file
diff --git a/tests/test_score_scatter_yn/inputs_true.dat b/tests/test_score_scatter_yn/inputs_true.dat
index 1ae9f6047d..0bfb564ff8 100644
--- a/tests/test_score_scatter_yn/inputs_true.dat
+++ b/tests/test_score_scatter_yn/inputs_true.dat
@@ -1 +1 @@
-d80a9e8befab978bc84a231437a2b96c8f6dba81984c9e82a79360feb26bc9875b661131dbaa2deeb66b0aa50a39b2e738303bc40c5c65ee1995cf52f687ae46
\ No newline at end of file
+8dd146ebd2008801a4c83470e8d9fcc8d39fe5e687c65f980eca209dd5f7fb8d17bfadf3bf3d452eaa564ee5f35a8fc97adc3dda44160d6ad574b784f2dd0030
\ No newline at end of file
diff --git a/tests/test_score_total/inputs_true.dat b/tests/test_score_total/inputs_true.dat
index c8b979c725..45bebe24c2 100644
--- a/tests/test_score_total/inputs_true.dat
+++ b/tests/test_score_total/inputs_true.dat
@@ -1 +1 @@
-8813917cab656135c4eebfdbe5f0d95e6a9409a2b36df1dfb483bdd193a3c0978727918a58399b259b82a7d51ae3f1801148bd978603fec11f27acdbf89520e2
\ No newline at end of file
+7bf8aa36c31ca8b34f7c410901cb96e1ba7d389c33c850591519b15753c1322b75e5051c960dbc2e254cf46cc9720dd5e348aac0acbb70d10c71165e2f5ab9e4
\ No newline at end of file
diff --git a/tests/test_score_total_yn/inputs_true.dat b/tests/test_score_total_yn/inputs_true.dat
index b2818f8568..939252597c 100644
--- a/tests/test_score_total_yn/inputs_true.dat
+++ b/tests/test_score_total_yn/inputs_true.dat
@@ -1 +1 @@
-4dbbd9cec921d2420e7567533c833afbe94335073aa760d1fd937adb695191b3ab7c070ec0d32721dddb4a46054e68322cf6a058420e20e439eb1d44f09f4be4
\ No newline at end of file
+3c05a49f78866eda267c9f8eab2669a3a1aeb4eabfade9697d551b13f482d9076190c63a52a8aade59c20d917cebdd3e9bedabda6bc5bfd549db43cc61d7466f
\ No newline at end of file
diff --git a/tests/test_source/inputs_true.dat b/tests/test_source/inputs_true.dat
new file mode 100644
index 0000000000..01130ed2e5
--- /dev/null
+++ b/tests/test_source/inputs_true.dat
@@ -0,0 +1 @@
+5c2fdde85affcd44c1b02c07c300acb8e5c189c1adbf7aa079e37a68e8b8313678fc292bd7f6e0d0957f723e05b8146bd165cf3315dde5f6b2f88ebc954cd65e
\ No newline at end of file
diff --git a/tests/test_source/results_true.dat b/tests/test_source/results_true.dat
new file mode 100644
index 0000000000..18fb895f77
--- /dev/null
+++ b/tests/test_source/results_true.dat
@@ -0,0 +1,2 @@
+k-combined:
+3.014392E-01 7.185055E-03
diff --git a/tests/test_source/test_source.py b/tests/test_source/test_source.py
new file mode 100644
index 0000000000..9d303b06bc
--- /dev/null
+++ b/tests/test_source/test_source.py
@@ -0,0 +1,73 @@
+#!/usr/bin/env python
+
+from math import pi
+import os
+import sys
+
+import numpy as np
+
+sys.path.insert(0, os.pardir)
+from testing_harness import PyAPITestHarness
+import openmc
+import openmc.stats
+from openmc.source import Source
+
+
+class SourceTestHarness(PyAPITestHarness):
+ def _build_inputs(self):
+ mat1 = openmc.Material(material_id=1)
+ mat1.set_density('g/cm3', 4.5)
+ mat1.add_nuclide(openmc.Nuclide('U-235', '71c'), 1.0)
+ materials = openmc.MaterialsFile()
+ materials.add_material(mat1)
+ materials.export_to_xml()
+
+ sphere = openmc.Sphere(surface_id=1, R=10.0, boundary_type='vacuum')
+ inside_sphere = openmc.Cell(cell_id=1)
+ inside_sphere.region = -sphere
+ inside_sphere.fill = mat1
+
+ root = openmc.Universe(universe_id=0)
+ root.add_cell(inside_sphere)
+ geometry = openmc.Geometry()
+ geometry.root_universe = root
+ geometry_xml = openmc.GeometryFile()
+ geometry_xml.geometry = geometry
+ geometry_xml.export_to_xml()
+
+ # Create an array of different sources
+ x_dist = openmc.stats.Uniform(-3., 3.)
+ y_dist = openmc.stats.Discrete([-4., -1., 3.], [0.2, 0.3, 0.5])
+ z_dist = openmc.stats.Tabular([-2., 0., 2.], [0.2, 0.3, 0.2])
+ spatial1 = openmc.stats.CartesianIndependent(x_dist, y_dist, z_dist)
+ spatial2 = openmc.stats.Box([-4., -4., -4.], [4., 4., 4.])
+ spatial3 = openmc.stats.Point([1.2, -2.3, 0.781])
+
+ mu_dist = openmc.stats.Discrete([-1., 0., 1.], [0.5, 0.25, 0.25])
+ phi_dist = openmc.stats.Uniform(0., 6.28318530718)
+ angle1 = openmc.stats.PolarAzimuthal(mu_dist, phi_dist)
+ angle2 = openmc.stats.Monodirectional(reference_uvw=[0., 1., 0.])
+ angle3 = openmc.stats.Isotropic()
+
+ E = np.logspace(-6, 1)
+ p = np.sin(np.linspace(0., pi))
+ p /= sum(np.diff(E)*p[:-1])
+ energy1 = openmc.stats.Maxwell(1.2895)
+ energy2 = openmc.stats.Watt(0.988, 2.249)
+ energy3 = openmc.stats.Tabular(E, p, interpolation='histogram')
+
+ source1 = Source(spatial1, angle1, energy1, strength=0.5)
+ source2 = Source(spatial2, angle2, energy2, strength=0.3)
+ source3 = Source(spatial3, angle3, energy3, strength=0.2)
+
+ settings = openmc.SettingsFile()
+ settings.batches = 10
+ settings.inactive = 5
+ settings.particles = 1000
+ settings.source = [source1, source2, source3]
+ settings.export_to_xml()
+
+
+if __name__ == '__main__':
+ harness = SourceTestHarness('statepoint.10.h5')
+ harness.main()
diff --git a/tests/test_source_angle_mono/geometry.xml b/tests/test_source_angle_mono/geometry.xml
deleted file mode 100644
index bc56030e18..0000000000
--- a/tests/test_source_angle_mono/geometry.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/tests/test_source_angle_mono/materials.xml b/tests/test_source_angle_mono/materials.xml
deleted file mode 100644
index 315c0fa848..0000000000
--- a/tests/test_source_angle_mono/materials.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/tests/test_source_angle_mono/results_true.dat b/tests/test_source_angle_mono/results_true.dat
deleted file mode 100644
index 42e948758a..0000000000
--- a/tests/test_source_angle_mono/results_true.dat
+++ /dev/null
@@ -1,2 +0,0 @@
-k-combined:
-2.964943E-01 1.201478E-02
diff --git a/tests/test_source_angle_mono/settings.xml b/tests/test_source_angle_mono/settings.xml
deleted file mode 100644
index 5029aa816c..0000000000
--- a/tests/test_source_angle_mono/settings.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
- 10
- 5
- 1000
-
-
-
-
-
-
-
-
diff --git a/tests/test_source_angle_mono/test_source_angle_mono.py b/tests/test_source_angle_mono/test_source_angle_mono.py
deleted file mode 100644
index 2a595f3e66..0000000000
--- a/tests/test_source_angle_mono/test_source_angle_mono.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import sys
-sys.path.insert(0, os.pardir)
-from testing_harness import TestHarness
-
-
-if __name__ == '__main__':
- harness = TestHarness('statepoint.10.*')
- harness.main()
diff --git a/tests/test_source_energy_maxwell/geometry.xml b/tests/test_source_energy_maxwell/geometry.xml
deleted file mode 100644
index bc56030e18..0000000000
--- a/tests/test_source_energy_maxwell/geometry.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/tests/test_source_energy_maxwell/materials.xml b/tests/test_source_energy_maxwell/materials.xml
deleted file mode 100644
index 315c0fa848..0000000000
--- a/tests/test_source_energy_maxwell/materials.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/tests/test_source_energy_maxwell/results_true.dat b/tests/test_source_energy_maxwell/results_true.dat
deleted file mode 100644
index 37b8b36b99..0000000000
--- a/tests/test_source_energy_maxwell/results_true.dat
+++ /dev/null
@@ -1,2 +0,0 @@
-k-combined:
-2.886671E-01 7.534631E-03
diff --git a/tests/test_source_energy_maxwell/settings.xml b/tests/test_source_energy_maxwell/settings.xml
deleted file mode 100644
index d0543785b5..0000000000
--- a/tests/test_source_energy_maxwell/settings.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
- 10
- 5
- 1000
-
-
-
-
-
-
-
-
diff --git a/tests/test_source_energy_maxwell/test_source_energy_maxwell.py b/tests/test_source_energy_maxwell/test_source_energy_maxwell.py
deleted file mode 100644
index 2a595f3e66..0000000000
--- a/tests/test_source_energy_maxwell/test_source_energy_maxwell.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import sys
-sys.path.insert(0, os.pardir)
-from testing_harness import TestHarness
-
-
-if __name__ == '__main__':
- harness = TestHarness('statepoint.10.*')
- harness.main()
diff --git a/tests/test_source_energy_mono/geometry.xml b/tests/test_source_energy_mono/geometry.xml
deleted file mode 100644
index bc56030e18..0000000000
--- a/tests/test_source_energy_mono/geometry.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/tests/test_source_energy_mono/materials.xml b/tests/test_source_energy_mono/materials.xml
deleted file mode 100644
index 315c0fa848..0000000000
--- a/tests/test_source_energy_mono/materials.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/tests/test_source_energy_mono/results_true.dat b/tests/test_source_energy_mono/results_true.dat
deleted file mode 100644
index 029376bf37..0000000000
--- a/tests/test_source_energy_mono/results_true.dat
+++ /dev/null
@@ -1,2 +0,0 @@
-k-combined:
-3.002731E-01 7.561170E-03
diff --git a/tests/test_source_energy_mono/settings.xml b/tests/test_source_energy_mono/settings.xml
deleted file mode 100644
index 9093efec97..0000000000
--- a/tests/test_source_energy_mono/settings.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
- 10
- 5
- 1000
-
-
-
-
-
-
-
-
diff --git a/tests/test_source_energy_mono/test_source_energy_mono.py b/tests/test_source_energy_mono/test_source_energy_mono.py
deleted file mode 100644
index 2a595f3e66..0000000000
--- a/tests/test_source_energy_mono/test_source_energy_mono.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import sys
-sys.path.insert(0, os.pardir)
-from testing_harness import TestHarness
-
-
-if __name__ == '__main__':
- harness = TestHarness('statepoint.10.*')
- harness.main()
diff --git a/tests/test_source_point/geometry.xml b/tests/test_source_point/geometry.xml
deleted file mode 100644
index bc56030e18..0000000000
--- a/tests/test_source_point/geometry.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/tests/test_source_point/materials.xml b/tests/test_source_point/materials.xml
deleted file mode 100644
index 315c0fa848..0000000000
--- a/tests/test_source_point/materials.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/tests/test_source_point/results_true.dat b/tests/test_source_point/results_true.dat
deleted file mode 100644
index fe9a0d78d4..0000000000
--- a/tests/test_source_point/results_true.dat
+++ /dev/null
@@ -1,2 +0,0 @@
-k-combined:
-3.041148E-01 4.558319E-03
diff --git a/tests/test_source_point/settings.xml b/tests/test_source_point/settings.xml
deleted file mode 100644
index 3b3c47150e..0000000000
--- a/tests/test_source_point/settings.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
- 10
- 5
- 1000
-
-
-
-
-
-
-
diff --git a/tests/test_source_point/test_source_point.py b/tests/test_source_point/test_source_point.py
deleted file mode 100644
index 2a595f3e66..0000000000
--- a/tests/test_source_point/test_source_point.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-import os
-import sys
-sys.path.insert(0, os.pardir)
-from testing_harness import TestHarness
-
-
-if __name__ == '__main__':
- harness = TestHarness('statepoint.10.*')
- harness.main()
diff --git a/tests/test_tally_arithmetic/inputs_true.dat b/tests/test_tally_arithmetic/inputs_true.dat
index 8e8838131a..1b6046f1ae 100644
--- a/tests/test_tally_arithmetic/inputs_true.dat
+++ b/tests/test_tally_arithmetic/inputs_true.dat
@@ -1 +1 @@
-df6318b76cd37a29ef9dd09da48a70c191ed07c1a2ceb75eb502ab35086c31250872406f22c2587edfcee16f67dd95c81db012ccd728710ed2509084438aea56
\ No newline at end of file
+57384883e37964076aa82c19fa542434331cdb09735d710485b5aa0ca3445d543729e40cb9c7b6a70e7101ef186923eb1ff6315c73b01ff257052838add68fc7
\ No newline at end of file