-
Notifications
You must be signed in to change notification settings - Fork 115
/
Copy pathelixir_euler_vortex_mortar_shockcapturing.jl
71 lines (52 loc) · 2.72 KB
/
elixir_euler_vortex_mortar_shockcapturing.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
using OrdinaryDiffEq
using Trixi
###############################################################################
# semidiscretization of the compressible Euler equations
equations = CompressibleEulerEquations2D(1.4)
initial_conditions = initial_conditions_isentropic_vortex
surface_flux = flux_lax_friedrichs
volume_flux = flux_kennedy_gruber
basis = LobattoLegendreBasis(3)
indicator_sc = IndicatorHennemannGassner(equations, basis,
alpha_max=0.5,
alpha_min=0.001,
alpha_smooth=true,
variable=density_pressure)
volume_integral = VolumeIntegralShockCapturingHG(indicator_sc;
volume_flux_dg=volume_flux,
volume_flux_fv=surface_flux)
solver = DGSEM(basis, surface_flux, volume_integral)
coordinates_min = (-10, -10)
coordinates_max = ( 10, 10)
refinement_patches = (
(type="box", coordinates_min=(0.0, -10.0), coordinates_max=(10.0, 10.0)),
)
mesh = TreeMesh(coordinates_min, coordinates_max,
initial_refinement_level=4,
refinement_patches=refinement_patches,
n_cells_max=10_000,)
semi = SemidiscretizationHyperbolic(mesh, equations, initial_conditions, solver)
###############################################################################
# ODE solvers, callbacks etc.
tspan = (0.0, 1.0)
ode = semidiscretize(semi, tspan)
summary_callback = SummaryCallback()
stepsize_callback = StepsizeCallback(cfl=1.4)
save_solution = SaveSolutionCallback(interval=100,
save_initial_solution=true,
save_final_solution=true,
solution_variables=:primitive)
# TODO: Taal, restart
# restart_interval = 100
analysis_interval = 100
alive_callback = AliveCallback(analysis_interval=analysis_interval)
analysis_callback = AnalysisCallback(semi, interval=analysis_interval, save_analysis=true,
extra_analysis_errors=(:conservation_error,),
extra_analysis_integrals=(entropy, energy_total,
energy_kinetic, energy_internal))
callbacks = CallbackSet(summary_callback, stepsize_callback, save_solution, analysis_callback, alive_callback)
###############################################################################
# run the simulation
sol = solve(ode, CarpenterKennedy2N54(williamson_condition=false), dt=stepsize_callback(ode),
save_everystep=false, callback=callbacks);
summary_callback() # print the timer summary