def test_constant(): k=2.718281828459045 #define functions that give costant solution I=lambda x,y: k q=lambda x,y: 34 + x #define some variables Lx = 10 Ly = 4 T = 3 C = 1. dt= 0.1 #get constant solution Nx = int(round(Lx/dt)) Ny = int(round(Ly/dt)) ue =zeros((Nx+1,Ny+1)) +k u,x,y,t,error=solver(I,None,None,q,0,Lx,Ly,dt,T,C,1,mode='vector') print 'Test constant solution. Exercise 3.1' print '||abs(u-ue)||: ', amax(abs(u-ue)) print assert amax(abs(u-ue))<10**(-16)
def constructed_bugs(): k=2.718281828459045 I=lambda x,y: k q=lambda x,y: x+y Lx = 10 Ly = 5 T = 3 C = 1. dt= 0.5 Nx = int(round(Lx/dt)) Ny = int(round(Ly/dt)) ue =zeros((Nx+1,Ny+1)) +k u1,x,y,t=solver(I,None,None,q,0,Lx,Ly,dt,T,C,1,mode='scalar',bug='bug1') u2,x,y,t=solver(I,None,None,q,0,Lx,Ly,dt,T,C,1,mode='scalar',bug='bug2') u3,x,y,t=solver(I,None,None,q,0,Lx,Ly,dt,T,C,1,mode='scalar',bug='bug3') u4,x,y,t=solver(I,None,None,q,0,Lx,Ly,dt,T,C,1,mode='scalar',bug='bug4') u5,x,y,t=solver(I,None,None,q,0,Lx,Ly,dt,T,C,1,mode='scalar',bug='bug5') print "Test bugs:" print "bug1 gives error: ",amax(abs(u1-ue)) print "bug2 gives error: ",amax(abs(u2-ue)) print "bug3 gives error: ",amax(abs(u3-ue)) print "bug4 gives error: ",amax(abs(u4-ue)) print "bug5 gives error: ",amax(abs(u5-ue)) print
def test_constant(): k = 2.718281828459045 #define functions that give costant solution I = lambda x, y: k q = lambda x, y: 34 + x #define some variables Lx = 10 Ly = 4 T = 3 C = 1. dt = 0.1 #get constant solution Nx = int(round(Lx / dt)) Ny = int(round(Ly / dt)) ue = zeros((Nx + 1, Ny + 1)) + k u, x, y, t, error = solver(I, None, None, q, 0, Lx, Ly, dt, T, C, 1, mode='vector') print 'Test constant solution. Exercise 3.1' print '||abs(u-ue)||: ', amax(abs(u - ue)) print assert amax(abs(u - ue)) < 10**(-16)
def test_plug(): #define function that give q=lambda x,y: 1 #define some variables Lx = 10 Ly = 3 T = 1 C = 1 dt= 0.1 #get constant solution Nx = int(round(Lx/dt)) Ny = int(round(Ly/dt)) ue =zeros((Nx+1,Ny+1)) #define initial function def I(x,y): if abs(x-Lx/2.)<0.5: return 2.1 else: return 0 #solve numerically u,x,y,t,err = solver(I,None,None,q,0,Lx,Ly,dt,T,C,1,mode='scalar') #find exact solution at time T x1 = x+T x2 = x-T for i in range(Nx+1): for j in range(Ny+1): ue[i,j]=0.5*(I(x1[i],0) + I(x2[i],0)) #calculate error at time t=T e1 = amax(abs(u-ue)) #Do the exact same for plug wave in y direction: def I(x,y): if abs(y-Ly/2.)<0.5: return 2.1 else: return 0 #Numerical solution u,x,y,t,err = solver(I,None,None,q,0,Lx,Ly,dt,T,C,1,mode='scalar') #find exact solution at time T y1 = x+T y2 = x-T for i in range(Nx+1): for j in range(Ny+1): ue[i,j]=0.5*(I(0,y1[j]) + I(0,y2[j])) #calculate error at time t=T e2 = amax(abs(u-ue)) print 'Plug error in x ||u(x,y,T)-ue(x,y,T)||: ',e1 print 'Plug error in y ||u(x,y,T)-ue(x,y,T)||: ',e2 print assert e1<10**(-16) and e2<10**(-16)
def test_plug(): #define function that give q = lambda x, y: 1 #define some variables Lx = 10 Ly = 3 T = 1 C = 1 dt = 0.1 #get constant solution Nx = int(round(Lx / dt)) Ny = int(round(Ly / dt)) ue = zeros((Nx + 1, Ny + 1)) #define initial function def I(x, y): if abs(x - Lx / 2.) < 0.5: return 2.1 else: return 0 #solve numerically u, x, y, t, err = solver(I, None, None, q, 0, Lx, Ly, dt, T, C, 1, mode='scalar') #find exact solution at time T x1 = x + T x2 = x - T for i in range(Nx + 1): for j in range(Ny + 1): ue[i, j] = 0.5 * (I(x1[i], 0) + I(x2[i], 0)) #calculate error at time t=T e1 = amax(abs(u - ue)) #Do the exact same for plug wave in y direction: def I(x, y): if abs(y - Ly / 2.) < 0.5: return 2.1 else: return 0 #Numerical solution u, x, y, t, err = solver(I, None, None, q, 0, Lx, Ly, dt, T, C, 1, mode='scalar') #find exact solution at time T y1 = x + T y2 = x - T for i in range(Nx + 1): for j in range(Ny + 1): ue[i, j] = 0.5 * (I(0, y1[j]) + I(0, y2[j])) #calculate error at time t=T e2 = amax(abs(u - ue)) print 'Plug error in x ||u(x,y,T)-ue(x,y,T)||: ', e1 print 'Plug error in y ||u(x,y,T)-ue(x,y,T)||: ', e2 print assert e1 < 10**(-16) and e2 < 10**(-16)
def constructed_bugs(): k = 2.718281828459045 I = lambda x, y: k q = lambda x, y: x + y Lx = 10 Ly = 5 T = 3 C = 1. dt = 0.5 Nx = int(round(Lx / dt)) Ny = int(round(Ly / dt)) ue = zeros((Nx + 1, Ny + 1)) + k u1, x, y, t = solver(I, None, None, q, 0, Lx, Ly, dt, T, C, 1, mode='scalar', bug='bug1') u2, x, y, t = solver(I, None, None, q, 0, Lx, Ly, dt, T, C, 1, mode='scalar', bug='bug2') u3, x, y, t = solver(I, None, None, q, 0, Lx, Ly, dt, T, C, 1, mode='scalar', bug='bug3') u4, x, y, t = solver(I, None, None, q, 0, Lx, Ly, dt, T, C, 1, mode='scalar', bug='bug4') u5, x, y, t = solver(I, None, None, q, 0, Lx, Ly, dt, T, C, 1, mode='scalar', bug='bug5') print "Test bugs:" print "bug1 gives error: ", amax(abs(u1 - ue)) print "bug2 gives error: ", amax(abs(u2 - ue)) print "bug3 gives error: ", amax(abs(u3 - ue)) print "bug4 gives error: ", amax(abs(u4 - ue)) print "bug5 gives error: ", amax(abs(u5 - ue)) print