示例#1
0
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)
示例#2
0
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
示例#3
0
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)
示例#4
0
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)
示例#5
0
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)
示例#6
0
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