Using an implicit-explicit (IMEX) Runge-Kutta solver based on Ariadne with Trixi.jl
using Trixi
using Theseus
using CairoMakieNotes: You must disable both Polyester and LoopVectorization for Enzyme to be able to differentiate Trixi.jl.
LocalPreferences.jl
[Trixi]
loop_vectorization = false
backend = "static"@assert Trixi._PREFERENCE_THREADING !== :polyester
@assert !Trixi._PREFERENCE_LOOPVECTORIZATIONFirst call to load callbacks
trixi_include(@__MODULE__, joinpath(examples_dir(), "tree_2d_dgsem", "elixir_advection_diffusion.jl"), sol = nothing);
stepsize_callback = StepsizeCallback(cfl = 1.0)
callbacks = CallbackSet(summary_callback, analysis_callback, alive_callback, stepsize_callback)
trixi_include(@__MODULE__, joinpath(examples_dir(), "tree_2d_dgsem", "elixir_advection_diffusion.jl"), sol = nothing, callbacks = callbacks);
###############################################################################[ Info: You just called `trixi_include`. Julia may now compile the code, please be patient.
[ Info: You just called `trixi_include`. Julia may now compile the code, please be patient.run the simulation
sol = solve(
ode,
Theseus.SSP3433();
dt = 0.01, # solve needs some value here but it will be overwritten by the stepsize_callback
ode_default_options()..., callback = callbacks,
krylov_algo = :gmres,
);
████████╗██████╗ ██╗██╗ ██╗██╗
╚══██╔══╝██╔══██╗██║╚██╗██╔╝██║
██║ ██████╔╝██║ ╚███╔╝ ██║
██║ ██╔══██╗██║ ██╔██╗ ██║
██║ ██║ ██║██║██╔╝ ██╗██║
╚═╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
│ SemidiscretizationHyperbolicParabolic │
│ ═════════════════════════════════════ │
│ #spatial dimensions: ………………………… 2 │
│ mesh: ………………………………………………………………… TreeMesh{2, Trixi.SerialTree{2, Float64}} with length 341 │
│ hyperbolic equations: ……………………… LinearScalarAdvectionEquation2D │
│ parabolic equations: ………………………… LaplaceDiffusion2D │
│ initial condition: ……………………………… initial_condition_diffusive_convergence_test │
│ source terms: …………………………………………… nothing │
│ source terms parabolic: ………………… nothing │
│ solver: …………………………………………………………… DG │
│ parabolic solver: ………………………………… ViscousFormulationBassiRebay1 │
│ total #DOFs per field: …………………… 4096 │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
│ TreeMesh{2, Trixi.SerialTree{2, Float64}} │
│ ═════════════════════════════════════════ │
│ center: …………………………………………………………… [0.0, 0.0] │
│ length: …………………………………………………………… 2.0 │
│ periodicity: ……………………………………………… (true, true) │
│ current #cells: ……………………………………… 341 │
│ #leaf-cells: ……………………………………………… 256 │
│ maximum #cells: ……………………………………… 30000 │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
│ LinearScalarAdvectionEquation2D │
│ ═══════════════════════════════ │
│ #variables: ………………………………………………… 1 │
│ │ variable 1: …………………………………………… scalar │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
│ DG{Float64} │
│ ═══════════ │
│ basis: ……………………………………………………………… LobattoLegendreBasis{Float64}(polydeg=3) │
│ mortar: …………………………………………………………… LobattoLegendreMortarL2{Float64}(polydeg=3) │
│ surface integral: ………………………………… SurfaceIntegralWeakForm │
│ │ surface flux: ……………………………………… FluxLaxFriedrichs(max_abs_speed) │
│ volume integral: …………………………………… VolumeIntegralWeakForm │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
│ AnalysisCallback │
│ ════════════════ │
│ interval: ……………………………………………………… 100 │
│ analyzer: ……………………………………………………… LobattoLegendreAnalyzer{Float64}(polydeg=6) │
│ │ error 1: …………………………………………………… l2_error │
│ │ error 2: …………………………………………………… linf_error │
│ │ integral 1: …………………………………………… entropy_timederivative │
│ save analysis to file: …………………… no │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
│ AliveCallback │
│ ═════════════ │
│ interval: ……………………………………………………… 10 │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
│ StepsizeCallback │
│ ════════════════ │
│ CFL Advective: ………………………………………… Returns{Float64}(1.0) │
│ CFL Diffusive: ………………………………………… Returns{Float64}(0.0) │
│ Interval: ……………………………………………………… 1 │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Time integration │
│ ════════════════ │
│ Start time: ………………………………………………… 0.0 │
│ Final time: ………………………………………………… 1.5 │
│ time integrator: …………………………………… SSP3433 │
│ adaptive: ……………………………………………………… false │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Environment information │
│ ═══════════════════════ │
│ #threads: ……………………………………………………… 1 │
│ threading backend: ……………………………… static │
│ LoopVectorization: ……………………………… disabled │
└──────────────────────────────────────────────────────────────────────────────────────────────────┘
────────────────────────────────────────────────────────────────────────────────────────────────────
Simulation running 'LinearScalarAdvectionEquation2D' with DGSEM(polydeg=3)
────────────────────────────────────────────────────────────────────────────────────────────────────
#timesteps: 0 run time: 3.32000000e-07 s
Δt: 1.00000000e-02 └── GC time: 0.00000000e+00 s (0.000%)
sim. time: 0.00000000e+00 (0.000%) time/DOF/rhs!: NaN s
PID: Inf s
#DOFs per field: 4096 alloc'd memory: 1069.838 MiB
#elements: 256
Variable: scalar
L2 error: 3.94120825e-06
Linf error: 1.23670425e-05
∑∂S/∂U ⋅ Uₜ : -1.23370054e-01
────────────────────────────────────────────────────────────────────────────────────────────────────
┌ Warning: TODO forward zero-set of memorycopy used memset rather than runtime type
│ Caused by:
│ Stacktrace:
│ [1] copy
│ @ ./array.jl:350
│ [2] unaliascopy
│ @ ./abstractarray.jl:1516
│ [3] unalias
│ @ ./abstractarray.jl:1500
│ [4] broadcast_unalias
│ @ ./broadcast.jl:946
│ [5] preprocess
│ @ ./broadcast.jl:953
│ [6] preprocess_args
│ @ ./broadcast.jl:956
│ [7] preprocess_args
│ @ ./broadcast.jl:955
│ [8] preprocess
│ @ ./broadcast.jl:952
│ [9] preprocess_args
│ @ ./broadcast.jl:956
│ [10] preprocess_args
│ @ ./broadcast.jl:955
│ [11] preprocess
│ @ ./broadcast.jl:952
│ [12] preprocess_args
│ @ ./broadcast.jl:955
│ [13] preprocess
│ @ ./broadcast.jl:952
│ [14] override_bc_copyto!
│ @ ~/.julia/packages/Enzyme/S3nC6/src/compiler/interpreter.jl:818
│ [15] copyto!
│ @ ./broadcast.jl:925
│ [16] materialize!
│ @ ./broadcast.jl:883
│ [17] materialize!
│ @ ./broadcast.jl:880
│ [18] RKIMEX
│ @ ~/work/Ariadne.jl/Ariadne.jl/libs/Theseus/src/imex/imex.jl:33
└ @ Enzyme.Compiler ~/.julia/packages/Enzyme/S3nC6/src/rules/llvmrules.jl:814
┌ Warning: TODO forward zero-set of memorycopy used memset rather than runtime type
│ Caused by:
│ Stacktrace:
│ [1] copy
│ @ ./array.jl:350
│ [2] unaliascopy
│ @ ./abstractarray.jl:1516
│ [3] unalias
│ @ ./abstractarray.jl:1500
│ [4] broadcast_unalias
│ @ ./broadcast.jl:946
│ [5] preprocess
│ @ ./broadcast.jl:953
│ [6] preprocess_args
│ @ ./broadcast.jl:956
│ [7] preprocess_args
│ @ ./broadcast.jl:955
│ [8] preprocess
│ @ ./broadcast.jl:952
│ [9] preprocess_args
│ @ ./broadcast.jl:956
│ [10] preprocess_args
│ @ ./broadcast.jl:955
│ [11] preprocess
│ @ ./broadcast.jl:952
│ [12] override_bc_copyto!
│ @ ~/.julia/packages/Enzyme/S3nC6/src/compiler/interpreter.jl:818
│ [13] copyto!
│ @ ./broadcast.jl:925
│ [14] materialize!
│ @ ./broadcast.jl:883
│ [15] materialize!
│ @ ./broadcast.jl:880
│ [16] RKIMEX
│ @ ~/work/Ariadne.jl/Ariadne.jl/libs/Theseus/src/imex/imex.jl:33
└ @ Enzyme.Compiler ~/.julia/packages/Enzyme/S3nC6/src/rules/llvmrules.jl:814
#timesteps: 10 │ Δt: 1.2500e-02 │ sim. time: 1.2500e-01 (8.333%) │ run time: 4.9187e+01 s
#timesteps: 20 │ Δt: 1.2500e-02 │ sim. time: 2.5000e-01 (16.667%) │ run time: 4.9335e+01 s
#timesteps: 30 │ Δt: 1.2500e-02 │ sim. time: 3.7500e-01 (25.000%) │ run time: 4.9467e+01 s
#timesteps: 40 │ Δt: 1.2500e-02 │ sim. time: 5.0000e-01 (33.333%) │ run time: 4.9606e+01 s
#timesteps: 50 │ Δt: 1.2500e-02 │ sim. time: 6.2500e-01 (41.667%) │ run time: 4.9740e+01 s
#timesteps: 60 │ Δt: 1.2500e-02 │ sim. time: 7.5000e-01 (50.000%) │ run time: 4.9874e+01 s
#timesteps: 70 │ Δt: 1.2500e-02 │ sim. time: 8.7500e-01 (58.333%) │ run time: 5.0022e+01 s
#timesteps: 80 │ Δt: 1.2500e-02 │ sim. time: 1.0000e+00 (66.667%) │ run time: 5.0171e+01 s
#timesteps: 90 │ Δt: 1.2500e-02 │ sim. time: 1.1250e+00 (75.000%) │ run time: 5.0327e+01 s
────────────────────────────────────────────────────────────────────────────────────────────────────
Simulation running 'LinearScalarAdvectionEquation2D' with DGSEM(polydeg=3)
────────────────────────────────────────────────────────────────────────────────────────────────────
#timesteps: 100 run time: 5.04982010e+01 s
Δt: 1.25000000e-02 └── GC time: 6.40106886e-01 s (1.268%)
sim. time: 1.25000000e+00 (83.333%) time/DOF/rhs!: 7.00347128e-08 s
PID: 3.08210538e-05 s
#DOFs per field: 4096 alloc'd memory: 953.883 MiB
#elements: 256
Variable: scalar
L2 error: 4.05704067e-05
Linf error: 7.68749323e-05
∑∂S/∂U ⋅ Uₜ : -1.04542969e-02
────────────────────────────────────────────────────────────────────────────────────────────────────
#timesteps: 110 │ Δt: 1.2500e-02 │ sim. time: 1.3750e+00 (91.667%) │ run time: 5.0663e+01 s
────────────────────────────────────────────────────────────────────────────────────────────────────
Simulation running 'LinearScalarAdvectionEquation2D' with DGSEM(polydeg=3)
────────────────────────────────────────────────────────────────────────────────────────────────────
#timesteps: 120 run time: 5.08504604e+01 s
Δt: 1.25000000e-02 └── GC time: 6.52165627e-01 s (1.283%)
sim. time: 1.50000000e+00 (100.000%) time/DOF/rhs!: 6.99591959e-08 s
PID: 1.07181778e-06 s
#DOFs per field: 4096 alloc'd memory: 1002.623 MiB
#elements: 256
Variable: scalar
L2 error: 3.82554699e-05
Linf error: 1.65324860e-04
∑∂S/∂U ⋅ Uₜ : -6.38135743e-03
────────────────────────────────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────────────────────────────
Trixi.jl simulation finished. Final time: 1.5 Time steps: 120 (accepted), 120 (total)
────────────────────────────────────────────────────────────────────────────────────────────────────
───────────────────────────────────────────────────────────────────────────────────────
Trixi.jl Time Allocations
─────────────────────── ────────────────────────
Tot / % measured: 50.9s / 2.3% 4.44GiB / 0.2%
Section ncalls time %tot avg alloc %tot avg
───────────────────────────────────────────────────────────────────────────────────────
parabolic rhs! 5.48k 1.12s 96.3% 204μs 9.00KiB 0.1% 1.68B
calculate gradient 5.48k 500ms 43.0% 91.2μs 3.33KiB 0.0% 0.62B
volume integral 5.48k 299ms 25.7% 54.5μs 0.00B 0.0% 0.00B
Jacobian 5.48k 56.1ms 4.8% 10.2μs 0.00B 0.0% 0.00B
interface flux 5.48k 42.0ms 3.6% 7.67μs 0.00B 0.0% 0.00B
surface integral 5.48k 41.8ms 3.6% 7.62μs 0.00B 0.0% 0.00B
prolong2interfaces 5.48k 35.5ms 3.1% 6.47μs 0.00B 0.0% 0.00B
reset gradients 5.48k 17.6ms 1.5% 3.20μs 0.00B 0.0% 0.00B
~calculate gradient~ 5.48k 6.08ms 0.5% 1.11μs 3.33KiB 0.0% 0.62B
prolong2mortars 5.48k 782μs 0.1% 143ns 0.00B 0.0% 0.00B
prolong2boundaries 5.48k 455μs 0.0% 83.0ns 0.00B 0.0% 0.00B
mortar flux 5.48k 420μs 0.0% 76.7ns 0.00B 0.0% 0.00B
boundary flux 5.48k 209μs 0.0% 38.1ns 0.00B 0.0% 0.00B
volume integral 5.48k 316ms 27.2% 57.6μs 0.00B 0.0% 0.00B
calculate viscous fluxes 5.48k 116ms 10.0% 21.1μs 0.00B 0.0% 0.00B
interface flux 5.48k 36.1ms 3.1% 6.59μs 0.00B 0.0% 0.00B
surface integral 5.48k 35.5ms 3.1% 6.48μs 0.00B 0.0% 0.00B
transform variables 5.48k 34.7ms 3.0% 6.34μs 0.00B 0.0% 0.00B
prolong2interfaces 5.48k 32.7ms 2.8% 5.97μs 0.00B 0.0% 0.00B
Jacobian 5.48k 27.8ms 2.4% 5.07μs 0.00B 0.0% 0.00B
reset ∂u/∂t 5.48k 9.56ms 0.8% 1.74μs 0.00B 0.0% 0.00B
~parabolic rhs!~ 5.48k 8.78ms 0.8% 1.60μs 5.67KiB 0.1% 1.06B
prolong2mortars 5.48k 507μs 0.0% 92.4ns 0.00B 0.0% 0.00B
mortar flux 5.48k 481μs 0.0% 87.7ns 0.00B 0.0% 0.00B
prolong2boundaries 5.48k 391μs 0.0% 71.3ns 0.00B 0.0% 0.00B
boundary flux 5.48k 164μs 0.0% 29.9ns 0.00B 0.0% 0.00B
source terms parabolic 5.48k 119μs 0.0% 21.6ns 0.00B 0.0% 0.00B
rhs! 480 39.5ms 3.4% 82.3μs 4.78KiB 0.1% 10.2B
volume integral 480 24.6ms 2.1% 51.2μs 0.00B 0.0% 0.00B
interface flux 480 3.76ms 0.3% 7.84μs 0.00B 0.0% 0.00B
surface integral 480 3.56ms 0.3% 7.41μs 0.00B 0.0% 0.00B
Jacobian 480 3.20ms 0.3% 6.67μs 0.00B 0.0% 0.00B
prolong2interfaces 480 3.05ms 0.3% 6.35μs 0.00B 0.0% 0.00B
~rhs!~ 480 743μs 0.1% 1.55μs 4.78KiB 0.1% 10.2B
reset ∂u/∂t 480 444μs 0.0% 924ns 0.00B 0.0% 0.00B
mortar flux 480 57.7μs 0.0% 120ns 0.00B 0.0% 0.00B
prolong2boundaries 480 47.0μs 0.0% 97.9ns 0.00B 0.0% 0.00B
prolong2mortars 480 42.5μs 0.0% 88.5ns 0.00B 0.0% 0.00B
boundary flux 480 19.0μs 0.0% 39.6ns 0.00B 0.0% 0.00B
source terms 480 12.0μs 0.0% 25.0ns 0.00B 0.0% 0.00B
analyze solution 3 3.04ms 0.3% 1.01ms 7.24MiB 99.6% 2.41MiB
calculate dt 121 252μs 0.0% 2.09μs 17.0KiB 0.2% 144B
───────────────────────────────────────────────────────────────────────────────────────This page was generated using Literate.jl.