Path: blob/main/benchmark/elixir_2d_euler_vortex_structured.jl
2055 views
1using OrdinaryDiffEqLowOrderRK2using Trixi34###############################################################################5# semidiscretization of the compressible Euler equations67equations = CompressibleEulerEquations2D(1.4)89"""10initial_condition_isentropic_vortex(x, t, equations::CompressibleEulerEquations2D)1112The classical isentropic vortex test case of13- Chi-Wang Shu (1997)14Essentially Non-Oscillatory and Weighted Essentially Non-Oscillatory15Schemes for Hyperbolic Conservation Laws16[NASA/CR-97-206253](https://ntrs.nasa.gov/citations/19980007543)17"""18function initial_condition_isentropic_vortex(x, t, equations::CompressibleEulerEquations2D)19# needs appropriate mesh size, e.g. [-10,-10]x[10,10]20# make sure that the inicenter does not exit the domain, e.g. T=10.021# initial center of the vortex22inicenter = SVector(0.0, 0.0)23# size and strength of the vortex24iniamplitude = 0.225# base flow26rho = 1.027v1 = 1.028v2 = 1.029vel = SVector(v1, v2)30p = 10.031rt = p / rho # ideal gas equation32cent = inicenter + vel * t # advection of center33cent = x - cent # distance to centerpoint34#cent=cross(iniaxis,cent) # distance to axis, tangent vector, length r35# cross product with iniaxis = [0,0,1]36cent = SVector(-cent[2], cent[1])37r2 = cent[1]^2 + cent[2]^238du = iniamplitude / (2 * π) * exp(0.5 * (1 - r2)) # vel. perturbation39dtemp = -(equations.gamma - 1) / (2 * equations.gamma * rt) * du^2 # isentrop40rho = rho * (1 + dtemp)^(1 \ (equations.gamma - 1))41vel = vel + du * cent42v1, v2 = vel43p = p * (1 + dtemp)^(equations.gamma / (equations.gamma - 1))44prim = SVector(rho, v1, v2, p)45return prim2cons(prim, equations)46end47initial_condition = initial_condition_isentropic_vortex48solver = DGSEM(polydeg = 3, surface_flux = flux_lax_friedrichs)4950coordinates_min = (-10.0, -10.0)51coordinates_max = (10.0, 10.0)52cells_per_dimension = (16, 16)53mesh = StructuredMesh(cells_per_dimension, coordinates_min, coordinates_max)5455semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)5657###############################################################################58# ODE solvers, callbacks etc.5960tspan = (0.0, 20.0)61ode = semidiscretize(semi, tspan)6263summary_callback = SummaryCallback()6465analysis_interval = 10066analysis_callback = AnalysisCallback(semi, interval = analysis_interval,67save_analysis = true,68extra_analysis_errors = (:conservation_error,),69extra_analysis_integrals = (entropy, energy_total,70energy_kinetic,71energy_internal))7273alive_callback = AliveCallback(analysis_interval = analysis_interval)7475callbacks = CallbackSet(summary_callback, analysis_callback, alive_callback)7677###############################################################################78# run the simulation7980sol = solve(ode, BS3();81ode_default_options()..., callback = callbacks);82summary_callback() # print the timer summary838485