mirror of https://github.com/pyodide/pyodide.git
36 lines
1.0 KiB
Python
36 lines
1.0 KiB
Python
#from: http://stackoverflow.com/questions/19367488/converting-function-to-numbapro-cuda
|
|
#setup: N = 10 ; import numpy ; a = numpy.random.rand(N,N)
|
|
#run: fdtd(a,10)
|
|
|
|
#pythran export fdtd(float[][], int)
|
|
import numpy as np
|
|
|
|
def fdtd(input_grid, steps):
|
|
grid = input_grid.copy()
|
|
old_grid = np.zeros_like(input_grid)
|
|
previous_grid = np.zeros_like(input_grid)
|
|
|
|
l_x = grid.shape[0]
|
|
l_y = grid.shape[1]
|
|
|
|
for i in range(steps):
|
|
np.copyto(previous_grid, old_grid)
|
|
np.copyto(old_grid, grid)
|
|
|
|
for x in range(l_x):
|
|
for y in range(l_y):
|
|
grid[x,y] = 0.0
|
|
if 0 < x+1 < l_x:
|
|
grid[x,y] += old_grid[x+1,y]
|
|
if 0 < x-1 < l_x:
|
|
grid[x,y] += old_grid[x-1,y]
|
|
if 0 < y+1 < l_y:
|
|
grid[x,y] += old_grid[x,y+1]
|
|
if 0 < y-1 < l_y:
|
|
grid[x,y] += old_grid[x,y-1]
|
|
|
|
grid[x,y] /= 2.0
|
|
grid[x,y] -= previous_grid[x,y]
|
|
|
|
return grid
|