Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
trixi-framework
GitHub Repository: trixi-framework/Trixi.jl
Path: blob/main/test/test_parabolic_1d.jl
2055 views
1
module TestExamplesParabolic1D
2
3
using Test
4
using Trixi
5
6
include("test_trixi.jl")
7
8
EXAMPLES_DIR = joinpath(examples_dir(), "tree_1d_dgsem")
9
10
# Start with a clean environment: remove Trixi output directory if it exists
11
outdir = "out"
12
isdir(outdir) && rm(outdir, recursive = true)
13
14
@testset "SemidiscretizationHyperbolicParabolic (1D)" begin
15
#! format: noindent
16
17
@trixi_testset "TreeMesh1D: elixir_advection_diffusion.jl" begin
18
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_advection_diffusion.jl"),
19
initial_refinement_level=4, tspan=(0.0, 0.4), polydeg=3,
20
l2=[8.40483031802723e-6],
21
linf=[2.8990878868540015e-5])
22
# Ensure that we do not have excessive memory allocations
23
# (e.g., from type instabilities)
24
let
25
t = sol.t[end]
26
u_ode = sol.u[end]
27
du_ode = similar(u_ode)
28
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
29
end
30
end
31
32
@trixi_testset "TreeMesh1D: elixir_advection_diffusion_ldg.jl" begin
33
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_advection_diffusion_ldg.jl"),
34
initial_refinement_level=4, tspan=(0.0, 0.4), polydeg=3,
35
l2=[9.234438322146518e-6], linf=[5.425491770139068e-5])
36
# Ensure that we do not have excessive memory allocations
37
# (e.g., from type instabilities)
38
let
39
t = sol.t[end]
40
u_ode = sol.u[end]
41
du_ode = similar(u_ode)
42
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
43
end
44
end
45
46
@trixi_testset "TreeMesh1D: elixir_diffusion_ldg.jl" begin
47
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_diffusion_ldg.jl"),
48
initial_refinement_level=4, tspan=(0.0, 0.4), polydeg=3,
49
l2=[9.235894939144276e-6], linf=[5.402550135213957e-5])
50
# Ensure that we do not have excessive memory allocations
51
# (e.g., from type instabilities)
52
let
53
t = sol.t[end]
54
u_ode = sol.u[end]
55
du_ode = similar(u_ode)
56
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
57
end
58
end
59
60
@trixi_testset "TreeMesh1D: elixir_diffusion_ldg_newton_krylov.jl" begin
61
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_diffusion_ldg_newton_krylov.jl"),
62
l2=[4.2710445174631516e-6], linf=[2.28491835256861e-5])
63
# Ensure that we do not have excessive memory allocations
64
# (e.g., from type instabilities)
65
let
66
t = sol.t[end]
67
u_ode = sol.u[end]
68
du_ode = similar(u_ode)
69
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
70
end
71
end
72
73
@trixi_testset "TreeMesh1D: elixir_advection_diffusion_restart.jl" begin
74
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_advection_diffusion_restart.jl"),
75
l2=[1.0679933947301556e-5],
76
linf=[3.910500545667439e-5])
77
# Ensure that we do not have excessive memory allocations
78
# (e.g., from type instabilities)
79
let
80
t = sol.t[end]
81
u_ode = sol.u[end]
82
du_ode = similar(u_ode)
83
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
84
end
85
end
86
87
@trixi_testset "TreeMesh1D: elixir_advection_diffusion.jl (AMR)" begin
88
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_advection_diffusion.jl"),
89
tspan=(0.0, 0.0), initial_refinement_level=5)
90
tspan = (0.0, 1.0)
91
ode = semidiscretize(semi, tspan)
92
amr_controller = ControllerThreeLevel(semi, IndicatorMax(semi, variable = first),
93
base_level = 4,
94
med_level = 5, med_threshold = 0.1,
95
max_level = 6, max_threshold = 0.6)
96
amr_callback = AMRCallback(semi, amr_controller,
97
interval = 5,
98
adapt_initial_condition = true)
99
100
# Create a CallbackSet to collect all callbacks such that they can be passed to the ODE solver
101
callbacks = CallbackSet(summary_callback, analysis_callback, alive_callback,
102
amr_callback)
103
sol = solve(ode, KenCarp4(autodiff = AutoFiniteDiff());
104
abstol = time_abs_tol, reltol = time_int_tol,
105
ode_default_options()..., callback = callbacks)
106
l2_error, linf_error = analysis_callback(sol)
107
@test l2_error [6.487940740394583e-6]
108
@test linf_error [3.262867898701227e-5]
109
# Ensure that we do not have excessive memory allocations
110
# (e.g., from type instabilities)
111
let
112
t = sol.t[end]
113
u_ode = sol.u[end]
114
du_ode = similar(u_ode)
115
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
116
end
117
end
118
119
@trixi_testset "TreeMesh1D: elixir_navierstokes_convergence_periodic.jl" begin
120
@test_trixi_include(joinpath(EXAMPLES_DIR,
121
"elixir_navierstokes_convergence_periodic.jl"),
122
l2=[
123
0.0001133835907077494,
124
6.226282245610444e-5,
125
0.0002820171699999139
126
],
127
linf=[
128
0.0006255102377159538,
129
0.00036195501456059986,
130
0.0016147729485886941
131
])
132
# Ensure that we do not have excessive memory allocations
133
# (e.g., from type instabilities)
134
let
135
t = sol.t[end]
136
u_ode = sol.u[end]
137
du_ode = similar(u_ode)
138
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
139
end
140
end
141
142
@trixi_testset "TreeMesh1D: elixir_navierstokes_convergence_periodic.jl: GradientVariablesEntropy" begin
143
@test_trixi_include(joinpath(EXAMPLES_DIR,
144
"elixir_navierstokes_convergence_periodic.jl"),
145
equations_parabolic=CompressibleNavierStokesDiffusion1D(equations,
146
mu = mu(),
147
Prandtl = prandtl_number(),
148
gradient_variables = GradientVariablesEntropy()),
149
l2=[
150
0.00011310615871043463,
151
6.216495207074201e-5,
152
0.00028195843110817814
153
],
154
linf=[
155
0.0006240837363233886,
156
0.0003616694320713876,
157
0.0016147339542413874
158
])
159
# Ensure that we do not have excessive memory allocations
160
# (e.g., from type instabilities)
161
let
162
t = sol.t[end]
163
u_ode = sol.u[end]
164
du_ode = similar(u_ode)
165
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
166
end
167
end
168
169
@trixi_testset "TreeMesh1D: elixir_navierstokes_convergence_walls.jl" begin
170
@test_trixi_include(joinpath(EXAMPLES_DIR,
171
"elixir_navierstokes_convergence_walls.jl"),
172
l2=[
173
0.0004702331100298379,
174
0.0003218173539588441,
175
0.001496626616191212
176
],
177
linf=[
178
0.0029963751636357117,
179
0.0028639041695096433,
180
0.012691132694550689
181
],
182
atol=1e-10)
183
# Ensure that we do not have excessive memory allocations
184
# (e.g., from type instabilities)
185
let
186
t = sol.t[end]
187
u_ode = sol.u[end]
188
du_ode = similar(u_ode)
189
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
190
end
191
end
192
193
@trixi_testset "TreeMesh1D: elixir_navierstokes_convergence_walls.jl: GradientVariablesEntropy" begin
194
@test_trixi_include(joinpath(EXAMPLES_DIR,
195
"elixir_navierstokes_convergence_walls.jl"),
196
equations_parabolic=CompressibleNavierStokesDiffusion1D(equations,
197
mu = mu(),
198
Prandtl = prandtl_number(),
199
gradient_variables = GradientVariablesEntropy()),
200
l2=[
201
0.00046085004909354776,
202
0.0003243109084492897,
203
0.0015159733164383632
204
],
205
linf=[
206
0.0027548031865172184,
207
0.0028567713569609024,
208
0.012941793735691931
209
],
210
atol=1e-9)
211
# Ensure that we do not have excessive memory allocations
212
# (e.g., from type instabilities)
213
let
214
t = sol.t[end]
215
u_ode = sol.u[end]
216
du_ode = similar(u_ode)
217
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
218
end
219
end
220
221
@trixi_testset "TreeMesh1D: elixir_navierstokes_convergence_walls_amr.jl" begin
222
@test_trixi_include(joinpath(EXAMPLES_DIR,
223
"elixir_navierstokes_convergence_walls_amr.jl"),
224
equations_parabolic=CompressibleNavierStokesDiffusion1D(equations,
225
mu = mu(),
226
Prandtl = prandtl_number()),
227
l2=[
228
2.5278845598681636e-5,
229
2.5540145802666872e-5,
230
0.0001211867535580826
231
],
232
linf=[
233
0.0001466387202588848,
234
0.00019422419092429135,
235
0.0009556449835592673
236
],
237
atol=1e-9)
238
# Ensure that we do not have excessive memory allocations
239
# (e.g., from type instabilities)
240
let
241
t = sol.t[end]
242
u_ode = sol.u[end]
243
du_ode = similar(u_ode)
244
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
245
end
246
end
247
248
@trixi_testset "TreeMesh1D: elixir_navierstokes_convergence_walls_amr.jl: GradientVariablesEntropy" begin
249
@test_trixi_include(joinpath(EXAMPLES_DIR,
250
"elixir_navierstokes_convergence_walls_amr.jl"),
251
equations_parabolic=CompressibleNavierStokesDiffusion1D(equations,
252
mu = mu(),
253
Prandtl = prandtl_number(),
254
gradient_variables = GradientVariablesEntropy()),
255
l2=[
256
2.4593521887223632e-5,
257
2.3928212900127102e-5,
258
0.00011252332663824173
259
],
260
linf=[
261
0.00011850494672183132,
262
0.00018987676556476442,
263
0.0009597423024825247
264
],
265
atol=1e-9)
266
# Ensure that we do not have excessive memory allocations
267
# (e.g., from type instabilities)
268
let
269
t = sol.t[end]
270
u_ode = sol.u[end]
271
du_ode = similar(u_ode)
272
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
273
end
274
end
275
276
@trixi_testset "TreeMesh1D: elixir_navierstokes_viscous_shock.jl" begin
277
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_navierstokes_viscous_shock.jl"),
278
l2=[
279
0.00025762354103445303,
280
0.0001433692781569829,
281
0.00017369861968287976
282
],
283
linf=[
284
0.0016731940030498826,
285
0.0010638575921477766,
286
0.0011495207677434394
287
])
288
# Ensure that we do not have excessive memory allocations
289
# (e.g., from type instabilities)
290
let
291
t = sol.t[end]
292
u_ode = sol.u[end]
293
du_ode = similar(u_ode)
294
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
295
end
296
end
297
298
@trixi_testset "TreeMesh1D: elixir_navierstokes_viscous_shock_imex.jl" begin
299
@test_trixi_include(joinpath(EXAMPLES_DIR,
300
"elixir_navierstokes_viscous_shock_imex.jl"),
301
l2=[
302
0.0016637374421260447,
303
0.0014571616754917322,
304
0.0014844170557610763
305
],
306
linf=[
307
0.0054568179823693,
308
0.003950567209489719,
309
0.004092222605649232
310
])
311
# Ensure that we do not have excessive memory allocations
312
# (e.g., from type instabilities)
313
let
314
t = sol.t[end]
315
u_ode = sol.u[end]
316
du_ode = similar(u_ode)
317
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
318
end
319
end
320
end
321
322
# Clean up afterwards: delete Trixi output directory
323
@test_nowarn isdir(outdir) && rm(outdir, recursive = true)
324
325
end # module
326
327