Path: blob/main/examples/tree_1d_fdsbp/elixir_advection_upwind.jl
5586 views
# !!! warning "Experimental implementation (upwind SBP)"1# This is an experimental feature and may change in future releases.23using OrdinaryDiffEqLowStorageRK4using Trixi56###############################################################################7# semidiscretization of the linear scalar advection equation89equations = LinearScalarAdvectionEquation1D(1.0)1011function initial_condition_sin(x, t, equation::LinearScalarAdvectionEquation1D)12return SVector(sinpi(x[1] - equations.advection_velocity[1] * t))13end1415D_upw = upwind_operators(SummationByPartsOperators.Mattsson2017,16derivative_order = 1,17accuracy_order = 4,18xmin = -1.0, xmax = 1.0,19N = 16)20flux_splitting = splitting_lax_friedrichs21solver = FDSBP(D_upw,22surface_integral = SurfaceIntegralUpwind(flux_splitting),23volume_integral = VolumeIntegralUpwind(flux_splitting))2425coordinates_min = -1.026coordinates_max = 1.027mesh = TreeMesh(coordinates_min, coordinates_max,28initial_refinement_level = 4,29n_cells_max = 10_000,30periodicity = true)3132semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition_sin, solver;33boundary_conditions = boundary_condition_periodic)3435###############################################################################36# ODE solvers, callbacks etc.3738tspan = (0.0, 2.0)39ode = semidiscretize(semi, tspan)4041summary_callback = SummaryCallback()4243analysis_interval = 100044analysis_callback = AnalysisCallback(semi, interval = analysis_interval)4546alive_callback = AliveCallback(analysis_interval = analysis_interval)4748callbacks = CallbackSet(summary_callback,49analysis_callback, alive_callback)5051###############################################################################52# run the simulation5354sol = solve(ode, RDPK3SpFSAL49(); abstol = 1.0e-6, reltol = 1.0e-6,55ode_default_options()..., callback = callbacks);565758