Path: blob/main/examples/p4est_2d_dgsem/elixir_navierstokes_freestream_symmetry.jl
2831 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, polydeg = 1,31coordinates_min = coordinates_min, coordinates_max = coordinates_max,32periodicity = (false, true))3334boundary_conditions = (; x_neg = boundary_condition_slip_wall,35x_pos = boundary_condition_slip_wall)3637# The "Slip" boundary condition rotates all velocities into tangential direction38# and thus acts as a symmetry plane.39velocity_bc = Slip()40heat_bc = Adiabatic((x, t, equations_parabolic) -> zero(eltype(x)))41boundary_condition_y = BoundaryConditionNavierStokesWall(velocity_bc,42heat_bc)4344boundary_conditions_parabolic = (; x_neg = boundary_condition_y,45x_pos = boundary_condition_y)4647semi = SemidiscretizationHyperbolicParabolic(mesh, (equations, equations_parabolic),48initial_condition, solver;49boundary_conditions = (boundary_conditions,50boundary_conditions_parabolic))5152###############################################################################5354tspan = (0.0, 10.0)55ode = semidiscretize(semi, tspan)5657summary_callback = SummaryCallback()5859analysis_interval = 200060analysis_callback = AnalysisCallback(semi, interval = analysis_interval)6162alive_callback = AliveCallback(analysis_interval = analysis_interval)6364stepsize_callback = StepsizeCallback(cfl = 1.3)6566callbacks = CallbackSet(summary_callback,67analysis_callback,68alive_callback,69stepsize_callback)7071###############################################################################7273sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false);74dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback75ode_default_options()..., callback = callbacks);767778