#from http://stackoverflow.com/questions/26823312/numba-or-cython-acceleration-in-reaction-diffusion-algorithm #setup: pass #run: grayscott(40, 0.16, 0.08, 0.04, 0.06) #pythran export grayscott(int, float, float, float, float) import numpy as np def grayscott(counts, Du, Dv, F, k): n = 300 U = np.zeros((n+2,n+2), dtype=np.float32) V = np.zeros((n+2,n+2), dtype=np.float32) u, v = U[1:-1,1:-1], V[1:-1,1:-1] r = 20 u[:] = 1.0 U[n//2-r:n//2+r,n//2-r:n//2+r] = 0.50 V[n//2-r:n//2+r,n//2-r:n//2+r] = 0.25 u += 0.15*np.random.random((n,n)) v += 0.15*np.random.random((n,n)) for i in range(counts): Lu = ( U[0:-2,1:-1] + U[1:-1,0:-2] - 4*U[1:-1,1:-1] + U[1:-1,2:] + U[2: ,1:-1] ) Lv = ( V[0:-2,1:-1] + V[1:-1,0:-2] - 4*V[1:-1,1:-1] + V[1:-1,2:] + V[2: ,1:-1] ) uvv = u*v*v u += Du*Lu - uvv + F*(1 - u) v += Dv*Lv + uvv - (F + k)*v return V