Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
trixi-framework
GitHub Repository: trixi-framework/Trixi.jl
Path: blob/main/examples/tree_3d_dgsem/elixir_mhdmultiion_ec.jl
5586 views
1
2
using OrdinaryDiffEqLowStorageRK
3
using Trixi
4
5
###############################################################################
6
# semidiscretization of the ideal MHD equations
7
equations = IdealGlmMhdMultiIonEquations3D(gammas = (1.4, 1.667),
8
charge_to_mass = (1.0, 2.0))
9
10
initial_condition = initial_condition_weak_blast_wave
11
12
volume_flux = (flux_ruedaramirez_etal, flux_nonconservative_ruedaramirez_etal)
13
surface_flux = (flux_ruedaramirez_etal, flux_nonconservative_ruedaramirez_etal)
14
solver = DGSEM(polydeg = 3, surface_flux = surface_flux,
15
volume_integral = VolumeIntegralFluxDifferencing(volume_flux))
16
17
coordinates_min = (-2.0, -2.0, -2.0)
18
coordinates_max = (2.0, 2.0, 2.0)
19
mesh = TreeMesh(coordinates_min, coordinates_max,
20
initial_refinement_level = 4,
21
n_cells_max = 10_000, periodicity = true)
22
23
# The multi-ion GLM-MHD equations require the inclusion of source_terms_lorentz
24
# whenever multiple ion species are present
25
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver;
26
source_terms = source_terms_lorentz,
27
boundary_conditions = boundary_condition_periodic)
28
29
###############################################################################
30
# ODE solvers, callbacks etc.
31
32
tspan = (0.0, 0.4)
33
ode = semidiscretize(semi, tspan)
34
35
summary_callback = SummaryCallback()
36
37
analysis_interval = 10
38
analysis_callback = AnalysisCallback(semi, interval = analysis_interval)
39
alive_callback = AliveCallback(analysis_interval = analysis_interval)
40
41
save_solution = SaveSolutionCallback(dt = 0.1,
42
save_initial_solution = true,
43
save_final_solution = true,
44
solution_variables = cons2prim)
45
46
cfl = 0.5
47
48
stepsize_callback = StepsizeCallback(cfl = cfl)
49
50
glm_speed_callback = GlmSpeedCallback(glm_scale = 0.5, cfl = cfl)
51
52
callbacks = CallbackSet(summary_callback,
53
analysis_callback, alive_callback,
54
save_solution,
55
stepsize_callback,
56
glm_speed_callback)
57
58
###############################################################################
59
# run the simulation
60
61
sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false);
62
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
63
ode_default_options()..., callback = callbacks);
64
65