Path: blob/main/examples/p4est_2d_dgsem/elixir_navierstokes_blast_reflective.jl
2055 views
using OrdinaryDiffEqLowStorageRK1using Trixi23###############################################################################4# semidiscretization of the ideal compressible Navier-Stokes equations56prandtl_number() = 0.727mu() = 1e-489equations = CompressibleEulerEquations2D(1.4)10equations_parabolic = CompressibleNavierStokesDiffusion2D(equations, mu = mu(),11Prandtl = prandtl_number())1213function initial_condition_weak_blast_wave(x, t, equations::CompressibleEulerEquations2D)14# Set up polar coordinates15inicenter = SVector(0.0, 0.0)16x_norm = x[1] - inicenter[1]17y_norm = x[2] - inicenter[2]18r = sqrt(x_norm^2 + y_norm^2)1920r0 = 0.221E = 122p0_inner = 323p0_outer = 12425# Calculate primitive variables26rho = 1.127v1 = 0.028v2 = 0.029p = r > r0 ? p0_outer : p0_inner3031return prim2cons(SVector(rho, v1, v2, p), equations)32end33initial_condition = initial_condition_weak_blast_wave3435surface_flux = flux_hlle36volume_flux = flux_ranocha37polydeg = 438basis = LobattoLegendreBasis(polydeg)39indicator_sc = IndicatorHennemannGassner(equations, basis,40alpha_max = 1.0,41alpha_min = 0.001,42alpha_smooth = true,43variable = density_pressure)44volume_integral = VolumeIntegralShockCapturingHG(indicator_sc;45volume_flux_dg = volume_flux,46volume_flux_fv = surface_flux)4748solver = DGSEM(polydeg = polydeg, surface_flux = surface_flux,49volume_integral = volume_integral)5051# Realize reflective walls via slip walls which permit only tangential velocity52boundary_conditions = Dict(:x_neg => boundary_condition_slip_wall,53:y_neg => boundary_condition_slip_wall,54:y_pos => boundary_condition_slip_wall,55:x_pos => boundary_condition_slip_wall)5657# The "Slip" boundary condition rotates all velocities into tangential direction58# and thus acts as a reflective wall here.59velocity_bc = Slip()60heat_bc = Adiabatic((x, t, equations_parabolic) -> zero(eltype(x)))61boundary_conditions_visc = BoundaryConditionNavierStokesWall(velocity_bc, heat_bc)6263boundary_conditions_parabolic = Dict(:x_neg => boundary_conditions_visc,64:x_pos => boundary_conditions_visc,65:y_neg => boundary_conditions_visc,66:y_pos => boundary_conditions_visc)6768###############################################################################6970coordinates_min = (-1.0, -1.0)71coordinates_max = (1.0, 1.0)7273trees_per_dimension = (4, 4)74mesh = P4estMesh(trees_per_dimension,75polydeg = 1, initial_refinement_level = 3,76coordinates_min = coordinates_min, coordinates_max = coordinates_max,77periodicity = false)7879semi = SemidiscretizationHyperbolicParabolic(mesh, (equations, equations_parabolic),80initial_condition, solver;81boundary_conditions = (boundary_conditions,82boundary_conditions_parabolic))8384###############################################################################8586tspan = (0.0, 0.7)87ode = semidiscretize(semi, tspan)8889summary_callback = SummaryCallback()9091analysis_interval = 30092analysis_callback = AnalysisCallback(semi, interval = analysis_interval)9394alive_callback = AliveCallback(analysis_interval = analysis_interval)9596callbacks = CallbackSet(summary_callback,97analysis_callback,98alive_callback)99100callbacks = CallbackSet(summary_callback,101analysis_callback,102alive_callback)103104###############################################################################105106# 5th-order RKM optimized for compressible Navier-Stokes equations, see also107# https://docs.sciml.ai/DiffEqDocs/stable/solvers/ode_solve/#Low-Storage-Methods108ode_alg = CKLLSRK65_4M_4R()109110abstol = 1e-6111reltol = 1e-4112sol = solve(ode, ode_alg; abstol = abstol, reltol = reltol,113ode_default_options()..., callback = callbacks);114115116