Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
trixi-framework
GitHub Repository: trixi-framework/Trixi.jl
Path: blob/main/examples/dgmulti_2d/elixir_euler_bilinear.jl
2055 views
1
using OrdinaryDiffEqLowStorageRK
2
using Trixi
3
4
dg = DGMulti(polydeg = 3, element_type = Quad(), approximation_type = SBP(),
5
surface_integral = SurfaceIntegralWeakForm(flux_hll),
6
volume_integral = VolumeIntegralFluxDifferencing(flux_ranocha))
7
8
equations = CompressibleEulerEquations2D(1.4)
9
initial_condition = initial_condition_convergence_test
10
source_terms = source_terms_convergence_test
11
12
# example where we tag two separate boundary segments of the mesh
13
top_boundary(x, tol = 50 * eps()) = abs(x[2] - 1) < tol
14
rest_of_boundary(x, tol = 50 * eps()) = !top_boundary(x, tol)
15
is_on_boundary = Dict(:top => top_boundary, :rest => rest_of_boundary)
16
17
function mapping(xi, eta)
18
x = xi + 0.1 * sin(pi * xi) * sin(pi * eta)
19
y = eta + 0.1 * sin(pi * xi) * sin(pi * eta)
20
return SVector(x, y)
21
end
22
cells_per_dimension = (16, 16)
23
vertex_coordinates, EToV = StartUpDG.uniform_mesh(dg.basis.element_type,
24
cells_per_dimension...)
25
for i in eachindex(vertex_coordinates[1])
26
vx, vy = getindex.(vertex_coordinates, i)
27
setindex!.(vertex_coordinates, mapping(vx, vy), i)
28
end
29
30
mesh = DGMultiMesh(dg, vertex_coordinates, EToV, is_on_boundary = is_on_boundary)
31
32
boundary_condition_convergence_test = BoundaryConditionDirichlet(initial_condition)
33
boundary_conditions = (; :top => boundary_condition_convergence_test,
34
:rest => boundary_condition_convergence_test)
35
36
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, dg,
37
source_terms = source_terms,
38
boundary_conditions = boundary_conditions)
39
40
tspan = (0.0, 0.4)
41
ode = semidiscretize(semi, tspan)
42
43
summary_callback = SummaryCallback()
44
alive_callback = AliveCallback(alive_interval = 10)
45
analysis_interval = 100
46
analysis_callback = AnalysisCallback(semi, interval = analysis_interval, uEltype = real(dg))
47
save_solution = SaveSolutionCallback(interval = analysis_interval,
48
solution_variables = cons2prim)
49
callbacks = CallbackSet(summary_callback, alive_callback, analysis_callback, save_solution)
50
51
###############################################################################
52
# run the simulation
53
54
sol = solve(ode, RDPK3SpFSAL49(); abstol = 1.0e-6, reltol = 1.0e-6,
55
ode_default_options()..., callback = callbacks);
56
57