Clone wiki

Spinify / Home


New released version: Spinify 2.3

This version contains bug fixes as well as huge speed improvements. A critical part of the algorithm, namely the swendsen() function, now runs about three times faster than it did in version 2.2. See the announcement here.

Mission Statement

The Spinify project aims at producing an efficient simulation algorithm for the Ising model on surfaces with non trivial metric tensor.

Now, lets explain in a little bit more detail what this first sentence means. First of all, the Ising model is a very simple model of how magnetic materials become magnetized. A simple block of matter can be modelled as an arrangement of atoms, each of which has a spin. Spin is a quantum property of matter and, in the case of the Ising model, atoms can have a spin value of either +1 or -1. The reason for this is outside the scope of this wiki, but anyone interested in that can find more about it in any good introductory quantum mechanics book.

If a material has magnetic properties (such as iron), the potential energy of two neighbouring atoms is lower if their spin is the same. Thus, since potential energy tends to be minimized, atoms try to get their spins all in the same direction. And since spin is associated with the magnetic field generated by the atom, all the magnetic fields add up together and form a macroscopic magnetic field.

The Ising model makes many simplifying assumptions, the most important of which is that atoms only interact with their closest neighbours. This is reasonable since we know that the strength of a magnetic field decreases with the square of the distance. The Ising model has been studied in one and two dimensions extensively (the one dimensional Ising model is often an exercise in introductory statistical physics books; the two dimensional model on a square lattice has been solved by Onsager).

The Spinify project aims at simulating the model on surfaces such as the sphere, the torus and the klein bottle. These surfaces have a non trivial metric tensor which is just a complicated way of saying that they are curved. This makes it hard, or sometimes even impossible, to embed a regular lattice on the surface. To circumvent this problem, we suggest to generate random lattices on the surface and then to run the simulation on that lattice.

The project is motivated by conformal field theories which make interesting predictions on the behaviour of the Ising model on different surfaces in the limit where the number of atoms on the lattice tends to infinity. However, there are no proofs that the discrete model tends to the continuous model considered by CFT.

More details available in the document Ising2006.pdf. Please note that this document refers to an older version of Spinify. I will try to write a complete and more up to date explanation of the background as well as the program as soon as possible.

Mailing list

If you have questions, comments or just want to discuss about the development of Spinify, you can do so on the mailing list:

You can subscribe to the mailing list here:

System requirements

This software has been tested on Mac OS X 10.6 and Windows 7. It should work on almost any Unix or Linux operating system.

Spinify can produce files that allow to visualize the lattice and to do some basic data visualization. In order to use these files, you need to have Python, NumPy and matplotlib installed.


The most recent release version of Spinify is available here: spinify-2.3.tar.gz. For Windows, the executable is here: spinify-2.3.exe. You can install it by decompressing the archive

$ tar xzvf spinify-2.3.tar.gz

and then build and install the program

$ ./configure
$ make
$ sudo make install

That is it! You can start using Spinify right away. If you don't know where to start, read the man page

$ man 1 spinify

If you want to try out the current development version of Spinify it is as simple as:

$ hg clone

You then need to build and install the software with

$ make
$ sudo make install

This will build all the classes and the main program. To build the various tests, run

$ make tests

These tests are quite rudimentary but can prove very useful for debugging.

Help needed

The Spinify project is maintained by a mathematician and physicist who would be happy to get some help for reviewing parts of the code that could probably be improved a lot.

Keep in mind that the objective is to make simulations on lattices with a huge number of nodes (> 106). Previous experiments have shown that the most computationnally expensive part of the simulation is actually the generation of the random lattice. Hence, this is probably the part of the code that should be worked on the most.