ising_2d_simulation, a Python code which carries out a Monte Carlo simulation of a 2D Ising model.

A 2D Ising model is defined on an MxN array of cells. Each cell can have a "charge" or "spin" of +1 or -1. A neighborhood of a cell is defined to be itself, and the four immediate neighbors to the north, south, east, and west. A cell may change its charge; the likelihood of doing so depends on whether the charge of the neighbors agrees with the charge of the cell.

This code begins with a random assignment of charges to the cells. It then computes the neighbor agreement at each cell. It then updates the entire configuration in one step, using the neighbor agreement to determine the likelihood of flipping.

Currently, the chance that a cell will "flip" is determined from a table of probabilities based on the number of agreeing neighbors:



ising_2d_simulation m n iterations thresh

Note that the user might also want to vary the transition probabilities. This cannot currently be done on the command line, and requires editing the code and recompiling it.


The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.


ising_2d_simulation is available in a C version and a C++ version and a Fortran90 version and a MATLAB version and an Octave version and a Python version.

Related Data and codes:

python_simulation, a Python code which uses simulation to study card games, contests, and other processes which have a random element. Usually, the purpose is to try to predict the average behavior of the system over many trials.


Source Code:

Last revised on 27 November 2022.