Resolving the merge

This commit is contained in:
Adam Nelson 2016-09-03 04:41:12 -04:00
commit 785bd49ad1
12 changed files with 1620 additions and 497 deletions

View file

@ -135,8 +135,8 @@
"max_x = openmc.XPlane(x0=+0.63, boundary_type='reflective')\n",
"min_y = openmc.YPlane(y0=-0.63, boundary_type='reflective')\n",
"max_y = openmc.YPlane(y0=+0.63, boundary_type='reflective')\n",
"min_z = openmc.ZPlane(z0=-0.63, boundary_type='reflective')\n",
"max_z = openmc.ZPlane(z0=+0.63, boundary_type='reflective')"
"min_z = openmc.ZPlane(z0=-100., boundary_type='vacuum')\n",
"max_z = openmc.ZPlane(z0=+100., boundary_type='vacuum')"
]
},
{
@ -263,7 +263,7 @@
"settings_file.output = {'tallies': True}\n",
"\n",
"# Create an initial uniform spatial source distribution over fissionable zones\n",
"bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n",
"bounds = [-0.63, -0.63, -100., 0.63, 0.63, 100.]\n",
"uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True)\n",
"settings_file.source = openmc.source.Source(space=uniform_dist)\n",
"\n",
@ -338,7 +338,7 @@
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AIHw8dMt59x4sAAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDgtMzFUMTA6Mjk6\nNTAtMDU6MDBsyrzpAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA4LTMxVDEwOjI5OjUwLTA1OjAw\nHZcEVQAAAABJRU5ErkJggg==\n",
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AJAwQmKDRX/78AAALKSURBVGje7dpLcqQwDAbgHHE2\nYeEj+D4cwQucBUfo+3CEXoSp8OhuhF70T4qpKXmdr21LogK2Pj7A8QmNP+HDhw8fPnz48Kf6VH9G\n+66vy+je8k19jnf8C5dXIPv86ms56lPdjvaYbyodx3ze+XLE76cXFiD4zPji99z0/AJ4n1lfvJ6f\nnl0A6x+578efMSg1wPr172/jPO5yFXM+Ef78gdblM+WPHyguP//t1/g6pA0wfln+ho/fwgYYn19C\n/xwDvwHGc9OvC+hs37DTrwuwfWanXxdQTC9Mvyygs3wjTL8uwPJpn/tNDbSGz7T0SBEWw4vLXzbQ\n6b6RoveIoO6TvPxlA63qs7z8ZQPF9F+SH22vbX8OQKf5Rtv+EgDNJ3X58wZaxWd1+fMGiuFvir8b\nvjp8J/tGy/6jAmRvhW8fwL3vVT+o3grfPoB7r/IpALI3tz8FoJN84/NV873hB8UnM3xzANtf8nb4\ndwmg3grfFEDJO8JPE0i9Ff4pAYL3pI8mkHor/HMCeO9JH00g9SafEsh7T/ppARBvp48UwJnelT5S\nACd7O31TAlnvKx9SQCd7B58KgPO+8iMFuPWe9E8F8BveWX7bAjzX9y4//Jve+fhsH6Ctv7n8PTzj\nvY/v9gEOHz58+PBX+6v/f/wPvnd54f3j6venE/yl769Xv7+j3x/o98/V32/o9+fl389Xnx+g5x/o\n+Qt6/oOeP6HnX+j5G3z+h54/ouefV5/foufP6Pk3ev4On/+j9w/o/Qd6/4Le/6D3T/D9V67Y/ZsV\nQBq+s+8f0ftP+P41axXguP9NWgDuu/Cdfv+N3r/D9/9TAID+A7T/Ae2/gPs/0P4TtP8F7r9J3AIO\n9P+g/Udw/9Oygbf7r9D+L7j/DO1/Q/vv4P4/tP8Q7n9E+y/h/k+0/xTuf4X7b+H+X7T/+BPuf3aM\n8OHDhw8fPnz4w/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMDktMDNUMDQ6Mzg6\nNDAtMDQ6MDBo/hqzAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTA5LTAzVDA0OjM4OjQwLTA0OjAw\nGaOiDwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<IPython.core.display.Image object>"
]
@ -409,7 +409,32 @@
"tally.filters.append(energy_filter)\n",
"tally.scores = ['absorption', 'total']\n",
"tally.nuclides = [o16, h1]\n",
"tallies_file.append(tally)"
"tallies_file.append(tally)\n",
"\n",
"# Instantiate a tally mesh \n",
"mesh = openmc.Mesh(mesh_id=1)\n",
"mesh.type = 'regular'\n",
"mesh.dimension = [1, 1, 1]\n",
"mesh.lower_left = [-0.63, -0.63, -100.]\n",
"mesh.width = [1.26, 1.26, 200.]\n",
"mesh_filter = openmc.Filter(type='mesh', bins=[mesh.id])\n",
"mesh_filter.mesh = mesh\n",
"\n",
"# Instantiate thermal, fast, and total leakage tallies\n",
"leak = openmc.Tally(name='leakage')\n",
"leak.filters = [mesh_filter]\n",
"leak.scores = ['current']\n",
"tallies_file.append(leak)\n",
"\n",
"thermal_leak = openmc.Tally(name='thermal leakage')\n",
"thermal_leak.filters = [mesh_filter, openmc.Filter(type='energy', bins=[0., 0.625e-6])]\n",
"thermal_leak.scores = ['current']\n",
"tallies_file.append(thermal_leak)\n",
"\n",
"fast_leak = openmc.Tally(name='fast leakage')\n",
"fast_leak.filters = [mesh_filter, openmc.Filter(type='energy', bins=[0.625e-6, 20.])]\n",
"fast_leak.scores = ['current']\n",
"tallies_file.append(fast_leak)"
]
},
{
@ -483,12 +508,12 @@
"outputs": [],
"source": [
"# Instantiate energy filter to illustrate Tally slicing\n",
"energy_filter = openmc.Filter(type='energy', bins=np.logspace(np.log10(1e-8), np.log10(20), 10))\n",
"fine_energy_filter = openmc.Filter(type='energy', bins=np.logspace(np.log10(1e-8), np.log10(20), 10))\n",
"\n",
"# Instantiate flux Tally in moderator and fuel\n",
"tally = openmc.Tally(name='need-to-slice')\n",
"tally.filters = [openmc.Filter(type='cell', bins=[fuel_cell.id, moderator_cell.id])]\n",
"tally.filters.append(energy_filter)\n",
"tally.filters.append(fine_energy_filter)\n",
"tally.scores = ['nu-fission', 'scatter']\n",
"tally.nuclides = [h1, u238]\n",
"tallies_file.append(tally)"
@ -525,6 +550,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
"rm: cannot remove 'statepoint.*': No such file or directory\n",
"\n",
" %%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%\n",
@ -554,8 +580,8 @@
" Copyright | 2011-2016 Massachusetts Institute of Technology\n",
" License | http://openmc.readthedocs.io/en/latest/license.html\n",
" Version | 0.8.0\n",
" Git SHA1 | fbebf7bf709fe2fe1813af95bff9b29c0d59312c\n",
" Date/Time | 2016-08-31 10:29:51\n",
" Git SHA1 | 623b705a399f16c8e5063732bc6e6a357611542d\n",
" Date/Time | 2016-09-03 04:38:41\n",
" OpenMP Threads | 4\n",
"\n",
" ===========================================================================\n",
@ -566,12 +592,12 @@
" Reading geometry XML file...\n",
" Reading cross sections XML file...\n",
" Reading materials XML file...\n",
" Reading U235 from /home/romano/openmc/data/nndc_hdf5/U235.h5\n",
" Reading U238 from /home/romano/openmc/data/nndc_hdf5/U238.h5\n",
" Reading O16 from /home/romano/openmc/data/nndc_hdf5/O16.h5\n",
" Reading H1 from /home/romano/openmc/data/nndc_hdf5/H1.h5\n",
" Reading B10 from /home/romano/openmc/data/nndc_hdf5/B10.h5\n",
" Reading Zr90 from /home/romano/openmc/data/nndc_hdf5/Zr90.h5\n",
" Reading U235 from /opt/xsdata/nndc_new/U235.h5\n",
" Reading U238 from /opt/xsdata/nndc_new/U238.h5\n",
" Reading O16 from /opt/xsdata/nndc_new/O16.h5\n",
" Reading H1 from /opt/xsdata/nndc_new/H1.h5\n",
" Reading B10 from /opt/xsdata/nndc_new/B10.h5\n",
" Reading Zr90 from /opt/xsdata/nndc_new/Zr90.h5\n",
" Maximum neutron transport energy: 20.0000 MeV for U235\n",
" Reading tallies XML file...\n",
" Building neighboring cells lists for each surface...\n",
@ -583,26 +609,26 @@
"\n",
" Bat./Gen. k Average k \n",
" ========= ======== ==================== \n",
" 1/1 1.03471 \n",
" 2/1 1.03257 \n",
" 3/1 1.00600 \n",
" 4/1 1.04547 \n",
" 5/1 1.02287 \n",
" 6/1 1.05752 \n",
" 7/1 1.04283 1.05017 +/- 0.00734\n",
" 8/1 1.05189 1.05074 +/- 0.00428\n",
" 9/1 1.01645 1.04217 +/- 0.00909\n",
" 10/1 1.04978 1.04369 +/- 0.00721\n",
" 11/1 1.03459 1.04218 +/- 0.00608\n",
" 12/1 1.04019 1.04189 +/- 0.00514\n",
" 13/1 1.05985 1.04414 +/- 0.00499\n",
" 14/1 1.02111 1.04158 +/- 0.00509\n",
" 15/1 1.04774 1.04219 +/- 0.00459\n",
" 16/1 1.00733 1.03902 +/- 0.00523\n",
" 17/1 1.02224 1.03763 +/- 0.00497\n",
" 18/1 1.03263 1.03724 +/- 0.00459\n",
" 19/1 1.01611 1.03573 +/- 0.00451\n",
" 20/1 1.04692 1.03648 +/- 0.00426\n",
" 1/1 0.96168 \n",
" 2/1 0.96651 \n",
" 3/1 1.00678 \n",
" 4/1 0.98773 \n",
" 5/1 1.01883 \n",
" 6/1 1.02959 \n",
" 7/1 0.99859 1.01409 +/- 0.01550\n",
" 8/1 1.03441 1.02086 +/- 0.01123\n",
" 9/1 1.06097 1.03089 +/- 0.01279\n",
" 10/1 1.06094 1.03690 +/- 0.01159\n",
" 11/1 1.04687 1.03856 +/- 0.00961\n",
" 12/1 1.02982 1.03731 +/- 0.00821\n",
" 13/1 1.03520 1.03705 +/- 0.00712\n",
" 14/1 0.99508 1.03239 +/- 0.00782\n",
" 15/1 1.03973 1.03312 +/- 0.00703\n",
" 16/1 1.03807 1.03357 +/- 0.00638\n",
" 17/1 1.03091 1.03335 +/- 0.00583\n",
" 18/1 1.01421 1.03188 +/- 0.00556\n",
" 19/1 0.99339 1.02913 +/- 0.00583\n",
" 20/1 1.04827 1.03040 +/- 0.00558\n",
" Creating state point statepoint.20.h5...\n",
"\n",
" ===========================================================================\n",
@ -612,28 +638,28 @@
"\n",
" =======================> TIMING STATISTICS <=======================\n",
"\n",
" Total time for initialization = 4.3100E-01 seconds\n",
" Reading cross sections = 3.0500E-01 seconds\n",
" Total time in simulation = 8.9870E+00 seconds\n",
" Time in transport only = 8.9500E+00 seconds\n",
" Time in inactive batches = 1.1950E+00 seconds\n",
" Time in active batches = 7.7920E+00 seconds\n",
" Time synchronizing fission bank = 5.0000E-03 seconds\n",
" Sampling source sites = 5.0000E-03 seconds\n",
" Total time for initialization = 3.8900E-01 seconds\n",
" Reading cross sections = 2.7000E-01 seconds\n",
" Total time in simulation = 4.6960E+00 seconds\n",
" Time in transport only = 4.6760E+00 seconds\n",
" Time in inactive batches = 6.6400E-01 seconds\n",
" Time in active batches = 4.0320E+00 seconds\n",
" Time synchronizing fission bank = 1.0000E-03 seconds\n",
" Sampling source sites = 1.0000E-03 seconds\n",
" SEND/RECV source sites = 0.0000E+00 seconds\n",
" Time accumulating tallies = 0.0000E+00 seconds\n",
" Total time for finalization = 1.0000E-03 seconds\n",
" Total time elapsed = 9.4370E+00 seconds\n",
" Calculation Rate (inactive) = 10460.3 neutrons/second\n",
" Calculation Rate (active) = 4812.63 neutrons/second\n",
" Total time elapsed = 5.0960E+00 seconds\n",
" Calculation Rate (inactive) = 18825.3 neutrons/second\n",
" Calculation Rate (active) = 9300.60 neutrons/second\n",
"\n",
" ============================> RESULTS <============================\n",
"\n",
" k-effective (Collision) = 1.03296 +/- 0.00669\n",
" k-effective (Track-length) = 1.03648 +/- 0.00426\n",
" k-effective (Absorption) = 1.03431 +/- 0.00702\n",
" Combined k-effective = 1.03621 +/- 0.00456\n",
" Leakage Fraction = 0.00000 +/- 0.00000\n",
" k-effective (Collision) = 1.02791 +/- 0.00553\n",
" k-effective (Track-length) = 1.03040 +/- 0.00558\n",
" k-effective (Absorption) = 1.02011 +/- 0.00491\n",
" Combined k-effective = 1.02461 +/- 0.00398\n",
" Leakage Fraction = 0.01677 +/- 0.00109\n",
"\n"
]
},
@ -687,8 +713,8 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"We have a tally of the total fission rate and the total absorption rate, so we can calculate k-infinity as:\n",
"$$k_\\infty = \\frac{\\langle \\nu \\Sigma_f \\phi \\rangle}{\\langle \\Sigma_a \\phi \\rangle}$$\n",
"We have a tally of the total fission rate and the total absorption rate, so we can calculate k-eff as:\n",
"$$k_{eff} = \\frac{\\langle \\nu \\Sigma_f \\phi \\rangle}{\\langle \\Sigma_a \\phi \\rangle + \\langle L \\rangle}$$\n",
"In this notation, $\\langle \\cdot \\rangle^a_b$ represents an OpenMC that is integrated over region $a$ and energy range $b$. If $a$ or $b$ is not reported, it means the value represents an integral over all space or all energy, respectively."
]
},
@ -717,17 +743,17 @@
" <tr>\n",
" <th>0</th>\n",
" <td>total</td>\n",
" <td>(nu-fission / absorption)</td>\n",
" <td>1.038387</td>\n",
" <td>0.006141</td>\n",
" <td>(nu-fission / (absorption + current))</td>\n",
" <td>1.02431</td>\n",
" <td>0.00704</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" nuclide score mean std. dev.\n",
"0 total (nu-fission / absorption) 1.04e+00 6.14e-03"
" nuclide score mean std. dev.\n",
"0 total (nu-fission / (absorption + current)) 1.02e+00 7.04e-03"
]
},
"execution_count": 24,
@ -736,10 +762,17 @@
}
],
"source": [
"# Compute k-infinity using tally arithmetic\n",
"# Get the fission and absorption rate tallies\n",
"fiss_rate = sp.get_tally(name='fiss. rate')\n",
"abs_rate = sp.get_tally(name='abs. rate')\n",
"keff = fiss_rate / abs_rate\n",
"\n",
"# Get the leakage tally\n",
"leak = sp.get_tally(name='leakage')\n",
"leak = leak.summation(filter_type='surface', remove_filter=True)\n",
"leak = leak.summation(filter_type='mesh', remove_filter=True)\n",
"\n",
"# Compute k-infinity using tally arithmetic\n",
"keff = fiss_rate / (abs_rate + leak)\n",
"keff.get_pandas_dataframe()"
]
},
@ -747,9 +780,9 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Notice that even though the neutron production rate and absorption rate are separate tallies, we still get a first-order estimate of the uncertainty on the quotient of them automatically!\n",
"Notice that even though the neutron production rate, absorption rate, and current are separate tallies, we still get a first-order estimate of the uncertainty on the quotient of them automatically!\n",
"\n",
"Often in textbooks you'll see k-infinity represented using the four-factor formula $$k_\\infty = p \\epsilon f \\eta.$$ Let's analyze each of these factors, starting with the resonance escape probability which is defined as $$p=\\frac{\\langle\\Sigma_a\\phi\\rangle_T}{\\langle\\Sigma_a\\phi\\rangle}$$ where the subscript $T$ means thermal energies."
"Often in textbooks you'll see k-eff represented using the six-factor formula $$k_{eff} = p \\epsilon f \\eta P_{FNL} P_{TNL}.$$ Let's analyze each of these factors, starting with the resonance escape probability which is defined as $$p=\\frac{\\langle\\Sigma_a\\phi\\rangle_T + \\langle L \\rangle_T}{\\langle\\Sigma_a\\phi\\rangle + \\langle L \\rangle_T}$$ where the subscript $T$ means thermal energies."
]
},
{
@ -781,17 +814,20 @@
" <td>0.0</td>\n",
" <td>6.250000e-07</td>\n",
" <td>total</td>\n",
" <td>absorption</td>\n",
" <td>0.693337</td>\n",
" <td>0.004109</td>\n",
" <td>(absorption + current)</td>\n",
" <td>0.695303</td>\n",
" <td>0.005091</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" energy low [MeV] energy high [MeV] nuclide score mean std. dev.\n",
"0 0.00e+00 6.25e-07 total absorption 6.93e-01 4.11e-03"
" energy low [MeV] energy high [MeV] nuclide score \\\n",
"0 0.00e+00 6.25e-07 total (absorption + current) \n",
"\n",
" mean std. dev. \n",
"0 6.95e-01 5.09e-03 "
]
},
"execution_count": 25,
@ -802,7 +838,10 @@
"source": [
"# Compute resonance escape probability using tally arithmetic\n",
"therm_abs_rate = sp.get_tally(name='therm. abs. rate')\n",
"res_esc = therm_abs_rate / abs_rate\n",
"thermal_leak = sp.get_tally(name='thermal leakage')\n",
"thermal_leak = thermal_leak.summation(filter_type='surface', remove_filter=True)\n",
"thermal_leak = thermal_leak.summation(filter_type='mesh', remove_filter=True)\n",
"res_esc = (therm_abs_rate + thermal_leak) / (abs_rate + thermal_leak)\n",
"res_esc.get_pandas_dataframe()"
]
},
@ -844,8 +883,8 @@
" <td>6.250000e-07</td>\n",
" <td>total</td>\n",
" <td>nu-fission</td>\n",
" <td>1.203042</td>\n",
" <td>0.0076</td>\n",
" <td>1.202639</td>\n",
" <td>0.010348</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
@ -853,7 +892,7 @@
],
"text/plain": [
" energy low [MeV] energy high [MeV] nuclide score mean std. dev.\n",
"0 0.00e+00 6.25e-07 total nu-fission 1.20e+00 7.60e-03"
"0 0.00e+00 6.25e-07 total nu-fission 1.20e+00 1.03e-02"
]
},
"execution_count": 26,
@ -909,8 +948,8 @@
" <td>10000</td>\n",
" <td>total</td>\n",
" <td>absorption</td>\n",
" <td>0.748413</td>\n",
" <td>0.004723</td>\n",
" <td>0.749349</td>\n",
" <td>0.006731</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
@ -918,10 +957,10 @@
],
"text/plain": [
" energy low [MeV] energy high [MeV] cell nuclide score mean \\\n",
"0 0.00e+00 6.25e-07 10000 total absorption 7.48e-01 \n",
"0 0.00e+00 6.25e-07 10000 total absorption 7.49e-01 \n",
"\n",
" std. dev. \n",
"0 4.72e-03 "
"0 6.73e-03 "
]
},
"execution_count": 27,
@ -940,7 +979,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"The final factor is the number of fission neutrons produced per absorption in fuel, calculated as $$\\eta = \\frac{\\langle \\nu\\Sigma_f\\phi \\rangle_T}{\\langle \\Sigma_a \\phi \\rangle^F_T}$$"
"The next factor is the number of fission neutrons produced per absorption in fuel, calculated as $$\\eta = \\frac{\\langle \\nu\\Sigma_f\\phi \\rangle_T}{\\langle \\Sigma_a \\phi \\rangle^F_T}$$"
]
},
{
@ -975,8 +1014,8 @@
" <td>10000</td>\n",
" <td>total</td>\n",
" <td>(nu-fission / absorption)</td>\n",
" <td>1.663385</td>\n",
" <td>0.011253</td>\n",
" <td>1.663736</td>\n",
" <td>0.015707</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
@ -987,7 +1026,7 @@
"0 0.00e+00 6.25e-07 10000 total \n",
"\n",
" score mean std. dev. \n",
"0 (nu-fission / absorption) 1.66e+00 1.13e-02 "
"0 (nu-fission / absorption) 1.66e+00 1.57e-02 "
]
},
"execution_count": 28,
@ -1005,7 +1044,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we can calculate $k_\\infty$ using the product of the factors form the four-factor formula."
"There are two leakage factors to account for fast and thermal leakage. The fast non-leakage probability is computed as $$P_{FNL} = \\frac{\\langle \\Sigma_a\\phi \\rangle + \\langle L \\rangle_T}{\\langle \\Sigma_a \\phi \\rangle + \\langle L \\rangle}$$"
]
},
{
@ -1014,6 +1053,130 @@
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>energy low [MeV]</th>\n",
" <th>energy high [MeV]</th>\n",
" <th>nuclide</th>\n",
" <th>score</th>\n",
" <th>mean</th>\n",
" <th>std. dev.</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.0</td>\n",
" <td>6.250000e-07</td>\n",
" <td>total</td>\n",
" <td>(absorption + current)</td>\n",
" <td>0.985102</td>\n",
" <td>0.005855</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" energy low [MeV] energy high [MeV] nuclide score \\\n",
"0 0.00e+00 6.25e-07 total (absorption + current) \n",
"\n",
" mean std. dev. \n",
"0 9.85e-01 5.86e-03 "
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p_fnl = (abs_rate + thermal_leak) / (abs_rate + leak)\n",
"p_fnl.get_pandas_dataframe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The final factor is the thermal non-leakage probability and is computed as $$P_{TNL} = \\frac{\\langle \\Sigma_a\\phi \\rangle_T}{\\langle \\Sigma_a \\phi \\rangle_T + \\langle L \\rangle_T}$$"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>energy low [MeV]</th>\n",
" <th>energy high [MeV]</th>\n",
" <th>nuclide</th>\n",
" <th>score</th>\n",
" <th>mean</th>\n",
" <th>std. dev.</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.0</td>\n",
" <td>6.250000e-07</td>\n",
" <td>total</td>\n",
" <td>(absorption / (absorption + current))</td>\n",
" <td>0.997407</td>\n",
" <td>0.008492</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" energy low [MeV] energy high [MeV] nuclide \\\n",
"0 0.00e+00 6.25e-07 total \n",
"\n",
" score mean std. dev. \n",
"0 (absorption / (absorption + current)) 9.97e-01 8.49e-03 "
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p_tnl = therm_abs_rate / (therm_abs_rate + thermal_leak)\n",
"p_tnl.get_pandas_dataframe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we can calculate $k_{eff}$ using the product of the factors form the four-factor formula."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
@ -1039,9 +1202,9 @@
" <td>6.250000e-07</td>\n",
" <td>10000</td>\n",
" <td>total</td>\n",
" <td>(((absorption * nu-fission) * absorption) * (n...</td>\n",
" <td>1.038387</td>\n",
" <td>0.01316</td>\n",
" <td>((((((absorption + current) * nu-fission) * ab...</td>\n",
" <td>1.02431</td>\n",
" <td>0.02062</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
@ -1052,16 +1215,16 @@
"0 0.00e+00 6.25e-07 10000 total \n",
"\n",
" score mean std. dev. \n",
"0 (((absorption * nu-fission) * absorption) * (n... 1.04e+00 1.32e-02 "
"0 ((((((absorption + current) * nu-fission) * ab... 1.02e+00 2.06e-02 "
]
},
"execution_count": 29,
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"keff = res_esc * fast_fiss * therm_util * eta\n",
"keff = res_esc * fast_fiss * therm_util * eta * p_fnl * p_tnl\n",
"keff.get_pandas_dataframe()"
]
},
@ -1076,7 +1239,7 @@
},
{
"cell_type": "code",
"execution_count": 30,
"execution_count": 32,
"metadata": {
"collapsed": false,
"scrolled": true
@ -1092,7 +1255,7 @@
},
{
"cell_type": "code",
"execution_count": 31,
"execution_count": 33,
"metadata": {
"collapsed": false
},
@ -1122,8 +1285,8 @@
" <td>6.250000e-07</td>\n",
" <td>(U238 / total)</td>\n",
" <td>(nu-fission / flux)</td>\n",
" <td>6.636968e-07</td>\n",
" <td>4.132875e-09</td>\n",
" <td>6.662479e-07</td>\n",
" <td>6.039323e-09</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
@ -1132,8 +1295,8 @@
" <td>6.250000e-07</td>\n",
" <td>(U238 / total)</td>\n",
" <td>(scatter / flux)</td>\n",
" <td>2.099856e-01</td>\n",
" <td>1.232455e-03</td>\n",
" <td>2.099897e-01</td>\n",
" <td>1.843251e-03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
@ -1142,8 +1305,8 @@
" <td>6.250000e-07</td>\n",
" <td>(U235 / total)</td>\n",
" <td>(nu-fission / flux)</td>\n",
" <td>3.552458e-01</td>\n",
" <td>2.252681e-03</td>\n",
" <td>3.568130e-01</td>\n",
" <td>3.255144e-03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
@ -1152,8 +1315,8 @@
" <td>6.250000e-07</td>\n",
" <td>(U235 / total)</td>\n",
" <td>(scatter / flux)</td>\n",
" <td>5.554345e-03</td>\n",
" <td>3.265385e-05</td>\n",
" <td>5.555326e-03</td>\n",
" <td>4.893022e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
@ -1162,8 +1325,8 @@
" <td>2.000000e+01</td>\n",
" <td>(U238 / total)</td>\n",
" <td>(nu-fission / flux)</td>\n",
" <td>7.126668e-03</td>\n",
" <td>5.296883e-05</td>\n",
" <td>7.215044e-03</td>\n",
" <td>4.968448e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
@ -1172,8 +1335,8 @@
" <td>2.000000e+01</td>\n",
" <td>(U238 / total)</td>\n",
" <td>(scatter / flux)</td>\n",
" <td>2.277460e-01</td>\n",
" <td>1.003558e-03</td>\n",
" <td>2.273966e-01</td>\n",
" <td>8.969811e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
@ -1182,8 +1345,8 @@
" <td>2.000000e+01</td>\n",
" <td>(U235 / total)</td>\n",
" <td>(nu-fission / flux)</td>\n",
" <td>8.010911e-03</td>\n",
" <td>6.802256e-05</td>\n",
" <td>7.969615e-03</td>\n",
" <td>5.374119e-05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
@ -1192,8 +1355,8 @@
" <td>2.000000e+01</td>\n",
" <td>(U235 / total)</td>\n",
" <td>(scatter / flux)</td>\n",
" <td>3.367794e-03</td>\n",
" <td>1.443644e-05</td>\n",
" <td>3.362798e-03</td>\n",
" <td>1.286767e-05</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
@ -1211,17 +1374,17 @@
"7 10000 6.25e-07 2.00e+01 (U235 / total) \n",
"\n",
" score mean std. dev. \n",
"0 (nu-fission / flux) 6.64e-07 4.13e-09 \n",
"1 (scatter / flux) 2.10e-01 1.23e-03 \n",
"2 (nu-fission / flux) 3.55e-01 2.25e-03 \n",
"3 (scatter / flux) 5.55e-03 3.27e-05 \n",
"4 (nu-fission / flux) 7.13e-03 5.30e-05 \n",
"5 (scatter / flux) 2.28e-01 1.00e-03 \n",
"6 (nu-fission / flux) 8.01e-03 6.80e-05 \n",
"7 (scatter / flux) 3.37e-03 1.44e-05 "
"0 (nu-fission / flux) 6.66e-07 6.04e-09 \n",
"1 (scatter / flux) 2.10e-01 1.84e-03 \n",
"2 (nu-fission / flux) 3.57e-01 3.26e-03 \n",
"3 (scatter / flux) 5.56e-03 4.89e-05 \n",
"4 (nu-fission / flux) 7.22e-03 4.97e-05 \n",
"5 (scatter / flux) 2.27e-01 8.97e-04 \n",
"6 (nu-fission / flux) 7.97e-03 5.37e-05 \n",
"7 (scatter / flux) 3.36e-03 1.29e-05 "
]
},
"execution_count": 31,
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
@ -1240,7 +1403,7 @@
},
{
"cell_type": "code",
"execution_count": 32,
"execution_count": 34,
"metadata": {
"collapsed": false
},
@ -1249,11 +1412,11 @@
"name": "stdout",
"output_type": "stream",
"text": [
"[[[ 6.63696783e-07]\n",
" [ 3.55245846e-01]]\n",
"[[[ 6.66247898e-07]\n",
" [ 3.56812954e-01]]\n",
"\n",
" [[ 7.12666800e-03]\n",
" [ 8.01091088e-03]]]\n"
" [[ 7.21504433e-03]\n",
" [ 7.96961502e-03]]]\n"
]
}
],
@ -1272,7 +1435,7 @@
},
{
"cell_type": "code",
"execution_count": 33,
"execution_count": 35,
"metadata": {
"collapsed": false
},
@ -1281,9 +1444,9 @@
"name": "stdout",
"output_type": "stream",
"text": [
"[[[ 0.00555435]]\n",
"[[[ 0.00555533]]\n",
"\n",
" [[ 0.00336779]]]\n"
" [[ 0.0033628 ]]]\n"
]
}
],
@ -1296,7 +1459,7 @@
},
{
"cell_type": "code",
"execution_count": 34,
"execution_count": 36,
"metadata": {
"collapsed": false
},
@ -1305,8 +1468,8 @@
"name": "stdout",
"output_type": "stream",
"text": [
"[[[ 0.22774598]\n",
" [ 0.00336779]]]\n"
"[[[ 0.22739657]\n",
" [ 0.0033628 ]]]\n"
]
}
],
@ -1327,7 +1490,7 @@
},
{
"cell_type": "code",
"execution_count": 35,
"execution_count": 37,
"metadata": {
"collapsed": false
},
@ -1358,7 +1521,7 @@
" <td>U238</td>\n",
" <td>nu-fission</td>\n",
" <td>0.000002</td>\n",
" <td>7.473789e-09</td>\n",
" <td>1.057199e-08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
@ -1367,8 +1530,8 @@
" <td>6.250000e-07</td>\n",
" <td>U235</td>\n",
" <td>nu-fission</td>\n",
" <td>0.861547</td>\n",
" <td>4.131310e-03</td>\n",
" <td>0.856784</td>\n",
" <td>5.730044e-03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
@ -1377,8 +1540,8 @@
" <td>2.000000e+01</td>\n",
" <td>U238</td>\n",
" <td>nu-fission</td>\n",
" <td>0.082356</td>\n",
" <td>5.560461e-04</td>\n",
" <td>0.082495</td>\n",
" <td>5.176027e-04</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
@ -1387,8 +1550,8 @@
" <td>2.000000e+01</td>\n",
" <td>U235</td>\n",
" <td>nu-fission</td>\n",
" <td>0.092574</td>\n",
" <td>7.315442e-04</td>\n",
" <td>0.091123</td>\n",
" <td>5.574052e-04</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
@ -1396,19 +1559,19 @@
],
"text/plain": [
" cell energy low [MeV] energy high [MeV] nuclide score mean \\\n",
"0 10000 0.00e+00 6.25e-07 U238 nu-fission 1.61e-06 \n",
"1 10000 0.00e+00 6.25e-07 U235 nu-fission 8.62e-01 \n",
"2 10000 6.25e-07 2.00e+01 U238 nu-fission 8.24e-02 \n",
"3 10000 6.25e-07 2.00e+01 U235 nu-fission 9.26e-02 \n",
"0 10000 0.00e+00 6.25e-07 U238 nu-fission 1.60e-06 \n",
"1 10000 0.00e+00 6.25e-07 U235 nu-fission 8.57e-01 \n",
"2 10000 6.25e-07 2.00e+01 U238 nu-fission 8.25e-02 \n",
"3 10000 6.25e-07 2.00e+01 U235 nu-fission 9.11e-02 \n",
"\n",
" std. dev. \n",
"0 7.47e-09 \n",
"1 4.13e-03 \n",
"2 5.56e-04 \n",
"3 7.32e-04 "
"0 1.06e-08 \n",
"1 5.73e-03 \n",
"2 5.18e-04 \n",
"3 5.57e-04 "
]
},
"execution_count": 35,
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
@ -1421,7 +1584,7 @@
},
{
"cell_type": "code",
"execution_count": 36,
"execution_count": 38,
"metadata": {
"collapsed": false
},
@ -1451,8 +1614,8 @@
" <td>1.080060e-07</td>\n",
" <td>H1</td>\n",
" <td>scatter</td>\n",
" <td>4.599225</td>\n",
" <td>0.015973</td>\n",
" <td>4.547947</td>\n",
" <td>0.028000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
@ -1461,8 +1624,8 @@
" <td>1.166529e-06</td>\n",
" <td>H1</td>\n",
" <td>scatter</td>\n",
" <td>2.037260</td>\n",
" <td>0.011236</td>\n",
" <td>2.003068</td>\n",
" <td>0.008587</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
@ -1471,8 +1634,8 @@
" <td>1.259921e-05</td>\n",
" <td>H1</td>\n",
" <td>scatter</td>\n",
" <td>1.662552</td>\n",
" <td>0.010280</td>\n",
" <td>1.647225</td>\n",
" <td>0.011136</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
@ -1481,8 +1644,8 @@
" <td>1.360790e-04</td>\n",
" <td>H1</td>\n",
" <td>scatter</td>\n",
" <td>1.872201</td>\n",
" <td>0.012136</td>\n",
" <td>1.831367</td>\n",
" <td>0.010196</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
@ -1491,8 +1654,8 @@
" <td>1.469734e-03</td>\n",
" <td>H1</td>\n",
" <td>scatter</td>\n",
" <td>2.080459</td>\n",
" <td>0.013155</td>\n",
" <td>2.039613</td>\n",
" <td>0.008059</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
@ -1501,8 +1664,8 @@
" <td>1.587401e-02</td>\n",
" <td>H1</td>\n",
" <td>scatter</td>\n",
" <td>2.154996</td>\n",
" <td>0.011975</td>\n",
" <td>2.137523</td>\n",
" <td>0.012885</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
@ -1511,8 +1674,8 @@
" <td>1.714488e-01</td>\n",
" <td>H1</td>\n",
" <td>scatter</td>\n",
" <td>2.218740</td>\n",
" <td>0.008528</td>\n",
" <td>2.170725</td>\n",
" <td>0.012669</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
@ -1521,8 +1684,8 @@
" <td>1.851749e+00</td>\n",
" <td>H1</td>\n",
" <td>scatter</td>\n",
" <td>2.010517</td>\n",
" <td>0.009187</td>\n",
" <td>2.002724</td>\n",
" <td>0.010768</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
@ -1531,8 +1694,8 @@
" <td>2.000000e+01</td>\n",
" <td>H1</td>\n",
" <td>scatter</td>\n",
" <td>0.372022</td>\n",
" <td>0.003196</td>\n",
" <td>0.371624</td>\n",
" <td>0.002959</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
@ -1540,29 +1703,29 @@
],
"text/plain": [
" cell energy low [MeV] energy high [MeV] nuclide score mean \\\n",
"0 10002 1.00e-08 1.08e-07 H1 scatter 4.60e+00 \n",
"1 10002 1.08e-07 1.17e-06 H1 scatter 2.04e+00 \n",
"2 10002 1.17e-06 1.26e-05 H1 scatter 1.66e+00 \n",
"3 10002 1.26e-05 1.36e-04 H1 scatter 1.87e+00 \n",
"4 10002 1.36e-04 1.47e-03 H1 scatter 2.08e+00 \n",
"5 10002 1.47e-03 1.59e-02 H1 scatter 2.15e+00 \n",
"6 10002 1.59e-02 1.71e-01 H1 scatter 2.22e+00 \n",
"7 10002 1.71e-01 1.85e+00 H1 scatter 2.01e+00 \n",
"0 10002 1.00e-08 1.08e-07 H1 scatter 4.55e+00 \n",
"1 10002 1.08e-07 1.17e-06 H1 scatter 2.00e+00 \n",
"2 10002 1.17e-06 1.26e-05 H1 scatter 1.65e+00 \n",
"3 10002 1.26e-05 1.36e-04 H1 scatter 1.83e+00 \n",
"4 10002 1.36e-04 1.47e-03 H1 scatter 2.04e+00 \n",
"5 10002 1.47e-03 1.59e-02 H1 scatter 2.14e+00 \n",
"6 10002 1.59e-02 1.71e-01 H1 scatter 2.17e+00 \n",
"7 10002 1.71e-01 1.85e+00 H1 scatter 2.00e+00 \n",
"8 10002 1.85e+00 2.00e+01 H1 scatter 3.72e-01 \n",
"\n",
" std. dev. \n",
"0 1.60e-02 \n",
"1 1.12e-02 \n",
"2 1.03e-02 \n",
"3 1.21e-02 \n",
"4 1.32e-02 \n",
"5 1.20e-02 \n",
"6 8.53e-03 \n",
"7 9.19e-03 \n",
"8 3.20e-03 "
"0 2.80e-02 \n",
"1 8.59e-03 \n",
"2 1.11e-02 \n",
"3 1.02e-02 \n",
"4 8.06e-03 \n",
"5 1.29e-02 \n",
"6 1.27e-02 \n",
"7 1.08e-02 \n",
"8 2.96e-03 "
]
},
"execution_count": 36,
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}

View file

@ -17,6 +17,13 @@ _FILTER_TYPES = ['universe', 'material', 'cell', 'cellborn', 'surface',
'mesh', 'energy', 'energyout', 'mu', 'polar', 'azimuthal',
'distribcell', 'delayedgroup']
_CURRENT_NAMES = {1: 'x-min out', 2: 'x-max out',
3: 'y-min out', 4: 'y-max out',
5: 'z-min out', 6: 'z-max out',
7: 'x-min in', 8: 'x-max in',
9: 'y-min in', 10: 'y-max in',
11: 'z-min in', 12: 'z-max in'}
class Filter(object):
"""A filter used to constrain a tally to a specific criterion, e.g. only
tally events when the particle is in a certain cell and energy range.
@ -781,12 +788,7 @@ class Filter(object):
filter_bins = np.repeat(self.bins, self.stride)
tile_factor = data_size / len(filter_bins)
filter_bins = np.tile(filter_bins, tile_factor)
filter_bins = [x if x != 1 else 'x-min' for x in filter_bins]
filter_bins = [x if x != 2 else 'x-max' for x in filter_bins]
filter_bins = [x if x != 3 else 'y-min' for x in filter_bins]
filter_bins = [x if x != 4 else 'y-max' for x in filter_bins]
filter_bins = [x if x != 5 else 'z-min' for x in filter_bins]
filter_bins = [x if x != 6 else 'z-max' for x in filter_bins]
filter_bins = [_CURRENT_NAMES[x] for x in filter_bins]
df = pd.concat([df, pd.DataFrame({self.type : filter_bins})])
# universe, material, surface, cell, and cellborn filters

View file

@ -343,7 +343,7 @@ class MDGXS(MGXS):
# Construct a collection of the nuclides to retrieve from the xs tally
if self.by_nuclide:
if nuclides == 'all' or nuclides == 'sum' or nuclides == ['sum']:
query_nuclides = self.get_all_nuclides()
query_nuclides = self.get_nuclides()
else:
query_nuclides = nuclides
else:
@ -553,7 +553,7 @@ class MDGXS(MGXS):
# Construct a collection of the nuclides to report
if self.by_nuclide:
if nuclides == 'all':
nuclides = self.get_all_nuclides()
nuclides = self.get_nuclides()
elif nuclides == 'sum':
nuclides = ['sum']
else:
@ -751,25 +751,27 @@ class MDGXS(MGXS):
if self.by_nuclide and nuclides == 'sum':
# Use tally summation to sum across all nuclides
query_nuclides = self.get_all_nuclides()
xs_tally = self.xs_tally.summation(nuclides=query_nuclides)
query_nuclides = [nuclides]
xs_tally = self.xs_tally.summation(nuclides=self.get_nuclides())
df = xs_tally.get_pandas_dataframe(
distribcell_paths=distribcell_paths)
# Remove nuclide column since it is homogeneous and redundant
if self.domain_type == 'mesh':
df.drop('nuclide', axis=1, level=0, inplace=True)
df.drop('sum(nuclide)', axis=1, level=0, inplace=True)
else:
df.drop('nuclide', axis=1, inplace=True)
df.drop('sum(nuclide)', axis=1, inplace=True)
# If the user requested a specific set of nuclides
elif self.by_nuclide and nuclides != 'all':
query_nuclides = nuclides
xs_tally = self.xs_tally.get_slice(nuclides=nuclides)
df = xs_tally.get_pandas_dataframe(
distribcell_paths=distribcell_paths)
# If the user requested all nuclides, keep nuclide column in dataframe
else:
query_nuclides = self.nuclides
df = self.xs_tally.get_pandas_dataframe(
distribcell_paths=distribcell_paths)
@ -781,7 +783,7 @@ class MDGXS(MGXS):
# Override energy groups bounds with indices
all_groups = np.arange(self.num_groups, 0, -1, dtype=np.int)
all_groups = np.repeat(all_groups, self.num_nuclides)
all_groups = np.repeat(all_groups, len(query_nuclides))
if 'energy low [MeV]' in df and 'energyout low [MeV]' in df:
df.rename(columns={'energy low [MeV]': 'group in'},
inplace=True)
@ -1239,7 +1241,7 @@ class ChiDelayed(MDGXS):
delayed_nu_fission_out = self.tallies['delayed-nu-fission-out']
# Sum out all nuclides
nuclides = self.get_all_nuclides()
nuclides = self.get_nuclides()
delayed_nu_fission_in = delayed_nu_fission_in.summation\
(nuclides=nuclides)
delayed_nu_fission_out = delayed_nu_fission_out.summation\
@ -1261,7 +1263,7 @@ class ChiDelayed(MDGXS):
# Get chi delayed for all nuclides in the domain
elif nuclides == 'all':
nuclides = self.get_all_nuclides()
nuclides = self.get_nuclides()
xs = self.xs_tally.get_values(filters=filters,
filter_bins=filter_bins,
nuclides=nuclides, value=value)

View file

@ -52,7 +52,8 @@ contains
use constants, only: FILTER_MESH, FILTER_ENERGYIN, FILTER_ENERGYOUT, &
FILTER_SURFACE, OUT_LEFT, OUT_RIGHT, OUT_BACK, &
OUT_FRONT, OUT_BOTTOM, OUT_TOP, CMFD_NOACCEL, &
OUT_FRONT, OUT_BOTTOM, OUT_TOP, IN_LEFT, IN_RIGHT, &
IN_BACK, IN_FRONT, IN_BOTTOM, IN_TOP, CMFD_NOACCEL, &
ZERO, ONE, TINY_BIT
use error, only: fatal_error
use global, only: cmfd, n_cmfd_tallies, cmfd_tallies, meshes,&
@ -234,106 +235,74 @@ contains
matching_bins(i_filter_ein) = ng - h + 1
end if
! Left surface
! Get the bin for this mesh cell
matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, &
(/ i, j, k /))
! Left surface
matching_bins(i_filter_surf) = OUT_LEFT
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t%stride) + 1 ! outgoing
* t % stride) + 1
cmfd % current(1,h,i,j,k) = t % results(1,score_index) % sum
if (i > 1) then
matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, &
(/ i-1, j, k /))
matching_bins(i_filter_surf) = OUT_RIGHT
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1 ! incoming
cmfd % current(2,h,i,j,k) = t % results(1,score_index) % sum
end if
matching_bins(i_filter_surf) = IN_LEFT
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
cmfd % current(2,h,i,j,k) = t % results(1,score_index) % sum
! Right surface
if (i < nx) then
matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, &
(/ i+1, j, k /) )
matching_bins(i_filter_surf) = OUT_LEFT
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1 ! incoming
cmfd % current(3,h,i,j,k) = t % results(1,score_index) % sum
end if
matching_bins(i_filter_surf) = IN_RIGHT
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
cmfd % current(3,h,i,j,k) = t % results(1,score_index) % sum
matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, &
(/ i, j, k /) )
matching_bins(i_filter_surf) = OUT_RIGHT
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1 ! outgoing
* t % stride) + 1
cmfd % current(4,h,i,j,k) = t % results(1,score_index) % sum
! Back surface
matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, &
(/ i, j, k /))
matching_bins(i_filter_surf) = OUT_BACK
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1 ! outgoing
* t % stride) + 1
cmfd % current(5,h,i,j,k) = t % results(1,score_index) % sum
if (j > 1) then
matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, &
(/ i, j-1, k /))
matching_bins(i_filter_surf) = OUT_FRONT
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1 ! incoming
cmfd % current(6,h,i,j,k) = t % results(1,score_index) % sum
end if
matching_bins(i_filter_surf) = IN_BACK
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
cmfd % current(6,h,i,j,k) = t % results(1,score_index) % sum
! Front surface
if (j < ny) then
matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, &
(/ i, j+1, k /))
matching_bins(i_filter_surf) = OUT_BACK
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1 ! incoming
cmfd % current(7,h,i,j,k) = t % results(1,score_index) % sum
end if
matching_bins(i_filter_surf) = IN_FRONT
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
cmfd % current(7,h,i,j,k) = t % results(1,score_index) % sum
matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, &
(/ i, j, k /))
matching_bins(i_filter_surf) = OUT_FRONT
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1 ! outgoing
* t % stride) + 1
cmfd % current(8,h,i,j,k) = t % results(1,score_index) % sum
! Bottom surface
matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, &
(/ i, j, k /))
matching_bins(i_filter_surf) = OUT_BOTTOM
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1 ! outgoing
* t % stride) + 1
cmfd % current(9,h,i,j,k) = t % results(1,score_index) % sum
if (k > 1) then
matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, &
(/ i, j, k-1 /))
matching_bins(i_filter_surf) = OUT_TOP
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1 ! incoming
cmfd % current(10,h,i,j,k) = t % results(1,score_index) % sum
end if
matching_bins(i_filter_surf) = IN_BOTTOM
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
cmfd % current(10,h,i,j,k) = t % results(1,score_index) % sum
! Top surface
if (k < nz) then
matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, &
(/ i, j, k+1 /))
matching_bins(i_filter_surf) = OUT_BOTTOM
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1 ! incoming
cmfd % current(11,h,i,j,k) = t % results(1,score_index) % sum
end if
matching_bins(i_filter_surf) = IN_TOP
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
cmfd % current(11,h,i,j,k) = t % results(1,score_index) % sum
matching_bins(i_filter_mesh) = mesh_indices_to_bin(m, &
(/ i, j, k /))
matching_bins(i_filter_surf) = OUT_TOP
score_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1 ! outgoing
* t % stride) + 1
cmfd % current(12,h,i,j,k) = t % results(1,score_index) % sum
end if TALLY
@ -478,7 +447,6 @@ contains
! Get leakage
leakage = ZERO
LEAK: do l = 1, 3
leakage = leakage + ((cmfd % current(4*l,g,i,j,k) - &
cmfd % current(4*l-1,g,i,j,k))) - &
((cmfd % current(4*l-2,g,i,j,k) - &

View file

@ -531,13 +531,15 @@ contains
allocate(SurfaceFilter :: filters(n_filters) % obj)
select type(filt => filters(n_filters) % obj)
type is(SurfaceFilter)
filt % n_bins = 2 * m % n_dimension
allocate(filt % surfaces(2 * m % n_dimension))
filt % n_bins = 4 * m % n_dimension
allocate(filt % surfaces(4 * m % n_dimension))
if (m % n_dimension == 2) then
filt % surfaces = (/ OUT_LEFT, OUT_RIGHT, OUT_BACK, OUT_FRONT /)
filt % surfaces = (/ OUT_LEFT, IN_LEFT, IN_RIGHT, OUT_RIGHT, &
OUT_BACK, IN_BACK, IN_FRONT, OUT_FRONT /)
elseif (m % n_dimension == 3) then
filt % surfaces = (/ OUT_LEFT, OUT_RIGHT, OUT_BACK, OUT_FRONT, &
OUT_BOTTOM, OUT_TOP /)
filt % surfaces = (/ OUT_LEFT, IN_LEFT, IN_RIGHT, OUT_RIGHT, &
OUT_BACK, IN_BACK, IN_FRONT, OUT_FRONT, &
OUT_BOTTOM, IN_BOTTOM, IN_TOP, OUT_TOP /)
end if
end select
t % find_filter(FILTER_SURFACE) = n_filters

View file

@ -370,7 +370,13 @@ module constants
OUT_BACK = 3, & ! y min
OUT_FRONT = 4, & ! y max
OUT_BOTTOM = 5, & ! z min
OUT_TOP = 6 ! z max
OUT_TOP = 6, & ! z max
IN_LEFT = 7, & ! x min
IN_RIGHT = 8, & ! x max
IN_BACK = 9, & ! y min
IN_FRONT = 10, & ! y max
IN_BOTTOM = 11, & ! z min
IN_TOP = 12 ! z max
! Tally trigger types and threshold
integer, parameter :: &

View file

@ -3631,13 +3631,15 @@ contains
allocate(SurfaceFilter :: t % filters(n_filters) % obj)
select type (filt => t % filters(size(t % filters)) % obj)
type is (SurfaceFilter)
filt % n_bins = 2 * m % n_dimension
allocate(filt % surfaces(2 * m % n_dimension))
filt % n_bins = 4 * m % n_dimension
allocate(filt % surfaces(4 * m % n_dimension))
if (m % n_dimension == 2) then
filt % surfaces = (/ OUT_LEFT, OUT_RIGHT, OUT_BACK, OUT_FRONT /)
filt % surfaces = (/ OUT_LEFT, OUT_RIGHT, OUT_BACK, OUT_FRONT, &
IN_LEFT, IN_RIGHT, IN_BACK, IN_FRONT /)
elseif (m % n_dimension == 3) then
filt % surfaces = (/ OUT_LEFT, OUT_RIGHT, OUT_BACK, OUT_FRONT,&
OUT_BOTTOM, OUT_TOP /)
filt % surfaces = (/ OUT_LEFT, OUT_RIGHT, OUT_BACK, OUT_FRONT, &
OUT_BOTTOM, OUT_TOP, IN_LEFT, IN_RIGHT, IN_BACK, &
IN_FRONT, IN_BOTTOM, IN_TOP /)
end if
end select
t % find_filter(FILTER_SURFACE) = size(t % filters)

View file

@ -996,73 +996,112 @@ contains
matching_bins(i_filter_ein)))
end if
! Left Surface
! Get the bin for this mesh cell
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, (/ i, j, k /))
! Left Surface
matching_bins(i_filter_surf) = OUT_LEFT
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') &
"Outgoing Current to Left", &
"Outgoing Current on Left", &
to_str(t % results(1,filter_index) % sum), &
trim(to_str(t % results(1,filter_index) % sum_sq))
matching_bins(i_filter_surf) = IN_LEFT
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') &
"Incoming Current on Left", &
to_str(t % results(1,filter_index) % sum), &
trim(to_str(t % results(1,filter_index) % sum_sq))
! Right Surface
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, (/ i, j, k /))
matching_bins(i_filter_surf) = OUT_RIGHT
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') &
"Outgoing Current to Right", &
"Outgoing Current on Right", &
to_str(t % results(1,filter_index) % sum), &
trim(to_str(t % results(1,filter_index) % sum_sq))
matching_bins(i_filter_surf) = IN_RIGHT
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') &
"Incoming Current on Right", &
to_str(t % results(1,filter_index) % sum), &
trim(to_str(t % results(1,filter_index) % sum_sq))
! Back Surface
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, (/ i, j, k /))
matching_bins(i_filter_surf) = OUT_BACK
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') &
"Outgoing Current to Back", &
"Outgoing Current on Back", &
to_str(t % results(1,filter_index) % sum), &
trim(to_str(t % results(1,filter_index) % sum_sq))
matching_bins(i_filter_surf) = IN_BACK
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') &
"Incoming Current on Back", &
to_str(t % results(1,filter_index) % sum), &
trim(to_str(t % results(1,filter_index) % sum_sq))
! Front Surface
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, (/ i, j, k /))
matching_bins(i_filter_surf) = OUT_FRONT
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') &
"Outgoing Current to Front", &
"Net Current on Front", &
to_str(t % results(1,filter_index) % sum), &
trim(to_str(t % results(1,filter_index) % sum_sq))
matching_bins(i_filter_surf) = IN_FRONT
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') &
"Net Current on Front", &
to_str(t % results(1,filter_index) % sum), &
trim(to_str(t % results(1,filter_index) % sum_sq))
! Bottom Surface
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, (/ i, j, k /))
matching_bins(i_filter_surf) = OUT_BOTTOM
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') &
"Outgoing Current to Bottom", &
"Outgoing Current on Bottom", &
to_str(t % results(1,filter_index) % sum), &
trim(to_str(t % results(1,filter_index) % sum_sq))
matching_bins(i_filter_surf) = IN_BOTTOM
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') &
"Incoming Current on Bottom", &
to_str(t % results(1,filter_index) % sum), &
trim(to_str(t % results(1,filter_index) % sum_sq))
! Top Surface
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, (/ i, j, k /))
matching_bins(i_filter_surf) = OUT_TOP
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') &
"Outgoing Current to Top", &
"Outgoing Current on Top", &
to_str(t % results(1,filter_index) % sum), &
trim(to_str(t % results(1,filter_index) % sum_sq))
matching_bins(i_filter_surf) = IN_TOP
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
write(UNIT=unit_tally, FMT='(5X,A,T35,A,"+/- ",A)') &
"Incoming Current on Top", &
to_str(t % results(1,filter_index) % sum), &
trim(to_str(t % results(1,filter_index) % sum_sq))
end do
end do
end do
end do

View file

@ -2326,7 +2326,9 @@ contains
integer :: i
integer :: i_tally
integer :: j ! loop indices
integer :: k ! loop indices
integer :: d1 ! dimension index
integer :: d2 ! dimension index
integer :: d3 ! dimension index
integer :: ijk0(3) ! indices of starting coordinates
integer :: ijk1(3) ! indices of ending coordinates
integer :: n_cross ! number of surface crossings
@ -2343,9 +2345,6 @@ contains
real(8) :: filt_score ! score applied by filters
logical :: start_in_mesh ! particle's starting xyz in mesh?
logical :: end_in_mesh ! particle's ending xyz in mesh?
logical :: x_same ! same starting/ending x index (i)
logical :: y_same ! same starting/ending y index (j)
logical :: z_same ! same starting/ending z index (k)
type(TallyObject), pointer :: t
type(RegularMesh), pointer :: m
@ -2373,7 +2372,7 @@ contains
call get_mesh_indices(m, xyz0, ijk0(:m % n_dimension), start_in_mesh)
call get_mesh_indices(m, xyz1, ijk1(:m % n_dimension), end_in_mesh)
! Check to if start or end is in mesh -- if not, check if track still
! Check to see if start or end is in mesh -- if not, check if track still
! intersects with mesh
if ((.not. start_in_mesh) .and. (.not. end_in_mesh)) then
if (m % n_dimension == 2) then
@ -2401,231 +2400,115 @@ contains
if (matching_bins(i_filter_energy) == NO_BIN_FOUND) cycle
end if
! =======================================================================
! SPECIAL CASES WHERE TWO INDICES ARE THE SAME
x_same = (ijk0(1) == ijk1(1))
y_same = (ijk0(2) == ijk1(2))
z_same = (ijk0(3) == ijk1(3))
if (x_same .and. y_same) then
! Only z crossings
if (uvw(3) > 0) then
do j = ijk0(3), ijk1(3) - 1
ijk0(3) = j
if (all(ijk0 >= 1) .and. all(ijk0 <= m % dimension)) then
matching_bins(i_filter_surf) = OUT_TOP
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, ijk0)
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
!$omp atomic
t % results(1, filter_index) % value = &
t % results(1, filter_index) % value + p % wgt
end if
end do
else
do j = ijk0(3), ijk1(3) + 1, -1
ijk0(3) = j
if (all(ijk0 >= 1) .and. all(ijk0 <= m % dimension)) then
matching_bins(i_filter_surf) = OUT_BOTTOM
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, ijk0)
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
!$omp atomic
t % results(1, filter_index) % value = &
t % results(1, filter_index) % value + p % wgt
end if
end do
end if
cycle
elseif (x_same .and. z_same) then
! Only y crossings
if (uvw(2) > 0) then
do j = ijk0(2), ijk1(2) - 1
ijk0(2) = j
if (all(ijk0 >= 1) .and. all(ijk0 <= m % dimension)) then
matching_bins(i_filter_surf) = OUT_FRONT
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, ijk0)
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
!$omp atomic
t % results(1, filter_index) % value = &
t % results(1, filter_index) % value + p % wgt
end if
end do
else
do j = ijk0(2), ijk1(2) + 1, -1
ijk0(2) = j
if (all(ijk0 >= 1) .and. all(ijk0 <= m % dimension)) then
matching_bins(i_filter_surf) = OUT_BACK
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, ijk0)
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
!$omp atomic
t % results(1, filter_index) % value = &
t % results(1, filter_index) % value + p % wgt
end if
end do
end if
cycle
elseif (y_same .and. z_same) then
! Only x crossings
if (uvw(1) > 0) then
do j = ijk0(1), ijk1(1) - 1
ijk0(1) = j
if (all(ijk0 >= 1) .and. all(ijk0 <= m % dimension)) then
matching_bins(i_filter_surf) = OUT_RIGHT
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, ijk0)
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
!$omp atomic
t % results(1, filter_index) % value = &
t % results(1, filter_index) % value + p % wgt
end if
end do
else
do j = ijk0(1), ijk1(1) + 1, -1
ijk0(1) = j
if (all(ijk0 >= 1) .and. all(ijk0 <= m % dimension)) then
matching_bins(i_filter_surf) = OUT_LEFT
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, ijk0)
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
!$omp atomic
t % results(1, filter_index) % value = &
t % results(1, filter_index) % value + p % wgt
end if
end do
end if
cycle
end if
! =======================================================================
! GENERIC CASE
! Bounding coordinates
do j = 1, 3
if (uvw(j) > 0) then
xyz_cross(j) = m % lower_left(j) + ijk0(j) * m % width(j)
do d1 = 1, 3
if (uvw(d1) > 0) then
xyz_cross(d1) = m % lower_left(d1) + ijk0(d1) * m % width(d1)
else
xyz_cross(j) = m % lower_left(j) + (ijk0(j) - 1) * m % width(j)
xyz_cross(d1) = m % lower_left(d1) + (ijk0(d1) - 1) * m % width(d1)
end if
end do
do k = 1, n_cross
do j = 1, n_cross
! Reset scoring bin index
matching_bins(i_filter_surf) = 0
! Calculate distance to each bounding surface. We need to treat
! special case where the cosine of the angle is zero since this would
! result in a divide-by-zero.
do j = 1, 3
if (uvw(j) == 0) then
d(j) = INFINITY
do d1 = 1, 3
if (uvw(d1) == 0) then
d(d1) = INFINITY
else
d(j) = (xyz_cross(j) - xyz0(j))/uvw(j)
d(d1) = (xyz_cross(d1) - xyz0(d1))/uvw(d1)
end if
end do
! Determine the closest bounding surface of the mesh cell by
! calculating the minimum distance
! calculating the minimum distance. Then use the minimum distance and
! direction of the particle to determine which surface was crossed.
distance = minval(d)
! Now use the minimum distance and diretion of the particle to
! determine which surface was crossed
! Loop over the dimensions
do d1 = 1, 3
if (distance == d(1)) then
if (uvw(1) > 0) then
! Crossing into right mesh cell -- this is treated as outgoing
! current from (i,j,k)
if (all(ijk0 >= 1) .and. all(ijk0 <= m % dimension)) then
matching_bins(i_filter_surf) = OUT_RIGHT
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, ijk0)
end if
ijk0(1) = ijk0(1) + 1
xyz_cross(1) = xyz_cross(1) + m % width(1)
else
! Crossing into left mesh cell -- this is treated as outgoing
! current in (i,j,k)
if (all(ijk0 >= 1) .and. all(ijk0 <= m % dimension)) then
matching_bins(i_filter_surf) = OUT_LEFT
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, ijk0)
end if
ijk0(1) = ijk0(1) - 1
xyz_cross(1) = xyz_cross(1) - m % width(1)
end if
elseif (distance == d(2)) then
if (uvw(2) > 0) then
! Crossing into front mesh cell -- this is treated as outgoing
! current in (i,j,k)
if (all(ijk0 >= 1) .and. all(ijk0 <= m % dimension)) then
matching_bins(i_filter_surf) = OUT_FRONT
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, ijk0)
end if
ijk0(2) = ijk0(2) + 1
xyz_cross(2) = xyz_cross(2) + m % width(2)
else
! Crossing into back mesh cell -- this is treated as outgoing
! current in (i,j,k)
if (all(ijk0 >= 1) .and. all(ijk0 <= m % dimension)) then
matching_bins(i_filter_surf) = OUT_BACK
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, ijk0)
end if
ijk0(2) = ijk0(2) - 1
xyz_cross(2) = xyz_cross(2) - m % width(2)
end if
else if (distance == d(3)) then
if (uvw(3) > 0) then
! Crossing into top mesh cell -- this is treated as outgoing
! current in (i,j,k)
if (all(ijk0 >= 1) .and. all(ijk0 <= m % dimension)) then
matching_bins(i_filter_surf) = OUT_TOP
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, ijk0)
end if
ijk0(3) = ijk0(3) + 1
xyz_cross(3) = xyz_cross(3) + m % width(3)
else
! Crossing into bottom mesh cell -- this is treated as outgoing
! current in (i,j,k)
if (all(ijk0 >= 1) .and. all(ijk0 <= m % dimension)) then
matching_bins(i_filter_surf) = OUT_BOTTOM
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, ijk0)
end if
ijk0(3) = ijk0(3) - 1
xyz_cross(3) = xyz_cross(3) - m % width(3)
end if
end if
! Get the other dimensions
d2 = mod(d1, 3) + 1
d3 = mod(d1 + 1, 3) + 1
! Determine scoring index
if (matching_bins(i_filter_surf) > 0) then
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
! Check whether distance is the shortest distance
if (distance == d(d1)) then
! Check for errors
if (filter_index <= 0 .or. filter_index > &
t % total_filter_bins) then
call fatal_error("Score index outside range.")
end if
! Check whether particle is moving in positive d1 direction
if (uvw(d1) > 0) then
! Add to surface current tally
! Outward current on d1 max surface
if (all(ijk0 >= 1) .and. all(ijk0 <= m % dimension)) then
matching_bins(i_filter_surf) = d1 * 2
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, ijk0)
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
!$omp atomic
t % results(1, filter_index) % value = &
t % results(1, filter_index) % value + p % wgt
end if
t % results(1, filter_index) % value = &
t % results(1, filter_index) % value + p % wgt
end if
! Inward current on d1 min surface
if (ijk0(d1) >= 0 .and. ijk0(d1) < m % dimension(d1) .and. &
ijk0(d2) >= 1 .and. ijk0(d2) <= m % dimension(d2) .and. &
ijk0(d3) >= 1 .and. ijk0(d3) <= m % dimension(d3)) then
ijk0(d1) = ijk0(d1) + 1
matching_bins(i_filter_surf) = d1 * 2 + 5
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, ijk0)
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
!$omp atomic
t % results(1, filter_index) % value = &
t % results(1, filter_index) % value + p % wgt
ijk0(d1) = ijk0(d1) - 1
end if
ijk0(d1) = ijk0(d1) + 1
xyz_cross(d1) = xyz_cross(d1) + m % width(d1)
! The particle is moving in the negative d1 direction
else
! Outward current on d1 min surface
if (all(ijk0 >= 1) .and. all(ijk0 <= m % dimension)) then
matching_bins(i_filter_surf) = d1 * 2 - 1
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, ijk0)
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
!$omp atomic
t % results(1, filter_index) % value = &
t % results(1, filter_index) % value + p % wgt
end if
! Inward current on d1 max surface
if (ijk0(d1) > 1 .and. ijk0(d1) <= m % dimension(d1) + 1 .and. &
ijk0(d2) >= 1 .and. ijk0(d2) <= m % dimension(d2) .and. &
ijk0(d3) >= 1 .and. ijk0(d3) <= m % dimension(d3)) then
ijk0(d1) = ijk0(d1) - 1
matching_bins(i_filter_surf) = d1 * 2 + 6
matching_bins(i_filter_mesh) = &
mesh_indices_to_bin(m, ijk0)
filter_index = sum((matching_bins(1:size(t % filters)) - 1) &
* t % stride) + 1
!$omp atomic
t % results(1, filter_index) % value = &
t % results(1, filter_index) % value + p % wgt
ijk0(d1) = ijk0(d1) + 1
end if
ijk0(d1) = ijk0(d1) - 1
xyz_cross(d1) = xyz_cross(d1) - m % width(d1)
end if
end if
end do
! Calculate new coordinates
xyz0 = xyz0 + distance * uvw

View file

@ -136,6 +136,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
5.514939E+00
1.528899E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
5.514939E+00
1.528899E+00
5.032131E+00
@ -148,6 +160,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
2.770358E+00
3.879191E-01
7.294002E+00
2.675589E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
7.294002E+00
2.675589E+00
7.036008E+00
@ -160,6 +184,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
5.032131E+00
1.275040E+00
8.668860E+00
3.776102E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
8.668860E+00
3.776102E+00
8.352414E+00
@ -172,6 +208,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
7.036008E+00
2.490719E+00
9.345868E+00
4.380719E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
9.345868E+00
4.380719E+00
9.093766E+00
@ -184,6 +232,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
8.352414E+00
3.501945E+00
9.223771E+00
4.270119E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
9.223771E+00
4.270119E+00
9.219150E+00
@ -196,6 +256,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
9.093766E+00
4.158282E+00
8.530966E+00
3.651778E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
8.530966E+00
3.651778E+00
8.690373E+00
@ -208,6 +280,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
9.219150E+00
4.264346E+00
7.204424E+00
2.604203E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
7.204424E+00
2.604203E+00
7.513640E+00
@ -220,6 +304,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
8.690373E+00
3.785262E+00
5.326721E+00
1.426975E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
5.326721E+00
1.426975E+00
5.661144E+00
@ -232,6 +328,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
7.513640E+00
2.833028E+00
2.847310E+00
4.090440E-01
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
2.847310E+00
4.090440E-01
3.025812E+00
@ -244,6 +352,426 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
5.661144E+00
1.607138E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00

View file

@ -136,6 +136,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
5.555000E+00
1.551579E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
5.555000E+00
1.551579E+00
5.095000E+00
@ -148,6 +160,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
2.833000E+00
4.078910E-01
7.271000E+00
2.659755E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
7.271000E+00
2.659755E+00
7.026000E+00
@ -160,6 +184,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
5.095000E+00
1.310819E+00
8.577000E+00
3.703215E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
8.577000E+00
3.703215E+00
8.572000E+00
@ -172,6 +208,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
7.026000E+00
2.486552E+00
9.393000E+00
4.422429E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
9.393000E+00
4.422429E+00
9.261000E+00
@ -184,6 +232,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
8.572000E+00
3.680852E+00
9.265000E+00
4.305625E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
9.265000E+00
4.305625E+00
9.303000E+00
@ -196,6 +256,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
9.261000E+00
4.304411E+00
8.535000E+00
3.659395E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
8.535000E+00
3.659395E+00
8.693000E+00
@ -208,6 +280,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
9.303000E+00
4.350791E+00
7.104000E+00
2.544182E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
7.104000E+00
2.544182E+00
7.334000E+00
@ -220,6 +304,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
8.693000E+00
3.799545E+00
5.168000E+00
1.344390E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
5.168000E+00
1.344390E+00
5.416000E+00
@ -232,6 +328,18 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
7.334000E+00
2.700052E+00
2.724000E+00
3.745680E-01
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
2.724000E+00
3.745680E-01
2.960000E+00
@ -244,6 +352,426 @@ tally 4:
0.000000E+00
0.000000E+00
0.000000E+00
5.416000E+00
1.471086E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00
0.000000E+00

View file

@ -1 +1 @@
c2921f159dac64099862c1cd9c6d421c977991f621f954f893ec1351cfcea6794ca2c98c9c2dcc3411f1b8dac91ec83bd895788ba33179222c450a7df1d64f1e
6e432700c1fb8641d106471f1fd19a0bf0f00f8b03a97131f2d73732c5a8eea48edf910c7b27b83058a7914c47c29dc7e7899b7dbb83485309b4f7d9f20471d2