Statistiques
| Révision :

root / Ising / Cython / Metropolis.pyx @ 95

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)