Reactor X-Section

Reactor X-Section preview image

1 collaborator

Uri_dolphin3 Uri Wilensky (Author)


chemistry and physics 

Tagged by Reuven M. Lerner over 10 years ago


Tagged by Reuven M. Lerner about 11 years ago

nuclear energy 

Tagged by Reuven M. Lerner about 11 years ago


Tagged by Reuven M. Lerner over 10 years ago

Model group CCL | Visible to everyone | Changeable by group members (CCL)
Model was written in NetLogo 5.0.4 • Viewed 291 times • Downloaded 59 times • Run 0 times
Download the 'Reactor X-Section' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


This project simulates a nuclear fission reaction in a nuclear power plant. In a fission reaction, free neutrons hit uranium atoms, causing each uranium atom to generate 2 or 3 neutrons and a unit of energy. The uranium atom itself splits into two smaller atoms. The newly generated neutrons, together with the neutron that caused the reaction, keep moving and continue to hit more uranium atoms, which release more neutrons, etc. This is the chain reaction that happens inside an atomic bomb.

Most nuclear energy is used for peaceful purpose, however. Generated in a nuclear power plant, nuclear fission goes on in a much more controlled fashion. Heavy metal plates made of lead help to absorb the free neutrons, thus fewer atoms of uranium are smashed, which in turn limits how much energy is released.

This model simulates the process of a nuclear fission reaction inside such a plant. The reactor core is built of concrete, with adjustable control rods to help control the speed of the reaction. The reactor has a built-in automatic controller, and has a set of manual controls as well.


The REACTOR-SIZE slider controls the size of the reactor.

The ROD-SPACING slider controls the distance between the control rods.

The SPEND-FUEL switch controls whether or not the fuel is used up when a neutron hits it.

The POWER-RATED slider controls the rated power, which is used for automatic control.

The ROD-DEPTH slider controls the rod depth when under manual control.

The RELEASE NEUTRON button introduces a neutron into the reactor. It can be used at anytime before or during the reaction.

Press the SETUP button to set up the reactor.

When MANUAL is on, use the ROD-DEPTH slider to control the rod depth. If they are too short, too many neutrons can escape and the reactor will generate too much power. If they are too long, all free neutrons will be absorbed, and no power will be generated.

When AUTO-REACT is on, the reactor will adjust itself as needed to keep power production under control.

The POWER monitor shows the current power output.
The POWER-CHANGE monitor shows the change in power over the last clock tick.

Look at the POWER-PLOT plot to see the power curve.


Observe the fluctuation of the power curve. The blue line is the rated-power line and the red line is the actually generated power line.


There are two procedures, one for manual control, one for automatic control. (Respectively called 'manu-react' and 'auto-controller'.)

The manual controls are very simple. The ROD-DEPTH slider controls how deep the control rods are inserted into the reactor.

The automatic controller is basically an ON and OFF controller. It is based on 1) comparison of power generated and power rated and 2) the power change. The mechanism is described in the following table:

                     Power > Power Rated   Power < Power Rated
                     -------------------   -------------------
  Power Change > 0:    Increase Length         Do Nothing

  Power Change < 0:      Do nothing          Decrease Length

The controller should be fine-tuned, and the length to increase and decrease varies.

  • In Manual Mode:
    Use the slider to adjust the control rod length according to the information given through the two monitors and the plot. You want the power curve to be as flat as possible. The height of the curve should be close to the horizontal line representing the power-rate.

  • In Automatic Mode:
    Fine tune the controller by changing the mechanisms to get a flat power curve with the least fluctuation.


The automatic controller used is just an on and off controller. Try using Proportional, Integral and Differential (PID) controllers to make the reaction more smooth. You could also use some ideas of fuzzy logic (e.g. fuzzy membership) to build a fuzzy controller.

Absorbing free neutrons to control the reaction process is only one of the control mechanisms and is not the most important one. The important factor in controlling the reaction is to keep the speed of a neutron lower than a certain level (to stimulate fission reaction). The speeds of free neutrons depend on the density of the steam. Higher density yields lower speed and vice-versa. This is by nature a negative feedback control mechanism. It works as follows. If generated power is high, then the steam temperature is high and the density of the steam is low, thus the speed of free neutrons is high and is less likely to stimulate fission reaction. Hence a lower generated power. Try to incorporate this process into the automatic controller.


Together with the Reactor Top Down model you can get a decent representation of how a Nuclear Reactor might work in three dimensions. These two models are variations of one another based off of the Fission model from StarLogoT.


More so than most other NetLogo models, the plot of 'Power' plays an active role in the simulation. When using the manual controller, it is quite helpful to watch the power curve, to tell when things are getting out of hand.


If you mention this model in a publication, we ask that you include these citations for the model itself and for the NetLogo software:


Copyright 1998 Uri Wilensky.


This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. To view a copy of this license, visit or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Commercial licenses are also available. To inquire about commercial licenses, please contact Uri Wilensky at

This model was created as part of the project: CONNECTED MATHEMATICS: MAKING SENSE OF COMPLEX PHENOMENA THROUGH BUILDING OBJECT-BASED PARALLEL MODELS (OBPML). The project gratefully acknowledges the support of the National Science Foundation (Applications of Advanced Technologies Program) -- grant numbers RED #9552950 and REC #9632612.

This model was converted to NetLogo as part of the projects: PARTICIPATORY SIMULATIONS: NETWORK-BASED DESIGN FOR SYSTEMS LEARNING IN CLASSROOMS and/or INTEGRATED SIMULATION AND MODELING ENVIRONMENT. The project gratefully acknowledges the support of the National Science Foundation (REPP & ROLE programs) -- grant numbers REC #9814682 and REC-0126227. Converted from StarLogoT to NetLogo, 2001.

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

patches-own [ x y rod? ]

[ power
  old-power-2  ; Used to compute average-power
  old-power-3  ; Used to compute average-power
  old-power-4  ; Used to compute average-power
  n-rods   ; Number of rods
  r ; Constant for half the reactor size

to setup
  set-default-shape turtles "circle"
  ask patches
  [ set x (abs pxcor)
    set y (abs pycor)
    set rod? false

to setup-globals
  set power   0
  set old-power  0
  set old-power-2  0
  set old-power-3  0
  set old-power-4  0
  set r (reactor-size / 2)
  set rod-length rod-depth
  set n-rods (reactor-size / (rod-spacing + 1)) - 1

to build-reactor ;; Patch Procedure
  if ((x = r) and (y <= r)) or ((y = r) and (x <= r))
  [ set pcolor gray
    set rod? false

to setup-nuclear-fuel ;; Patch Procedure
  if (pcolor = black) and (x < r) and (y < r)
  [ set pcolor red ]

to setup-control-rods
  if rod-depth > reactor-size [set rod-depth reactor-size]
  if (rod-spacing = 5 or rod-spacing = 6 and reactor-size = 10)
  [ user-message "Spacing too large for reactor size.  Spacing set to 4."
    set rod-spacing 4
    set n-rods 1
  let rod-x 1 - r + rod-spacing

  ;; Make the rods more evenly spaced at particular settings
  if (rod-spacing = 2 and reactor-size != 30 and reactor-size != 60)
  [ set rod-x rod-x + 1 ]
  if (rod-spacing = 3 and (reactor-size mod 20) != 0)
  [ set n-rods n-rods + 1
    set rod-x rod-x - 1
  if (rod-spacing = 5 and (reactor-size = 20 or reactor-size = 40 or reactor-size = 70))
  [ ifelse (reactor-size = 20)
    [ set rod-x rod-x + 1 ]
    [ set rod-x rod-x + 2 ]
  if (rod-spacing = 6 and (reactor-size mod 20) = 0)
  [ set n-rods n-rods + 1
    ifelse (reactor-size = 80)
    [ set rod-x rod-x - 2 ]
    [ set rod-x rod-x - 1 ]

  repeat n-rods
  [ ask patches with [ pxcor = rod-x ]
    [ set rod? true ]
    set rod-x rod-x + rod-spacing + 1
  ask patches [ build-reactor ]

;;; Run Time Procedures ;;;

;;Forever Button

to auto-react
  if not any? turtles
  ifelse power-change >= 0
  [ if (power - power-rated) >= 0
    [ set rod-length ( rod-length + 50 ) ]
  [ if (power - power-rated) < 0
    [ set rod-length ( rod-length - 10 ) ]
  if rod-length < 0
  [ set rod-length 0 ]
  if rod-length > reactor-size
  [ set rod-length reactor-size ]

;;Forever Button

to manu-react
  if not any? turtles
  if rod-depth > reactor-size [set rod-depth reactor-size]
  set rod-length rod-depth

to react
  set power 0
  ask turtles
  [ fd  1
    if (pcolor = gray)
    [ die ]
    if (pcolor = red)
    [ fission ]
  set average-power ((power + old-power + old-power-2 + old-power-3 + old-power-4) / 5)
  set power-change (power - old-power)
  set old-power-4 old-power-3
  set old-power-3 old-power-2
  set old-power-2 old-power
  set old-power power

to release-neutron ;; Button
  let whom nobody
  crt 1
  [ set color yellow
    set xcor ((random (reactor-size - 2)) - r)
    set ycor ((random (reactor-size - 2)) - r)
    set whom self
    if (pcolor = gray)
    [ die ]
  if whom = nobody
  [ release-neutron ]

to place-control-rods
  ask patches with [ rod? ]
  [ ifelse (pycor >= (r - rod-length))
    [ set pcolor  gray ]
    [ set pcolor black ]

to fission ;; Turtle Procedure
  rt random 360
  if (pcolor = red)
  [ if (spend-fuel?)
    [ set pcolor brown ]
    let gain (1 / count turtles-here)
    set power power + gain
    hatch ((2 + random 2) * gain)
      [ rt random 360 ]

; Copyright 1998 Uri Wilensky.
; See Info tab for full copyright and license.

There are 10 versions of this model.

Uploaded by When Description Download
Uri Wilensky almost 11 years ago Updated to NetLogo 5.0.4 Download this version
Uri Wilensky over 11 years ago Updated version tag Download this version
Uri Wilensky over 11 years ago Updated to version from NetLogo 5.0.3 distribution Download this version
Uri Wilensky over 12 years ago Updated to NetLogo 5.0 Download this version
Uri Wilensky almost 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 14 years ago Model from NetLogo distribution Download this version
Uri Wilensky almost 14 years ago Reactor X-Section Download this version

Attached files

File Type Description Last updated
Reactor X-Section.png preview Preview for 'Reactor X-Section' about 11 years ago, by Uri Wilensky Download

This model does not have any ancestors.

This model does not have any descendants.