Skip to content

Latest commit

 

History

History
159 lines (123 loc) · 6.61 KB

ising_2d_simulation.md

File metadata and controls

159 lines (123 loc) · 6.61 KB

ISING_2D_SIMULATION
Monte Carlo 2D Ising Model {#ising_2d_simulation-monte-carlo-2d-ising-model align="center"}


ISING_2D_SIMULATION is a C++ program which carries out a Monte Carlo simulation of a 2D Ising model, using gnuplot to display the initial and final configurations.

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 program 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:


Agree 1 2 3 4 4 Prob 0.98 0.85 0.50 0.15 0.02


Usage: {#usage align="center"}

ising_2d_simulation m n iterations thresh seed

where

  • m and n are the number of rows and columns of cells. The default values are 10.
  • iterations is the number of iterations to take. The default value is 15.
  • thresh is a number between 0 and 1 that chooses the percentage of negative (red) charges. The default value is 0.5.
  • seed is a seed for the random number generator. The default value is 123456789.

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 program and recompiling it.

Licensing: {#licensing align="center"}

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

Languages: {#languages align="center"}

ISING_2D_SIMULATION is available in a C version and a C++ version and a FORTRAN77 version and a FORTRAN90 version and a MATLAB version.

Related Data and Programs: {#related-data-and-programs align="center"}

BROWNIAN_MOTION_SIMULATION, a C++ library which simulates Brownian motion in an M-dimensional region.

DUEL_SIMULATION, a C++ program which simulates N repetitions of a duel between two players, each of whom has a known firing accuracy.

FAIR_DICE_SIMULATION, a C++ program which simulates N tosses of 2 dice, making a histogram of the results.

GNUPLOT, C++ programs which illustrate how a program can write data and command files so that gnuplot can create plots of the program results.

HIGH_CARD_SIMULATION, a C++ program which simulates a situation in which you see the cards in a deck one by one, and must select the one you think is the highest and stop; the program uses GNUPLOT for graphics.

ISING_2D_SIMULATION, a C++ program which carries out a Monte Carlo simulation of an Ising model. a 2D array of positive and negative charges, each of which is likely to "flip" to be in agreement with neighbors.

LIFE_OPENGL, a C++ program which uses OpenGL to display the evolution of John Conway's "Game of Life".

MANDELBROT, a C++ program which generates an ASCII PPM image of the Mandelbrot set;

POISSON_SIMULATION, a C++ library which simulates a Poisson process in which events randomly occur with an average waiting time of Lambda.

REACTOR_SIMULATION, a C++ program which a simple Monte Carlo simulation of the shielding effect of a slab of a certain thickness in front of a neutron source. This program was provided as an example with the book "Numerical Methods and Software."

THREE_BODY_SIMULATION, a C++ program which simulates the behavior of three planets, constrained to lie in a plane, and moving under the influence of gravity, by Walter Gander and Jiri Hrebicek.

Source Code: {#source-code align="center"}

Examples and Tests: {#examples-and-tests align="center"}

List of Routines: {#list-of-routines align="center"}

  • MAIN is the main program for ISING_2D_SIMULATION.
  • I4_MAX returns the maximum of two I4's.
  • I4_MIN returns the smaller of two I4's.
  • I4_MODP returns the nonnegative remainder of I4 division.
  • I4_WRAP forces an I4 to lie between given limits by wrapping.
  • ISING_2D_AGREE returns the number of neighbors agreeing with each cell.
  • ISING_2D_INITIALIZE initializes the Ising array.
  • ISING_2D_STATS prints information about the current step.
  • NEIGHBOR_2D_STATS prints neighbor statistics about the current step.
  • R8MAT_UNIFORM_01 fills an R8MAT with unit pseudorandom values.
  • TIMESTAMP prints the current YMDHMS date as a time stamp.
  • TRANSITION carries out a Monte Carlo simulation of a 3D Ising model.

You can go up one level to the C++ source codes.


Last revised on 23 November 2011.