Statistiques
| Révision :

root / Ising / Cython / Metropolis.pyx @ 301

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)