Ejemplo n.º 1
0
def test_reaction_diffusion(resolution, alpha):
    grid_x = field.UniformPeriodicGrid(resolution, 20)
    grid_y = field.UniformPeriodicGrid(resolution, 20)
    domain = field.Domain((grid_x, grid_y))
    x, y = domain.values()

    IC = np.exp(-(x+(y-10)**2-14)**2/8)*np.exp(-((x-10)**2+(y-10)**2)/10)

    c = field.Field(domain)
    X = field.FieldSystem([c])
    c.data[:] = IC
    D = 1e-2

    dcdx2 = spatial.FiniteDifferenceUniformGrid(2, 8, c, 0)
    dcdy2 = spatial.FiniteDifferenceUniformGrid(2, 8, c, 1)

    rd_problem = equations.ReactionDiffusion2D(X, D, dcdx2, dcdy2)

    dt = alpha*grid_x.dx

    while rd_problem.t < 1-1e-5:
        rd_problem.step(dt)

    try:
        solution = np.loadtxt('c_%i.dat' % resolution)
    except:
        solution = np.loadtxt('answers2/c_%i.dat' % resolution)

    error = np.max(np.abs(solution - c.data))

    error_est = error_RD[(resolution,alpha)]

    assert error < error_est
Ejemplo n.º 2
0
def test_RK_3_2(resolution):
    grid = field.UniformPeriodicGrid(resolution, 2 * np.pi)
    x = grid.values

    IC = np.exp(-(x - np.pi)**2 * 8)
    u = field.Field(grid, IC)

    target = np.exp(-(x - np.pi - 2 * np.pi * 0.2)**2 * 8)

    d = spatial.FiniteDifferenceUniformGrid(1,
                                            2,
                                            grid,
                                            stencil_type='centered')

    stages = 3
    a = np.array([[0, 0, 0], [1 / 2, 0, 0], [-1, 2, 0]])
    b = np.array([1, 4, 1]) / 6

    ts = timesteppers.Multistage(u, d, stages, a, b)

    alpha = 0.5
    num_periods = 1.8
    ts.evolve(2 * np.pi * num_periods, alpha * grid.dx)

    error = np.max(np.abs(u.data - target))
    error_est = error_RK_3_2[resolution]

    assert error < error_est
Ejemplo n.º 3
0
def test_AB_4_4(resolution):
    grid = field.UniformPeriodicGrid(resolution, 2 * np.pi)
    x = grid.values

    IC = np.exp(-(x - np.pi)**2 * 8)
    u = field.Field(grid, IC)

    target = np.exp(-(x - np.pi + 2 * np.pi * 0.2)**2 * 8)

    d = spatial.FiniteDifferenceUniformGrid(1,
                                            4,
                                            grid,
                                            stencil_type='centered')

    steps = 4
    alpha = 0.25
    num_periods = 1.2
    ts = timesteppers.AdamsBashforth(u, d, steps, alpha * grid.dx)

    ts.evolve(2 * np.pi * num_periods, alpha * grid.dx)

    error = np.max(np.abs(u.data - target))
    error_est = error_AB_4_4[resolution]
    print(error)
    assert error < error_est
Ejemplo n.º 4
0
def test_nu_BDF5_wave(resolution, spatial_order):
    grid = field.UniformPeriodicGrid(resolution, 2 * np.pi)
    x = grid.values

    IC = np.exp(-(x - np.pi)**2 * 8)
    u = field.Field(grid, IC)

    target = np.exp(-(x - np.pi + 2 * np.pi * 0.2)**2 * 8)

    d = spatial.FiniteDifferenceUniformGrid(1,
                                            spatial_order,
                                            grid,
                                            stencil_type='centered')

    ts = timesteppers.BackwardDifferentiationFormula(u, d, 5)

    alpha = 0.5
    num_periods = 1.2
    ts.evolve(0.5 * np.pi * num_periods, alpha * grid.dx)
    ts.evolve(1.25 * np.pi * num_periods, alpha * grid.dx / 3)
    ts.evolve(2 * np.pi * num_periods, alpha * grid.dx / 2)
    error = np.max(np.abs(u.data - target))
    error_est = error_nu_BDF5_wave[(resolution, spatial_order)]

    assert error < error_est
Ejemplo n.º 5
0
def test_nu_BDF4_diff(resolution, spatial_order):
    grid = field.UniformPeriodicGrid(resolution, 50)
    x = grid.values

    IC = np.exp(-(x - 30)**2 / 4)
    u = field.Field(grid, IC)

    target = 1 / np.sqrt(5) * np.exp(-(x - 30)**2 / 20)

    d = spatial.FiniteDifferenceUniformGrid(2,
                                            spatial_order,
                                            grid,
                                            stencil_type='centered')

    ts = timesteppers.BackwardDifferentiationFormula(u, d, 4)

    alpha = 0.2
    ts.evolve(1, alpha * grid.dx / 2)
    ts.evolve(3, alpha * grid.dx / 3)
    ts.evolve(4, alpha * grid.dx)

    error = np.max(np.abs(u.data - target))
    error_est = error_nu_BDF4_diff[(resolution, spatial_order)]

    assert error < error_est
Ejemplo n.º 6
0
def test_derivative_1(resolution, convergence_order):
    grid = field.UniformNonPeriodicGrid(resolution, (0, 5))
    domain = field.Domain([grid])
    x = grid.values
    u = field.Field(domain, np.sin(x))

    du_op = spatial.FiniteDifferenceUniformGrid(1, convergence_order, u)
    du = du_op.evaluate()

    error = np.max(np.abs(du.data - np.cos(x)))
    error_est = error_derivative_1[(resolution, convergence_order)]

    assert error < error_est
Ejemplo n.º 7
0
def test_BDF6_wave(resolution):
    grid = field.UniformPeriodicGrid(resolution, 2 * np.pi)
    x = grid.values

    IC = np.exp(-(x - np.pi)**2 * 8)
    u = field.Field(grid, IC)

    target = np.exp(-(x - np.pi - 2 * np.pi * 0.2)**2 * 8)

    d = spatial.FiniteDifferenceUniformGrid(1,
                                            6,
                                            grid,
                                            stencil_type='centered')

    ts = timesteppers.BackwardDifferentiationFormula(u, d, 6)

    alpha = 0.5
    num_periods = 1.8
    ts.evolve(2 * np.pi * num_periods, alpha * grid.dx)

    error = np.max(np.abs(u.data - target))
    error_est = error_BDF6_wave[resolution]

    assert error < error_est