from numpy import* from Tkinter import * import time dt = 1 dx = 1 D = 1 alpha = D*dt/dx**2 nodes = 500 source_node = nodes/2 u = zeros(nodes) u[source_node] = 1 x = arange(0, nodes, 1) a = ones(nodes)*(-alpha) b = ones(nodes)*(1+2.0*alpha) c = ones(nodes)*(-alpha) a[0]=0; a[nodes-1] = 0 b[0]=1; b[nodes-1]=1 c[0]=0; c[nodes-1]=0 cprime = zeros(nodes) dprime = zeros(nodes) ##--Tkinter stuff-- t_start = time.time()#for referencing height = 300.0 width = 400.0 center = height//2 x_factor = width/(nodes-1) y_factor = 200 ##------------------ def paint(canvas, parent): #see NMM equations (9.25) and (9.26) cprime[0] = c[0]/b[0] dprime[0] = u[0]/b[0] for i in range(1, nodes, 1): cprime[i] = c[i]/(b[i]-a[i]*cprime[i-1]) dprime[i] = (u[i]-a[i]*dprime[i-1])/(b[i]-a[i]*cprime[i]) #now, the backward pass: u[nodes-1] = dprime[nodes-1] for i in range (nodes-2, 0, -1): u[i] = dprime[i] - cprime[i] * u[i+1] ##--Tkinter stuff-- xy = [] for i in range(0, nodes): xy.append((int)(i*x_factor)) xy.append((int)(u[i]*y_factor)+center) #time.sleep(0.001) canv.coords("curve", *xy) parent.after_idle(paint,parent,canvas) ##------------------ #--Tkinter stuff:-- root = Tk() root.title("Animated solution to 1D diffusion equation") root.bind('q','exit') canv = Canvas(width=width, height=height, bg='white') canv.pack() canv.create_line(tag = "curve", *zeros(2*width), fill='blue') root.after(200,paint,root,canv) root.mainloop() ##------------------