def test_1D_plug(version): def q(x,y): return ones((len(x),len(y))) def V(x,y): return zeros((len(x), len(y))) if version == "scalar": def I(x,y): return 0 if abs(x-xc) > sigma else 2 else: def I(xv, yv): Iv = zeros((len(xv), len(yv))) for i in range(len(xv)): for j in range(len(yv)): if abs(xv[j, i] - xc) > sigma: Iv[i, j] = 0 else: Iv[i, j] = 2 return Iv def f(x,y,t): return zeros((len(x), len(y))) E, u, dx = solver(Lx, Ly, Nx, Ny, T, dt, c, I, q, V, f, b, version, oneD=True)
def test_constant(version): def q(x, y): return ones((len(x), len(y))) * 0.8 def V(x, y): return zeros((len(x), len(y))) def I(x, y): return 1.2 def f(x, y, t): return zeros((len(x), len(y))) E, u, dx = solver(Lx, Ly, Nx, Ny, T, dt, c, I, q, V, f, b, version, make_plot=False) if version == "scalar": print u else: print u[1:-1, 1:-1]
def run_Gaussian_flathill(version): def I(x, y): """Gaussian peak at (0, Ly/2).""" # return 2*exp(-0.5*((x-Lx/2.0)/(sigma))**2 - 0.5*((y-Ly/2.0)/(sigma))**2) return height * exp(-0.5 * ((x) / (sigma))**2 - 0.5 * ((y - Ly / 2.0) / (sigma))**2) def B(x, y): return x - H0 def V(x, y): return ones((len(x), len(y))) * factor def q(x, y): return g * (H0 - B(x, y)) def f(x, y, t): return zeros((len(x), len(y))) E, u, dx = solver(Lx, Ly, Nx, Ny, T, dt, c, I, q, V, f, b, version, B=B, make_plot=True)
def test_standing_wave(version, w, Nx): Ny = Nx def q(x, y): return ones((len(x), len(y))) * q_const def f(x, y, t): return exp(-b * t) * cos(cx * x) * cos(cy * y) * ( cos(w * t) * (q_const * cx**2 + q_const * cy**2 - w**2) + b * w * sin(w * t)) def I(x, y): return cos(mx * x * pi / Lx) * cos(my * y * pi / Ly) def V(x, y): return -b * cos(mx * x * pi / Lx) * cos(my * y * pi / Ly) E_list, u, dx = solver(Lx, Ly, Nx, Ny, T, dt, c, I, q, V, f, b, version, w=w, exact=exact_standing_wave, make_plot=False) return E_list, dx
def test_standing_wave(version, w, Nx): Ny = Nx def q(x,y): return ones((len(x),len(y))) * q_const def f(x,y,t): return exp(-b*t)*cos(cx*x)*cos(cy*y)*(cos(w*t)*(q_const*cx**2 + q_const*cy**2 - w**2) + b*w*sin(w*t)) def I(x,y): return cos(mx*x*pi/Lx)*cos(my*y*pi/Ly) def V(x,y): return -b*cos(mx*x*pi/Lx)*cos(my*y*pi/Ly) E_list, u, dx = solver(Lx, Ly, Nx, Ny, T, dt, c, I, q, V, f, b, version, w=w, exact=exact_standing_wave, make_plot=False) return E_list, dx
def run_Gaussian_flathill(version): def I(x,y): """Gaussian peak at (0, Ly/2).""" # return 2*exp(-0.5*((x-Lx/2.0)/(sigma))**2 - 0.5*((y-Ly/2.0)/(sigma))**2) return height*exp(-0.5*((x)/(sigma))**2 - 0.5*((y-Ly/2.0)/(sigma))**2) def B(x,y): return x-H0 def V(x,y): return ones((len(x),len(y)))*factor def q(x,y): return g*(H0-B(x,y)) def f(x,y,t): return zeros((len(x),len(y))) E, u, dx = solver(Lx, Ly, Nx, Ny, T, dt, c, I, q, V, f, b, version, B=B, make_plot=True)
def test_1D_plug(version): def q(x, y): return ones((len(x), len(y))) def V(x, y): return zeros((len(x), len(y))) if version == "scalar": def I(x, y): return 0 if abs(x - xc) > sigma else 2 else: def I(xv, yv): Iv = zeros((len(xv), len(yv))) for i in range(len(xv)): for j in range(len(yv)): if abs(xv[j, i] - xc) > sigma: Iv[i, j] = 0 else: Iv[i, j] = 2 return Iv def f(x, y, t): return zeros((len(x), len(y))) E, u, dx = solver(Lx, Ly, Nx, Ny, T, dt, c, I, q, V, f, b, version, oneD=True)
def test_manufactured_solution(version, w, Nx): Ny = Nx def q(x, y): return x * y def f(x, y, t): f_val = exp(-b*t)*(cos(cx*x)*cos(cy*y)*(-w**2*cos(w*t) + b*w*sin(w*t)) + \ cx*y*cos(cy*y)*cos(w*t)*(cx*x*cos(cx*x) + sin(cy*y)) + \ cy*x*cos(cx*x)*cos(w*t)*(cy*y*cos(cy*y) + sin(cx*x))) return f_val def I(x, y): if version == "scalar": return m.cos(cx * x) * m.cos(cy * y) else: return cos(cx * x) * cos(cy * y) def V(x, y): return -b * cos(cx * x) * cos(cy * y) E_list, u, dx = solver(Lx, Ly, Nx, Ny, T, dt, c, I, q, V, f, b, version, w=w, exact=exact_manufactured_solution, make_plot=False) return E_list, dx
def test_manufactured_solution(version, w, Nx): Ny = Nx def q(x,y): return x*y def f(x,y,t): f_val = exp(-b*t)*(cos(cx*x)*cos(cy*y)*(-w**2*cos(w*t) + b*w*sin(w*t)) + \ cx*y*cos(cy*y)*cos(w*t)*(cx*x*cos(cx*x) + sin(cy*y)) + \ cy*x*cos(cx*x)*cos(w*t)*(cy*y*cos(cy*y) + sin(cx*x))) return f_val def I(x,y): if version=="scalar": return m.cos(cx*x)*m.cos(cy*y) else: return cos(cx*x)*cos(cy*y) def V(x,y): return -b*cos(cx*x)*cos(cy*y) E_list, u, dx = solver(Lx, Ly, Nx, Ny, T, dt, c, I, q, V, f, b, version, w=w, exact=exact_manufactured_solution, make_plot=False) return E_list, dx