Open feiyu-chen96 opened 5 years ago
When solving Burger's equation, a ' bump' always appear in the residual of the solution. The cause is unknown.
def test_burgers(): nu = 1 a = 2 # a parameter for the special case T = 0.1 burgers = lambda u, x, t: diff(u, t) + u * diff(u, x) - nu * diff(u, x, order=2) ibvp = IBVP1D( x_min=0, x_min_val=lambda t: 0, x_max=1, x_max_val=lambda t: 0, t_min=0, t_min_val=lambda x: 2 * nu * np.pi * torch.sin(np.pi * x) / (a + torch.cos(np.pi * x)) ) net = FCNN(n_input_units=2, n_hidden_units=32, n_hidden_layers=1) solution_neural_net_burgers, _ = solve2D( pde=burgers, condition=ibvp, xy_min=[0, 0], xy_max=[1, T], net=net, max_epochs=300, train_generator=ExampleGenerator2D([50, 50], [0, 0], [1, T], method='equally-spaced-noisy'), batch_size=64, monitor=Monitor2D(check_every=10, xy_min=[0, 0], xy_max=[1, T]) ) def solution_analytical_burgers(x, t): numer = 2 * nu * np.pi * np.exp(-np.pi ** 2 * nu * t) * np.sin(np.pi * x) denom = a + np.exp(-np.pi ** 2 * nu * t) * np.cos(np.pi * x) return numer / denom xs = np.linspace(0, 1, 101) ts = np.linspace(0, T, 101) xx, tt = np.meshgrid(xs, ts) make_animation(solution_neural_net_burgers, xs, ts) # test animation sol_ana = solution_analytical_burgers(xx, tt) sol_net = solution_neural_net_burgers(xx, tt, as_type='np') assert isclose(sol_net, sol_ana, atol=0.1).all() print('Burgers test passed.')
When solving Burger's equation, a ' bump' always appear in the residual of the solution. The cause is unknown.