Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
trixi-framework
GitHub Repository: trixi-framework/Trixi.jl
Path: blob/main/examples/tree_1d_dgsem/elixir_hypdiff_harmonic_nonperiodic.jl
2055 views
1
using Trixi
2
3
###############################################################################
4
# semidiscretization of the hyperbolic diffusion equations
5
6
equations = HyperbolicDiffusionEquations1D(nu = 1.25)
7
8
"""
9
initial_condition_poisson_nonperiodic(x, t, equations::HyperbolicDiffusionEquations1D)
10
11
A non-priodic harmonic function used in combination with
12
[`source_terms_poisson_nonperiodic`](@ref) and [`boundary_condition_poisson_nonperiodic`](@ref).
13
14
!!! note
15
The only harmonic functions in 1D have the form phi(x) = A + Bx
16
"""
17
function initial_condition_harmonic_nonperiodic(x, t,
18
equations::HyperbolicDiffusionEquations1D)
19
# elliptic equation: -νΔϕ = f
20
RealT = eltype(x)
21
if t == 0
22
phi = convert(RealT, 5)
23
q1 = zero(RealT)
24
else
25
A = 3
26
B = exp(one(RealT))
27
phi = A + B * x[1]
28
q1 = B
29
end
30
return SVector(phi, q1)
31
end
32
initial_condition = initial_condition_harmonic_nonperiodic
33
34
boundary_conditions = BoundaryConditionDirichlet(initial_condition)
35
36
solver = DGSEM(polydeg = 3, surface_flux = flux_lax_friedrichs)
37
38
coordinates_min = -1.0
39
coordinates_max = 2.0
40
mesh = TreeMesh(coordinates_min, coordinates_max,
41
initial_refinement_level = 2,
42
n_cells_max = 30_000,
43
periodicity = false)
44
45
semi = SemidiscretizationHyperbolic(mesh, equations, initial_condition, solver,
46
boundary_conditions = boundary_conditions,
47
source_terms = source_terms_harmonic)
48
49
###############################################################################
50
# ODE solvers, callbacks etc.
51
52
tspan = (0.0, 30.0)
53
ode = semidiscretize(semi, tspan)
54
55
summary_callback = SummaryCallback()
56
57
resid_tol = 5.0e-12
58
steady_state_callback = SteadyStateCallback(abstol = resid_tol, reltol = 0.0)
59
60
analysis_interval = 100
61
analysis_callback = AnalysisCallback(semi, interval = analysis_interval)
62
63
alive_callback = AliveCallback(analysis_interval = analysis_interval)
64
65
save_solution = SaveSolutionCallback(interval = 100,
66
save_initial_solution = true,
67
save_final_solution = true,
68
solution_variables = cons2prim)
69
70
stepsize_callback = StepsizeCallback(cfl = 1.75)
71
72
callbacks = CallbackSet(summary_callback, steady_state_callback,
73
analysis_callback, alive_callback,
74
save_solution,
75
stepsize_callback)
76
77
###############################################################################
78
# run the simulation
79
80
sol = Trixi.solve(ode, Trixi.HypDiffN3Erk3Sstar52();
81
dt = 1.0, # solve needs some value here but it will be overwritten by the stepsize_callback
82
ode_default_options()..., callback = callbacks);
83
84