root / Ising / Cython / Metropolis.pyx @ 88
Historique | Voir | Annoter | Télécharger (894 octet)
1 |
#!/usr/bin/env python |
---|---|
2 |
# |
3 |
# Ising2D model in serial mode |
4 |
# |
5 |
# CC BY-NC-SA 2011 : <emmanuel.quemener@ens-lyon.fr> |
6 |
|
7 |
import sys |
8 |
import numpy |
9 |
from PIL import Image |
10 |
from math import exp |
11 |
from random import random |
12 |
import time |
13 |
import getopt |
14 |
import matplotlib.pyplot as plt |
15 |
import Metropolis |
16 |
|
17 |
def Metropolis(sigma,J,B,T,iterations): |
18 |
start=time.time() |
19 |
|
20 |
SizeX,SizeY=sigma.shape |
21 |
|
22 |
for p in xrange(0,iterations): |
23 |
# Random access coordonate |
24 |
X,Y=numpy.random.randint(SizeX),numpy.random.randint(SizeY) |
25 |
|
26 |
DeltaE=J*sigma[X,Y]*(2*(sigma[X,(Y+1)%SizeY]+ |
27 |
sigma[X,(Y-1)%SizeY]+ |
28 |
sigma[(X-1)%SizeX,Y]+ |
29 |
sigma[(X+1)%SizeX,Y])+B) |
30 |
|
31 |
if DeltaE < 0. or random() < exp(-DeltaE/T): |
32 |
sigma[X,Y]=-sigma[X,Y] |
33 |
duration=time.time()-start |
34 |
return(duration) |