Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
trixi-framework
GitHub Repository: trixi-framework/Trixi.jl
Path: blob/main/examples/structured_3d_dgsem/elixir_mhd_alfven_wave.jl
2055 views
1
using OrdinaryDiffEqLowStorageRK
2
using Trixi
3
4
###############################################################################
5
# semidiscretization of the compressible ideal GLM-MHD equations
6
7
equations = IdealGlmMhdEquations3D(5 / 3)
8
9
initial_condition = initial_condition_convergence_test
10
11
volume_flux = (flux_central, flux_nonconservative_powell)
12
solver = DGSEM(polydeg = 5,
13
surface_flux = (flux_hlle,
14
flux_nonconservative_powell),
15
volume_integral = VolumeIntegralFluxDifferencing(volume_flux))
16
17
# Create the mesh
18
# Note, we use the domain [-1, 1]^3 for the Alfvén wave convergence test case so the
19
# warped mapping simplifies (quite a bit)
20
21
# Mapping as described in https://arxiv.org/abs/2012.12040
22
function mapping(xi, eta, zeta)
23
y = eta + 0.125 * (cos(1.5 * pi * xi) * cos(0.5 * pi * eta) * cos(0.5 * pi * zeta))
24
25
x = xi + 0.125 * (cos(0.5 * pi * xi) * cos(2 * pi * y) * cos(0.5 * pi * zeta))
26
27
z = zeta + 0.125 * (cos(0.5 * pi * x) * cos(pi * y) * cos(0.5 * pi * zeta))
28
29
return SVector(x, y, z)
30
end
31
32
cells_per_dimension = (4, 4, 4)
33
mesh = StructuredMesh(cells_per_dimension, mapping)
34
35
# create the semi discretization object
36
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver)
37
38
###############################################################################
39
# ODE solvers, callbacks etc.
40
41
tspan = (0.0, 1.0)
42
ode = semidiscretize(semi, tspan)
43
44
summary_callback = SummaryCallback()
45
46
analysis_interval = 100
47
analysis_callback = AnalysisCallback(semi, interval = analysis_interval)
48
alive_callback = AliveCallback(analysis_interval = analysis_interval)
49
50
save_solution = SaveSolutionCallback(interval = 100,
51
save_initial_solution = true,
52
save_final_solution = true,
53
solution_variables = cons2prim)
54
55
cfl = 1.2
56
stepsize_callback = StepsizeCallback(cfl = cfl)
57
58
glm_speed_callback = GlmSpeedCallback(glm_scale = 0.5, cfl = cfl)
59
60
callbacks = CallbackSet(summary_callback,
61
analysis_callback, alive_callback,
62
save_solution,
63
stepsize_callback,
64
glm_speed_callback)
65
66
###############################################################################
67
# run the simulation
68
69
sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false);
70
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
71
ode_default_options()..., callback = callbacks);
72
73