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