import numpy as np

J	=  201
XMIN	= -10.0
XMAX	= 10.0
DX	= (XMAX-XMIN)/(J-1.0)


def initialize(u):
    for j in range(J):
        x = XMIN + j*DX
        u[j] = initial(x)

        
def ftcs_step(u, dt):
    u[0] = 0.0				# boundary conditions
    u[J-1] = 0.0

    uu = u[0]
    for j in range(J-1):
        uj = u[j]
        u[j] -= 0.5*(dt/DX)*(u[j+1]-uu)
        uu = uj

        
x = np.linspace(XMIN, XMAX, J)
u = np.zeros(J)
initialize(u)

t = 0.0
dt = 1.e-2
tmax = 10.0

while t < tmax:
    ftcs_step(u, dt)
    t += dt
