Path: blob/main/examples/p4est_2d_dgsem/elixir_navierstokes_freestream_symmetry.jl
2055 views
using OrdinaryDiffEqLowStorageRK1using Trixi23###############################################################################4# semidiscretization of the compressible Navier-Stokes equations56prandtl_number() = 0.727mu = 1e-3 # equivalent to Re = 100089equations = CompressibleEulerEquations2D(1.4)10equations_parabolic = CompressibleNavierStokesDiffusion2D(equations, mu = mu,11Prandtl = prandtl_number())1213# Flow in y-direction to test the symmetry BCs at the left and right boundaries14function initial_condition_freestream(x, t, equations)15rho = 1.416v1 = 0.017v2 = 1.018p = 1.01920return prim2cons(SVector(rho, v1, v2, p), equations)21end22initial_condition = initial_condition_freestream2324volume_flux = flux_ranocha25solver = DGSEM(polydeg = 3, surface_flux = flux_hlle)2627coordinates_min = (0.0, 0.0)28coordinates_max = (1.0, 1.0)29trees_per_dimension = (4, 4)30mesh = P4estMesh(trees_per_dimension,31polydeg = 1, initial_refinement_level = 0,32coordinates_min = coordinates_min, coordinates_max = coordinates_max,33periodicity = (false, true))3435boundary_conditions = Dict(:x_neg => boundary_condition_slip_wall,36:x_pos => boundary_condition_slip_wall)3738# The "Slip" boundary condition rotates all velocities into tangential direction39# and thus acts as a symmetry plane.40velocity_bc = Slip()41heat_bc = Adiabatic((x, t, equations_parabolic) -> zero(eltype(x)))42boundary_condition_y = BoundaryConditionNavierStokesWall(velocity_bc,43heat_bc)4445boundary_conditions_parabolic = Dict(:x_neg => boundary_condition_y,46:x_pos => boundary_condition_y)4748semi = SemidiscretizationHyperbolicParabolic(mesh, (equations, equations_parabolic),49initial_condition, solver;50boundary_conditions = (boundary_conditions,51boundary_conditions_parabolic))5253###############################################################################5455tspan = (0.0, 10.0)56ode = semidiscretize(semi, tspan)5758summary_callback = SummaryCallback()5960analysis_interval = 200061analysis_callback = AnalysisCallback(semi, interval = analysis_interval)6263alive_callback = AliveCallback(analysis_interval = analysis_interval)6465stepsize_callback = StepsizeCallback(cfl = 1.3)6667callbacks = CallbackSet(summary_callback,68analysis_callback,69alive_callback,70stepsize_callback)7172###############################################################################7374sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false);75dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback76ode_default_options()..., callback = callbacks);777879