diff --git a/docs/source/pythonapi/examples/tally-arithmetic.ipynb b/docs/source/pythonapi/examples/tally-arithmetic.ipynb index 763e80d20..cd1098c06 100644 --- a/docs/source/pythonapi/examples/tally-arithmetic.ipynb +++ b/docs/source/pythonapi/examples/tally-arithmetic.ipynb @@ -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": [ "" ] @@ -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 @@ " \n", " 0\n", " total\n", - " (nu-fission / absorption)\n", - " 1.038387\n", - " 0.006141\n", + " (nu-fission / (absorption + current))\n", + " 1.02431\n", + " 0.00704\n", " \n", " \n", "\n", "" ], "text/plain": [ - " nuclide score mean std. dev.\n", - "0 total (nu-fission / absorption) 1.04e+00 6.14e-03" + " nuclide score mean std. dev.\n", + "0 total (nu-fission / (absorption + current)) 1.02e+00 7.04e-03" ] }, "execution_count": 24, @@ -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 @@ " 0.0\n", " 6.250000e-07\n", " total\n", - " absorption\n", - " 0.693337\n", - " 0.004109\n", + " (absorption + current)\n", + " 0.695303\n", + " 0.005091\n", " \n", " \n", "\n", "" ], "text/plain": [ - " energy low [MeV] energy high [MeV] nuclide score mean std. dev.\n", - "0 0.00e+00 6.25e-07 total absorption 6.93e-01 4.11e-03" + " energy low [MeV] energy high [MeV] nuclide score \\\n", + "0 0.00e+00 6.25e-07 total (absorption + current) \n", + "\n", + " mean std. dev. \n", + "0 6.95e-01 5.09e-03 " ] }, "execution_count": 25, @@ -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 @@ " 6.250000e-07\n", " total\n", " nu-fission\n", - " 1.203042\n", - " 0.0076\n", + " 1.202639\n", + " 0.010348\n", " \n", " \n", "\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 @@ " 10000\n", " total\n", " absorption\n", - " 0.748413\n", - " 0.004723\n", + " 0.749349\n", + " 0.006731\n", " \n", " \n", "\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 @@ " 10000\n", " total\n", " (nu-fission / absorption)\n", - " 1.663385\n", - " 0.011253\n", + " 1.663736\n", + " 0.015707\n", " \n", " \n", "\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": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
energy low [MeV]energy high [MeV]nuclidescoremeanstd. dev.
00.06.250000e-07total(absorption + current)0.9851020.005855
\n", + "
" + ], + "text/plain": [ + " energy low [MeV] energy high [MeV] nuclide score \\\n", + "0 0.00e+00 6.25e-07 total (absorption + current) \n", + "\n", + " mean std. dev. \n", + "0 9.85e-01 5.86e-03 " + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p_fnl = (abs_rate + thermal_leak) / (abs_rate + leak)\n", + "p_fnl.get_pandas_dataframe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The final factor is the thermal non-leakage probability and is computed as $$P_{TNL} = \\frac{\\langle \\Sigma_a\\phi \\rangle_T}{\\langle \\Sigma_a \\phi \\rangle_T + \\langle L \\rangle_T}$$" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
energy low [MeV]energy high [MeV]nuclidescoremeanstd. dev.
00.06.250000e-07total(absorption / (absorption + current))0.9974070.008492
\n", + "
" + ], + "text/plain": [ + " energy low [MeV] energy high [MeV] nuclide \\\n", + "0 0.00e+00 6.25e-07 total \n", + "\n", + " score mean std. dev. \n", + "0 (absorption / (absorption + current)) 9.97e-01 8.49e-03 " + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "p_tnl = therm_abs_rate / (therm_abs_rate + thermal_leak)\n", + "p_tnl.get_pandas_dataframe()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we can calculate $k_{eff}$ using the product of the factors form the four-factor formula." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "collapsed": false + }, "outputs": [ { "data": { @@ -1039,9 +1202,9 @@ " 6.250000e-07\n", " 10000\n", " total\n", - " (((absorption * nu-fission) * absorption) * (n...\n", - " 1.038387\n", - " 0.01316\n", + " ((((((absorption + current) * nu-fission) * ab...\n", + " 1.02431\n", + " 0.02062\n", " \n", " \n", "\n", @@ -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 @@ " 6.250000e-07\n", " (U238 / total)\n", " (nu-fission / flux)\n", - " 6.636968e-07\n", - " 4.132875e-09\n", + " 6.662479e-07\n", + " 6.039323e-09\n", " \n", " \n", " 1\n", @@ -1132,8 +1295,8 @@ " 6.250000e-07\n", " (U238 / total)\n", " (scatter / flux)\n", - " 2.099856e-01\n", - " 1.232455e-03\n", + " 2.099897e-01\n", + " 1.843251e-03\n", " \n", " \n", " 2\n", @@ -1142,8 +1305,8 @@ " 6.250000e-07\n", " (U235 / total)\n", " (nu-fission / flux)\n", - " 3.552458e-01\n", - " 2.252681e-03\n", + " 3.568130e-01\n", + " 3.255144e-03\n", " \n", " \n", " 3\n", @@ -1152,8 +1315,8 @@ " 6.250000e-07\n", " (U235 / total)\n", " (scatter / flux)\n", - " 5.554345e-03\n", - " 3.265385e-05\n", + " 5.555326e-03\n", + " 4.893022e-05\n", " \n", " \n", " 4\n", @@ -1162,8 +1325,8 @@ " 2.000000e+01\n", " (U238 / total)\n", " (nu-fission / flux)\n", - " 7.126668e-03\n", - " 5.296883e-05\n", + " 7.215044e-03\n", + " 4.968448e-05\n", " \n", " \n", " 5\n", @@ -1172,8 +1335,8 @@ " 2.000000e+01\n", " (U238 / total)\n", " (scatter / flux)\n", - " 2.277460e-01\n", - " 1.003558e-03\n", + " 2.273966e-01\n", + " 8.969811e-04\n", " \n", " \n", " 6\n", @@ -1182,8 +1345,8 @@ " 2.000000e+01\n", " (U235 / total)\n", " (nu-fission / flux)\n", - " 8.010911e-03\n", - " 6.802256e-05\n", + " 7.969615e-03\n", + " 5.374119e-05\n", " \n", " \n", " 7\n", @@ -1192,8 +1355,8 @@ " 2.000000e+01\n", " (U235 / total)\n", " (scatter / flux)\n", - " 3.367794e-03\n", - " 1.443644e-05\n", + " 3.362798e-03\n", + " 1.286767e-05\n", " \n", " \n", "\n", @@ -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 @@ " U238\n", " nu-fission\n", " 0.000002\n", - " 7.473789e-09\n", + " 1.057199e-08\n", " \n", " \n", " 1\n", @@ -1367,8 +1530,8 @@ " 6.250000e-07\n", " U235\n", " nu-fission\n", - " 0.861547\n", - " 4.131310e-03\n", + " 0.856784\n", + " 5.730044e-03\n", " \n", " \n", " 2\n", @@ -1377,8 +1540,8 @@ " 2.000000e+01\n", " U238\n", " nu-fission\n", - " 0.082356\n", - " 5.560461e-04\n", + " 0.082495\n", + " 5.176027e-04\n", " \n", " \n", " 3\n", @@ -1387,8 +1550,8 @@ " 2.000000e+01\n", " U235\n", " nu-fission\n", - " 0.092574\n", - " 7.315442e-04\n", + " 0.091123\n", + " 5.574052e-04\n", " \n", " \n", "\n", @@ -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 @@ " 1.080060e-07\n", " H1\n", " scatter\n", - " 4.599225\n", - " 0.015973\n", + " 4.547947\n", + " 0.028000\n", " \n", " \n", " 1\n", @@ -1461,8 +1624,8 @@ " 1.166529e-06\n", " H1\n", " scatter\n", - " 2.037260\n", - " 0.011236\n", + " 2.003068\n", + " 0.008587\n", " \n", " \n", " 2\n", @@ -1471,8 +1634,8 @@ " 1.259921e-05\n", " H1\n", " scatter\n", - " 1.662552\n", - " 0.010280\n", + " 1.647225\n", + " 0.011136\n", " \n", " \n", " 3\n", @@ -1481,8 +1644,8 @@ " 1.360790e-04\n", " H1\n", " scatter\n", - " 1.872201\n", - " 0.012136\n", + " 1.831367\n", + " 0.010196\n", " \n", " \n", " 4\n", @@ -1491,8 +1654,8 @@ " 1.469734e-03\n", " H1\n", " scatter\n", - " 2.080459\n", - " 0.013155\n", + " 2.039613\n", + " 0.008059\n", " \n", " \n", " 5\n", @@ -1501,8 +1664,8 @@ " 1.587401e-02\n", " H1\n", " scatter\n", - " 2.154996\n", - " 0.011975\n", + " 2.137523\n", + " 0.012885\n", " \n", " \n", " 6\n", @@ -1511,8 +1674,8 @@ " 1.714488e-01\n", " H1\n", " scatter\n", - " 2.218740\n", - " 0.008528\n", + " 2.170725\n", + " 0.012669\n", " \n", " \n", " 7\n", @@ -1521,8 +1684,8 @@ " 1.851749e+00\n", " H1\n", " scatter\n", - " 2.010517\n", - " 0.009187\n", + " 2.002724\n", + " 0.010768\n", " \n", " \n", " 8\n", @@ -1531,8 +1694,8 @@ " 2.000000e+01\n", " H1\n", " scatter\n", - " 0.372022\n", - " 0.003196\n", + " 0.371624\n", + " 0.002959\n", " \n", " \n", "\n", @@ -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" } diff --git a/openmc/filter.py b/openmc/filter.py index 9b4eb67dd..4961ce725 100644 --- a/openmc/filter.py +++ b/openmc/filter.py @@ -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 diff --git a/openmc/mgxs/mdgxs.py b/openmc/mgxs/mdgxs.py index 5e5d840b6..8941d4c6f 100644 --- a/openmc/mgxs/mdgxs.py +++ b/openmc/mgxs/mdgxs.py @@ -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) diff --git a/src/cmfd_data.F90 b/src/cmfd_data.F90 index d74c1b17e..e1bf1f9c3 100644 --- a/src/cmfd_data.F90 +++ b/src/cmfd_data.F90 @@ -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) - & diff --git a/src/cmfd_input.F90 b/src/cmfd_input.F90 index 5fe44ad43..327b55b42 100644 --- a/src/cmfd_input.F90 +++ b/src/cmfd_input.F90 @@ -531,13 +531,15 @@ contains allocate(SurfaceFilter :: filters(n_filters) % obj) select type(filt => filters(n_filters) % obj) type is(SurfaceFilter) - filt % n_bins = 2 * m % n_dimension - allocate(filt % surfaces(2 * m % n_dimension)) + filt % n_bins = 4 * m % n_dimension + allocate(filt % surfaces(4 * m % n_dimension)) if (m % n_dimension == 2) then - filt % surfaces = (/ 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 diff --git a/src/constants.F90 b/src/constants.F90 index ff2bd3710..9cdc430af 100644 --- a/src/constants.F90 +++ b/src/constants.F90 @@ -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 :: & diff --git a/src/input_xml.F90 b/src/input_xml.F90 index 6ef8751a0..eeeae865b 100644 --- a/src/input_xml.F90 +++ b/src/input_xml.F90 @@ -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) diff --git a/src/output.F90 b/src/output.F90 index b8bd80425..ea729e8c2 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -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 diff --git a/src/tally.F90 b/src/tally.F90 index 3cee65b96..922d2496e 100644 --- a/src/tally.F90 +++ b/src/tally.F90 @@ -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 diff --git a/tests/test_cmfd_feed/results_true.dat b/tests/test_cmfd_feed/results_true.dat index 04103129d..5fb87e5a3 100644 --- a/tests/test_cmfd_feed/results_true.dat +++ b/tests/test_cmfd_feed/results_true.dat @@ -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 diff --git a/tests/test_cmfd_nofeed/results_true.dat b/tests/test_cmfd_nofeed/results_true.dat index 54825f5db..91da28751 100644 --- a/tests/test_cmfd_nofeed/results_true.dat +++ b/tests/test_cmfd_nofeed/results_true.dat @@ -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 diff --git a/tests/test_score_current/results_true.dat b/tests/test_score_current/results_true.dat index 68dbe069c..cf139cce2 100644 --- a/tests/test_score_current/results_true.dat +++ b/tests/test_score_current/results_true.dat @@ -1 +1 @@ -c2921f159dac64099862c1cd9c6d421c977991f621f954f893ec1351cfcea6794ca2c98c9c2dcc3411f1b8dac91ec83bd895788ba33179222c450a7df1d64f1e \ No newline at end of file +6e432700c1fb8641d106471f1fd19a0bf0f00f8b03a97131f2d73732c5a8eea48edf910c7b27b83058a7914c47c29dc7e7899b7dbb83485309b4f7d9f20471d2 \ No newline at end of file