Path: blob/main/examples/dgmulti_2d/elixir_advection_diffusion.jl
2055 views
using OrdinaryDiffEqLowStorageRK1using Trixi23dg = DGMulti(polydeg = 3, element_type = Tri(), approximation_type = Polynomial(),4surface_integral = SurfaceIntegralWeakForm(flux_lax_friedrichs),5volume_integral = VolumeIntegralWeakForm())67equations = LinearScalarAdvectionEquation2D(1.5, 1.0)8equations_parabolic = LaplaceDiffusion2D(5.0e-2, equations)910initial_condition_zero(x, t, equations::LinearScalarAdvectionEquation2D) = SVector(0.0)11initial_condition = initial_condition_zero1213# tag different boundary segments14left(x, tol = 50 * eps()) = abs(x[1] + 1) < tol15right(x, tol = 50 * eps()) = abs(x[1] - 1) < tol16bottom(x, tol = 50 * eps()) = abs(x[2] + 1) < tol17top(x, tol = 50 * eps()) = abs(x[2] - 1) < tol18is_on_boundary = Dict(:left => left, :right => right, :top => top, :bottom => bottom)1920cells_per_dimension = (16, 16)21mesh = DGMultiMesh(dg, cells_per_dimension; is_on_boundary)2223# BC types24boundary_condition_left = BoundaryConditionDirichlet((x, t, equations_parabolic) -> SVector(1 +250.1 *26x[2]))27boundary_condition_zero = BoundaryConditionDirichlet((x, t, equations_parabolic) -> SVector(0.0))28boundary_condition_neumann_zero = BoundaryConditionNeumann((x, t, equations_parabolic) -> SVector(0.0))2930# define inviscid boundary conditions31boundary_conditions = (; :left => boundary_condition_left,32:bottom => boundary_condition_zero,33:top => boundary_condition_do_nothing,34:right => boundary_condition_do_nothing)3536# define viscous boundary conditions37boundary_conditions_parabolic = (; :left => boundary_condition_left,38:bottom => boundary_condition_zero,39:top => boundary_condition_zero,40:right => boundary_condition_neumann_zero)4142semi = SemidiscretizationHyperbolicParabolic(mesh, (equations, equations_parabolic),43initial_condition, dg;44boundary_conditions = (boundary_conditions,45boundary_conditions_parabolic))4647tspan = (0.0, 1.5)48ode = semidiscretize(semi, tspan)4950summary_callback = SummaryCallback()51alive_callback = AliveCallback(alive_interval = 10)52analysis_interval = 10053analysis_callback = AnalysisCallback(semi, interval = analysis_interval, uEltype = real(dg))54save_solution = SaveSolutionCallback(interval = analysis_interval,55solution_variables = cons2prim)56callbacks = CallbackSet(summary_callback, alive_callback, analysis_callback, save_solution)5758###############################################################################59# run the simulation6061time_int_tol = 1e-662sol = solve(ode, RDPK3SpFSAL49(); abstol = time_int_tol, reltol = time_int_tol,63ode_default_options()..., callback = callbacks)646566