Path: blob/main/examples/dgmulti_1d/elixir_euler_modified_sod.jl
5586 views
using OrdinaryDiffEqSSPRK1using Trixi23surface_flux = FluxPlusDissipation(flux_ranocha, DissipationMatrixWintersEtal())4volume_flux = flux_ranocha5dg = DGMulti(polydeg = 3, element_type = Line(), approximation_type = SBP(),6surface_integral = SurfaceIntegralWeakForm(surface_flux),7volume_integral = VolumeIntegralFluxDifferencing(volume_flux))89equations = CompressibleEulerEquations1D(1.4)1011"""12initial_condition_modified_sod(x, t, equations::CompressibleEulerEquations1D)1314Modified Sod shock tube problem, presented in Section 6.4 of Toro's book.15This problem consists of a left sonic rarefaction wave and is useful for testing whether numerical solutions16violate the entropy condition.17An entropy-satisfying solution should produce a smooth(!) rarefaction wave.1819## References20- Toro (2009).21Riemann Solvers and Numerical Methods for Fluid Dynamics: A Practical Introduction, 3rd Edition.22[DOI: 10.1007/b79761](https://doi.org/10.1007/b79761)2324- Lin, Chan (2014)25High order entropy stable discontinuous Galerkin spectral element methods through subcell limiting26[DOI: 10.1016/j.jcp.2023.112677](https://doi.org/10.1016/j.jcp.2023.112677)27"""28function initial_condition_modified_sod(x, t, ::CompressibleEulerEquations1D)29if x[1] < 0.330return prim2cons(SVector(1, 0.75, 1), equations)31else32return prim2cons(SVector(0.125, 0.0, 0.1), equations)33end34end3536initial_condition = initial_condition_modified_sod3738cells_per_dimension = (50,)39mesh = DGMultiMesh(dg, cells_per_dimension,40coordinates_min = (0.0,), coordinates_max = (1.0,), periodicity = false)41semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, dg;42boundary_conditions = boundary_condition_periodic)4344tspan = (0.0, 0.2)45ode = semidiscretize(semi, tspan)4647summary_callback = SummaryCallback()48alive_callback = AliveCallback(alive_interval = 100)49analysis_interval = 100050analysis_callback = AnalysisCallback(semi, interval = analysis_interval, uEltype = real(dg))51callbacks = CallbackSet(summary_callback,52analysis_callback,53alive_callback)5455###############################################################################56# run the simulation5758sol = solve(ode, SSPRK43(); adaptive = false,59dt = 0.5 * estimate_dt(mesh, dg),60ode_default_options()...,61callback = callbacks);626364