Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
trixi-framework
GitHub Repository: trixi-framework/Trixi.jl
Path: blob/main/examples/structured_2d_dgsem/elixir_hypdiff_harmonic_nonperiodic.jl
2055 views
1
using OrdinaryDiffEqLowStorageRK
2
using Trixi
3
4
###############################################################################
5
# semidiscretization of the hyperbolic diffusion equations
6
7
equations = HyperbolicDiffusionEquations2D()
8
9
@inline function initial_condition_harmonic_nonperiodic(x, t,
10
equations::HyperbolicDiffusionEquations2D)
11
# elliptic equation: -ν Δϕ = 0 in Ω, u = g on ∂Ω
12
if t == 0.0
13
phi = 1.0
14
q1 = 1.0
15
q2 = 1.0
16
else
17
C = inv(sinh(pi))
18
sinpi_x1, cospi_x1 = sincos(pi * x[1])
19
sinpi_x2, cospi_x2 = sincos(pi * x[2])
20
sinh_pix1 = sinh(pi * x[1])
21
cosh_pix1 = cosh(pi * x[1])
22
sinh_pix2 = sinh(pi * x[2])
23
cosh_pix2 = cosh(pi * x[2])
24
phi = C * (sinh_pix1 * sinpi_x2 + sinh_pix2 * sinpi_x1)
25
q1 = C * pi * (cosh_pix1 * sinpi_x2 + sinh_pix2 * cospi_x1)
26
q2 = C * pi * (sinh_pix1 * cospi_x2 + cosh_pix2 * sinpi_x1)
27
end
28
return SVector(phi, q1, q2)
29
end
30
initial_condition = initial_condition_harmonic_nonperiodic
31
32
boundary_conditions = BoundaryConditionDirichlet(initial_condition)
33
34
solver = DGSEM(polydeg = 4, surface_flux = flux_godunov)
35
36
coordinates_min = (0.0, 0.0)
37
coordinates_max = (1.0, 1.0)
38
cells_per_dimension = (8, 8)
39
mesh = StructuredMesh(cells_per_dimension, coordinates_min, coordinates_max,
40
periodicity = false)
41
42
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
43
boundary_conditions = boundary_conditions,
44
source_terms = source_terms_harmonic)
45
46
###############################################################################
47
# ODE solvers, callbacks etc.
48
49
tspan = (0.0, 5.0)
50
ode = semidiscretize(semi, tspan)
51
52
summary_callback = SummaryCallback()
53
54
resid_tol = 5.0e-12
55
steady_state_callback = SteadyStateCallback(abstol = resid_tol, reltol = 0.0)
56
57
analysis_interval = 100
58
analysis_callback = AnalysisCallback(semi, interval = analysis_interval)
59
60
alive_callback = AliveCallback(analysis_interval = analysis_interval)
61
62
save_solution = SaveSolutionCallback(interval = 100,
63
save_initial_solution = true,
64
save_final_solution = true,
65
solution_variables = cons2prim)
66
67
stepsize_callback = StepsizeCallback(cfl = 1.0)
68
69
callbacks = CallbackSet(summary_callback, steady_state_callback,
70
analysis_callback, alive_callback,
71
save_solution,
72
stepsize_callback)
73
74
###############################################################################
75
# run the simulation
76
77
sol = solve(ode, CarpenterKennedy2N54(williamson_condition = false);
78
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
79
ode_default_options()..., callback = callbacks);
80
81