Files
OpenMC_NEA_Training_nov25/course/live_notebooks/Visualization.ipynb
Stafie Alex PSI 850de66b07 first files
2025-12-02 11:57:33 +01:00

606 lines
72 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "5be15e75-0bdf-46bd-a4a8-a057ef156866",
"metadata": {},
"source": [
"# Geometry visualization\n",
"\n",
"We have already been extensively using the `plot()` method on various geometric classes, including `Model`, `Geometry`, `Universe`, `Cell`, and `Region`. This method automates a series a steps as follows:\n",
"\n",
"- For all classes other than `Model`, it builds a single-purpose `Model` instance for plotting and calls `Model.plot(...)`\n",
"- Creates an instance of a `Plot` object corresponding to the plot view\n",
"- Creates a temporary directory and exports the model (with plot information) to XML\n",
"- Runs OpenMC in plotting mode, which produces a .png file\n",
"- Loads the image data from the .png file using matplotlib.image\n",
"- Displays the image using matplotlib.imshow\n",
"\n",
"We can also manually run individual pieces of this workflow ourself to have more control over plotting (e.g., if we want to produce a series of plots). Let's walk through some of the pieces."
]
},
{
"cell_type": "markdown",
"id": "dddd04fd-924d-432c-8fac-a2db91f06f63",
"metadata": {},
"source": [
"## The `Plot` class\n",
"\n",
"The `Plot` class allows us to pass information to OpenMC on a slice (or voxel) plot that we want to view. Most of the attributes on this class are the same as what appears on the `Model.plot` method. Let's see how we can manually create a plot using this class. First, we will create a simple model with two half-spherical shells."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "65266181-5e0a-458c-9d30-3b1d904a9619",
"metadata": {},
"outputs": [],
"source": [
"import openmc\n",
"from IPython.display import Image\n",
"import matplotlib.image as mpimg\n",
"from matplotlib import pyplot as plt"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "209d9598-1375-4302-a17c-1d4124d81cc1",
"metadata": {},
"outputs": [],
"source": [
"mat = openmc.Material()\n",
"mat.add_nuclide('U235', 1.0)\n",
"mat.set_density('g/cm3', 1.0)\n",
"\n",
"p = openmc.XPlane()\n",
"sph1 = openmc.Sphere(r=5.0)\n",
"sph2 = openmc.Sphere(r=10.0)\n",
"sph3 = openmc.Sphere(r=13.0)\n",
"sph4 = openmc.Sphere(r=15.0)\n",
"sph5 = openmc.Sphere(r=50.0)\n",
"\n",
"cell1 = openmc.Cell(fill=mat, region=+sph1 & -sph2 & -p)\n",
"cell2 = openmc.Cell(fill=mat, region=+sph3 & -sph4 & -p)\n",
"empty = openmc.Cell(region=-sph5 & ~cell1.region & ~cell2.region)\n",
"\n",
"model = openmc.Model()\n",
"model.geometry = openmc.Geometry([cell1, cell2, empty])\n",
"model.settings.particles = 1000\n",
"model.settings.batches = 10\n",
"model.settings.inactive = 5"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "5c50938f-8e28-40ce-9af8-d07d5375b6e9",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: xlabel='x [cm]', ylabel='y [cm]'>"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 258.065x259.74 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model.plot(color_by='material')"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "fe3061d0-dced-429c-b8d7-8aebec842e27",
"metadata": {},
"outputs": [],
"source": [
"plot = openmc.Plot()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "eb8ff12d-a7e2-4164-a8a0-2763fce54729",
"metadata": {},
"outputs": [],
"source": [
"plot.width = (35., 35.)\n",
"plot.origin = (0., 0., 0.)\n",
"plot.pixels = (400, 400)\n",
"plot.color_by = 'cell'\n",
"plot.filename = 'xy_plot.png'"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "ff4e7029-0381-409d-8c9f-74d66cc7d220",
"metadata": {},
"outputs": [],
"source": [
"model.plots = [plot]"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "bedfad03-4a04-46b0-a94f-67664d8aad8d",
"metadata": {},
"outputs": [],
"source": [
"model.export_to_model_xml()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "7d647605-13d0-4c0e-af43-8dfecace0623",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" %%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%\n",
" ############### %%%%%%%%%%%%%%%%%%%%%%%%\n",
" ################## %%%%%%%%%%%%%%%%%%%%%%%\n",
" ################### %%%%%%%%%%%%%%%%%%%%%%%\n",
" #################### %%%%%%%%%%%%%%%%%%%%%%\n",
" ##################### %%%%%%%%%%%%%%%%%%%%%\n",
" ###################### %%%%%%%%%%%%%%%%%%%%\n",
" ####################### %%%%%%%%%%%%%%%%%%\n",
" ####################### %%%%%%%%%%%%%%%%%\n",
" ###################### %%%%%%%%%%%%%%%%%\n",
" #################### %%%%%%%%%%%%%%%%%\n",
" ################# %%%%%%%%%%%%%%%%%\n",
" ############### %%%%%%%%%%%%%%%%\n",
" ############ %%%%%%%%%%%%%%%\n",
" ######## %%%%%%%%%%%%%%\n",
" %%%%%%%%%%%\n",
"\n",
" | The OpenMC Monte Carlo Code\n",
" Copyright | 2011-2025 MIT, UChicago Argonne LLC, and contributors\n",
" License | https://docs.openmc.org/en/latest/license.html\n",
" Version | 0.15.3\n",
" Commit Hash | 27e38e894697bb32a1dac7848d2618818b6b8daf\n",
" Date/Time | 2025-11-27 09:34:24\n",
" OpenMP Threads | 2\n",
"\n",
" Reading model XML file 'model.xml' ...\n",
" Reading chain file: /home/ubuntu/data/depletion_chains/chain_endfb71_pwr.xml...\n",
" Preparing distributed cell instances...\n",
"\n",
" =======================> PLOTTING SUMMARY <========================\n",
"\n",
" Processing plot 3: xy_plot.png...\n",
"Plot ID: 3\n",
"Plot file: xy_plot.png\n",
"Universe depth: -1\n",
"Plot Type: Slice\n",
"Origin: 0 0 0\n",
"Width: 35 35\n",
"Coloring: Cells\n",
"Basis: XY\n",
"Pixels: 400 400\n",
"\n"
]
}
],
"source": [
"model.plot_geometry()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "0362dd8b-fe25-440d-b353-0f86d677b8c7",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<IPython.core.display.Image object>"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Image('xy_plot.png')"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "b3d68e7d-af05-4804-ad22-999e0c62aab5",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[[0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" ...,\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ]],\n",
"\n",
" [[0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" ...,\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ]],\n",
"\n",
" [[0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" ...,\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ]],\n",
"\n",
" ...,\n",
"\n",
" [[0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" ...,\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ]],\n",
"\n",
" [[0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" ...,\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ]],\n",
"\n",
" [[0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" ...,\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ],\n",
" [0.00784314, 0.7019608 , 0. ]]],\n",
" shape=(400, 400, 3), dtype=float32)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data = mpimg.imread('xy_plot.png')\n",
"data"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "e1fc1173-9d0b-41a2-938f-154774c858ee",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.image.AxesImage at 0x7f83b17304a0>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.imshow(data)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "ef2b757e-c6a1-4375-8c36-a2a5f8ecd8e8",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<Axes: xlabel='x [cm]', ylabel='y [cm]'>"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAARYAAAEHCAYAAABrx2lxAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAHKxJREFUeJzt3XtQVOf9BvBnIXJTLl6AZccLWIwWg4pJpVAzMcqIVE2ddhyrFdE0JhKpRcwFG8VbvKY1jK3FdBrFpo6ay8RJM4mpMjomFXE0gfrLJB2lGFRcRFNZcOKicH5/IBsWdpe9vGfPZZ+PszPu2d2z351kH7/ve/ac1yBJkgQiIoGClC6AiPSHwUJEwjFYiEg4BgsRCcdgISLhGCxEJByDhYiEY7AQkXAPKV2A2nR0dKChoQGRkZEwGAxKl0OkKpIkoaWlBSaTCUFBzvsSBksPDQ0NGDZsmNJlEKnalStXMHToUKePM1h6iIyMBACs/GEOQoP7KVwNkbpY2+/h9a8+tn1PnGGw9NA1/AkN7ocwBguRQ31NE3DyloiEY7AQkXAMFiISjsFCRMIxWIhIOAYLEQnHYCEi4TQVLKdOncLs2bNhMplgMBhw5MgRu8cXL14Mg8Fgd5sxY4YyxRIFME0Fy507dzB+/Hjs3r3b6XNmzJiB69ev224HDx70Y4VEBGjsl7c5OTnIyclx+ZzQ0FAYjUY/VUREjmiqY3HHyZMnERcXh9GjRyM/Px+3bt1y+Xyr1QqLxWJ3I4VITm6kOZrqWPoyY8YM/PznP0dSUhJqa2vxu9/9Djk5OaisrERwcLDD12zduhUbNmzwc6UBqo+QiDAXO3iJhO8StstUEMlFV8Hyy1/+0vb31NRUjBs3Dj/4wQ9w8uRJTJs2zeFrVq9ejaKiItt9i8XCyyaI4CBEHAUH6ZOugqWnkSNHYsiQIbh06ZLTYAkNDUVoaKifK9OhHkHCEAlsug6Wq1ev4tatW0hISFC6FP1hkJALmgqW1tZWXLp0yXa/rq4O1dXVGDRoEAYNGoQNGzbgF7/4BYxGI2pra/HSSy8hOTkZ2dnZClatMw8ChUFCrmgqWM6dO4cnn3zSdr9rbiQvLw9lZWX497//jf379+P27dswmUyYPn06Nm3axKGOr7p1JwwUcoemgmXKlCmQJOeHFj755BM/VhMA2J2QlzQVLOQH7E5IAAYLdWJ3QgIxWAIdA4VkwGAJZBIDheTBYAlEKuhSJJ4EpGsMlkCiUKA4ChGe/6NvDJZA4cdhT88gYYgEHgaL3vmpS+keJgwSYrDomcxdCsOEnGGw6JGMXQrDhNzBYNEbmbqUrkBhmJA7GCx6IkOoMFDIGwwWvRAcKgwU8gWDRQ8EhgoDhURgsGiZwElaBgqJxGDRKsFdCgOFRGKwaJGgUGGXQnLR1IJlfa3dLEkSSkpKkJCQgPDwcGRlZeHixYvKFCsXgaHyXcJ2hgrJQlPB0tfazTt27MCuXbuwZ88eVFVVoX///sjOzsbdu3f9XKlMBIcKkVw0NRRytXazJEkoLS3FmjVr8LOf/QwA8Le//Q3x8fE4cuSI3WJmmiQgVDj0IX/RVMfiSl1dHcxmM7KysmzboqOjkZ6ejsrKSgUrE0BQqHDoQ/6iqY7FFbPZDACIj4+32x4fH297zBGr1Qqr1Wq7r7pF4QWGihq5c8EnAwx+qIRE0k2weEvvi8KrKVQchYjl75/19SJE5z4uU0UkF90Ei9FoBAA0NjbaLana2NiICRMmOH2dqheF97FbUUOodA+TPkOEdEM3wZKUlASj0YiKigpbkFgsFlRVVSE/P9/p61S7KLwPoaL0JC3DhDQVLK7Wbh4+fDgKCwvx6quvYtSoUUhKSsLatWthMpkwZ84c5Yr2ho+hokSgMEyoO00Fi6u1m8vLy/HSSy/hzp07ePbZZ3H79m1MnjwZR48eRVhYmFIle05jodIVKAwT6s4guVoMOQBZLBZER0ej+JGnEBbcz79vrqFQ8VugcPJWVe6238O2//sAzc3NiIqKcvo8TXUspDx2KOQOBotaaKBbkSAxUMgtDBY1UHmosEshTzFYNMxfocJAIU8xWJTmZbcid6iwSyFfMFiUpOJQYaCQL3RzdjOJwVAhERgsSlFht8JQIVEYLBrCUCGtYLAowYtuhaFCWsJg8TeZ1lb2FkOF5MBg0QC5uhWGCsmFweJPKhoCMVRITgyWAMRQIbkxWPxFJd0KQ4X8gcESQBgq5C8MFpUS3a0wVMifGCz+oLJDzERy01WwrF+/HgaDwe42ZswYpcvyGLsV0jrdnd08duxYHD9+3Hb/oYcU/ogKdysMFVKC7oLloYcesi1epkVqWGSMyFe6GgoBwMWLF2EymTBy5Ej86le/Qn19vcvnW61WWCwWu5teaL5b4foRmqWrYElPT0d5eTmOHj2KsrIy1NXV4fHHH0dLS4vT12zduhXR0dG2m9DlVT0cBonsVjQVKpLjW3Tu41z6Q6N0NRTKycmx/X3cuHFIT0/HiBEj8Pbbb+PXv/61w9eoeu1mPevWjTA89EdXwdJTTEwMHn74YbtlWXuSbe1mBSdtVd2tPAgUhom+6Woo1FNraytqa2uRkJCgdCl90v2kLYc3AUVXHcsLL7yA2bNnY8SIEWhoaMC6desQHByM+fPnK12a36iyW+EyqQFHV8Fy9epVzJ8/H7du3UJsbCwmT56MM2fOIDY2VunSAhOHPQFLV8Fy6NAhpUvopNDRIFV1K+xSApqu51hIIQyVgOdWx9L9cKy71qxZg0GDBnn8OtI4hgrBzWApLS1FRkYGQkJC3NrpZ599hoKCAgaLG3Q1DGKo0ANuz7G8//77iIuLc+u5kZGRXhekeYF6iQSGCnXj1hzLvn37EB0d7fZO33jjDcTHx3tdFGkMQ4V6cKtjycvL82inCxYs8KoY8o4qhkFE3fh0uLm1tRUdHR1226KionwqKJDo4te27FbIAY8PN9fV1WHmzJno378/oqOjMXDgQAwcOBAxMTEYOHCgHDWSWjFUyAmPO5aFCxdCkiTs3bsX8fHxMBgMctSlTQpM3HIYRGrkcbDU1NTg/PnzGD16tBz1kFawWyEXPB4K/ehHP8KVK1fkqIWIdMLjjuWvf/0rli1bhmvXruGRRx5Bv3797B4fN26csOL0TNMTt+xWqA8eB0tTUxNqa2uxZMkS2zaDwQBJkmAwGNDe3i60QCLSHo+D5emnn0ZaWhoOHjzIyVuFceKW1MrjYPnmm2/wwQcfIDk5WY56SO04DCI3eDx5O3XqVNTU1MhRCxHphMcdy+zZs7Fy5UpcuHABqampvSZvn3rqKWHFaUqgnnxI5IDHwbJs2TIAwMaNG3s9xslbIgK8GAp1dHQ4vaklVHbv3o3ExESEhYUhPT0dZ8+eVbokooCiu0tTHj58GEVFRVi3bh0+//xzjB8/HtnZ2bhx44bSpREFDI+DZcWKFdi1a1ev7X/6059QWFgooiaf7Ny5E0uXLsWSJUuQkpKCPXv2ICIiAnv37lW6NO3jESFyk8fB8t577+EnP/lJr+2ZmZl49913hRTlrba2Npw/fx5ZWVm2bUFBQcjKykJlZaXD1+h5UXgipXgcLLdu3XJ4NbmoqCjcvHlTSFHeunnzJtrb23tdvS4+Ph5ms9nha2RdFJ4oQHkcLMnJyTh69Giv7R9//DFGjhwppCh/Wr16NZqbm203nmDpmtR9NXciJzw+3FxUVISCggI0NTVh6tSpAICKigr84Q9/QGlpqej6PDJkyBAEBwejsbHRbntjYyOMRqPD18i2KLweGQDLW59xnoX65NW5QlarFZs3b8amTZsAAImJiSgrK8OiRYuEF+iJkJAQPProo6ioqMCcOXMAdB4er6ioQEFBgaK1EQUSr655m5+fj/z8fDQ1NSE8PBwDBgwQXZfXioqKkJeXh8ceewyTJk1CaWkp7ty5Y3c2NhHJy6eLaatxsfV58+ahqakJJSUlMJvNmDBhAo4ePeqX5UgkSDCAZ3sTuTV5O3HiRPzvf/9ze6eTJ0/GtWvXvC7KVwUFBfjmm29gtVpRVVWF9PR0+d/UAHxn1OiFm4gEc6tjqa6uRk1NjdtLplZXV8NqtfpUGKkXOzPqi9tDoWnTpkGS3DvUyIs/+ZEE+PU7ziND5Aa3gqWurs7jHQ8dOtTj15BnDDAgKncyryJHquNWsIwYMULuOgKTv7sNgTgcIld0d3azVhhgQLj5ZaXL8M6D4RCRMwwW8hp/3k/OMFgEU+TLpsT3m10LucBgEUmB37J0TeAqhV0LOeJxsOTl5eHUqVNy1BKYtPy9fNC1MFyoJ4+Dpbm5GVlZWRg1ahS2bNmi6C9stU7oBK5S320OicgBj4PlyJEjuHbtGvLz83H48GEkJiYiJycH7777Lu7duydHjdQHpYdDAIdEZM+rOZbY2FgUFRWhpqYGVVVVSE5ORm5uLkwmE1auXImLFy+KrlNTAu5LxiER9eDT5O3169dx7NgxHDt2DMHBwfjpT3+KCxcuICUlBa+//rqoGrXFmwlcUd9HJb/XDBfqxuNguXfvHt577z3MmjULI0aMwDvvvIPCwkI0NDRg//79OH78ON5++22HC5pRb6LmWdQwHGK4UBePr8eSkJCAjo4OzJ8/H2fPnsWECRN6PefJJ59ETEyMgPJIcx6ES1TuZP7kP4B5HCyvv/465s6di7CwMKfPiYmJ8erERT3x+FwaUecNqeH8o27h0nlX6YLI3zweCuXm5roMFYLH8yy6Gg51MQCWv3/GoVGA0tUvbxMTE2EwGOxu27ZtU7os/1PT97jbvAsDJnD4dM1bNdq4cSOWLl1qux8ZGalgNR4SMIxR5TVaHnQvkMDhUYDQXbBERkY6XUPI3zyZZ+kaDn2XIOhcIzXMtfTkIGA6N6utUPKVroZCALBt2zYMHjwYaWlpeO2113D//n2Xz5dt7WYFL66tqrkWR7rmX7rNwTj6Q9qlq45lxYoVmDhxIgYNGoTTp09j9erVuH79Onbu3On0NVu3bsWGDRtkq0mxo0Oi9yWXri6mJw6bNM0guXuFbIUUFxdj+3bX//J/9dVXGDNmTK/te/fuxXPPPYfW1lany6harVa7FQUsFguGDRuG4keeQlhwP9+KBwAJiDAXe/B0SdhwSILUeYKglr+XEnjhbhW5234P2/7vAzQ3NyMqKsrp81TfsaxatQqLFy92+Rxni9Gnp6fj/v37uHz5MkaPHu3wOapcu1lQp6HKiVwKCKoPltjYWK9XXKyurkZQUBDi4uIEV+UZRSdxOwvQdtdCmqObydvKykqUlpaipqYG//3vf3HgwAGsXLkSCxcuxMCBA5UrzNtJXEEDVNtErqoHvKQ3ugmW0NBQHDp0CE888QTGjh2LzZs3Y+XKlfjLX/6idGkAPLuUgugr+Kv+KBHpjuqHQu6aOHEizpw5o3QZjj3oWjyZxAUgfgjDIRH5iW46Fr2RrWvhkIj8gMHiR1796EtgEDBcyF8YLP7ixSSuHKslMlzIHxgsfqZ01wIwXEh+DBZ/8qVrYbiQhjBYFOBp1yLXAvIMF5ILg8XfHnQtahgSdZbDcCHxGCxKUNGQqGvfDBcSicGiIK+HRAwXUjkGi1K8PIdIrvmWrn0zXEgEBovCvL5SmkxffrtwYcCQlxgsSvJyIlfOIVHX/qNzH2f3Ql5jsCjN1yGRjF98di/kLQaLSngzJPJXuLB7IU8xWNTAh9+2+CNcut6H3Qu5i8GiFj4sFyLnkaKe72PXvTBgyAkGi8r4tJ6On77oDBjqC4NFTTQwJOr5nr0ChiFD0FCwbN68GZmZmYiIiEBMTIzD59TX12PmzJmIiIhAXFwcXnzxxT5XQlQdUeGiQMAwZKiLZq5529bWhrlz5yIjIwNvvvlmr8fb29sxc+ZMGI1GnD59GtevX8eiRYvQr18/bNmyRYGKffAgXMLNL3u8CqABBkSYizsXPjNu9/s1brtCBui2YNr3D1KAUP1KiD2Vl5ejsLAQt2/fttv+8ccfY9asWWhoaEB8fDwAYM+ePXj55ZfR1NSEkJAQt/ZvsVgQHR0tbiVEX0jwKly+f7ky4eKsFruQ6dJXbVwJUVXcXQlRM0OhvlRWViI1NdUWKgCQnZ0Ni8WCL7/80unrZFsUXgQfF5ZXYt7FVS1dwyWnwyZHN9IkzQyF+mI2m+1CBYDtvtlsdvo6uReFF8HjheW7sa2sqJLOpbvuwybSF0U7luLiYhgMBpe3r7/+WtYaVq9ejebmZtvtypUrsr6fx3y5MJRtF8pM6lLgUrRj8WXB956MRiPOnj1rt62xsdH2mDOqXBS+Jx8mc7/fhbKTuhRYFA0WXxZ87ykjIwObN2/GjRs3bIvAHzt2DFFRUUhJSRHyHooSEC6du1Hv0Ij0QzOTt/X19aiurkZ9fT3a29tRXV2N6upqtLa2AgCmT5+OlJQU5ObmoqamBp988gnWrFmD5cuXq78jcZeAYVHnbjg0InlpJlhKSkqQlpaGdevWobW1FWlpaUhLS8O5c+cAAMHBwfjwww8RHByMjIwMLFy4EIsWLcLGjRsVrlwwgeESYS5WzVEj0hfN/Y5Fbqr6HYsrD37jAsCnoVHnrqTvD2tzeEQuBNzvWAKOAfguYbs83Qv/qSEfMVi0TtDQqHNXDBgSg8GiBwLDpXN3DBjyDYNFLwSHS+cuGTDkHQaLnnQLF9kDhiFDLujmXCF64MGkrq9nRjvedWfAAD2OJD14X6IuDBa96vZL3c67Yr/5DBlyhcGiZzJ2L/Zv4yJkHtRBgYXBEghk7l7s3+r7kAGcBM2Dmki/GCyBokf30rlJ/m93z6ABXISN852QxjBYAo2fhkeuS+gdNs5IkDrrJU3h4eZAJdOhaSKAHUtgU2h4RPrHYCGHAdO5mSFD3mGw0Pe6AgZgF0M+YbCQY+xiyAcMFnKNXQx5QTNHhdxZu9nR8iGHDh3yb6F61uPiUt3/EHWnmY6lr7Wbu+zbtw8zZsyw3XcWQuSD7l0M0Gu41PkUdjSBTDPB0rVaYXl5ucvnxcTEuFxHiGTgRtB0Po1hEyg0EyzuWr58OZ555hmMHDkSy5Ytw5IlS2AwOP8f2mq1wmq12u6rau1mreoZNIDTsLF/GYNHL3QVLBs3bsTUqVMRERGBf/7zn3j++efR2tqKFStWOH2NFtZu1gVHYdOdG8FD2qHo8h/FxcXYvt31eSBfffUVxowZY7tfXl6OwsJC3L59u8/9l5SUYN++fS7XY3bUsQwbNkz9y38QKcDd5T90s3azI+np6di0aROsVqvT1RA1sXYzkcboZu1mR6qrqzFw4EAGB5GfaWaOpb6+Ht9++63d2s0AkJycjAEDBuAf//gHGhsb8eMf/xhhYWE4duwYtmzZghdeeEHZwokCkGaCpaSkBPv377fdT0tLAwCcOHECU6ZMQb9+/bB7926sXLkSkiQhOTkZO3fuxNKlS5UqmShgce3mHjSzdjORArh2MxEphsFCRMIxWIhIOAYLEQnHYCEi4RgsRCQcg4WIhNPMD+T8petnPdb2ewpXQqQ+Xd+Lvn7+xh/I9XD16lUMGzZM6TKIVO3KlSsYOnSo08cZLD10dHSgoaEBkZGRLi8QpbSuyztcuXLF5S8gtS4QPqeWPqMkSWhpaYHJZEJQkPOZFA6FeggKCnKZxGoTFRWl+v8ZRQiEz6mVzxgdHd3nczh5S0TCMViISDgGi0aFhoZi3bp1ur+IVSB8Tj1+Rk7eEpFw7FiISDgGCxEJx2AhIuEYLEQkHINFgzZv3ozMzExEREQ4XfS+vr4eM2fOREREBOLi4vDiiy/i/v37/i3UR7t370ZiYiLCwsKQnp6Os2fPKl2S106dOoXZs2fDZDLBYDDgyJEjdo9LkoSSkhIkJCQgPDwcWVlZuHjxojLFCsBg0aC2tjbMnTsX+fn5Dh9vb2/HzJkz0dbWhtOnT2P//v0oLy9HSUmJnyv13uHDh1FUVIR169bh888/x/jx45GdnY0bN24oXZpX7ty5g/Hjx2P37t0OH9+xYwd27dqFPXv2oKqqCv3790d2djbu3r3r50oFkUiz9u3bJ0VHR/fa/tFHH0lBQUGS2Wy2bSsrK5OioqIkq9Xqxwq9N2nSJGn58uW2++3t7ZLJZJK2bt2qYFViAJDef/992/2Ojg7JaDRKr732mm3b7du3pdDQUOngwYMKVOg7diw6VFlZidTUVMTHx9u2ZWdnw2Kx4Msvv1SwMve0tbXh/PnzyMrKsm0LCgpCVlYWKisrFaxMHnV1dTCbzXafNzo6Gunp6Zr9vAwWHTKbzXahAsB232w2K1GSR27evIn29naHn0EL9Xuq6zPp6fMyWFSiuLgYBoPB5e3rr79Wukwit/CyCSqxatUqLF682OVzRo4c6da+jEZjryMojY2NtsfUbsiQIQgODrbV3KWxsVET9Xuq6zM1NjYiISHBtr2xsRETJkxQqCrfsGNRidjYWIwZM8blLSQkxK19ZWRk4MKFC3ZHUI4dO4aoqCikpKTI9RGECQkJwaOPPoqKigrbto6ODlRUVCAjI0PByuSRlJQEo9Fo93ktFguqqqo0+3nZsWhQfX09vv32W9TX16O9vR3V1dUAgOTkZAwYMADTp09HSkoKcnNzsWPHDpjNZqxZswbLly/XzBm0RUVFyMvLw2OPPYZJkyahtLQUd+7cwZIlS5QuzSutra24dOmS7X5dXR2qq6sxaNAgDB8+HIWFhXj11VcxatQoJCUlYe3atTCZTJgzZ45yRftC6cNS5Lm8vDwJQK/biRMnbM+5fPmylJOTI4WHh0tDhgyRVq1aJd27d0+5or3wxz/+URo+fLgUEhIiTZo0STpz5ozSJXntxIkTDv+b5eXlSZLUech57dq1Unx8vBQaGipNmzZN+s9//qNs0T7gZROISDjOsRCRcAwWIhKOwUJEwjFYiEg4BgsRCcdgISLhGCxEJByDhRRz+fJl2wmWcp8TU15ebnuvwsJCWd+LGCykAsePH7c7T0YO8+bNw/Xr1zV77o3W8FwhUtzgwYMxePBgWd8jPDwc4eHhbp/ISb5hx0JCNDU1wWg0YsuWLbZtp0+fRkhIiFfdyN69ezF27FiEhoYiISEBBQUFtscMBgPeeOMNzJo1CxEREfjhD3+IyspKXLp0CVOmTEH//v2RmZmJ2tpaIZ+NPMdgISFiY2Oxd+9erF+/HufOnUNLSwtyc3NRUFCAadOmebSvsrIyLF++HM8++ywuXLiADz74AMnJyXbP2bRpExYtWoTq6mqMGTMGCxYswHPPPYfVq1fj3LlzkCTJLozIzxQ+CZJ05vnnn5cefvhhacGCBVJqaqp09+5dp8+tq6uTAEhffPGF3XaTySS98sorTl8HQFqzZo3tfmVlpQRAevPNN23bDh48KIWFhfV67RNPPCH99re/df8DkVfYsZBQv//973H//n288847OHDggMfXf7lx4wYaGhr67HLGjRtn+3vXtWJTU1Pttt29excWi8Wj9ycxGCwkVG1tLRoaGtDR0YHLly97/Prw8HC3ntevXz/b3w0Gg9NtHR0dHtdAvmOwkDBtbW1YuHAh5s2bh02bNuGZZ57xeIGxyMhIJCYmyn74meTFw80kzCuvvILm5mbs2rULAwYMwEcffYSnn34aH374oUf7Wb9+PZYtW4a4uDjk5OSgpaUF//rXv/Cb3/xGpspJNHYsJMTJkydRWlqKt956C1FRUQgKCsJbb72FTz/9FGVlZR7tKy8vD6Wlpfjzn/+MsWPHYtasWZpexzgQ8dKUpJjLly8jKSkJX3zxhd+WuZgyZQomTJiA0tJSv7xfoGLHQorLzMxEZmamrO9x4MABDBgwAJ9++qms70Od2LGQYu7fv287chQaGophw4bJ9l4tLS22BdBiYmIwZMgQ2d6LGCxEJAMOhYhIOAYLEQnHYCEi4RgsRCQcg4WIhGOwEJFwDBYiEo7BQkTCMViISLj/B1MWQdkIIrfzAAAAAElFTkSuQmCC",
"text/plain": [
"<Figure size 258.065x259.74 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model.plot(width=(35., 35.))"
]
},
{
"cell_type": "markdown",
"id": "fc39d981-5351-470f-a4e3-91e96eb8b0fb",
"metadata": {},
"source": [
"## 3D visualization: Voxel plots\n",
"\n",
"There are a few ways to perform 3D visualization in OpenMC. The oldest and most rudimentary method is a voxel plot, which is essentially a 3D generalization of the slice plot where the geometry is rasterized over a 3D grid of plots. To generate a voxel plot, we can use the same `Plot` class but just set the type equal to 'voxel' (otherwise it defaults to 'slice'). Additionally, when we give the width/pixels, they need to specify three coordinates."
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "cacdb476-bcdb-44be-abc9-57a5c7f67f35",
"metadata": {},
"outputs": [],
"source": [
"voxel_plot = openmc.Plot()\n",
"voxel_plot.type = 'voxel'\n",
"voxel_plot.origin = (0., 0., 0.)\n",
"voxel_plot.width = (20., 20., 20.)\n",
"voxel_plot.pixels = (100, 100, 100)\n",
"voxel_plot.color_by = 'cell'\n",
"voxel_plot.filename = 'voxel_plot'"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "42a5d9eb-e60e-44a3-8fdc-725fcd6b52b6",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" %%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%\n",
" ############### %%%%%%%%%%%%%%%%%%%%%%%%\n",
" ################## %%%%%%%%%%%%%%%%%%%%%%%\n",
" ################### %%%%%%%%%%%%%%%%%%%%%%%\n",
" #################### %%%%%%%%%%%%%%%%%%%%%%\n",
" ##################### %%%%%%%%%%%%%%%%%%%%%\n",
" ###################### %%%%%%%%%%%%%%%%%%%%\n",
" ####################### %%%%%%%%%%%%%%%%%%\n",
" ####################### %%%%%%%%%%%%%%%%%\n",
" ###################### %%%%%%%%%%%%%%%%%\n",
" #################### %%%%%%%%%%%%%%%%%\n",
" ################# %%%%%%%%%%%%%%%%%\n",
" ############### %%%%%%%%%%%%%%%%\n",
" ############ %%%%%%%%%%%%%%%\n",
" ######## %%%%%%%%%%%%%%\n",
" %%%%%%%%%%%\n",
"\n",
" | The OpenMC Monte Carlo Code\n",
" Copyright | 2011-2025 MIT, UChicago Argonne LLC, and contributors\n",
" License | https://docs.openmc.org/en/latest/license.html\n",
" Version | 0.15.3\n",
" Commit Hash | 27e38e894697bb32a1dac7848d2618818b6b8daf\n",
" Date/Time | 2025-11-27 09:39:40\n",
" OpenMP Threads | 2\n",
"\n",
" Reading model XML file 'model.xml' ...\n",
" Reading chain file: /home/ubuntu/data/depletion_chains/chain_endfb71_pwr.xml...\n",
" Preparing distributed cell instances...\n",
"\n",
" =======================> PLOTTING SUMMARY <========================\n",
"\n",
" Processing plot 5: voxel_plot.h5...\n",
"Plot ID: 5\n",
"Plot file: voxel_plot.h5\n",
"Universe depth: -1\n",
"Plot Type: Voxel\n",
"Origin: 0 0 0\n",
"Width: 20 20 20\n",
"Coloring: Cells\n",
"Voxels: 100 100 100\n",
"\n"
]
}
],
"source": [
"model.plots = [voxel_plot]\n",
"model.plot_geometry()"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "b9fe9eed-6a16-4d94-ac78-82370afdcc04",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'plot.vti'"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"openmc.voxel_to_vtk('voxel_plot.h5')"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "7e9f6482-615d-4fca-9f1d-f375c467f87d",
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"id": "e8cca584-4db8-4a92-a7da-c0716d527343",
"metadata": {},
"source": [
"## 3D plots: Raytrace plots\n",
"\n",
"There are also two plot classes that allow us to produce raytraced 3D plots directly using OpenMC's geometry engine: `WireframeRayTracePlot` and `SolidRayTracePlot`. These plots operate similar to the other classes in that you create an instance of them, attach it to the `plots` attribute of a `Model`, and then run in geometry plotting mode. Like slice plots, they will produce .png files that can be viewed."
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "5c624a13-c55b-40c1-a513-6cf053479862",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" %%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%\n",
" %%%%%%%%%%%%%%%%%%%%%%%%\n",
" ############### %%%%%%%%%%%%%%%%%%%%%%%%\n",
" ################## %%%%%%%%%%%%%%%%%%%%%%%\n",
" ################### %%%%%%%%%%%%%%%%%%%%%%%\n",
" #################### %%%%%%%%%%%%%%%%%%%%%%\n",
" ##################### %%%%%%%%%%%%%%%%%%%%%\n",
" ###################### %%%%%%%%%%%%%%%%%%%%\n",
" ####################### %%%%%%%%%%%%%%%%%%\n",
" ####################### %%%%%%%%%%%%%%%%%\n",
" ###################### %%%%%%%%%%%%%%%%%\n",
" #################### %%%%%%%%%%%%%%%%%\n",
" ################# %%%%%%%%%%%%%%%%%\n",
" ############### %%%%%%%%%%%%%%%%\n",
" ############ %%%%%%%%%%%%%%%\n",
" ######## %%%%%%%%%%%%%%\n",
" %%%%%%%%%%%\n",
"\n",
" | The OpenMC Monte Carlo Code\n",
" Copyright | 2011-2025 MIT, UChicago Argonne LLC, and contributors\n",
" License | https://docs.openmc.org/en/latest/license.html\n",
" Version | 0.15.3\n",
" Commit Hash | 27e38e894697bb32a1dac7848d2618818b6b8daf\n",
" Date/Time | 2025-11-27 09:43:33\n",
" OpenMP Threads | 2\n",
"\n",
" Reading model XML file 'model.xml' ...\n",
" Reading chain file: /home/ubuntu/data/depletion_chains/chain_endfb71_pwr.xml...\n",
" Preparing distributed cell instances...\n",
"\n",
" =======================> PLOTTING SUMMARY <========================\n",
"\n",
" Processing plot 6: raytrace_plot.png...\n",
"Plot ID: 6\n",
"Plot file: raytrace_plot.png\n",
"Universe depth: -1\n",
"Plot Type: Solid ray-traced\n",
"Camera position: 15 -25 10\n",
"Look at: 0 0 0\n",
"Horizontal field of view: 70 degrees\n",
"Pixels: 500 500\n",
"\n"
]
}
],
"source": [
"raytrace_plot = openmc.SolidRayTracePlot()\n",
"raytrace_plot.pixels = (500, 500)\n",
"raytrace_plot.color_by = 'cell'\n",
"raytrace_plot.camera_position = (15., -25., 10.)\n",
"raytrace_plot.look_at = (0., 0., 0.)\n",
"raytrace_plot.opaque_domains = [cell1, cell2]\n",
"raytrace_plot.filename = 'raytrace_plot'\n",
"\n",
"model.plots = [raytrace_plot]\n",
"model.plot_geometry()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "3fa70aa3-cb5b-4ac6-a611-7a92384b346b",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.4"
}
},
"nbformat": 4,
"nbformat_minor": 5
}