OpenMC/examples/jupyter/search.ipynb
2019-10-28 11:55:45 -05:00

352 lines
25 KiB
Text

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This Notebook illustrates the usage of the OpenMC Python API's generic eigenvalue search capability. In this Notebook, we will do a critical boron concentration search of a typical PWR pin cell.\n",
"\n",
"To use the search functionality, we must create a function which creates our model according to the input parameter we wish to search for (in this case, the boron concentration). \n",
"\n",
"This notebook will first create that function, and then, run the search."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# Initialize third-party libraries and the OpenMC Python API\n",
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"import openmc\n",
"import openmc.model\n",
"\n",
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Create Parametrized Model\n",
"\n",
"To perform the search we will use the `openmc.search_for_keff` function. This function requires a different function be defined which creates an parametrized model to analyze. This model is required to be stored in an `openmc.model.Model` object. The first parameter of this function will be modified during the search process for our critical eigenvalue.\n",
"\n",
"Our model will be a pin-cell from the [Multi-Group Mode Part II](http://docs.openmc.org/en/latest/examples/mg-mode-part-ii.html) assembly, except this time the entire model building process will be contained within a function, and the Boron concentration will be parametrized."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# Create the model. `ppm_Boron` will be the parametric variable.\n",
"\n",
"def build_model(ppm_Boron):\n",
" # Create the pin materials\n",
" fuel = openmc.Material(name='1.6% Fuel')\n",
" fuel.set_density('g/cm3', 10.31341)\n",
" fuel.add_element('U', 1., enrichment=1.6)\n",
" fuel.add_element('O', 2.)\n",
"\n",
" zircaloy = openmc.Material(name='Zircaloy')\n",
" zircaloy.set_density('g/cm3', 6.55)\n",
" zircaloy.add_element('Zr', 1.)\n",
"\n",
" water = openmc.Material(name='Borated Water')\n",
" water.set_density('g/cm3', 0.741)\n",
" water.add_element('H', 2.)\n",
" water.add_element('O', 1.)\n",
"\n",
" # Include the amount of boron in the water based on the ppm,\n",
" # neglecting the other constituents of boric acid\n",
" water.add_element('B', ppm_Boron * 1e-6)\n",
" \n",
" # Instantiate a Materials object\n",
" materials = openmc.Materials([fuel, zircaloy, water])\n",
" \n",
" # Create cylinders for the fuel and clad\n",
" fuel_outer_radius = openmc.ZCylinder(r=0.39218)\n",
" clad_outer_radius = openmc.ZCylinder(r=0.45720)\n",
"\n",
" # Create boundary planes to surround the geometry\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",
"\n",
" # Create fuel Cell\n",
" fuel_cell = openmc.Cell(name='1.6% Fuel')\n",
" fuel_cell.fill = fuel\n",
" fuel_cell.region = -fuel_outer_radius\n",
"\n",
" # Create a clad Cell\n",
" clad_cell = openmc.Cell(name='1.6% Clad')\n",
" clad_cell.fill = zircaloy\n",
" clad_cell.region = +fuel_outer_radius & -clad_outer_radius\n",
"\n",
" # Create a moderator Cell\n",
" moderator_cell = openmc.Cell(name='1.6% Moderator')\n",
" moderator_cell.fill = water\n",
" moderator_cell.region = +clad_outer_radius & (+min_x & -max_x & +min_y & -max_y)\n",
"\n",
" # Create root Universe\n",
" root_universe = openmc.Universe(name='root universe', universe_id=0)\n",
" root_universe.add_cells([fuel_cell, clad_cell, moderator_cell])\n",
"\n",
" # Create Geometry and set root universe\n",
" geometry = openmc.Geometry(root_universe)\n",
" \n",
" # Finish with the settings file\n",
" settings = openmc.Settings()\n",
" settings.batches = 300\n",
" settings.inactive = 20\n",
" settings.particles = 1000\n",
" settings.run_mode = 'eigenvalue'\n",
"\n",
" # Create an initial uniform spatial source distribution over fissionable zones\n",
" bounds = [-0.63, -0.63, -10, 0.63, 0.63, 10.]\n",
" uniform_dist = openmc.stats.Box(bounds[:3], bounds[3:], only_fissionable=True)\n",
" settings.source = openmc.source.Source(space=uniform_dist)\n",
"\n",
" # We dont need a tallies file so dont waste the disk input/output time\n",
" settings.output = {'tallies': False}\n",
" \n",
" model = openmc.model.Model(geometry, materials, settings)\n",
" \n",
" return model"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Search for the Critical Boron Concentration\n",
"\n",
"To perform the search we imply call the `openmc.search_for_keff` function and pass in the relvant arguments. For our purposes we will be passing in the model building function (`build_model` defined above), a bracketed range for the expected critical Boron concentration (1,000 to 2,500 ppm), the tolerance, and the method we wish to use. \n",
"\n",
"Instead of the bracketed range we could have used a single initial guess, but have elected not to in this example. Finally, due to the high noise inherent in using as few histories as are used in this example, our tolerance on the final keff value will be rather large (1.e-2) and a bisection method will be used for the search."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/romano/openmc/openmc/mixin.py:71: IDWarning: Another Universe instance already exists with id=0.\n",
" warn(msg, IDWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 1; Guess of 1.00e+03 produced a keff of 1.08853 +/- 0.00158\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/romano/openmc/openmc/mixin.py:71: IDWarning: Another Universe instance already exists with id=0.\n",
" warn(msg, IDWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 2; Guess of 2.50e+03 produced a keff of 0.95372 +/- 0.00148\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/romano/openmc/openmc/mixin.py:71: IDWarning: Another Universe instance already exists with id=0.\n",
" warn(msg, IDWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 3; Guess of 1.75e+03 produced a keff of 1.01328 +/- 0.00169\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/romano/openmc/openmc/mixin.py:71: IDWarning: Another Universe instance already exists with id=0.\n",
" warn(msg, IDWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 4; Guess of 2.12e+03 produced a keff of 0.98150 +/- 0.00158\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/romano/openmc/openmc/mixin.py:71: IDWarning: Another Universe instance already exists with id=0.\n",
" warn(msg, IDWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 5; Guess of 1.94e+03 produced a keff of 0.99886 +/- 0.00146\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/romano/openmc/openmc/mixin.py:71: IDWarning: Another Universe instance already exists with id=0.\n",
" warn(msg, IDWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 6; Guess of 1.84e+03 produced a keff of 1.00759 +/- 0.00162\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/romano/openmc/openmc/mixin.py:71: IDWarning: Another Universe instance already exists with id=0.\n",
" warn(msg, IDWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 7; Guess of 1.89e+03 produced a keff of 1.00063 +/- 0.00166\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/romano/openmc/openmc/mixin.py:71: IDWarning: Another Universe instance already exists with id=0.\n",
" warn(msg, IDWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 8; Guess of 1.91e+03 produced a keff of 0.99970 +/- 0.00150\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/home/romano/openmc/openmc/mixin.py:71: IDWarning: Another Universe instance already exists with id=0.\n",
" warn(msg, IDWarning)\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration: 9; Guess of 1.90e+03 produced a keff of 0.99935 +/- 0.00164\n",
"Critical Boron Concentration: 1902 ppm\n"
]
}
],
"source": [
"# Perform the search\n",
"crit_ppm, guesses, keffs = openmc.search_for_keff(build_model, bracket=[1000., 2500.],\n",
" tol=1e-2, bracketed_method='bisect',\n",
" print_iterations=True)\n",
"\n",
"print('Critical Boron Concentration: {:4.0f} ppm'.format(crit_ppm))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finally, the `openmc.search_for_keff` function also provided us with `List`s of the guesses and corresponding keff values generated during the search process with OpenMC. Let's use that information to make a quick plot of the value of keff versus the boron concentration."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 576x324 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(8, 4.5))\n",
"plt.title('Eigenvalue versus Boron Concentration')\n",
"# Create a scatter plot using the mean value of keff\n",
"plt.scatter(guesses, [keffs[i].nominal_value for i in range(len(keffs))])\n",
"plt.xlabel('Boron Concentration [ppm]')\n",
"plt.ylabel('Eigenvalue')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"We see a nearly linear reactivity coefficient for the boron concentration, exactly as one would expect for a pure 1/v absorber at small concentrations."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.7.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}