Simple Kinetics 2

Simple Kinetics 2 preview image

2 collaborators

Uri_dolphin3 Uri Wilensky (Author)
Mike Stieff (Author)


chemical reactions 

Tagged by Reuven M. Lerner about 9 years ago

chemistry and physics 

Tagged by Reuven M. Lerner about 9 years ago

Model group CCL | Visible to everyone | Changeable by group members (CCL)
Model was written in NetLogo 5.0.4 • Viewed 214 times • Downloaded 24 times • Run 0 times
Download the 'Simple Kinetics 2' 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 model demonstrates the properties of LeChatelier's Principle. This chemical principle states that if a system that is at equilibrium is perturbed, the system will readjust to establish a new equilibrium. For example, if you add reactants to a reversible reaction that is at equilibrium, the system will shift to generate more products and establish a new equilibrium. The principle can also be described with chemical equations.

Below is a generic equation which depicts two molecules of reactant A combining to form one molecule or product B. The reaction is reversible, meaning that the one molecule of B can break down into two molecules of A.

        A + A <=======> B

An example of such a reaction would be dimerization of the gas nitrous oxide:

        2 NO  <=======> N O
            2     Ku     2 4

This reaction is an example of a complex reaction which consists of two elementary reactions. The forward bimolecular reaction

        A + A --------> B

is characterized by the constant Kb and the reverse unimolecular reaction

        B ---------> A + A

The equilibrium rate constant for the entire reaction (Keq) is equal to [B] / [A] ^ 2. Each of the rate constants in the equations above has units of s^-1. They are empirically derived constants that when combined with the reaction concentrations tell you how fast the reaction proceeds according to the reaction rate law. The rate law ultimately tells you how many Molar units of a molecule react per second. For the reaction above the forward rate law is RATE = Kb[A]^2 and the reverse rate law is RATE = Ku[B].

Note that because we are simulating the reaction, the values of Kb and Ku in this reaction are not real-world values. It would be necessary to use several differential equations to calculate the real values of Kb, Ku and Keq, however, several qualitative features of their relationships can be seen using this model. Reaction equilibrium is reached when a system reaches a steady-state. This is not to say that reactions have stopped occurring! Microscopic changes in equilibrium still take place, but to our eyes and our measurements the system appears stable because the forward and reverse rates are equal.

The rate at which a reaction reaches equilibrium as well as the state of the equilibrium system both depend upon the rate constants, the temperature, the concentration of reactants and products and, when a gas is involved, the volume of the container. When a system has reached equilibrium, changes to any of the variables above result in a change in the system to establish a new equilibrium. This effect is predicted using LeChatelier's Principle. We can use our model to discover the role of each variable (temperature, volume, concentration and rate constant) in LeChatelier's Principle.


To start off:

Choose the values of Kb and Ku with appropriate sliders:

  • Kb controls the rate of the forward reaction by which two green molecules turn bimolecularly into a single red molecule.
  • Ku controls the rate of the reverse reaction, by which a red molecule turns unimolecularly into two green molecules.

Having chosen appropriate values of the constants, press SETUP to clear the world and create an initial number of green molecules. Note: we do not create red molecules initially, although this can be done in principal.

Press RUN to start the simulation.

Set the size of the yellow box using the EDGE-SIZE slider. (If you would like to change the size while you are running a model. Press RUN to stop the model, adjust the EDGE-SIZE slider and redraw the box using the REDRAW BOX button. Resume the reaction by pressing RUN.)

After viewing the effects of several different rate constant values, use the other sliders and buttons to observe how concentration, volume, and temperature affect the equilibrium.

A note on the temperature variable. Temperature changes have a unique effect on equilibrium compared with the other variables. You can observe this effect by toggling the TEMP-EFFECT button on or off and using the slider to set the temperature of the reaction in centigrade.


You will see molecules wandering around the world and changing color. Pay more attention to the plot of the concentrations. Do the plots soon reach stationary concentrations?

How does changing the concentrations of reactants and products in the system affect the equilibrium? Does it take more or less time to reach a stationary condition under various conditions?

What is the effect of temperature on the equilibrium of the system compared to volume or concentration? In the Procedures window, note how rate constants are calculated based on the temperature.

Notice how the ratio of products to reactants changes with changes to the system. Does the ratio change much with each factor? Make a window that show the value of Keq to help you determine this.

Why do the traces of each breed eventual balance around a constant average? How come this value is an average and not a constant?


How do the stationary concentrations depend on the values of Kb and Ku? You can change Ku and Kb while the model is running. See if you can predict what the stationary concentrations will be with various combinations of Kb and Ku.

Without adding additional reactants or products and with the temperature effect in the off position, note that more red product molecules accumulate when the volume decreases. Can you explain why?

Observe the progress of the reaction at high and low temperatures. Does this observed trend fit your expectations?

Try adding some molecules to the system that have no "breed", as an inert gas. Does this affect the equilibrium? Why or why not?


Try altering the code so that when two green molecules collide, they produce two red molecules instead of one. Likewise, alter it so that two red molecules must collide to form two green molecules. Observe the effect of volume on this system. Is the effect as you predicted?

What would the effect of adding a catalyst to the system be? Add a catalyst breed that accelerates the reaction and observe the trend. Are you surprised?

Add a monitor that measures the equilibrium constant for the system. Is it really a constant?


Simple Kinetics 1, Simple Kinetics 3


Notice the use of breeds in the model.

Notice how we store an agentset of patches in the black-patches variable. Computing this agentset once ahead of time (at the time the box is drawn) is faster than recomputing it at every iteration.


Simple Kinetics 1 Simple Kinetics 3


Thanks to Mike Stieff for his work on this model.


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

  • Stieff, M. and Wilensky, U. (2001). NetLogo Simple Kinetics 2 model. Center for Connected Learning and Computer-Based Modeling, Northwestern Institute on Complex Systems, Northwestern University, Evanston, IL.
  • Wilensky, U. (1999). NetLogo. Center for Connected Learning and Computer-Based Modeling, Northwestern Institute on Complex Systems, Northwestern University, Evanston, IL.


Copyright 2001 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 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.

Comments and Questions

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

Click to Run Model

breed [reactants reactant]     ;; reactant molecules (NO2), shown as green
breed [products product]       ;; product molecules (N2O4), shown as red

globals [
  Kf                 ;; when temp-effect is on, replaces Kb
  Kr                 ;; when temp-effect is on, replaces Ku
  Keq                ;; equilibrium constant
  react-conc         ;; concentration of reactant
  prod-conc          ;; concentration of product
  black-patches      ;; agentset of all the patches inside the reaction container

to setup
  set-default-shape reactants "NO2"
  set-default-shape products "N2O4"
  draw-box                                 ;; draws the reaction container
  create-reactants 200                     ;; generates reactants
    [ set color green
      move-to one-of black-patches ]       ;; distribute reactants around the world

to update-concentrations
  set react-conc (count reactants / count black-patches) * 100
  set prod-conc (count products / count black-patches) * 100

to go
  ifelse temp-effect?
    ;; if temp-effect is ON, Kf  replaces Kb and Kr replaces Ku
    ;; Kf and Kr are calculated with the Arrhenius Equation, k = ln A - Ea / RT .
    ;; ln A, Ea, and R are all constants for a reaction. Below, the constants have simulated
    ;; values that were chosen to produce the same qualitative results as the real-world
    ;; reaction. Because the number of molecules in the model is so small, we use simulated
    ;; constants to keep the values of each variable in a useful range for the model.
    ;; The important thing to note is how each K value varies according to the
    ;; temperature of the reaction.
    [ set Kf (5 + (3000 /(8 * (temp + 273))))
      set Kr (15 - (8000 / (8 * (temp + 273)))) ]
    ;; if temp-effect is OFF, set Keq based on concentrations
    [ set Keq (prod-conc / (react-conc ^ 2)) * 100 ]
  ask turtles
    [ bounce                        ;; bounce off walls
      fd 1                          ;; wander aimlessly
      rt random 10
      lt random 10 ]
  ask turtles
    [ ifelse (breed = reactants)
        [ react-forward ]
        [ react-backward ]

;; see explanations of "react-forward" and "react-backward" in the info window

to react-forward  ;; turtle procedure
  let chance 0
  ifelse temp-effect?
    [ set chance Kf ]
    [ set chance Kb ]
  if (any? other reactants-here) and (random-float 10.0 < chance)
    [ ask one-of other reactants-here
        [ die ]
      set breed products
      set color red

to react-backward  ;; turtle procedure
  let chance Ku
  if temp-effect?
    [ set chance Kr ]
  if random-float 1000.0 < chance
    [ set breed reactants
      set color green
      hatch 1
        [ rt 180 ] ]

;; turtle procedure to bounce molecules off the yellow walls

to bounce
  let box-edge edge-size + 1  ;; setting this first makes the calculations a bit simpler
  ; check: hitting top or bottom wall?
  if (patch-at 0 box-edge = nobody     and ((heading > 270) or (heading < 90))) or
     (patch-at 0 (- box-edge) = nobody and ((heading > 90) and (heading < 270)))
    ; if so, reflect heading around y axis
    [ set heading (180 - heading) ]
  ; check: hitting left or right wall?
  if (patch-at box-edge 0 = nobody     and ((heading > 0) and (heading < 180))) or
     (patch-at (- box-edge) 0 = nobody and ((heading > 180)))
    ; if so, reflect heading around x axis
    [ set heading (- heading) ]

;;observer procedures to add more molecules to the model

to add-reactant
  create-reactants 20
    [ set color green
      move-to one-of black-patches ]

to add-product
  create-products 20
    [ set color red
      move-to one-of black-patches ]

to draw-box
  ask patches
    [ ifelse (pxcor > (max-pxcor - edge-size)) or (pxcor < (min-pxcor + edge-size)) or
             (pycor > (max-pycor - edge-size)) or (pycor < (min-pycor + edge-size))
        [ set pcolor yellow ]
        [ set pcolor black ] ]
  set black-patches patches with [pcolor = black]
  ask turtles
    move-to one-of black-patches
    rt random-float 360

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

There are 10 versions of this model.

Uploaded by When Description Download
Uri Wilensky over 9 years ago Updated to NetLogo 5.0.4 Download this version
Uri Wilensky almost 10 years ago Updated version tag Download this version
Uri Wilensky almost 10 years ago Updated to version from NetLogo 5.0.3 distribution Download this version
Uri Wilensky over 10 years ago Updated to NetLogo 5.0 Download this version
Uri Wilensky over 12 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky over 12 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky over 12 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky over 12 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky over 12 years ago Model from NetLogo distribution Download this version
Uri Wilensky over 12 years ago Simple Kinetics 2 Download this version

Attached files

File Type Description Last updated
Simple Kinetics 2.png preview Preview for 'Simple Kinetics 2' over 9 years ago, by Uri Wilensky Download

This model does not have any ancestors.

This model does not have any descendants.