From 9bcc4de16a39f691514b7e31e83c55fdcf94e022 Mon Sep 17 00:00:00 2001 From: April Novak Date: Wed, 27 Mar 2024 19:43:51 -0500 Subject: [PATCH] notebooks --- Pincell-solution.ipynb | 667 +++++++++++++++++++++++++++++++---------- 1 file changed, 502 insertions(+), 165 deletions(-) diff --git a/Pincell-solution.ipynb b/Pincell-solution.ipynb index 6eea3a9fb2..6f30c4670e 100644 --- a/Pincell-solution.ipynb +++ b/Pincell-solution.ipynb @@ -5,7 +5,9 @@ "metadata": {}, "source": [ "# Modeling a Pincell\n", - "In this module, we'll demonstrate the basic features of the Python API for constructing input files and running OpenMC. In it, we will show how to create a basic reflective pincell model that is equivalent to modeling an infinite array of fuel pins in a pressurized water reactor. We highly recommend having a copy of the [Python API reference documentation](https://docs.openmc.org/en/stable/pythonapi/index.html) open in another browser tab that you can refer to." + "In this module, we'll demonstrate the basic features of the Python API for constructing input files and running OpenMC. In it, we will show how to create a basic reflective pincell model that is equivalent to modeling an infinite array of fuel pins in a pressurized water reactor. We highly recommend having a copy of the [Python API reference documentation](https://docs.openmc.org/en/stable/pythonapi/index.html) open in another browser tab that you can refer to.\n", + "\n", + "\"drawing\"" ] }, { @@ -26,7 +28,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -75,7 +77,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -91,7 +93,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -108,7 +110,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -128,7 +130,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -475,39 +477,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Help on method clone in module openmc.cell:\n", - "\n", - "clone(clone_materials=True, clone_regions=True, memo=None) method of openmc.cell.Cell instance\n", - " Create a copy of this cell with a new unique ID, and clones\n", - " the cell's region and fill.\n", - " \n", - " Parameters\n", - " ----------\n", - " clone_materials : bool\n", - " Whether to create separate copies of the materials filling cells\n", - " contained in this cell, or the material filling this cell.\n", - " clone_regions : bool\n", - " Whether to create separate copies of the regions bounding cells\n", - " contained in this cell, and the region bounding this cell.\n", - " memo : dict or None\n", - " A nested dictionary of previously cloned objects. This parameter\n", - " is used internally and should not be specified by the user.\n", - " \n", - " Returns\n", - " -------\n", - " clone : openmc.Cell\n", - " The clone of this cell\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "my_cell = openmc.Cell()\n", "help(my_cell.clone)" @@ -522,27 +494,16 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "openmc.cell.Cell" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "type(my_cell)" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -574,7 +535,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -592,7 +553,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -612,7 +573,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -660,7 +621,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -694,7 +655,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -728,7 +689,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ @@ -737,7 +698,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -747,7 +708,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -792,7 +753,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -812,7 +773,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -831,7 +792,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 21, "metadata": {}, "outputs": [], "source": [ @@ -840,7 +801,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -1015,7 +976,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 23, "metadata": {}, "outputs": [ { @@ -1083,7 +1044,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -1165,7 +1126,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 25, "metadata": {}, "outputs": [ { @@ -1182,7 +1143,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -1194,7 +1155,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 27, "metadata": {}, "outputs": [ { @@ -1305,6 +1266,9 @@ "- `openmc.ZTorus` — A torus of the form $(z - z_0)^2/B^2 + (\\sqrt{(x - x_0)^2 + (y - y_0)^2} - A)^2/C^2 - 1 = 0$\n", "\n", "#### Half-Spaces\n", + "\n", + "\"drawing\"\n", + "\n", "A surface *half-space* is the region whose points satisfy a positive or negative inequality of the surface equation. For example, for a sphere of radius one centered at the origin, the surface equation is $f(x,y,z) = x^2 + y^2 + z^2 - 1 = 0$. Thus, we say that the negative half-space of the sphere is defined as the collection of points satisfying $f(x,y,z) < 0$, which one can reason is the inside of the sphere. Conversely, the positive half-space of the sphere would correspond to all points outside of the sphere.\n", "\n", "#### Regions\n", @@ -1321,7 +1285,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 28, "metadata": {}, "outputs": [], "source": [ @@ -1337,7 +1301,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 29, "metadata": {}, "outputs": [ { @@ -1346,7 +1310,7 @@ "openmc.surface.Halfspace" ] }, - "execution_count": 27, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -1366,7 +1330,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 30, "metadata": {}, "outputs": [ { @@ -1398,7 +1362,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -1408,7 +1372,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -1437,7 +1401,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -1457,26 +1421,28 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 34, "metadata": {}, "outputs": [ { - "ename": "AttributeError", - "evalue": "dlsym(0x2042abc40, openmc_sample_external_source): symbol not found", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[32], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43muniverse\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplot\u001b[49m\u001b[43m(\u001b[49m\u001b[43mwidth\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m2.0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m2.0\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/projects/openmc/openmc/universe.py:442\u001b[0m, in \u001b[0;36mUniverse.plot\u001b[0;34m(self, origin, width, pixels, basis, color_by, colors, seed, openmc_exec, axes, legend, axis_units, legend_kwargs, outline, **kwargs)\u001b[0m\n\u001b[1;32m 439\u001b[0m model\u001b[38;5;241m.\u001b[39mplots\u001b[38;5;241m.\u001b[39mappend(plot)\n\u001b[1;32m 441\u001b[0m \u001b[38;5;66;03m# Run OpenMC in geometry plotting mode\u001b[39;00m\n\u001b[0;32m--> 442\u001b[0m \u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mplot_geometry\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcwd\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtmpdir\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mopenmc_exec\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mopenmc_exec\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 444\u001b[0m \u001b[38;5;66;03m# Read image from file\u001b[39;00m\n\u001b[1;32m 445\u001b[0m img_path \u001b[38;5;241m=\u001b[39m Path(tmpdir) \u001b[38;5;241m/\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mplot_\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mplot\u001b[38;5;241m.\u001b[39mid\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m.png\u001b[39m\u001b[38;5;124m'\u001b[39m\n", - "File \u001b[0;32m~/projects/openmc/openmc/model/model.py:833\u001b[0m, in \u001b[0;36mModel.plot_geometry\u001b[0;34m(self, output, cwd, openmc_exec)\u001b[0m\n\u001b[1;32m 829\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThe Model.plots attribute must be specified \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 830\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mbefore executing this method!\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 832\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m _change_directory(Path(cwd)):\n\u001b[0;32m--> 833\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mis_initialized\u001b[49m:\n\u001b[1;32m 834\u001b[0m \u001b[38;5;66;03m# Compute the volumes\u001b[39;00m\n\u001b[1;32m 835\u001b[0m openmc\u001b[38;5;241m.\u001b[39mlib\u001b[38;5;241m.\u001b[39mplot_geometry(output)\n\u001b[1;32m 836\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", - "File \u001b[0;32m~/projects/openmc/openmc/model/model.py:160\u001b[0m, in \u001b[0;36mModel.is_initialized\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 157\u001b[0m \u001b[38;5;129m@property\u001b[39m\n\u001b[1;32m 158\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mis_initialized\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28mbool\u001b[39m:\n\u001b[1;32m 159\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 160\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mopenmc\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mlib\u001b[39;00m\n\u001b[1;32m 161\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m openmc\u001b[38;5;241m.\u001b[39mlib\u001b[38;5;241m.\u001b[39mis_initialized\n\u001b[1;32m 162\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mImportError\u001b[39;00m:\n", - "File \u001b[0;32m~/projects/openmc/openmc/lib/__init__.py:59\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m c_bool\u001b[38;5;241m.\u001b[39min_dll(_dll, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mMCPL_ENABLED\u001b[39m\u001b[38;5;124m\"\u001b[39m)\u001b[38;5;241m.\u001b[39mvalue\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01merror\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[0;32m---> 59\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mcore\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[1;32m 60\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mnuclide\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n\u001b[1;32m 61\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mmaterial\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;241m*\u001b[39m\n", - "File \u001b[0;32m~/projects/openmc/openmc/lib/core.py:102\u001b[0m\n\u001b[1;32m 100\u001b[0m _dll\u001b[38;5;241m.\u001b[39mopenmc_global_bounding_box\u001b[38;5;241m.\u001b[39mrestype \u001b[38;5;241m=\u001b[39m c_int\n\u001b[1;32m 101\u001b[0m _dll\u001b[38;5;241m.\u001b[39mopenmc_global_bounding_box\u001b[38;5;241m.\u001b[39merrcheck \u001b[38;5;241m=\u001b[39m _error_handler\n\u001b[0;32m--> 102\u001b[0m \u001b[43m_dll\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mopenmc_sample_external_source\u001b[49m\u001b[38;5;241m.\u001b[39margtypes \u001b[38;5;241m=\u001b[39m [c_size_t, POINTER(c_uint64), POINTER(_SourceSite)]\n\u001b[1;32m 103\u001b[0m _dll\u001b[38;5;241m.\u001b[39mopenmc_sample_external_source\u001b[38;5;241m.\u001b[39mrestype \u001b[38;5;241m=\u001b[39m c_int\n\u001b[1;32m 104\u001b[0m _dll\u001b[38;5;241m.\u001b[39mopenmc_sample_external_source\u001b[38;5;241m.\u001b[39merrcheck \u001b[38;5;241m=\u001b[39m _error_handler\n", - "File \u001b[0;32m/usr/local/Cellar/python@3.11/3.11.2_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/ctypes/__init__.py:389\u001b[0m, in \u001b[0;36mCDLL.__getattr__\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 387\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m name\u001b[38;5;241m.\u001b[39mstartswith(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m__\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m name\u001b[38;5;241m.\u001b[39mendswith(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m__\u001b[39m\u001b[38;5;124m'\u001b[39m):\n\u001b[1;32m 388\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mAttributeError\u001b[39;00m(name)\n\u001b[0;32m--> 389\u001b[0m func \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__getitem__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 390\u001b[0m \u001b[38;5;28msetattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, name, func)\n\u001b[1;32m 391\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m func\n", - "File \u001b[0;32m/usr/local/Cellar/python@3.11/3.11.2_1/Frameworks/Python.framework/Versions/3.11/lib/python3.11/ctypes/__init__.py:394\u001b[0m, in \u001b[0;36mCDLL.__getitem__\u001b[0;34m(self, name_or_ordinal)\u001b[0m\n\u001b[1;32m 393\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__getitem__\u001b[39m(\u001b[38;5;28mself\u001b[39m, name_or_ordinal):\n\u001b[0;32m--> 394\u001b[0m func \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_FuncPtr\u001b[49m\u001b[43m(\u001b[49m\u001b[43m(\u001b[49m\u001b[43mname_or_ordinal\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 395\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(name_or_ordinal, \u001b[38;5;28mint\u001b[39m):\n\u001b[1;32m 396\u001b[0m func\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m \u001b[38;5;241m=\u001b[39m name_or_ordinal\n", - "\u001b[0;31mAttributeError\u001b[0m: dlsym(0x2042abc40, openmc_sample_external_source): symbol not found" - ] + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ @@ -1492,9 +1458,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAASUAAAEMCAYAAACCxKCJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAcKklEQVR4nO3deVCU5x0H8O+isEh0oXhwKCiWKAY5PCJCO6KRKSKxUp3EqBHqGdtoNThJpfEiTkOjJqVREswYw2i8Yscj9ayihKgUA0KixjCB4BHD4hVZoQqRffpHx40rLO4uezy7+/3MvDPus+/xe5fdr8977LMKIYQAEZEk3OxdABHRwxhKRCQVhhIRSYWhRERSYSgRkVQYSkQkFYYSEUmFoUREUmEoEZFUGEpEJBWHCqXCwkKMGzcOgYGBUCgU2LNnT5vzFxQUQKFQtJjUarVtCiYikzlUKDU0NCAqKgo5OTkmLVdRUYGamhrd1KNHDytVSETt1dHeBZgiKSkJSUlJJi/Xo0cP+Pj4WL4gIrI4hwolc0VHR6OxsREDBw7EihUr8Ktf/crgvI2NjWhsbNQ91mq1uHXrFrp27QqFQmGLcokchhACd+7cQWBgINzcLHPg5dShFBAQgNzcXAwdOhSNjY3YsGEDRo4cieLiYgwePLjVZbKyspCZmWnjSokc25UrV9CrVy+LrEvhqOMpKRQK7N69GykpKSYtFx8fj+DgYGzevLnV5x/tKdXV1SE4OBhXrlyBSqVqT8lETkej0SAoKAi3b9+Gt7e3Rdbp1D2l1gwbNgwnTpww+LxSqYRSqWzRrlKpGEpEBljy1IZDXX2zhPLycgQEBNi7DCIywKF6SvX19aisrNQ9rq6uRnl5OXx9fREcHIyMjAxcvXoVmzZtAgBkZ2cjJCQE4eHhuHfvHjZs2IBjx47h3//+t712gYgew6FCqaSkBKNGjdI9Tk9PBwCkpaUhLy8PNTU1uHz5su75pqYmLFq0CFevXoWXlxciIyNx9OhRvXUQkVwc9kS3rWg0Gnh7e6Ouro7nlIgeYY3Ph8udUyIiuTGUiEgqDCUikgpDiYikwlAiIqkwlIhIKgwlIpIKQ4mIpMJQIiKpMJSISCoMJSKSCkOJiKTCUCIiqTCUiEgqDCUikgpDiYikwlAiIqkwlIhIKgwlIpIKQ4mIpMJQIiKpMJSISCoMJSKSCkOJiKTCUCIiqTCUiEgqDCUikgpDiYikwlAiIqkwlIhIKgwlIpIKQ4mIpMJQIiKpMJSISCoMJSKSCkOJiKTCUCIiqTCUiEgqDCUikopDhVJhYSHGjRuHwMBAKBQK7Nmz57HLFBQUYPDgwVAqlQgNDUVeXp7V6yQi8zlUKDU0NCAqKgo5OTlGzV9dXY3k5GSMGjUK5eXlWLhwIWbNmoXDhw9buVIiMldHexdgiqSkJCQlJRk9f25uLkJCQvD2228DAAYMGIATJ07g73//OxITE61VJhG1g0P1lExVVFSEhIQEvbbExEQUFRUZXKaxsREajUZvItsQQlh0IsfkUD0lU6nVavj5+em1+fn5QaPR4O7du+jUqVOLZbKyspCZmWmrEl1OW2FxsPB5i24racQnBp9TKBQW3RZZjlOHkjkyMjKQnp6ue6zRaBAUFGTHihxXawFk6eBpS1vbai2wGFRycOpQ8vf3R21trV5bbW0tVCpVq70kAFAqlVAqlbYoz+k8GkK2DCBTtVbbo0HFkLIPpw6l2NhYHDhwQK/tyJEjiI2NtVNFzsWRQsgYj9bPkLIPhwql+vp6VFZW6h5XV1ejvLwcvr6+CA4ORkZGBq5evYpNmzYBAObOnYt169bhtddew4wZM3Ds2DF88skn2L9/v712weE9HESOHkKP01ZIMaCsx6FCqaSkBKNGjdI9fnDuJy0tDXl5eaipqcHly5d1z4eEhGD//v145ZVX8I9//AO9evXChg0beDuAGR6EkbMHUVse3vcHAcVwsjyF4LXTNmk0Gnh7e6Ourg4qlcre5diUK/WKzOXqvSdrfD4cqqdEtsFekfHYe7I8hhIBYK/IEh68bq7ee2ovhpKLY6/I8th7ah+GkotiGNnGo70nhtPjMZRckBCCYWRjD4cTg6ltTv2FXNL34IuqDCT7OVj4PL8w/BjsKbkAHqrJhYd0bWMoOTn2jOTFQ7rW8fDNSfFQzXHwkE4fe0pOhodqjomHdD9jKDkR9owcHw/pePjmNBhIzuXBIZ0rYig5OJ47cl6ueq6Jh28OjGHk/FzxcI49JQfFQHItrnQ4x1ByQAwk1+QqwcRQciA8f0SucJ6J55QcBMOIHnD280zsKTkABhK1xlkP5xhKkmMgUVucMZgYShJjIJExnC2YGEqSYiCRKZwpmBhKEmIgkTmcJZiMuvo2YcIEk1ecm5uLHj16mLycq2MgUXscLHze4a/KGdVT2rNnDzw8PODt7W3UtH//ftTX11u7dqfDQCJLcPQek1G/kOvm5ga1Wm10z6dLly748ssv0bdv33YXaG+2+oVcBhJZmi16TNb4fBjVUzp+/Dh8fX2NXunBgwfRs2dPs4tyNQwksgZH7TEZ1VNyZdbuKTGQyNrGxu+02rqt8fkw+2sm165dw7Vr16DVavXaIyMj210UEVmOEMKhTnybHEqlpaVIS0vDhQsXdF1DhUKh2/Hm5maLF+ms2EsiW3C0K3Imh9KMGTPQr18/fPjhh/Dz83OYHZUNA4lsyZGCyeRzSl26dEFZWRlCQ0OtVZNUrHHMzEAie7F0MNnt6tvDRo8ejS+//NIiG3dFDCSyJ0d475l8+LZhwwakpaXh3LlzGDhwINzd3fWe/+1vf2ux4ojI8mQ/8W1yKBUVFeHkyZM4ePBgi+d4ortt7CWRDGQ/v2Ty4dv8+fPx4osvoqamBlqtVm9iIBnGQCKZyHxjpcmhdPPmTbzyyivw8/OzRj1OiYFEMpL1PWlyKE2YMAHHjx+3Ri1EZGMy9pZMPqfUr18/ZGRk4MSJE4iIiGhxovtPf/qTxYpzBuwlkcwOFj5v1a+hmMPk+5RCQkIMr0yhwHfffdfuotqSk5OD1atXQ61WIyoqCmvXrsWwYcNanTcvLw/Tp0/Xa1Mqlbh3757R22vvfRgMJZJde056S/Hdt+rqaots2Bw7duxAeno6cnNzERMTg+zsbCQmJqKiosLgsCoqlQoVFRW6x7a84sBAIkcg29U4hxoO95133sHs2bMxffp0PPXUU8jNzYWXlxc2btxocBmFQgF/f3/dZKsT9AwkciQyvVdNDqWJEyfirbfeatG+atUqPPfccxYpqjVNTU0oLS1FQkKCrs3NzQ0JCQkoKioyuFx9fT169+6NoKAgjB8/HufPn29zO42NjdBoNHoTkSuQ5aS3yaFUWFiIsWPHtmhPSkpCYWGhRYpqzY0bN9Dc3Nyip+Pn5we1Wt3qMv3798fGjRuxd+9efPzxx9BqtYiLi8P3339vcDtZWVl6Q/sGBQWZXCt7SeSIZHnPmhxK9fX18PDwaNHu7u4uXa8iNjYWqampiI6ORnx8PHbt2oXu3btj/fr1BpfJyMhAXV2dbrpy5YoNKyayLxl6SyaHUkREBHbs2NGiffv27XjqqacsUlRrunXrhg4dOqC2tlavvba2Fv7+/katw93dHYMGDUJlZaXBeZRKJVQqld5kCvaSyJHJcKe3yVffli5digkTJqCqqgrPPPMMACA/Px/btm3Dzp3Wu9/Bw8MDQ4YMQX5+PlJSUgAAWq0W+fn5mDdvnlHraG5uxtmzZ1s9/LQEBhI5A3vfu2RyKI0bNw579uzBm2++iX/+85/o1KkTIiMjcfToUcTHx1ujRp309HSkpaVh6NChGDZsGLKzs9HQ0KC7Fyk1NRU9e/ZEVlYWAOCNN97A8OHDERoaitu3b2P16tW4dOkSZs2aZdU6iRydPUcSMGuM7uTkZCQnJ1u6lseaNGkSrl+/jmXLlkGtViM6OhqHDh3Snfy+fPky3Nx+PiL98ccfMXv2bKjVavziF7/AkCFDcOrUKascZrKXRM7Enr0l/prJYxh7xypDiZyNMTdU2m3kSV9fX9y4ccPolQYHB+PSpUtmF+VoGEjkjOz1njbq8O327ds4ePAgvL29jVrpzZs3ObYSEZnF6HNKaWlp1qyDiCRkjxPeRh2+PTrCpDFT3759rV27FHjoRs7MHu9th/pCLhHZnq2vhTGU2oG9JHIFtn6PM5SISCoMJSJ6LFsewjGUzMRDN3IltnyvmxxKzzzzDDIzM1u0//jjj7ov6BKR87FVb8nkUCooKMC6deuQkpKChoYGXXtTUxM+++wzixYnK/aSyBXZ6j1v1uHb0aNHoVarMXz4cFy8eNHCJRGRKzMrlAICAvDZZ58hIiICTz/9NAoKCixcFhHJyBaHcCaH0oNbzpVKJbZu3YoFCxZgzJgxeO+99yxenIx46EauzBbvfZPHU3o0KZcsWYIBAwbwu3FEZBFm/Rhl9+7d9domTpyIsLAwlJSUWKwwInJNJodS7969W20PDw9HeHh4uwsiIrlZe+QA3jxpAp5PIrL+eSWGEhFJhaFERFJhKBGRyax5vxJDyUg8n0T0M2t+FhhKRCQVhhIRSYWhRERSYSgRkVmsdbKboWSkIyf53T6ih1nrZDdDiYikwlAiIqkwlIhIKgwlIpIKQ4mIpMJQIiKzWeO2AIYSEZnNGrfKMJSISCoMJSKSCkOJiKTCUCIiqTCUiEgqDhdKOTk56NOnDzw9PRETE4PTp0+3Of/OnTsRFhYGT09PRERE4MCBAzaqlIjM4VChtGPHDqSnp2P58uU4c+YMoqKikJiYiGvXrrU6/6lTpzB58mTMnDkTZWVlSElJQUpKCs6dO2fjyonIWAphzRHALSwmJgZPP/001q1bBwDQarUICgrC/PnzsXjx4hbzT5o0CQ0NDdi3b5+ubfjw4YiOjkZubq5R29RoNPD29sbO/ePh9YS7ZXaEyEn8t+EnPJe8F3V1dVCpVBZZp8P0lJqamlBaWoqEhARdm5ubGxISElBUVNTqMkVFRXrzA0BiYqLB+QGgsbERGo1GbyIi2zH5Z7vt5caNG2huboafn59eu5+fH7755ptWl1Gr1a3Or1arDW4nKysLmZmZLdp/8+tNFvufgMhZ/P8/bW+LrtNhekq2kpGRgbq6Ot105coVe5dE5FIcpqfUrVs3dOjQAbW1tXrttbW18Pf3b3UZf39/k+YHAKVSCaVS2f6CicgsDtNT8vDwwJAhQ5Cfn69r02q1yM/PR2xsbKvLxMbG6s0PAEeOHDE4PxHZn8P0lAAgPT0daWlpGDp0KIYNG4bs7Gw0NDRg+vTpAIDU1FT07NkTWVlZAIAFCxYgPj4eb7/9NpKTk7F9+3aUlJTggw8+sOduEFEbHCqUJk2ahOvXr2PZsmVQq9WIjo7GoUOHdCezL1++DDe3nzt/cXFx2Lp1K5YsWYK//OUvePLJJ7Fnzx4MHDjQXrtARI/hUPcp2cOD+5QseR8GkbOwxufDYc4pEZFrYCgRkVQYSkQkFYYSEUmFoUREUmEoEZFUGEpEJBWGEhFJhaFERFJhKBGRVBhKRCQVhhIRSYWhRERSYSgRkVQYSkQkFYYSEUmFoUREUmEoEZFUGEpEJBWGEhFJhaFERFJhKBGRVBhKRCQVhhIRSYWhRERSYSgRkVQYSkQkFYYSEUmFoUREUmEoEZFUGEpEJBWGEhFJhaFERFJhKBGRVBhKRCQVhhIRSYWhRERSYSgRkVQYSkQkFYcJpVu3bmHq1KlQqVTw8fHBzJkzUV9f3+YyI0eOhEKh0Jvmzp1ro4qJyBwd7V2AsaZOnYqamhocOXIEP/30E6ZPn445c+Zg69atbS43e/ZsvPHGG7rHXl5e1i6ViNrBIULpwoULOHToEL744gsMHToUALB27VqMHTsWa9asQWBgoMFlvby84O/vb6tSiaidHCKUioqK4OPjowskAEhISICbmxuKi4vxu9/9zuCyW7Zswccffwx/f3+MGzcOS5cubbO31NjYiMbGRt3juro6AIBGo7HAnhA5lwefCyGExdbpEKGkVqvRo0cPvbaOHTvC19cXarXa4HJTpkxB7969ERgYiK+++gp//vOfUVFRgV27dhlcJisrC5mZmS3ag4KCzN8BIid38+ZNeHt7W2Rddg2lxYsX46233mpzngsXLpi9/jlz5uj+HRERgYCAAIwePRpVVVX45S9/2eoyGRkZSE9P1z2+ffs2evfujcuXL1vsRbcHjUaDoKAgXLlyBSqVyt7lmI37IZe6ujoEBwfD19fXYuu0aygtWrQIv//979ucp2/fvvD398e1a9f02u/fv49bt26ZdL4oJiYGAFBZWWkwlJRKJZRKZYt2b29vh37zPKBSqbgfEnGW/XBzs9yFfLuGUvfu3dG9e/fHzhcbG4vbt2+jtLQUQ4YMAQAcO3YMWq1WFzTGKC8vBwAEBASYVS8RWZ9D3Kc0YMAAjBkzBrNnz8bp06dx8uRJzJs3Dy+88ILuytvVq1cRFhaG06dPAwCqqqqwcuVKlJaW4uLFi/j000+RmpqKESNGIDIy0p67Q0RtcIhQAv5/FS0sLAyjR4/G2LFj8etf/xoffPCB7vmffvoJFRUV+O9//wsA8PDwwNGjR/Gb3/wGYWFhWLRoESZOnIh//etfJm1XqVRi+fLlrR7SORLuh1y4H4YphCWv5RERtZPD9JSIyDUwlIhIKgwlIpIKQ4mIpMJQesRf//pXxMXFwcvLCz4+PkYtI4TAsmXLEBAQgE6dOiEhIQHffvutdQt9DEce6iUnJwd9+vSBp6cnYmJidLd5GLJz506EhYXB09MTEREROHDggI0qbZsp+5GXl9fitff09LRhtS0VFhZi3LhxCAwMhEKhwJ49ex67TEFBAQYPHgylUonQ0FDk5eWZvF2G0iOamprw3HPP4Q9/+IPRy6xatQrvvvsucnNzUVxcjCeeeAKJiYm4d++eFStt29SpU3H+/HkcOXIE+/btQ2Fhod7XbgyZPXs2ampqdNOqVatsUO3PduzYgfT0dCxfvhxnzpxBVFQUEhMTW9zR/8CpU6cwefJkzJw5E2VlZUhJSUFKSgrOnTtn07ofZep+AP+/u/vh1/7SpUs2rLilhoYGREVFIScnx6j5q6urkZycjFGjRqG8vBwLFy7ErFmzcPjwYdM2LKhVH330kfD29n7sfFqtVvj7+4vVq1fr2m7fvi2USqXYtm2bFSs07OuvvxYAxBdffKFrO3jwoFAoFOLq1asGl4uPjxcLFiywQYWGDRs2TLz88su6x83NzSIwMFBkZWW1Ov/zzz8vkpOT9dpiYmLESy+9ZNU6H8fU/TD2/WYvAMTu3bvbnOe1114T4eHhem2TJk0SiYmJJm2LPaV2qq6uhlqtRkJCgq7N29sbMTExKCoqsktNjxvqpS1btmxBt27dMHDgQGRkZOhuRrWFpqYmlJaW6r2Wbm5uSEhIMPhaFhUV6c0PAImJiXZ77QHz9gMA6uvr0bt3bwQFBWH8+PE4f/68Lcq1GEv9LRxi6BKZPRg6xc/PT6/dz8+vzWFVrMmWQ71Y0o0bN9Dc3Nzqa/nNN9+0uoxarZbqtQfM24/+/ftj48aNiIyMRF1dHdasWYO4uDicP38evXr1skXZ7Wbob6HRaHD37l106tTJqPW4RE9p8eLFLU4iPjoZerPIxNr7MWfOHCQmJiIiIgJTp07Fpk2bsHv3blRVVVlwL6g1sbGxSE1NRXR0NOLj47Fr1y50794d69evt3dpNucSPSVjh0gxx4OhU2pra/VGH6itrUV0dLRZ6zRExqFeLKlbt27o0KEDamtr9dpra2sN1u3v72/S/LZgzn48yt3dHYMGDUJlZaU1SrQKQ38LlUpldC8JcJFQMnaIFHOEhITA398f+fn5uhDSaDQoLi426QqeMZx9qBcPDw8MGTIE+fn5SElJAQBotVrk5+dj3rx5rS4TGxuL/Px8LFy4UNd25MgRxMbG2qDi1pmzH49qbm7G2bNnMXbsWCtWalmxsbEtbscw629h6ll4Z3fp0iVRVlYmMjMzRefOnUVZWZkoKysTd+7c0c3Tv39/sWvXLt3jv/3tb8LHx0fs3btXfPXVV2L8+PEiJCRE3L171x67IIQQYsyYMWLQoEGiuLhYnDhxQjz55JNi8uTJuue///570b9/f1FcXCyEEKKyslK88cYboqSkRFRXV4u9e/eKvn37ihEjRti07u3btwulUiny8vLE119/LebMmSN8fHyEWq0WQggxbdo0sXjxYt38J0+eFB07dhRr1qwRFy5cEMuXLxfu7u7i7NmzNq37UabuR2Zmpjh8+LCoqqoSpaWl4oUXXhCenp7i/Pnz9toFcefOHd37H4B45513RFlZmbh06ZIQQojFixeLadOm6eb/7rvvhJeXl3j11VfFhQsXRE5OjujQoYM4dOiQSdtlKD0iLS1NAGgxHT9+XDcPAPHRRx/pHmu1WrF06VLh5+cnlEqlGD16tKioqLB98Q+5efOmmDx5sujcubNQqVRi+vTpesFaXV2tt1+XL18WI0aMEL6+vkKpVIrQ0FDx6quvirq6OpvXvnbtWhEcHCw8PDzEsGHDxH/+8x/dc/Hx8SItLU1v/k8++UT069dPeHh4iPDwcLF//34bV9w6U/Zj4cKFunn9/PzE2LFjxZkzZ+xQ9c+OHz/e6mfhQd1paWkiPj6+xTLR0dHCw8ND9O3bV+9zYiwOXUJEUnGJq29E5DgYSkQkFYYSEUmFoUREUmEoEZFUGEpEJBWGEhFJhaFERFJhKJE0Ll68qBvtwNJfZn7Uw8PPPvy9ObI/hhJJ5+jRo8jPz7fqNiZNmoSamhq7fnGXWucSowSQY+natSu6du1q1W106tQJnTp1goeHh1W3Q6ZjT4ms4vr16/D398ebb76pazt16hQ8PDzM6gVt3LgR4eHhUCqVCAgI0BsCRKFQYP369Xj22Wfh5eWFAQMGoKioCJWVlRg5ciSeeOIJxMXFcbA6B8FQIqvo3r07Nm7ciBUrVqCkpAR37tzBtGnTMG/ePIwePdqkdb3//vt4+eWXMWfOHJw9exaffvopQkND9eZZuXIlUlNTUV5ejrCwMEyZMgUvvfQSMjIyUFJSAiGE0WMZkZ21c3QDojb98Y9/FP369RNTpkwRERER4t69ewbnfTCcSllZmV57YGCgeP311w0uB0AsWbJE97ioqEgAEB9++KGubdu2bcLT07PFsjL8ggvpY0+JrGrNmjW4f/8+du7ciS1btkCpVJq0/LVr1/DDDz88tncVGRmp+/eDwesjIiL02u7duweNRmPS9sn2GEpkVVVVVfjhhx+g1Wpx8eJFk5c3dmxnd3d33b8VCoXBNq1Wa3INZFsMJbKapqYmvPjii5g0aRJWrlyJWbNmtfkLsa3p0qUL+vTpY/VbBEgevCWArOb1119HXV0d3n33XXTu3BkHDhzAjBkzsG/fPpPWs2LFCsydOxc9evRAUlIS7ty5g5MnT2L+/PlWqpzsiT0lsoqCggJkZ2dj8+bNUKlUcHNzw+bNm/H555/j/fffN2ldaWlpyM7OxnvvvYfw8HA8++yz+Pbbb61UOdkbx+gmaVy8eBEhISEoKyuz+tdMHhg5ciSio6ORnZ1tk+3R47GnRNKJi4tDXFycVbexZcsWdO7cGZ9//rlVt0OmY0+JpHH//n3dFTqlUomgoCCrbevOnTu6X3P18fFBt27drLYtMg1DiYikwsM3IpIKQ4mIpMJQIiKpMJSISCoMJSKSCkOJiKTCUCIiqTCUiEgq/wMUItV5TdGlEgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "universe.plot(width=(2.0, 2.0), basis='xz')" ] @@ -1508,9 +1495,30 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "universe.plot(width=(2.0, 2.0), basis='xz',\n", " colors={cell: 'fuchsia'})" @@ -1522,18 +1530,20 @@ "source": [ "### Boundary Conditions\n", "\n", - "When you create a surface, by default particles that pass through the surface will consider it to be transmissive, i.e. they pass through the surface freely. To specify boundary conditions, you simply need to set the `Surface.boundary_type` to one of:\n", + "To specify boundary conditions, you simply need to set the `Surface.boundary_type` to one of:\n", "\n", "- `transmission` (default)\n", "- `vacuum`\n", "- `reflective`\n", "- `periodic` (either rotational or translational)\n", - "- `white` (isotropic angular flux)" + "- `white` (isotropic angular flux)\n", + "\n", + "\"drawing\"" ] }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 52, "metadata": {}, "outputs": [], "source": [ @@ -1557,13 +1567,13 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 38, "metadata": {}, "outputs": [], "source": [ - "fuel_outer_radius = openmc.ZCylinder(r=0.39)\n", - "clad_inner_radius = openmc.ZCylinder(r=0.40)\n", - "clad_outer_radius = openmc.ZCylinder(r=0.46)" + "fuel_outer_radius = openmc.ZCylinder(r=0.46955)\n", + "clad_inner_radius = openmc.ZCylinder(r=0.47910)\n", + "clad_outer_radius = openmc.ZCylinder(r=0.54640)" ] }, { @@ -1575,7 +1585,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": {}, "outputs": [], "source": [ @@ -1588,23 +1598,23 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now we can create corresponding cells that assign materials to these regions. As with materials, cells have unique IDs that are assigned either manually or automatically. Note that the gap cell doesn't have any material assigned (it is void by default)." + "Now we can create corresponding cells that assign materials to these regions. As with materials, cells have unique IDs that are assigned either manually or automatically. Note that the gap cell doesn't have any material assigned (it is void, a.k.a. vacuum, by default)." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, "metadata": {}, "outputs": [], "source": [ - "fuel = openmc.Cell(name='fuel')\n", + "fuel = openmc.Cell()\n", "fuel.fill = uo2\n", "fuel.region = fuel_region\n", "\n", - "gap = openmc.Cell(name='air gap')\n", + "gap = openmc.Cell()\n", "gap.region = gap_region\n", "\n", - "clad = openmc.Cell(name='clad')\n", + "clad = openmc.Cell()\n", "clad.fill = zirconium\n", "clad.region = clad_region" ] @@ -1618,11 +1628,11 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "metadata": {}, "outputs": [], "source": [ - "pitch = 1.26\n", + "pitch = 1.44270\n", "left = openmc.XPlane(-pitch/2, boundary_type='reflective')\n", "right = openmc.XPlane(pitch/2, boundary_type='reflective')\n", "bottom = openmc.YPlane(-pitch/2, boundary_type='reflective')\n", @@ -1638,13 +1648,13 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 44, "metadata": {}, "outputs": [], "source": [ "water_region = +left & -right & +bottom & -top & +clad_outer_radius\n", "\n", - "moderator = openmc.Cell(name='moderator')\n", + "moderator = openmc.Cell()\n", "moderator.fill = water\n", "moderator.region = water_region" ] @@ -1653,20 +1663,47 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The final step is to assign the cells we created to a universe and tell OpenMC that this universe is the \"root\" universe in our geometry. The `Geometry` is the final object that is actually exported to XML." + "The final step is to assign the cells we created to a universe and tell OpenMC that this universe is the \"root\" universe in our geometry." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "root_universe = openmc.Universe(cells=(fuel, gap, clad, moderator))\n", - "\n", - "geometry = openmc.Geometry(root_universe)\n", - "geometry.export_to_xml()\n", - "!cat geometry.xml" + "model.geometry = openmc.Geometry(root_universe)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "root_universe.plot((0, 0, 0), width=(pitch, pitch), pixels=100000)" ] }, { @@ -1680,43 +1717,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 54, "metadata": {}, "outputs": [], "source": [ "# Create a point source\n", "point = openmc.stats.Point((0, 0, 0))\n", - "source = openmc.Source(space=point)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now let's create a `Settings` object and give it the source we created along with specifying how many batches and particles we want to run." + "source = openmc.IndependentSource(space=point)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 55, "metadata": {}, "outputs": [], "source": [ - "settings = openmc.Settings()\n", - "settings.source = source\n", - "settings.batches = 100\n", - "settings.inactive = 10\n", - "settings.particles = 1000" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "settings.export_to_xml()\n", - "!cat settings.xml" + "model.settings.source = source\n", + "model.settings.batches = 100\n", + "model.settings.inactive = 10\n", + "model.settings.particles = 1000" ] }, { @@ -1725,25 +1744,233 @@ "source": [ "## Running OpenMC\n", "\n", - "Running OpenMC from Python can be done using the `openmc.run()` function. This function allows you to set the number of MPI processes and OpenMP threads, if need be." + "Running OpenMC from Python can be done using the `model.run()` function. This function allows you to set the number of MPI processes and OpenMP threads, if need be." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 57, "metadata": { "scrolled": true }, - "outputs": [], + "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-2024 MIT, UChicago Argonne LLC, and contributors\n", + " License | https://docs.openmc.org/en/latest/license.html\n", + " Version | 0.14.1-dev\n", + " Git SHA1 | 14ce3cec4b388ae8b7ec5b28db57dbcbff06f147\n", + " Date/Time | 2024-03-27 19:41:41\n", + " MPI Processes | 1\n", + " OpenMP Threads | 8\n", + "\n", + " Reading model XML file 'model.xml' ...\n", + " WARNING: Other XML file input(s) are present. These files may be ignored in\n", + " favor of the model.xml file.\n", + " Reading cross sections XML file...\n", + " Reading Zr90 from\n", + " /Users/anovak/projects/cross_sections/endfb-vii.1-hdf5/neutron/Zr90.h5\n", + " Reading Zr91 from\n", + " /Users/anovak/projects/cross_sections/endfb-vii.1-hdf5/neutron/Zr91.h5\n", + " Reading Zr92 from\n", + " /Users/anovak/projects/cross_sections/endfb-vii.1-hdf5/neutron/Zr92.h5\n", + " Reading Zr94 from\n", + " /Users/anovak/projects/cross_sections/endfb-vii.1-hdf5/neutron/Zr94.h5\n", + " Reading Zr96 from\n", + " /Users/anovak/projects/cross_sections/endfb-vii.1-hdf5/neutron/Zr96.h5\n", + " Reading U234 from\n", + " /Users/anovak/projects/cross_sections/endfb-vii.1-hdf5/neutron/U234.h5\n", + " Reading U235 from\n", + " /Users/anovak/projects/cross_sections/endfb-vii.1-hdf5/neutron/U235.h5\n", + " Reading U238 from\n", + " /Users/anovak/projects/cross_sections/endfb-vii.1-hdf5/neutron/U238.h5\n", + " Reading U236 from\n", + " /Users/anovak/projects/cross_sections/endfb-vii.1-hdf5/neutron/U236.h5\n", + " Reading O16 from\n", + " /Users/anovak/projects/cross_sections/endfb-vii.1-hdf5/neutron/O16.h5\n", + " Reading H1 from\n", + " /Users/anovak/projects/cross_sections/endfb-vii.1-hdf5/neutron/H1.h5\n", + " Reading H2 from\n", + " /Users/anovak/projects/cross_sections/endfb-vii.1-hdf5/neutron/H2.h5\n", + " Reading O17 from\n", + " /Users/anovak/projects/cross_sections/endfb-vii.1-hdf5/neutron/O17.h5\n", + " Reading Pu239 from\n", + " /Users/anovak/projects/cross_sections/endfb-vii.1-hdf5/neutron/Pu239.h5\n", + " Reading Si28 from\n", + " /Users/anovak/projects/cross_sections/endfb-vii.1-hdf5/neutron/Si28.h5\n", + " Reading c_H_in_H2O from\n", + " /Users/anovak/projects/cross_sections/endfb-vii.1-hdf5/neutron/c_H_in_H2O.h5\n", + " Minimum neutron data temperature: 250 K\n", + " Maximum neutron data temperature: 2500 K\n", + " Preparing distributed cell instances...\n", + " Writing summary.h5 file...\n", + " Maximum neutron transport energy: 20000000 eV for Zr90\n", + " Initializing source particles...\n", + "\n", + " ====================> K EIGENVALUE SIMULATION <====================\n", + "\n", + " Bat./Gen. k Average k\n", + " ========= ======== ====================\n", + " 1/1 1.50315\n", + " 2/1 1.44086\n", + " 3/1 1.46540\n", + " 4/1 1.37107\n", + " 5/1 1.33015\n", + " 6/1 1.48464\n", + " 7/1 1.47998\n", + " 8/1 1.28684\n", + " 9/1 1.45556\n", + " 10/1 1.40944\n", + " 11/1 1.39122\n", + " 12/1 1.32307 1.35714 +/- 0.03407\n", + " 13/1 1.52588 1.41339 +/- 0.05959\n", + " 14/1 1.46026 1.42511 +/- 0.04373\n", + " 15/1 1.41125 1.42233 +/- 0.03399\n", + " 16/1 1.45798 1.42827 +/- 0.02838\n", + " 17/1 1.46100 1.43295 +/- 0.02444\n", + " 18/1 1.42515 1.43197 +/- 0.02119\n", + " 19/1 1.54914 1.44499 +/- 0.02277\n", + " 20/1 1.43623 1.44412 +/- 0.02039\n", + " 21/1 1.40115 1.44021 +/- 0.01885\n", + " 22/1 1.43731 1.43997 +/- 0.01721\n", + " 23/1 1.41573 1.43811 +/- 0.01594\n", + " 24/1 1.46697 1.44017 +/- 0.01490\n", + " 25/1 1.45526 1.44117 +/- 0.01391\n", + " 26/1 1.33933 1.43481 +/- 0.01448\n", + " 27/1 1.42147 1.43402 +/- 0.01363\n", + " 28/1 1.36027 1.42993 +/- 0.01349\n", + " 29/1 1.46546 1.43180 +/- 0.01289\n", + " 30/1 1.45108 1.43276 +/- 0.01227\n", + " 31/1 1.43818 1.43302 +/- 0.01167\n", + " 32/1 1.38295 1.43074 +/- 0.01136\n", + " 33/1 1.42458 1.43048 +/- 0.01086\n", + " 34/1 1.38767 1.42869 +/- 0.01055\n", + " 35/1 1.46454 1.43013 +/- 0.01022\n", + " 36/1 1.45980 1.43127 +/- 0.00988\n", + " 37/1 1.38205 1.42944 +/- 0.00968\n", + " 38/1 1.53672 1.43328 +/- 0.01009\n", + " 39/1 1.47527 1.43472 +/- 0.00984\n", + " 40/1 1.43555 1.43475 +/- 0.00951\n", + " 41/1 1.44548 1.43510 +/- 0.00920\n", + " 42/1 1.44951 1.43555 +/- 0.00892\n", + " 43/1 1.41298 1.43486 +/- 0.00867\n", + " 44/1 1.43609 1.43490 +/- 0.00841\n", + " 45/1 1.41570 1.43435 +/- 0.00819\n", + " 46/1 1.43178 1.43428 +/- 0.00796\n", + " 47/1 1.45867 1.43494 +/- 0.00777\n", + " 48/1 1.44260 1.43514 +/- 0.00756\n", + " 49/1 1.42229 1.43481 +/- 0.00737\n", + " 50/1 1.38440 1.43355 +/- 0.00730\n", + " 51/1 1.38517 1.43237 +/- 0.00721\n", + " 52/1 1.42319 1.43215 +/- 0.00704\n", + " 53/1 1.43385 1.43219 +/- 0.00688\n", + " 54/1 1.43942 1.43236 +/- 0.00672\n", + " 55/1 1.45598 1.43288 +/- 0.00659\n", + " 56/1 1.50437 1.43444 +/- 0.00663\n", + " 57/1 1.52213 1.43630 +/- 0.00675\n", + " 58/1 1.44465 1.43647 +/- 0.00661\n", + " 59/1 1.37110 1.43514 +/- 0.00661\n", + " 60/1 1.38867 1.43421 +/- 0.00654\n", + " 61/1 1.45708 1.43466 +/- 0.00643\n", + " 62/1 1.48771 1.43568 +/- 0.00639\n", + " 63/1 1.32654 1.43362 +/- 0.00660\n", + " 64/1 1.48374 1.43455 +/- 0.00654\n", + " 65/1 1.36924 1.43336 +/- 0.00653\n", + " 66/1 1.43809 1.43345 +/- 0.00641\n", + " 67/1 1.45191 1.43377 +/- 0.00631\n", + " 68/1 1.40404 1.43326 +/- 0.00622\n", + " 69/1 1.36879 1.43216 +/- 0.00621\n", + " 70/1 1.45560 1.43256 +/- 0.00612\n", + " 71/1 1.46420 1.43307 +/- 0.00604\n", + " 72/1 1.31191 1.43112 +/- 0.00625\n", + " 73/1 1.40955 1.43078 +/- 0.00616\n", + " 74/1 1.39632 1.43024 +/- 0.00609\n", + " 75/1 1.47145 1.43087 +/- 0.00603\n", + " 76/1 1.43759 1.43097 +/- 0.00594\n", + " 77/1 1.50169 1.43203 +/- 0.00594\n", + " 78/1 1.36304 1.43102 +/- 0.00594\n", + " 79/1 1.46648 1.43153 +/- 0.00588\n", + " 80/1 1.46316 1.43198 +/- 0.00581\n", + " 81/1 1.44568 1.43217 +/- 0.00573\n", + " 82/1 1.47623 1.43279 +/- 0.00568\n", + " 83/1 1.40690 1.43243 +/- 0.00562\n", + " 84/1 1.43895 1.43252 +/- 0.00554\n", + " 85/1 1.42947 1.43248 +/- 0.00547\n", + " 86/1 1.35926 1.43152 +/- 0.00548\n", + " 87/1 1.41580 1.43131 +/- 0.00541\n", + " 88/1 1.40517 1.43098 +/- 0.00535\n", + " 89/1 1.40848 1.43069 +/- 0.00529\n", + " 90/1 1.50568 1.43163 +/- 0.00531\n", + " 91/1 1.49946 1.43247 +/- 0.00531\n", + " 92/1 1.41449 1.43225 +/- 0.00525\n", + " 93/1 1.50841 1.43317 +/- 0.00527\n", + " 94/1 1.48296 1.43376 +/- 0.00524\n", + " 95/1 1.43579 1.43378 +/- 0.00517\n", + " 96/1 1.37100 1.43305 +/- 0.00517\n", + " 97/1 1.53292 1.43420 +/- 0.00523\n", + " 98/1 1.47074 1.43461 +/- 0.00519\n", + " 99/1 1.38857 1.43410 +/- 0.00516\n", + " 100/1 1.35518 1.43322 +/- 0.00517\n", + " Creating state point statepoint.100.h5...\n", + "\n", + " =======================> TIMING STATISTICS <=======================\n", + "\n", + " Total time for initialization = 2.1104e+00 seconds\n", + " Reading cross sections = 2.0588e+00 seconds\n", + " Total time in simulation = 1.4335e+00 seconds\n", + " Time in transport only = 1.4178e+00 seconds\n", + " Time in inactive batches = 1.3695e-01 seconds\n", + " Time in active batches = 1.2965e+00 seconds\n", + " Time synchronizing fission bank = 6.2387e-03 seconds\n", + " Sampling source sites = 4.8576e-03 seconds\n", + " SEND/RECV source sites = 5.5880e-04 seconds\n", + " Time accumulating tallies = 3.8430e-05 seconds\n", + " Time writing statepoints = 5.5325e-03 seconds\n", + " Total time for finalization = 2.9380e-06 seconds\n", + " Total time elapsed = 3.5537e+00 seconds\n", + " Calculation Rate (inactive) = 73016.9 particles/second\n", + " Calculation Rate (active) = 69415.4 particles/second\n", + "\n", + " ============================> RESULTS <============================\n", + "\n", + " k-effective (Collision) = 1.42977 +/- 0.00417\n", + " k-effective (Track-length) = 1.43322 +/- 0.00517\n", + " k-effective (Absorption) = 1.42387 +/- 0.00288\n", + " Combined k-effective = 1.42566 +/- 0.00277\n", + " Leakage Fraction = 0.00000 +/- 0.00000\n", + "\n" + ] + } + ], "source": [ - "openmc.run()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Great! OpenMC already told us our k-effective." + "statepoint = model.run()" ] }, { @@ -1757,7 +1984,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 58, "metadata": {}, "outputs": [], "source": [ @@ -1778,13 +2005,11 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 59, "metadata": {}, "outputs": [], "source": [ - "plots = openmc.Plots([plot])\n", - "plots.export_to_xml()\n", - "!cat plots.xml" + "model.plots = openmc.Plots([plot])" ] }, { @@ -1796,9 +2021,56 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 60, "metadata": {}, - "outputs": [], + "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-2024 MIT, UChicago Argonne LLC, and contributors\n", + " License | https://docs.openmc.org/en/latest/license.html\n", + " Version | 0.14.1-dev\n", + " Git SHA1 | 14ce3cec4b388ae8b7ec5b28db57dbcbff06f147\n", + " Date/Time | 2024-03-27 19:42:15\n", + " MPI Processes | 1\n", + " OpenMP Threads | 8\n", + "\n", + " Reading model XML file 'model.xml' ...\n", + " WARNING: Other XML file input(s) are present. These files may be ignored in\n", + " favor of the model.xml file.\n", + " Preparing distributed cell instances...\n", + "\n", + " =======================> PLOTTING SUMMARY <========================\n", + "\n" + ] + } + ], "source": [ "openmc.plot_geometry()" ] @@ -1812,10 +2084,75 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 62, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CMakeLists.txt \u001b[1m\u001b[36mcmake\u001b[m\u001b[m pyproject.toml\r\n", + "CODEOWNERS csg_half.png pytest.ini\r\n", + "CODE_OF_CONDUCT.md \u001b[1m\u001b[36mdocs\u001b[m\u001b[m \u001b[1m\u001b[36mscripts\u001b[m\u001b[m\r\n", + "CONTRIBUTING.md \u001b[1m\u001b[36mexamples\u001b[m\u001b[m \u001b[31msetup.py\u001b[m\u001b[m\r\n", + "Dockerfile \u001b[1m\u001b[36minclude\u001b[m\u001b[m \u001b[1m\u001b[36msrc\u001b[m\u001b[m\r\n", + "LICENSE \u001b[1m\u001b[36mman\u001b[m\u001b[m statepoint.100.h5\r\n", + "MANIFEST.in materials.xml summary.h5\r\n", + "Pincell-solution.ipynb mc_bcs.png \u001b[1m\u001b[36mtests\u001b[m\u001b[m\r\n", + "Pincell.ipynb model.xml \u001b[1m\u001b[36mtools\u001b[m\u001b[m\r\n", + "README.md \u001b[1m\u001b[36mopenmc\u001b[m\u001b[m \u001b[1m\u001b[36mvendor\u001b[m\u001b[m\r\n", + "bcs.png \u001b[1m\u001b[36mopenmc.egg-info\u001b[m\u001b[m\r\n", + "\u001b[1m\u001b[36mbuild\u001b[m\u001b[m pincell.png\r\n" + ] + }, + { + "ename": "FileNotFoundError", + "evalue": "No such file or directory: 'pinplot.png'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m/usr/local/opt/ipython/libexec/lib/python3.11/site-packages/IPython/core/display.py:1045\u001b[0m, in \u001b[0;36mImage._data_and_metadata\u001b[0;34m(self, always_both)\u001b[0m\n\u001b[1;32m 1044\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1045\u001b[0m b64_data \u001b[38;5;241m=\u001b[39m \u001b[43mb2a_base64\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnewline\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mascii\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 1046\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n", + "\u001b[0;31mTypeError\u001b[0m: a bytes-like object is required, not 'str'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m/usr/local/opt/ipython/libexec/lib/python3.11/site-packages/IPython/core/formatters.py:974\u001b[0m, in \u001b[0;36mMimeBundleFormatter.__call__\u001b[0;34m(self, obj, include, exclude)\u001b[0m\n\u001b[1;32m 971\u001b[0m method \u001b[38;5;241m=\u001b[39m get_real_method(obj, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprint_method)\n\u001b[1;32m 973\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m method \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 974\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mmethod\u001b[49m\u001b[43m(\u001b[49m\u001b[43minclude\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minclude\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mexclude\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mexclude\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 975\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 976\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", + "File \u001b[0;32m/usr/local/opt/ipython/libexec/lib/python3.11/site-packages/IPython/core/display.py:1035\u001b[0m, in \u001b[0;36mImage._repr_mimebundle_\u001b[0;34m(self, include, exclude)\u001b[0m\n\u001b[1;32m 1033\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39membed:\n\u001b[1;32m 1034\u001b[0m mimetype \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_mimetype\n\u001b[0;32m-> 1035\u001b[0m data, metadata \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_data_and_metadata\u001b[49m\u001b[43m(\u001b[49m\u001b[43malways_both\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[1;32m 1036\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m metadata:\n\u001b[1;32m 1037\u001b[0m metadata \u001b[38;5;241m=\u001b[39m {mimetype: metadata}\n", + "File \u001b[0;32m/usr/local/opt/ipython/libexec/lib/python3.11/site-packages/IPython/core/display.py:1047\u001b[0m, in \u001b[0;36mImage._data_and_metadata\u001b[0;34m(self, always_both)\u001b[0m\n\u001b[1;32m 1045\u001b[0m b64_data \u001b[38;5;241m=\u001b[39m b2a_base64(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdata, newline\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mascii\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 1046\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m-> 1047\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m(\n\u001b[1;32m 1048\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNo such file or directory: \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdata)) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[1;32m 1049\u001b[0m md \u001b[38;5;241m=\u001b[39m {}\n\u001b[1;32m 1050\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmetadata:\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: No such file or directory: 'pinplot.png'" + ] + }, + { + "ename": "FileNotFoundError", + "evalue": "No such file or directory: 'pinplot.png'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m/usr/local/opt/ipython/libexec/lib/python3.11/site-packages/IPython/core/display.py:1045\u001b[0m, in \u001b[0;36mImage._data_and_metadata\u001b[0;34m(self, always_both)\u001b[0m\n\u001b[1;32m 1044\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 1045\u001b[0m b64_data \u001b[38;5;241m=\u001b[39m \u001b[43mb2a_base64\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnewline\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mascii\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 1046\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n", + "\u001b[0;31mTypeError\u001b[0m: a bytes-like object is required, not 'str'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mFileNotFoundError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m/usr/local/opt/ipython/libexec/lib/python3.11/site-packages/IPython/core/formatters.py:344\u001b[0m, in \u001b[0;36mBaseFormatter.__call__\u001b[0;34m(self, obj)\u001b[0m\n\u001b[1;32m 342\u001b[0m method \u001b[38;5;241m=\u001b[39m get_real_method(obj, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprint_method)\n\u001b[1;32m 343\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m method \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 344\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mmethod\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 345\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m 346\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", + "File \u001b[0;32m/usr/local/opt/ipython/libexec/lib/python3.11/site-packages/IPython/core/display.py:1067\u001b[0m, in \u001b[0;36mImage._repr_png_\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 1065\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_repr_png_\u001b[39m(\u001b[38;5;28mself\u001b[39m):\n\u001b[1;32m 1066\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39membed \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mformat \u001b[38;5;241m==\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_FMT_PNG:\n\u001b[0;32m-> 1067\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_data_and_metadata\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/usr/local/opt/ipython/libexec/lib/python3.11/site-packages/IPython/core/display.py:1047\u001b[0m, in \u001b[0;36mImage._data_and_metadata\u001b[0;34m(self, always_both)\u001b[0m\n\u001b[1;32m 1045\u001b[0m b64_data \u001b[38;5;241m=\u001b[39m b2a_base64(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdata, newline\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m)\u001b[38;5;241m.\u001b[39mdecode(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mascii\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 1046\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m-> 1047\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m(\n\u001b[1;32m 1048\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNo such file or directory: \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdata)) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[1;32m 1049\u001b[0m md \u001b[38;5;241m=\u001b[39m {}\n\u001b[1;32m 1050\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mmetadata:\n", + "\u001b[0;31mFileNotFoundError\u001b[0m: No such file or directory: 'pinplot.png'" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ + "!ls\n", + "\n", "from IPython.display import Image\n", "Image(\"pinplot.png\")" ]