Path: blob/main/examples/dgmulti_1d/elixir_advection_diffusion_sbp.jl
5586 views
using OrdinaryDiffEqLowStorageRK1using Trixi23dg = DGMulti(polydeg = 3, element_type = Line(), approximation_type = GaussSBP(),4surface_integral = SurfaceIntegralWeakForm(flux_lax_friedrichs))56advection_velocity = 0.17equations = LinearScalarAdvectionEquation1D(advection_velocity)8diffusivity() = 5.0e-29equations_parabolic = LaplaceDiffusion1D(diffusivity(), equations)1011function x_trans_periodic(x, domain_length = SVector(oftype(x[1], 2 * pi)),12center = SVector(oftype(x[1], 0)))13x_normalized = x .- center14x_shifted = x_normalized .% domain_length15x_offset = ((x_shifted .< -0.5f0 * domain_length) -16(x_shifted .> 0.5f0 * domain_length)) .*17domain_length18return center + x_shifted + x_offset19end2021# Define initial condition22function initial_condition_diffusive_convergence_test(x, t,23equation::LinearScalarAdvectionEquation1D)24# Store translated coordinate for easy use of exact solution25x_trans = x_trans_periodic(x - equation.advection_velocity * t)2627nu = diffusivity()28c = 029A = 130omega = 131scalar = c + A * sin(omega * sum(x_trans)) * exp(-nu * omega^2 * t)32return SVector(scalar)33end34initial_condition = initial_condition_diffusive_convergence_test3536cells_per_dimension = (12,)37mesh = DGMultiMesh(dg, cells_per_dimension,38coordinates_min = (-pi,), coordinates_max = (pi,),39periodicity = true)4041# define periodic boundary conditions everywhere42boundary_conditions = boundary_condition_periodic43boundary_conditions_parabolic = boundary_condition_periodic4445semi = SemidiscretizationHyperbolicParabolic(mesh, (equations, equations_parabolic),46initial_condition, dg;47boundary_conditions = (boundary_conditions,48boundary_conditions_parabolic))4950tspan = (0.0, 1.0)51ode = semidiscretize(semi, tspan)5253summary_callback = SummaryCallback()5455alive_callback = AliveCallback(alive_interval = 10)5657analysis_interval = 10058analysis_callback = AnalysisCallback(semi, interval = analysis_interval, uEltype = real(dg))5960callbacks = CallbackSet(summary_callback, alive_callback,61analysis_callback)6263###############################################################################64# run the simulation6566time_int_tol = 1e-667sol = solve(ode, RDPK3SpFSAL49(); abstol = time_int_tol, reltol = time_int_tol,68ode_default_options()..., callback = callbacks)697071