2015-09-19 07:38:33 +07:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This notebook demonstrates some basic post-processing tasks that can be performed with the Python API, such as plotting a 2D mesh tally and plotting neutron source sites from an eigenvalue calculation. The problem we will use is a simple reflected pin-cell."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
2016-04-13 12:04:29 -04:00
"%matplotlib inline\n",
2015-09-19 07:38:33 +07:00
"from IPython.display import Image\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"\n",
2016-04-13 12:04:29 -04:00
"import openmc"
2015-09-19 07:38:33 +07:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Generate Input Files"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First we need to define materials that will be used in the problem. Before defining a material, we must create nuclides that are used in the material."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Instantiate some Nuclides\n",
2016-07-25 06:33:37 -05:00
"h1 = openmc.Nuclide('H1')\n",
"b10 = openmc.Nuclide('B10')\n",
"o16 = openmc.Nuclide('O16')\n",
"u235 = openmc.Nuclide('U235')\n",
"u238 = openmc.Nuclide('U238')\n",
"zr90 = openmc.Nuclide('Zr90')"
2015-09-19 07:38:33 +07:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With the nuclides we defined, we will now create three materials for the fuel, water, and cladding of the fuel pin."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# 1.6 enriched fuel\n",
"fuel = openmc.Material(name='1.6% Fuel')\n",
"fuel.set_density('g/cm3', 10.31341)\n",
"fuel.add_nuclide(u235, 3.7503e-4)\n",
"fuel.add_nuclide(u238, 2.2625e-2)\n",
"fuel.add_nuclide(o16, 4.6007e-2)\n",
"\n",
"# borated water\n",
"water = openmc.Material(name='Borated Water')\n",
"water.set_density('g/cm3', 0.740582)\n",
"water.add_nuclide(h1, 4.9457e-2)\n",
"water.add_nuclide(o16, 2.4732e-2)\n",
"water.add_nuclide(b10, 8.0042e-6)\n",
"\n",
"# zircaloy\n",
"zircaloy = openmc.Material(name='Zircaloy')\n",
"zircaloy.set_density('g/cm3', 6.55)\n",
"zircaloy.add_nuclide(zr90, 7.2758e-3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With our three materials, we can now create a materials file object that can be exported to an actual XML file."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
2016-04-29 16:14:02 -05:00
"# Instantiate a Materials collection\n",
"materials_file = openmc.Materials((fuel, water, zircaloy))\n",
2015-09-19 07:38:33 +07:00
"\n",
"# Export to \"materials.xml\"\n",
"materials_file.export_to_xml()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's move on to the geometry. Our problem will have three regions for the fuel, the clad, and the surrounding coolant. The first step is to create the bounding surfaces -- in this case two cylinders and six reflective planes."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Create cylinders for the fuel and clad\n",
"fuel_outer_radius = openmc.ZCylinder(x0=0.0, y0=0.0, R=0.39218)\n",
"clad_outer_radius = openmc.ZCylinder(x0=0.0, y0=0.0, R=0.45720)\n",
"\n",
"# Create boundary planes to surround the geometry\n",
"# Use both reflective and vacuum boundaries to make life interesting\n",
"min_x = openmc.XPlane(x0=-0.63, boundary_type='reflective')\n",
"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')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With the surfaces defined, we can now create cells that are defined by intersections of half-spaces created by the surfaces."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
2015-10-12 23:56:13 -04:00
"outputs": [],
2015-09-19 07:38:33 +07:00
"source": [
"# Create a Universe to encapsulate a fuel pin\n",
"pin_cell_universe = openmc.Universe(name='1.6% Fuel Pin')\n",
"\n",
"# Create fuel Cell\n",
"fuel_cell = openmc.Cell(name='1.6% Fuel')\n",
"fuel_cell.fill = fuel\n",
2015-10-12 23:56:13 -04:00
"fuel_cell.region = -fuel_outer_radius\n",
2015-09-19 07:38:33 +07:00
"pin_cell_universe.add_cell(fuel_cell)\n",
"\n",
"# Create a clad Cell\n",
"clad_cell = openmc.Cell(name='1.6% Clad')\n",
"clad_cell.fill = zircaloy\n",
2015-10-12 23:56:13 -04:00
"clad_cell.region = +fuel_outer_radius & -clad_outer_radius\n",
2015-09-19 07:38:33 +07:00
"pin_cell_universe.add_cell(clad_cell)\n",
"\n",
"# Create a moderator Cell\n",
"moderator_cell = openmc.Cell(name='1.6% Moderator')\n",
"moderator_cell.fill = water\n",
2015-10-12 23:56:13 -04:00
"moderator_cell.region = +clad_outer_radius\n",
2015-09-19 07:38:33 +07:00
"pin_cell_universe.add_cell(moderator_cell)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"OpenMC requires that there is a \"root\" universe. Let us create a root cell that is filled by the pin cell universe and then assign it to the root universe."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
2015-10-12 23:56:13 -04:00
"outputs": [],
2015-09-19 07:38:33 +07:00
"source": [
"# Create root Cell\n",
"root_cell = openmc.Cell(name='root cell')\n",
"root_cell.fill = pin_cell_universe\n",
"\n",
"# Add boundary planes\n",
2015-10-12 23:56:13 -04:00
"root_cell.region = +min_x & -max_x & +min_y & -max_y & +min_z & -max_z\n",
2015-09-19 07:38:33 +07:00
"\n",
"# Create root Universe\n",
"root_universe = openmc.Universe(universe_id=0, name='root universe')\n",
"root_universe.add_cell(root_cell)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We now must create a geometry that is assigned a root universe, put the geometry into a geometry file, and export it to XML."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Create Geometry and set root Universe\n",
"geometry = openmc.Geometry()\n",
"geometry.root_universe = root_universe"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Export to \"geometry.xml\"\n",
2016-04-25 10:44:20 -05:00
"geometry.export_to_xml()"
2015-09-19 07:38:33 +07:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With the geometry and materials finished, we now just need to define simulation parameters. In this case, we will use 10 inactive batches and 90 active batches each with 5000 particles."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# OpenMC simulation parameters\n",
"batches = 100\n",
"inactive = 10\n",
"particles = 5000\n",
"\n",
2016-04-25 10:44:20 -05:00
"# Instantiate a Settings object\n",
"settings_file = openmc.Settings()\n",
2015-09-19 07:38:33 +07:00
"settings_file.batches = batches\n",
"settings_file.inactive = inactive\n",
"settings_file.particles = particles\n",
2016-04-08 12:26:02 -04:00
"\n",
"# Create an initial uniform spatial source distribution over fissionable zones\n",
"bounds = [-0.63, -0.63, -0.63, 0.63, 0.63, 0.63]\n",
"uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True)\n",
"settings_file.source = openmc.source.Source(space=uniform_dist)\n",
2015-09-19 07:38:33 +07:00
"\n",
"# Export to \"settings.xml\"\n",
"settings_file.export_to_xml()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let us also create a plot file that we can use to verify that our pin cell geometry was created successfully."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Instantiate a Plot\n",
"plot = openmc.Plot(plot_id=1)\n",
"plot.filename = 'materials-xy'\n",
"plot.origin = [0, 0, 0]\n",
"plot.width = [1.26, 1.26]\n",
"plot.pixels = [250, 250]\n",
"plot.color = 'mat'\n",
"\n",
2016-04-29 16:14:02 -05:00
"# Instantiate a Plots collection and export to \"plots.xml\"\n",
"plot_file = openmc.Plots([plot])\n",
2015-09-19 07:38:33 +07:00
"plot_file.export_to_xml()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With the plots.xml file, we can now generate and view the plot. OpenMC outputs plots in .ppm format, which can be converted into a compressed format like .png with the convert utility."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
2015-10-03 00:04:01 -04:00
"outputs": [
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
2015-09-19 07:38:33 +07:00
"source": [
"# Run openmc in plotting mode\n",
2016-04-25 10:44:20 -05:00
"openmc.plot_geometry(output=False)"
2015-09-19 07:38:33 +07:00
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
2016-10-31 14:12:19 -05:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAPoAAAD6AgMAAAD1grKuAAAABGdBTUEAALGPC/xhBQAAACBjSFJN\nAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX///9yEhLpgJFNv8Tq\nQYT7AAAAAWJLR0QAiAUdSAAAAAd0SU1FB+AKHxEvDnAaMmcAAALKSURBVGje7dpLcqQwDAbgHHE2\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/4vzcvgeY10sY0AAAAldEVYdGRhdGU6Y3JlYXRlADIwMTYtMTAtMzFUMTI6NDc6\nMTQtMDU6MDDmKf94AAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE2LTEwLTMxVDEyOjQ3OjE0LTA1OjAw\nl3RHxAAAAABJRU5ErkJggg==\n",
2015-09-19 07:38:33 +07:00
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Convert OpenMC's funky ppm to png\n",
"!convert materials-xy.ppm materials-xy.png\n",
"\n",
"# Display the materials plot inline\n",
"Image(filename='materials-xy.png')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As we can see from the plot, we have a nice pin cell with fuel, cladding, and water! Before we run our simulation, we need to tell the code what we want to tally. The following code shows how to create a 2D mesh tally."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
2016-04-25 10:44:20 -05:00
"# Instantiate an empty Tallies object\n",
"tallies_file = openmc.Tallies()"
2015-09-19 07:38:33 +07:00
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Create mesh which will be used for tally\n",
"mesh = openmc.Mesh()\n",
"mesh.dimension = [100, 100]\n",
"mesh.lower_left = [-0.63, -0.63]\n",
"mesh.upper_right = [0.63, 0.63]\n",
"\n",
"# Create mesh filter for tally\n",
2016-09-30 00:01:10 -04:00
"mesh_filter = openmc.MeshFilter(mesh)\n",
2015-09-19 07:38:33 +07:00
"\n",
"# Create mesh tally to score flux and fission rate\n",
"tally = openmc.Tally(name='flux')\n",
2016-02-23 10:48:47 -06:00
"tally.filters = [mesh_filter]\n",
"tally.scores = ['flux', 'fission']\n",
2016-04-29 16:14:02 -05:00
"tallies_file.append(tally)"
2015-09-19 07:38:33 +07:00
]
},
{
"cell_type": "code",
2015-11-29 21:39:03 -05:00
"execution_count": 16,
2015-09-19 07:38:33 +07:00
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# Export to \"tallies.xml\"\n",
"tallies_file.export_to_xml()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now we a have a complete set of inputs, so we can go ahead and run our simulation."
]
},
{
"cell_type": "code",
2015-11-29 21:39:03 -05:00
"execution_count": 17,
2015-09-19 07:38:33 +07:00
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
2016-08-31 10:59:21 -05:00
" %%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%\n",
" ############### %%%%%%%%%%%%%%%%%%%%%%%%\n",
" ################## %%%%%%%%%%%%%%%%%%%%%%%\n",
" ################### %%%%%%%%%%%%%%%%%%%%%%%\n",
" #################### %%%%%%%%%%%%%%%%%%%%%%\n",
" ##################### %%%%%%%%%%%%%%%%%%%%%\n",
" ###################### %%%%%%%%%%%%%%%%%%%%\n",
" ####################### %%%%%%%%%%%%%%%%%%\n",
" ####################### %%%%%%%%%%%%%%%%%\n",
" ###################### %%%%%%%%%%%%%%%%%\n",
" #################### %%%%%%%%%%%%%%%%%\n",
" ################# %%%%%%%%%%%%%%%%%\n",
" ############### %%%%%%%%%%%%%%%%\n",
" ############ %%%%%%%%%%%%%%%\n",
" ######## %%%%%%%%%%%%%%\n",
" %%%%%%%%%%%\n",
2015-09-19 07:38:33 +07:00
"\n",
2016-08-31 10:59:21 -05:00
" | The OpenMC Monte Carlo Code\n",
" Copyright | 2011-2016 Massachusetts Institute of Technology\n",
" License | http://openmc.readthedocs.io/en/latest/license.html\n",
" Version | 0.8.0\n",
2016-10-31 14:12:19 -05:00
" Git SHA1 | da5563eddb5f2c2d6b2c9839d518de40962b78f2\n",
" Date/Time | 2016-10-31 12:47:14\n",
" OpenMP Threads | 4\n",
2015-09-19 07:38:33 +07:00
"\n",
" ===========================================================================\n",
" ========================> INITIALIZATION <=========================\n",
" ===========================================================================\n",
"\n",
" Reading settings XML file...\n",
" Reading geometry XML file...\n",
" Reading materials XML file...\n",
2016-10-31 14:12:19 -05:00
" Reading cross sections XML file...\n",
" Reading U235 from /home/romano/openmc/scripts/nndc_hdf5/U235.h5\n",
" Reading U238 from /home/romano/openmc/scripts/nndc_hdf5/U238.h5\n",
" Reading O16 from /home/romano/openmc/scripts/nndc_hdf5/O16.h5\n",
" Reading H1 from /home/romano/openmc/scripts/nndc_hdf5/H1.h5\n",
" Reading B10 from /home/romano/openmc/scripts/nndc_hdf5/B10.h5\n",
" Reading Zr90 from /home/romano/openmc/scripts/nndc_hdf5/Zr90.h5\n",
" Maximum neutron transport energy: 2.00000E+07 eV for U235\n",
2015-09-19 07:38:33 +07:00
" Reading tallies XML file...\n",
" Building neighboring cells lists for each surface...\n",
" Initializing source particles...\n",
"\n",
" ===========================================================================\n",
" ====================> K EIGENVALUE SIMULATION <====================\n",
" ===========================================================================\n",
"\n",
" Bat./Gen. k Average k \n",
" ========= ======== ==================== \n",
2016-04-08 12:26:02 -04:00
" 1/1 1.04359 \n",
" 2/1 1.04244 \n",
" 3/1 1.03020 \n",
" 4/1 1.03630 \n",
" 5/1 1.06478 \n",
" 6/1 1.05450 \n",
" 7/1 1.02369 \n",
2016-10-31 14:12:19 -05:00
" 8/1 1.03454 \n",
" 9/1 1.05309 \n",
" 10/1 1.01741 \n",
" 11/1 1.04344 \n",
" 12/1 1.01457 1.02901 +/- 0.01444\n",
" 13/1 1.01643 1.02481 +/- 0.00933\n",
" 14/1 1.04657 1.03025 +/- 0.00855\n",
" 15/1 1.06420 1.03704 +/- 0.00949\n",
" 16/1 1.06048 1.04095 +/- 0.00867\n",
" 17/1 1.01627 1.03742 +/- 0.00813\n",
" 18/1 1.03667 1.03733 +/- 0.00705\n",
" 19/1 1.03977 1.03760 +/- 0.00622\n",
" 20/1 1.03996 1.03784 +/- 0.00557\n",
" 21/1 1.05663 1.03954 +/- 0.00532\n",
" 22/1 1.03944 1.03954 +/- 0.00485\n",
" 23/1 1.07702 1.04242 +/- 0.00532\n",
" 24/1 1.02378 1.04109 +/- 0.00510\n",
" 25/1 1.02817 1.04023 +/- 0.00482\n",
" 26/1 1.08000 1.04271 +/- 0.00515\n",
" 27/1 1.02733 1.04181 +/- 0.00492\n",
" 28/1 1.02993 1.04115 +/- 0.00469\n",
" 29/1 1.01755 1.03991 +/- 0.00461\n",
" 30/1 1.05836 1.04083 +/- 0.00447\n",
" 31/1 1.05936 1.04171 +/- 0.00434\n",
" 32/1 1.03683 1.04149 +/- 0.00414\n",
" 33/1 1.05112 1.04191 +/- 0.00398\n",
" 34/1 1.02927 1.04138 +/- 0.00385\n",
" 35/1 1.05326 1.04186 +/- 0.00372\n",
" 36/1 1.06014 1.04256 +/- 0.00364\n",
" 37/1 1.02320 1.04184 +/- 0.00358\n",
" 38/1 1.04297 1.04188 +/- 0.00345\n",
" 39/1 1.04544 1.04201 +/- 0.00333\n",
" 40/1 1.05178 1.04233 +/- 0.00323\n",
" 41/1 1.01744 1.04153 +/- 0.00323\n",
" 42/1 1.02376 1.04097 +/- 0.00317\n",
" 43/1 1.02344 1.04044 +/- 0.00312\n",
" 44/1 1.05813 1.04096 +/- 0.00307\n",
" 45/1 1.02370 1.04047 +/- 0.00303\n",
" 46/1 1.03536 1.04033 +/- 0.00294\n",
" 47/1 1.04344 1.04041 +/- 0.00286\n",
" 48/1 1.03879 1.04037 +/- 0.00279\n",
" 49/1 1.07122 1.04116 +/- 0.00283\n",
" 50/1 1.03861 1.04110 +/- 0.00276\n",
" 51/1 1.00812 1.04029 +/- 0.00281\n",
" 52/1 1.04620 1.04043 +/- 0.00274\n",
" 53/1 1.07050 1.04113 +/- 0.00277\n",
" 54/1 1.04038 1.04111 +/- 0.00270\n",
" 55/1 1.03770 1.04104 +/- 0.00264\n",
" 56/1 1.05627 1.04137 +/- 0.00261\n",
" 57/1 1.04191 1.04138 +/- 0.00255\n",
" 58/1 1.03633 1.04128 +/- 0.00250\n",
" 59/1 1.02002 1.04084 +/- 0.00249\n",
" 60/1 1.04293 1.04088 +/- 0.00244\n",
" 61/1 1.00919 1.04026 +/- 0.00247\n",
" 62/1 1.09274 1.04127 +/- 0.00262\n",
" 63/1 1.05344 1.04150 +/- 0.00258\n",
" 64/1 1.07892 1.04219 +/- 0.00263\n",
" 65/1 1.09293 1.04312 +/- 0.00274\n",
" 66/1 1.04485 1.04315 +/- 0.00269\n",
" 67/1 1.04794 1.04323 +/- 0.00264\n",
" 68/1 1.04183 1.04321 +/- 0.00260\n",
" 69/1 1.03052 1.04299 +/- 0.00256\n",
" 70/1 1.03630 1.04288 +/- 0.00252\n",
" 71/1 1.04611 1.04293 +/- 0.00248\n",
" 72/1 1.00214 1.04228 +/- 0.00253\n",
" 73/1 1.02488 1.04200 +/- 0.00250\n",
" 74/1 1.03607 1.04191 +/- 0.00246\n",
" 75/1 1.05488 1.04211 +/- 0.00243\n",
" 76/1 1.02252 1.04181 +/- 0.00242\n",
" 77/1 1.03196 1.04166 +/- 0.00238\n",
" 78/1 1.05769 1.04190 +/- 0.00236\n",
" 79/1 1.03101 1.04174 +/- 0.00233\n",
" 80/1 1.04693 1.04182 +/- 0.00230\n",
" 81/1 1.06110 1.04209 +/- 0.00228\n",
" 82/1 1.06273 1.04237 +/- 0.00227\n",
" 83/1 1.07699 1.04285 +/- 0.00229\n",
" 84/1 1.05740 1.04304 +/- 0.00226\n",
" 85/1 1.04040 1.04301 +/- 0.00223\n",
" 86/1 1.02147 1.04273 +/- 0.00222\n",
" 87/1 1.00842 1.04228 +/- 0.00224\n",
" 88/1 1.06173 1.04253 +/- 0.00222\n",
" 89/1 1.08649 1.04309 +/- 0.00227\n",
" 90/1 1.05826 1.04328 +/- 0.00224\n",
" 91/1 1.07673 1.04369 +/- 0.00225\n",
" 92/1 1.02425 1.04345 +/- 0.00224\n",
" 93/1 1.05359 1.04357 +/- 0.00222\n",
" 94/1 1.06085 1.04378 +/- 0.00220\n",
" 95/1 1.05319 1.04389 +/- 0.00218\n",
" 96/1 1.02321 1.04365 +/- 0.00216\n",
" 97/1 1.04124 1.04362 +/- 0.00214\n",
" 98/1 1.06307 1.04384 +/- 0.00213\n",
" 99/1 1.04616 1.04387 +/- 0.00210\n",
" 100/1 1.03278 1.04375 +/- 0.00208\n",
2015-11-29 21:39:03 -05:00
" Creating state point statepoint.100.h5...\n",
"\n",
" ===========================================================================\n",
" ======================> SIMULATION FINISHED <======================\n",
" ===========================================================================\n",
"\n",
"\n",
" =======================> TIMING STATISTICS <=======================\n",
"\n",
2016-10-31 14:12:19 -05:00
" Total time for initialization = 5.3314E-01 seconds\n",
" Reading cross sections = 3.6117E-01 seconds\n",
" Total time in simulation = 3.5193E+02 seconds\n",
" Time in transport only = 3.5172E+02 seconds\n",
" Time in inactive batches = 4.7990E+00 seconds\n",
" Time in active batches = 3.4714E+02 seconds\n",
" Time synchronizing fission bank = 2.3264E-02 seconds\n",
" Sampling source sites = 1.6661E-02 seconds\n",
" SEND/RECV source sites = 6.3975E-03 seconds\n",
" Time accumulating tallies = 2.3345E-02 seconds\n",
" Total time for finalization = 1.7400E-01 seconds\n",
" Total time elapsed = 3.5269E+02 seconds\n",
" Calculation Rate (inactive) = 10418.8 neutrons/second\n",
" Calculation Rate (active) = 1296.32 neutrons/second\n",
2015-11-29 21:39:03 -05:00
"\n",
" ============================> RESULTS <============================\n",
"\n",
2016-10-31 14:12:19 -05:00
" k-effective (Collision) = 1.04220 +/- 0.00169\n",
" k-effective (Track-length) = 1.04375 +/- 0.00208\n",
" k-effective (Absorption) = 1.04213 +/- 0.00151\n",
" Combined k-effective = 1.04229 +/- 0.00127\n",
2015-11-29 21:39:03 -05:00
" Leakage Fraction = 0.00000 +/- 0.00000\n",
"\n"
2015-09-19 07:38:33 +07:00
]
2015-11-29 21:39:03 -05:00
},
{
"data": {
"text/plain": [
"0"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
2015-09-19 07:38:33 +07:00
}
],
"source": [
"# Run OpenMC!\n",
2016-04-25 10:44:20 -05:00
"openmc.run()"
2015-09-19 07:38:33 +07:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Tally Data Processing"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Our simulation ran successfully and created a statepoint file with all the tally data in it. We begin our analysis here loading the statepoint file and 'reading' the results. By default, data from the statepoint file is only read into memory when it is requested. This helps keep the memory use to a minimum even when a statepoint file may be huge."
]
},
{
"cell_type": "code",
2015-11-29 21:39:03 -05:00
"execution_count": 18,
2015-09-19 07:38:33 +07:00
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [],
"source": [
"# Load the statepoint file\n",
2016-04-08 12:26:02 -04:00
"sp = openmc.StatePoint('statepoint.100.h5')"
2015-09-19 07:38:33 +07:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next we need to get the tally, which can be done with the ``StatePoint.get_tally(...)`` method."
]
},
{
"cell_type": "code",
2015-11-29 21:39:03 -05:00
"execution_count": 19,
2015-09-19 07:38:33 +07:00
"metadata": {
"collapsed": false
},
2015-11-29 21:39:03 -05:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Tally\n",
"\tID =\t10000\n",
2016-05-05 15:14:26 -06:00
"\tName =\tflux\n",
2015-11-29 21:39:03 -05:00
"\tFilters =\t\n",
2016-09-22 03:00:49 -04:00
" \t\tMeshFilter\t[10000]\n",
2015-11-29 21:39:03 -05:00
"\tNuclides =\ttotal \n",
2016-05-05 15:14:26 -06:00
"\tScores =\t['flux', 'fission']\n",
2015-11-29 21:39:03 -05:00
"\tEstimator =\ttracklength\n",
"\n"
]
}
],
2015-09-19 07:38:33 +07:00
"source": [
"tally = sp.get_tally(scores=['flux'])\n",
"print(tally)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The statepoint file actually stores the sum and sum-of-squares for each tally bin from which the mean and variance can be calculated as described [here](http://mit-crpg.github.io/openmc/methods/tallies.html#variance). The sum and sum-of-squares can be accessed using the ``sum`` and ``sum_sq`` properties:"
]
},
{
"cell_type": "code",
2015-11-29 21:39:03 -05:00
"execution_count": 20,
2015-09-19 07:38:33 +07:00
"metadata": {
"collapsed": false
},
2015-11-29 21:39:03 -05:00
"outputs": [
{
"data": {
"text/plain": [
2016-10-31 14:12:19 -05:00
"array([[[ 0.41167874, 0. ]],\n",
2015-11-29 21:39:03 -05:00
"\n",
2016-10-31 14:12:19 -05:00
" [[ 0.40853332, 0. ]],\n",
2015-11-29 21:39:03 -05:00
"\n",
2016-10-31 14:12:19 -05:00
" [[ 0.41140779, 0. ]],\n",
2015-11-29 21:39:03 -05:00
"\n",
" ..., \n",
2016-10-31 14:12:19 -05:00
" [[ 0.40957563, 0. ]],\n",
2015-11-29 21:39:03 -05:00
"\n",
2016-10-31 14:12:19 -05:00
" [[ 0.40983338, 0. ]],\n",
2015-11-29 21:39:03 -05:00
"\n",
2016-10-31 14:12:19 -05:00
" [[ 0.40877195, 0. ]]])"
2015-11-29 21:39:03 -05:00
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
2015-09-19 07:38:33 +07:00
"source": [
"tally.sum"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"However, the mean and standard deviation of the mean are usually what you are more interested in. The Tally class also has properties ``mean`` and ``std_dev`` which automatically calculate these statistics on-the-fly."
]
},
{
"cell_type": "code",
2015-11-29 21:39:03 -05:00
"execution_count": 21,
2015-09-19 07:38:33 +07:00
"metadata": {
"collapsed": false
},
2015-11-29 21:39:03 -05:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(10000, 1, 2)\n"
]
},
{
"data": {
"text/plain": [
2016-10-31 14:12:19 -05:00
"(array([[[ 0.00457421, 0. ]],\n",
2015-11-29 21:39:03 -05:00
" \n",
2016-10-31 14:12:19 -05:00
" [[ 0.00453926, 0. ]],\n",
2015-11-29 21:39:03 -05:00
" \n",
2016-10-31 14:12:19 -05:00
" [[ 0.0045712 , 0. ]],\n",
2015-11-29 21:39:03 -05:00
" \n",
" ..., \n",
2016-10-31 14:12:19 -05:00
" [[ 0.00455084, 0. ]],\n",
2015-11-29 21:39:03 -05:00
" \n",
2016-10-31 14:12:19 -05:00
" [[ 0.0045537 , 0. ]],\n",
2015-11-29 21:39:03 -05:00
" \n",
2016-10-31 14:12:19 -05:00
" [[ 0.00454191, 0. ]]]),\n",
" array([[[ 1.84557765e-05, 0.00000000e+00]],\n",
2015-11-29 21:39:03 -05:00
" \n",
2016-10-31 14:12:19 -05:00
" [[ 1.71073587e-05, 0.00000000e+00]],\n",
2015-11-29 21:39:03 -05:00
" \n",
2016-10-31 14:12:19 -05:00
" [[ 1.76546641e-05, 0.00000000e+00]],\n",
2015-11-29 21:39:03 -05:00
" \n",
" ..., \n",
2016-10-31 14:12:19 -05:00
" [[ 1.82859458e-05, 0.00000000e+00]],\n",
2015-11-29 21:39:03 -05:00
" \n",
2016-10-31 14:12:19 -05:00
" [[ 1.80961726e-05, 0.00000000e+00]],\n",
2015-11-29 21:39:03 -05:00
" \n",
2016-10-31 14:12:19 -05:00
" [[ 2.01200499e-05, 0.00000000e+00]]]))"
2015-11-29 21:39:03 -05:00
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
2015-09-19 07:38:33 +07:00
"source": [
"print(tally.mean.shape)\n",
"(tally.mean, tally.std_dev)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The tally data has three dimensions: one for filter combinations, one for nuclides, and one for scores. We see that there are 10000 filter combinations (corresponding to the 100 x 100 mesh bins), a single nuclide (since none was specified), and two scores. If we only want to look at a single score, we can use the ``get_slice(...)`` method as follows."
]
},
{
"cell_type": "code",
2015-11-29 21:39:03 -05:00
"execution_count": 22,
2015-09-19 07:38:33 +07:00
"metadata": {
"collapsed": false
},
2015-11-29 21:39:03 -05:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Tally\n",
2016-03-23 13:50:27 -04:00
"\tID =\t10001\n",
2016-05-05 15:14:26 -06:00
"\tName =\tflux\n",
2015-11-29 21:39:03 -05:00
"\tFilters =\t\n",
2016-09-22 03:00:49 -04:00
" \t\tMeshFilter\t[10000]\n",
2015-11-29 21:39:03 -05:00
"\tNuclides =\ttotal \n",
2016-05-05 15:14:26 -06:00
"\tScores =\t['flux']\n",
2015-11-29 21:39:03 -05:00
"\tEstimator =\ttracklength\n",
"\n"
]
}
],
2015-09-19 07:38:33 +07:00
"source": [
"flux = tally.get_slice(scores=['flux'])\n",
"fission = tally.get_slice(scores=['fission'])\n",
"print(flux)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To get the bins into a form that we can plot, we can simply change the shape of the array since it is a numpy array."
]
},
{
"cell_type": "code",
2015-11-29 21:39:03 -05:00
"execution_count": 23,
2015-09-19 07:38:33 +07:00
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"flux.std_dev.shape = (100, 100)\n",
"flux.mean.shape = (100, 100)\n",
"fission.std_dev.shape = (100, 100)\n",
"fission.mean.shape = (100, 100)"
]
},
{
"cell_type": "code",
2015-11-29 21:39:03 -05:00
"execution_count": 24,
2015-09-19 07:38:33 +07:00
"metadata": {
"collapsed": false
},
2015-11-29 21:39:03 -05:00
"outputs": [
{
"data": {
"text/plain": [
2016-10-31 14:12:19 -05:00
"<matplotlib.image.AxesImage at 0x7f28799b7ef0>"
2015-11-29 21:39:03 -05:00
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
2016-10-31 14:12:19 -05:00
"image/png": "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\nxCo22a/2QFvgtPsCpiy
2015-11-29 21:39:03 -05:00
"text/plain": [
2016-10-31 14:12:19 -05:00
"<matplotlib.figure.Figure at 0x7f287c563c18>"
2015-11-29 21:39:03 -05:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
2015-09-19 07:38:33 +07:00
"source": [
"fig = plt.subplot(121)\n",
"fig.imshow(flux.mean)\n",
"fig2 = plt.subplot(122)\n",
"fig2.imshow(fission.mean)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now let's say we want to look at the distribution of relative errors of our tally bins for flux. First we create a new variable called ``relative_error`` and set it to the ratio of the standard deviation and the mean, being careful not to divide by zero in case some bins were never scored to."
]
},
{
"cell_type": "code",
2015-11-29 21:39:03 -05:00
"execution_count": 25,
2015-09-19 07:38:33 +07:00
"metadata": {
"collapsed": false
},
2015-11-29 21:39:03 -05:00
"outputs": [
{
"data": {
2016-10-31 14:12:19 -05:00
"image/png": "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\n1OmcZeV0CRgMkta37p5
2015-11-29 21:39:03 -05:00
"text/plain": [
2016-10-31 14:12:19 -05:00
"<matplotlib.figure.Figure at 0x7f287997f978>"
2015-11-29 21:39:03 -05:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
2015-09-19 07:38:33 +07:00
"source": [
"# Determine relative error\n",
"relative_error = np.zeros_like(flux.std_dev)\n",
"nonzero = flux.mean > 0\n",
"relative_error[nonzero] = flux.std_dev[nonzero] / flux.mean[nonzero]\n",
"\n",
"# distribution of relative errors\n",
"ret = plt.hist(relative_error[nonzero], bins=50)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Source Sites"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Source sites can be accessed from the ``source`` property. As shown below, the source sites are represented as a numpy array with a structured datatype."
]
},
{
"cell_type": "code",
2015-11-29 21:39:03 -05:00
"execution_count": 26,
2015-09-19 07:38:33 +07:00
"metadata": {
"collapsed": false
},
2015-11-29 21:39:03 -05:00
"outputs": [
{
"data": {
"text/plain": [
2016-10-31 14:12:19 -05:00
"array([ (1.0, [-0.04091602298055571, -0.28281765875028614, -0.23969748862718712], [-0.5162507278389928, 0.4979959592686946, 0.6967676876533259], 1167993.2181739977, 0),\n",
" (1.0, [-0.04091602298055571, -0.28281765875028614, -0.23969748862718712], [0.9314318185369252, -0.3421578395220699, 0.12394668317702494], 2076480.0407698506, 0),\n",
" (1.0, [0.07588719867579076, 0.3442630703689722, 0.24037509956303865], [-0.4263739205747279, 0.8745850440707152, -0.23088152923428204], 3435875.6567740417, 0),\n",
2015-11-29 21:39:03 -05:00
" ...,\n",
2016-10-31 14:12:19 -05:00
" (1.0, [-0.2976222011116176, 0.06744830909702038, 0.017418564319938733], [0.5146424164525509, 0.8138247541106745, -0.26987488357492534], 3072272.553085709, 0),\n",
" (1.0, [-0.21734045199173016, -0.10720270103504186, -0.532882255592573], [-0.8802303390142701, -0.22473292046402116, 0.4179589270951574], 5120128.793040418, 0),\n",
" (1.0, [-0.21734045199173016, -0.10720270103504186, -0.532882255592573], [-0.16842874876345693, 0.9852495482818028, 0.030250358683490713], 575131.1093690266, 0)], \n",
2015-11-29 21:39:03 -05:00
" dtype=[('wgt', '<f8'), ('xyz', '<f8', (3,)), ('uvw', '<f8', (3,)), ('E', '<f8'), ('delayed_group', '<i4')])"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
2015-09-19 07:38:33 +07:00
"source": [
"sp.source"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If we want, say, only the energies from the source sites, we can simply index the source array with the name of the field:"
]
},
{
"cell_type": "code",
2015-11-29 21:39:03 -05:00
"execution_count": 27,
2015-09-19 07:38:33 +07:00
"metadata": {
"collapsed": false
},
2015-11-29 21:39:03 -05:00
"outputs": [
{
"data": {
"text/plain": [
2016-10-31 14:12:19 -05:00
"array([ 1167993.218174 , 2076480.04076985, 3435875.65677404, ...,\n",
" 3072272.55308571, 5120128.79304042, 575131.10936903])"
2015-11-29 21:39:03 -05:00
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
2015-09-19 07:38:33 +07:00
"source": [
"sp.source['E']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we can look at things like the energy distribution of source sites. Note that we don't directly use the ``matplotlib.pyplot.hist`` method since our binning is logarithmic."
]
},
{
"cell_type": "code",
2015-11-29 21:39:03 -05:00
"execution_count": 28,
2015-09-19 07:38:33 +07:00
"metadata": {
"collapsed": false
},
2015-11-29 21:39:03 -05:00
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.0\n"
]
},
{
"data": {
"text/plain": [
2016-10-31 14:12:19 -05:00
"<matplotlib.text.Text at 0x7f2878085908>"
2015-11-29 21:39:03 -05:00
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
2016-10-31 14:12:19 -05:00
"image/png": "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\nDHwLWA/8CnAXcElXRUm
2015-11-29 21:39:03 -05:00
"text/plain": [
2016-10-31 14:12:19 -05:00
"<matplotlib.figure.Figure at 0x7f287837c908>"
2015-11-29 21:39:03 -05:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
2015-09-19 07:38:33 +07:00
"source": [
"# Create log-spaced energy bins from 1 keV to 100 MeV\n",
2016-10-31 14:12:19 -05:00
"energy_bins = np.logspace(3,7)\n",
2015-09-19 07:38:33 +07:00
"\n",
"# Calculate pdf for source energies\n",
"probability, bin_edges = np.histogram(sp.source['E'], energy_bins, density=True)\n",
"\n",
"# Make sure integrating the PDF gives us unity\n",
"print(sum(probability*np.diff(energy_bins)))\n",
"\n",
"# Plot source energy PDF\n",
"plt.semilogx(energy_bins[:-1], probability*np.diff(energy_bins), linestyle='steps')\n",
2016-10-31 14:12:19 -05:00
"plt.xlabel('Energy (eV)')\n",
"plt.ylabel('Probability/eV')"
2015-09-19 07:38:33 +07:00
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's also look at the spatial distribution of the sites. To make the plot a little more interesting, we can also include the direction of the particle emitted from the source and color each source by the logarithm of its energy."
]
},
{
"cell_type": "code",
2015-11-29 21:39:03 -05:00
"execution_count": 29,
2015-09-19 07:38:33 +07:00
"metadata": {
"collapsed": false
},
2015-11-29 21:39:03 -05:00
"outputs": [
{
"data": {
"text/plain": [
"(-0.5, 0.5)"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
2016-10-31 14:12:19 -05:00
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAWMAAAD7CAYAAAC/gPV7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xd41EbewPHvSNu9LuvesY2NTe+9d1IgIaTyJqT33nPp\nyV3apV9CekJ6pQQCBELoHUI1YIMLxr13b5fm/cNcenLcEXK+ZD/Po+fxSiNpJM3+JM/OjISUkoCA\ngICA/y7lv52BgICAgIBAMA4ICAjoEALBOCAgIKADCATjgICAgA4gEIwDAgICOoBAMA4ICAjoAAz/\n7Qz8mBAi0NYuICDgmEgpxfGsHyaEbDr25EeklCnHs79fIzpaO2MhhPw98jRjxgzmzZt3wvfze/sj\nHtcf8ZggcFzHSwhx3MFYCCH/doxp7+X4g/+v6XBPxgEBAQG/J+N/OwNHBeqMAwIC/tQMxzj9HCHE\nm0KIKiHE3h/Nv14IkSOEyBZCPH6s+fhT6tq16387CyfEH/G4/ojHBIHj6iisx7f6HOAF4N1/zhBC\njAGmAj2llH4hROSxbOhPG4y7dev2387CCfFHPK4/4jFB4Lg6iuOpppBSbhBCdPrR7KuBx6WU/qNp\nao9lW4FqioCAgD+146mm+AVdgFFCiC1CiNVCiAHHmo+AgICAP60T8AOeAXBIKYcIIQYCnwJpx7JS\nQEBAwJ/WCQiCJcB8ACnldiGELoSIkFLW/dpKgWqKgICAPzXjMU6/Qhyd/ulzYByAEKILYPxXgRgC\nT8YBAQF/csdTTSGE+BAYA0QIIYqBB4C3gDlCiGzAA8w6lm0FgnFAQMCf2vE0bZNSzvyFRRf8u9sK\nBOOAgIA/tY4SBDtKPgICAgL+KzpKd+hAMA4ICPhT6yhBsKPkI+BPwE8tBo6pZ2hAwO+mozwZB5q2\nBfxuqngKHe+3nyXaT9LoNCJxfTejYjNC6r9H9gL+pE5AD7z/SCAYB/xu2thCEwvRqaJVux2/e+1P\n0gis1HIOPv8e/HMugOyXkSJQTANOnN+gnfFv4jcp5UKIKUKIXCHEISHEnb+SbqAQwieEOOO32G/A\n/w6JjokUNGpoYDC6WoVx3RuQPRt0/7fpBGaMdKOWGbjf/xBPfsqx7cBTBt7KE5P5gD806zFOJ9px\nB2MhhAK8CEwGugPnCSGyfiHd48Dy491nwP8egUIEF+Lna6xcSxAPQ6/rYeV1kPPuD9IG+c8jqNCO\nPuMs2u56iqCK8l/ecNteyD0TDs0EY9QJPoqAP6I/0pPxICBPSnlESukDPgZO+5l01wNzgerfYJ8B\nx6t5y++6O4kXP3PQicHG7aikgBaNXjMeDn8Khc+DlCAlxrWzMTruxn8KGK+eibmx8Rc2qkPdPKjY\nAWmvglB/12MK+GP4I9UZJ9A+MMY/lR6d9y0hRDxwupTyZX7Yhzvgv0FzQsFNv7hY1s6G4oug7i3Q\nXT9c2LwbVg6GbVOgeukx7U7ippWrsHEJOpb2oFtxGHn9CJpiWyBoJ+TOAVc1cs8L6FoKdVFbsXW6\nH8/9TaSsWMpP3ouotULehUhDF/Saq5CrPvg3T0JAQDuj4dimE+33atr2HPD9uuRfDcgzZsz49u+u\nXbuekMGqN27c+JtvsyP4teNSdD9C+kkJ2cSgsG18+tFbaNLygzRGUyuRcYdI9hURG7SYHZX7KG3p\nz/cvWf+aMFJiN1Jc6sWsPkSrHk25rxdNTfFoBit+c/s2w0zFoPjpNGAFRTkTaaorJ3lYEfuWPEJ8\n6U4Sg8Fgz6GmIZaNbRcy/N2RNIl45JtNtAwwcKiiHmNNOOYx37D6phuoHDwUgCBDNQNC38H9DwPR\nWz4jf8bJ9DF/zpoiN+URfX9wPAavC7/pF2r8hAby93ua7ty8moLgMSDaz+WfsQwejwMHDpCTk/Ob\nb9dwrFHQ/6+THBcp5XFNwBBg2fc+3wXc+aM0hUenw0ALUAlM+4Xtyd/DBx988Lvs5/f2q8flcUr5\n9pVStu6TMucCKX0N0iv3tS/TfVJKKb1ylWyW46WuNUvd/Y2U1c9KefhsKV05323n8BYp7wyW8tCq\n9s91+6ScM03KF+Ol3HWelIWPSZk7Q+q7u8gm/Szpk3u+XbVE3ia1qkNSnoz0vy7kzl39pPR5pGwo\nlPKJ7lI+nyJbR3aXRXO7yjrXe1LmnyF37DhFNpzeV+oej5T1X0ttwSjpufR06bl4pvS9+aqUjWVS\nvj1TyuWvSjn3aSl1/bu8PnWNlE11Upd+6ZVV0in3yWZ9lax3Xyvz5WkyT54sK+UT0i9b/vXJ9ayX\n0pd7rJfihzY/I+V7438w609ZBn9DR2PF8cYv6Qw6tum32N+vTb/Fk/F2IP3oq0cqgHOB834U8L8d\nWFkIMQf4Qkq56DfYd8C/w2CGNa9CemdI6Y9mcNHEw0T6ZkP9UoiZhU4BGgVoIg+/8iyWqPch7Dyo\negCUUIi5B5IHwNUrYNNrkDEWVu+FOxbDorXQaxBUzEHWrkITgqCDUagZXeHoA6jZE4P+8HiUsTac\nzRYyLbeD1GDOubDTDenJmKbpGC0tSIMLjDGkuT9HvzCTtpsyCaosQxriMTz+JiK1M+LoUyYnPwRr\nXsQ3730qEteiDkhCqkY4eQ/kjoR+EzAYojEQjUFEYXTvIVQmYLRcTjATUTD9+rnTNGgNAe8wcMwD\n85hjP++eZtj9FnSZ+h9dtoAT65ifjE+w464zllJqwHXAV8B+4GMpZY4Q4kohxBU/t8rx7jPgP6Qo\nkDUWanKR5iRaqi5H1+rgyEPgKgDAxMUYGI1CDJr+EX7/cjDGQOIrEHoGFF8Aje/DwcXgSIalr8HC\nT2HNbhgyApr3IOs+obnvSETMM6gtyVD4xbdZiMzuiSHSAPH9cWnx2LblwBMJEOOFv1wKd32I8YzL\nMPtaqVcepiloPwa9DdvGzXiKStESragvvYSSlv5dIAaISofmUpoue5AdIpm4lgwS6xpIrLqYsC9i\nKSCTnRipJJlQTsOuTCSyZS+h+rBfD8T15fD+X+C2vqA7QEZA5XQomA7ekl9e7/saj0DaRBhxz39w\n0QJONKP52KYT7Te5J0gplwGZP5r36i+kveS32GfAf+iqD+H96fCKG8uwGixdJ0Dj5xDZ3vRbHH2E\nFRhRtfGIpbdBShWkjURbfAdK015ETDGycR/+6kvxvfcE/qwszE/fgDnFAj32c9h+PhW9BuKMqGH4\n6lex2TOpMYUTVF+D9Y3LkMMzcI96mspt9xD+zmzUiia8E/LxRj6DrH8ZdA3FKlHzoFEtIfqQE3Ex\nNESOQo38hDDlF7pU95iGo62EprTeiCUHYcyXEO/CnjSMgRttbB2t0kAZq5iNwe6gK4Ow+VYRZD4D\ngQBXLlh/1Cpz30rY/wrMHAVNN4NpAhhWQtxfwZT06+e6qRxC42HTEzDoRjAFHe/VCzgROsiTcQfJ\nRsAJ4/GA+Xu3dVsELNmHEHUYe1ei1E6GoB7Q6YFvkwhfC+y+CmNkJFqmQtt9l1C/LwFPUTGxkwHr\nAYzhfhTTq8hxYQjZhnLpbWD/FDrvJ0k1U816Cqz78QzuQ7eDBWxWPye6di8D0zU86yvw7plB0m4X\nrZmhGMLjseY0YHSMR7nhJfDXoC07g5aGUmJfqMH/mIpi8dN5+SGEfSZ0OZ+WzFSsc+5DiYxCdu2F\nknIpos8M1Oey0Af/DZm4FvFEZ8hdBG9+hO3Ftxg78nOk0t7m2S+8VAftxdd4NStNZRgb24gtXUF8\nz08IPrAKYkNg211g0+GqmyH2AjCntrcE0Suh+UYwfvLtj3E/a+4NMOJiCEuBffPBaIfo/63X2P8p\ndJAo2EGyEfBvcZWCNfHY0r7+LFx5KxiPNltXFDAZ0EcNQ4vcgRo+CFoOQ/F+eOMK8DShXhyJtA9D\nyXkHXyc39on9MSYW4HV3JnhITxRLJHywEM69BoZkwboHIPcmSJ4Fwfsxxg5iiBhPXzGcpuQ6gr/u\nRqIpm6DiOjwhoXgtoRj
2015-11-29 21:39:03 -05:00
"text/plain": [
2016-10-31 14:12:19 -05:00
"<matplotlib.figure.Figure at 0x7f2873559908>"
2015-11-29 21:39:03 -05:00
]
},
"metadata": {},
"output_type": "display_data"
}
],
2015-09-19 07:38:33 +07:00
"source": [
"plt.quiver(sp.source['xyz'][:,0], sp.source['xyz'][:,1],\n",
" sp.source['uvw'][:,0], sp.source['uvw'][:,1],\n",
" np.log(sp.source['E']), cmap='jet', scale=20.0)\n",
"plt.colorbar()\n",
"plt.xlim((-0.5,0.5))\n",
"plt.ylim((-0.5,0.5))"
]
}
],
"metadata": {
"kernelspec": {
2016-05-05 15:14:26 -06:00
"display_name": "Python 3",
2015-09-19 07:38:33 +07:00
"language": "python",
2016-05-05 15:14:26 -06:00
"name": "python3"
2015-09-19 07:38:33 +07:00
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
2016-05-05 15:14:26 -06:00
"version": 3
2015-09-19 07:38:33 +07:00
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
2016-05-05 15:14:26 -06:00
"pygments_lexer": "ipython3",
2016-07-25 06:33:37 -05:00
"version": "3.5.2"
2015-09-19 07:38:33 +07:00
}
},
"nbformat": 4,
"nbformat_minor": 0
}