Path: blob/main/examples/tree_3d_dgsem/elixir_euler_sedov_scO2.jl
5586 views
using OrdinaryDiffEqSSPRK1using Trixi23###############################################################################4# semidiscretization of the compressible Euler equations56equations = CompressibleEulerEquations3D(1.4)78"""9initial_condition_sedov_blast_wave(x, t, equations::CompressibleEulerEquations3D)1011The Sedov blast wave setup based on example 35.1.4 from Flash12- https://flash.rochester.edu/site/flashcode/user_support/flash4_ug_4p8.pdf13"""14function initial_condition_sedov_blast_wave(x, t, equations::CompressibleEulerEquations3D)15# Set up polar coordinates16RealT = eltype(x)17inicenter = SVector(0, 0, 0)18x_norm = x[1] - inicenter[1]19y_norm = x[2] - inicenter[2]20z_norm = x[3] - inicenter[3]21r = sqrt(x_norm^2 + y_norm^2 + z_norm^2)2223# Setup based on example 35.1.4 in https://flash.rochester.edu/site/flashcode/user_support/flash4_ug_4p8.pdf24r0 = 0.21875f0 # = 3.5 * smallest dx (for domain length=4 and max-ref=6)25E = 126nu = 3 # dims27p0_inner = 3 * (equations.gamma - 1) * E / ((nu + 1) * convert(RealT, pi) * r0^nu)28p0_outer = convert(RealT, 1.0e-5) # = true Sedov setup2930# Calculate primitive variables31rho = 132v1 = 033v2 = 034v3 = 035p = r > r0 ? p0_outer : p0_inner3637return prim2cons(SVector(rho, v1, v2, v3, p), equations)38end39initial_condition = initial_condition_sedov_blast_wave4041surface_flux = flux_lax_friedrichs42volume_flux = flux_chandrashekar43basis = LobattoLegendreBasis(3)44indicator_sc = IndicatorHennemannGassner(equations, basis,45alpha_max = 0.5,46alpha_min = 0.001,47alpha_smooth = true,48variable = density_pressure)49volume_integral = VolumeIntegralShockCapturingRRG(basis, indicator_sc;50volume_flux_dg = volume_flux,51volume_flux_fv = surface_flux,52slope_limiter = minmod)5354solver = DGSEM(basis, surface_flux, volume_integral)5556coordinates_min = (-2.0, -2.0, -2.0)57coordinates_max = (2.0, 2.0, 2.0)58mesh = TreeMesh(coordinates_min, coordinates_max,59initial_refinement_level = 4,60n_cells_max = 1_000_000, periodicity = true)6162semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver;63boundary_conditions = boundary_condition_periodic)6465###############################################################################66# ODE solvers, callbacks etc.6768tspan = (0.0, 1.0)69ode = semidiscretize(semi, tspan)7071summary_callback = SummaryCallback()7273analysis_interval = 100074analysis_callback = AnalysisCallback(semi, interval = analysis_interval)7576alive_callback = AliveCallback(alive_interval = 20)7778amr_indicator = IndicatorHennemannGassner(semi,79alpha_max = 1.0,80alpha_min = 0.0,81alpha_smooth = false,82variable = density_pressure)8384amr_controller = ControllerThreeLevel(semi, amr_indicator,85base_level = 2,86max_level = 6, max_threshold = 0.0003)8788amr_callback = AMRCallback(semi, amr_controller,89interval = 2,90adapt_initial_condition = true,91adapt_initial_condition_only_refine = true)9293stepsize_callback = StepsizeCallback(cfl = 0.5)9495callbacks = CallbackSet(summary_callback,96analysis_callback, alive_callback,97amr_callback, stepsize_callback)9899###############################################################################100# run the simulation101102sol = solve(ode, SSPRK54(thread = Trixi.True()); dt = 1.0,103ode_default_options()..., callback = callbacks);104105106