Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
trixi-framework
GitHub Repository: trixi-framework/Trixi.jl
Path: blob/main/test/test_tree_1d_euler.jl
2055 views
1
module TestExamples1DEuler
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
@testset "Compressible Euler" begin
11
#! format: noindent
12
13
@trixi_testset "elixir_euler_source_terms.jl" begin
14
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_source_terms.jl"),
15
l2=[
16
2.2527950196212703e-8,
17
1.8187357193835156e-8,
18
7.705669939973104e-8],
19
linf=[
20
1.6205433861493646e-7,
21
1.465427772462391e-7,
22
5.372255111879554e-7
23
])
24
# Ensure that we do not have excessive memory allocations
25
# (e.g., from type instabilities)
26
let
27
t = sol.t[end]
28
u_ode = sol.u[end]
29
du_ode = similar(u_ode)
30
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
31
end
32
# Extra test to make sure the "TimeSeriesCallback" made correct data.
33
# Extracts data at all points from the first step of the time series and compares it to the
34
# exact solution and an interpolated reference solution
35
point_data = [getindex(time_series.affect!.point_data[i], 1:3) for i in 1:3]
36
exact_data = [initial_condition_convergence_test(time_series.affect!.point_coordinates[i],
37
time_series.affect!.time[1],
38
equations) for i in 1:3]
39
ref_data = [[1.968279088772251, 1.9682791565395945, 3.874122958278797],
40
[2.0654816955822017, 2.0654817326611883, 4.26621471136323],
41
[2.0317209235018936, 2.0317209516429506, 4.127889808862571]]
42
@test point_data≈exact_data atol=1e-6
43
@test point_data ref_data
44
end
45
46
@trixi_testset "elixir_euler_convergence_pure_fv.jl" begin
47
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_convergence_pure_fv.jl"),
48
l2=[
49
0.019355699748523896,
50
0.022326984561234497,
51
0.02523665947241734
52
],
53
linf=[
54
0.02895961127645519,
55
0.03293442484199227,
56
0.04246098278632804
57
])
58
# Ensure that we do not have excessive memory allocations
59
# (e.g., from type instabilities)
60
let
61
t = sol.t[end]
62
u_ode = sol.u[end]
63
du_ode = similar(u_ode)
64
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
65
end
66
end
67
68
@trixi_testset "elixir_euler_density_wave.jl" begin
69
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_density_wave.jl"),
70
l2=[
71
0.0011482554820217855,
72
0.00011482554830323462,
73
5.741277429325267e-6
74
],
75
linf=[
76
0.004090978306812376,
77
0.0004090978313582294,
78
2.045489210189544e-5
79
])
80
# Ensure that we do not have excessive memory allocations
81
# (e.g., from type instabilities)
82
let
83
t = sol.t[end]
84
u_ode = sol.u[end]
85
du_ode = similar(u_ode)
86
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
87
end
88
end
89
90
@trixi_testset "elixir_euler_density_wave.jl with initial_condition_constant" begin
91
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_density_wave.jl"),
92
l2=[
93
7.71293052584723e-16,
94
1.9712947511091717e-14,
95
7.50672833504266e-15
96
],
97
linf=[
98
3.774758283725532e-15,
99
6.733502644351574e-14,
100
2.4868995751603507e-14
101
],
102
initial_condition=initial_condition_constant)
103
# Ensure that we do not have excessive memory allocations
104
# (e.g., from type instabilities)
105
let
106
t = sol.t[end]
107
u_ode = sol.u[end]
108
du_ode = similar(u_ode)
109
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
110
end
111
end
112
113
@trixi_testset "elixir_euler_source_terms_nonperiodic.jl" begin
114
@test_trixi_include(joinpath(EXAMPLES_DIR,
115
"elixir_euler_source_terms_nonperiodic.jl"),
116
l2=[
117
3.8099996914101204e-6,
118
1.6745575717106341e-6,
119
7.732189531480852e-6
120
],
121
linf=[
122
1.2971473393186272e-5,
123
9.270328934274374e-6,
124
3.092514399671842e-5
125
])
126
# Ensure that we do not have excessive memory allocations
127
# (e.g., from type instabilities)
128
let
129
t = sol.t[end]
130
u_ode = sol.u[end]
131
du_ode = similar(u_ode)
132
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
133
end
134
end
135
136
@trixi_testset "elixir_euler_ec.jl" begin
137
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_ec.jl"),
138
l2=[
139
0.11821957357197649,
140
0.15330089521538678,
141
0.4417674632047301
142
],
143
linf=[
144
0.24280567569982958,
145
0.29130548795961936,
146
0.8847009003152442
147
])
148
# Ensure that we do not have excessive memory allocations
149
# (e.g., from type instabilities)
150
let
151
t = sol.t[end]
152
u_ode = sol.u[end]
153
du_ode = similar(u_ode)
154
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
155
end
156
end
157
158
@trixi_testset "elixir_euler_ec.jl with flux_kennedy_gruber" begin
159
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_ec.jl"),
160
l2=[
161
0.07803455838661963,
162
0.10032577312032283,
163
0.29228156303827935
164
],
165
linf=[
166
0.2549869853794955,
167
0.3376472164661263,
168
0.9650477546553962
169
],
170
maxiters=10,
171
surface_flux=flux_kennedy_gruber,
172
volume_flux=flux_kennedy_gruber)
173
# Ensure that we do not have excessive memory allocations
174
# (e.g., from type instabilities)
175
let
176
t = sol.t[end]
177
u_ode = sol.u[end]
178
du_ode = similar(u_ode)
179
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
180
end
181
end
182
183
@trixi_testset "elixir_euler_ec.jl with flux_shima_etal" begin
184
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_ec.jl"),
185
l2=[
186
0.07800654460172655,
187
0.10030365573277883,
188
0.2921481199111959
189
],
190
linf=[
191
0.25408579350400395,
192
0.3388657679031271,
193
0.9776486386921928
194
],
195
maxiters=10,
196
surface_flux=flux_shima_etal,
197
volume_flux=flux_shima_etal)
198
# Ensure that we do not have excessive memory allocations
199
# (e.g., from type instabilities)
200
let
201
t = sol.t[end]
202
u_ode = sol.u[end]
203
du_ode = similar(u_ode)
204
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
205
end
206
end
207
208
@trixi_testset "elixir_euler_ec.jl with flux_chandrashekar" begin
209
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_ec.jl"),
210
l2=[
211
0.07801923089205756,
212
0.10039557434912669,
213
0.2922210399923278
214
],
215
linf=[
216
0.2576521982607225,
217
0.3409717926625057,
218
0.9772961936567048
219
],
220
maxiters=10,
221
surface_flux=flux_chandrashekar,
222
volume_flux=flux_chandrashekar)
223
# Ensure that we do not have excessive memory allocations
224
# (e.g., from type instabilities)
225
let
226
t = sol.t[end]
227
u_ode = sol.u[end]
228
du_ode = similar(u_ode)
229
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
230
end
231
end
232
233
@trixi_testset "elixir_euler_ec.jl with flux_hll" begin
234
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_ec.jl"),
235
l2=[0.07855251823583848, 0.10213903748267686, 0.293985892532479],
236
linf=[
237
0.192621556068018,
238
0.25184744005299536,
239
0.7264977555504792
240
],
241
maxiters=10,
242
surface_flux=flux_hll,
243
volume_flux=flux_ranocha)
244
# Ensure that we do not have excessive memory allocations
245
# (e.g., from type instabilities)
246
let
247
t = sol.t[end]
248
u_ode = sol.u[end]
249
du_ode = similar(u_ode)
250
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
251
end
252
end
253
254
@trixi_testset "elixir_euler_shockcapturing.jl" begin
255
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_shockcapturing.jl"),
256
l2=[
257
0.11606096465319675,
258
0.15028768943458806,
259
0.4328230323046703
260
],
261
linf=[
262
0.18031710091067965,
263
0.2351582421501841,
264
0.6776805692092567
265
])
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 "elixir_euler_sedov_blast_wave.jl" begin
277
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_sedov_blast_wave.jl"),
278
l2=[1.250005061244617, 0.06878411345533507, 0.9264328311018613],
279
linf=[
280
2.9766770877037168,
281
0.16838100902295852,
282
2.6655773445485798
283
])
284
# Ensure that we do not have excessive memory allocations
285
# (e.g., from type instabilities)
286
let
287
t = sol.t[end]
288
u_ode = sol.u[end]
289
du_ode = similar(u_ode)
290
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
291
end
292
end
293
294
@trixi_testset "elixir_euler_sedov_blast_wave.jl (HLLE)" begin
295
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_sedov_blast_wave.jl"),
296
l2=[0.6442208390304879, 0.508817280068289, 0.9482809853033687],
297
linf=[3.007059066482486, 2.4678899558345506, 2.3952311739389787],
298
tspan=(0.0, 0.5),
299
surface_flux=flux_hlle)
300
# Ensure that we do not have excessive memory allocations
301
# (e.g., from type instabilities)
302
let
303
t = sol.t[end]
304
u_ode = sol.u[end]
305
du_ode = similar(u_ode)
306
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
307
end
308
end
309
310
@trixi_testset "elixir_euler_sedov_blast_wave_pure_fv.jl" begin
311
@test_trixi_include(joinpath(EXAMPLES_DIR,
312
"elixir_euler_sedov_blast_wave_pure_fv.jl"),
313
l2=[1.0735456065491455, 0.07131078703089379, 0.9205739468590453],
314
linf=[
315
3.4296365168219216,
316
0.17635583964559245,
317
2.6574584326179505
318
])
319
# Ensure that we do not have excessive memory allocations
320
# (e.g., from type instabilities)
321
let
322
t = sol.t[end]
323
u_ode = sol.u[end]
324
du_ode = similar(u_ode)
325
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
326
end
327
end
328
329
@trixi_testset "elixir_euler_sedov_blast_wave.jl with pressure" begin
330
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_sedov_blast_wave.jl"),
331
l2=[1.297525985166995, 0.07964929522694145, 0.9269991156246368],
332
linf=[
333
3.1773015255764427,
334
0.21331831536493773,
335
2.6650170188241047
336
],
337
shock_indicator_variable=pressure,
338
cfl=0.2,)
339
# Ensure that we do not have excessive memory allocations
340
# (e.g., from type instabilities)
341
let
342
t = sol.t[end]
343
u_ode = sol.u[end]
344
du_ode = similar(u_ode)
345
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
346
end
347
end
348
349
@trixi_testset "elixir_euler_sedov_blast_wave.jl with density" begin
350
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_sedov_blast_wave.jl"),
351
l2=[1.2798798835860528, 0.07103461242058921, 0.9273792517187003],
352
linf=[
353
3.1087017048015824,
354
0.17734706962928956,
355
2.666689753470263
356
],
357
shock_indicator_variable=density,
358
cfl=0.2,)
359
# Ensure that we do not have excessive memory allocations
360
# (e.g., from type instabilities)
361
let
362
t = sol.t[end]
363
u_ode = sol.u[end]
364
du_ode = similar(u_ode)
365
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
366
end
367
end
368
369
@trixi_testset "elixir_euler_positivity.jl" begin
370
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_positivity.jl"),
371
l2=[1.6493820253458906, 0.19793887460986834, 0.9783506076125921],
372
linf=[4.71751203912051, 0.5272411022735763, 2.7426163947635844])
373
# Ensure that we do not have excessive memory allocations
374
# (e.g., from type instabilities)
375
let
376
t = sol.t[end]
377
u_ode = sol.u[end]
378
du_ode = similar(u_ode)
379
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
380
end
381
end
382
383
@trixi_testset "elixir_euler_blast_wave.jl" begin
384
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_blast_wave.jl"),
385
l2=[0.21934822867340323, 0.28131919126002686, 0.554361702716662],
386
linf=[
387
1.5180897390290355,
388
1.3967085956620369,
389
2.0663825294019595
390
],
391
maxiters=30)
392
# Ensure that we do not have excessive memory allocations
393
# (e.g., from type instabilities)
394
let
395
t = sol.t[end]
396
u_ode = sol.u[end]
397
du_ode = similar(u_ode)
398
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
399
end
400
end
401
402
@trixi_testset "elixir_euler_blast_wave_entropy_bounded.jl" begin
403
@test_trixi_include(joinpath(EXAMPLES_DIR,
404
"elixir_euler_blast_wave_entropy_bounded.jl"),
405
l2=[0.9689207881108007, 0.1617708899929322, 1.3847895715669456],
406
linf=[2.95591859210077, 0.3135723412205586, 2.3871554358655365])
407
# Ensure that we do not have excessive memory allocations
408
# (e.g., from type instabilities)
409
let
410
t = sol.t[end]
411
u_ode = sol.u[end]
412
du_ode = similar(u_ode)
413
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
414
end
415
end
416
417
@trixi_testset "test_quasi_1D_entropy" begin
418
using Trixi: CompressibleEulerEquationsQuasi1D, CompressibleEulerEquations1D,
419
entropy, SVector
420
a = 0.9
421
u_1D = SVector(1.1, 0.2, 2.1)
422
u_quasi_1D = SVector(a * 1.1, a * 0.2, a * 2.1, a)
423
@test entropy(u_quasi_1D, CompressibleEulerEquationsQuasi1D(1.4))
424
a * entropy(u_1D, CompressibleEulerEquations1D(1.4))
425
end
426
427
@trixi_testset "elixir_euler_quasi_1d_source_terms.jl" begin
428
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_quasi_1d_source_terms.jl"),
429
l2=[
430
3.876288369618363e-7,
431
2.2247043122302947e-7,
432
2.964004224572679e-7,
433
5.2716983399807875e-8
434
],
435
linf=[
436
2.3925118561862746e-6,
437
1.3603693522767912e-6,
438
1.821888865105592e-6,
439
1.1166012159335992e-7
440
])
441
442
# Ensure that we do not have excessive memory allocations
443
# (e.g., from type instabilities)
444
let
445
t = sol.t[end]
446
u_ode = sol.u[end]
447
du_ode = similar(u_ode)
448
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
449
end
450
end
451
452
@trixi_testset "elixir_euler_quasi_1d_source_terms_dirichlet.jl" begin
453
@test_trixi_include(joinpath(EXAMPLES_DIR,
454
"elixir_euler_quasi_1d_source_terms_dirichlet.jl"),
455
l2=[
456
4.872024234552286e-7,
457
3.130367137655672e-7,
458
3.769970598394213e-7,
459
5.271698341013997e-8
460
],
461
linf=[
462
3.2661405451328562e-6,
463
1.7577543389712957e-6,
464
2.5106918934980627e-6,
465
1.1166012159335992e-7
466
])
467
# Ensure that we do not have excessive memory allocations
468
# (e.g., from type instabilities)
469
let
470
t = sol.t[end]
471
u_ode = sol.u[end]
472
du_ode = similar(u_ode)
473
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
474
end
475
end
476
477
@trixi_testset "elixir_euler_quasi_1d_source_terms_dirichlet.jl with LLF-dissipation" begin
478
@test_trixi_include(joinpath(EXAMPLES_DIR,
479
"elixir_euler_quasi_1d_source_terms_dirichlet.jl"),
480
l2=[
481
9.186083331399549e-7,
482
4.6021844470935155e-7,
483
6.652256237473482e-7,
484
5.271698341013997e-8
485
],
486
linf=[
487
3.425473511065036e-6,
488
2.1611905385299224e-6,
489
2.7957639341380514e-6,
490
1.1166012159335992e-7
491
],
492
surface_flux=(FluxPlusDissipation(flux_chan_etal,
493
DissipationLocalLaxFriedrichs()),
494
flux_nonconservative_chan_etal))
495
# Ensure that we do not have excessive memory allocations
496
# (e.g., from type instabilities)
497
let
498
t = sol.t[end]
499
u_ode = sol.u[end]
500
du_ode = similar(u_ode)
501
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
502
end
503
end
504
505
@trixi_testset "elixir_euler_quasi_1d_discontinuous.jl" begin
506
@test_trixi_include(joinpath(EXAMPLES_DIR,
507
"elixir_euler_quasi_1d_discontinuous.jl"),
508
l2=[
509
0.045510421156346015,
510
0.036750584788912195,
511
0.2468985959132176,
512
0.03684494180829024
513
],
514
linf=[
515
0.3313374853025697,
516
0.11621933362158643,
517
1.827403013568638,
518
0.28045939999015723
519
])
520
# Ensure that we do not have excessive memory allocations
521
# (e.g., from type instabilities)
522
let
523
t = sol.t[end]
524
u_ode = sol.u[end]
525
du_ode = similar(u_ode)
526
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
527
end
528
end
529
530
@trixi_testset "elixir_euler_quasi_1d_ec.jl" begin
531
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_quasi_1d_ec.jl"),
532
l2=[
533
0.08889113985713998,
534
0.16199235348889673,
535
0.40316524365054346,
536
2.9602775074723667e-16
537
],
538
linf=[
539
0.28891355898284043,
540
0.3752709888964313,
541
0.84477102402413,
542
8.881784197001252e-16
543
])
544
# Ensure that we do not have excessive memory allocations
545
# (e.g., from type instabilities)
546
let
547
t = sol.t[end]
548
u_ode = sol.u[end]
549
du_ode = similar(u_ode)
550
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
551
end
552
end
553
554
@trixi_testset "elixir_euler_laplace_diffusion.jl" begin
555
@test_trixi_include(joinpath(EXAMPLES_DIR, "elixir_euler_laplace_diffusion.jl"),
556
l2=[0.10954500481114468,
557
0.1417583694046777,
558
0.4087206508328759],
559
linf=[
560
0.17183237920520245,
561
0.2203023610743297,
562
0.6347464031934038
563
])
564
# Ensure that we do not have excessive memory allocations
565
# (e.g., from type instabilities)
566
let
567
t = sol.t[end]
568
u_ode = sol.u[end]
569
du_ode = similar(u_ode)
570
@test (@allocated Trixi.rhs!(du_ode, u_ode, semi, t)) < 1000
571
end
572
end
573
end
574
575
end # module
576
577