mirror of https://github.com/pyodide/pyodide.git
32 lines
1.0 KiB
Python
32 lines
1.0 KiB
Python
|
#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
|