Decaying Homogeneous Isotropic Turbulence - 2D
In this example we consider decaying homogeneous isotropic turbulence, similar to the cases considered in [1] and [2]. The initial velocity field is created randomly, but with a specific energy spectrum. Due to viscous dissipation, the turbulent features eventually group to form larger visible eddies.
Packages
We just need IncompressibleNavierStokes and a Makie plotting backend.
julia
using CairoMakie
using IncompressibleNavierStokes
# using CUDASetup
julia
n = 256
ax = LinRange(0.0, 1.0, n + 1)
setup = Setup(;
x = (ax, ax),
boundary_conditions = (;
u = ((PeriodicBC(), PeriodicBC()), (PeriodicBC(), PeriodicBC())),
),
# backend = CUDABackend(),
)
u = random_field(setup, 0.0);Solve unsteady problem
julia
state, outputs = solve_unsteady(;
setup,
start = (; u),
tlims = (0.0, 1.0),
params = (; viscosity = 2.5e-4),
processors = (
rtp = realtimeplotter(; setup, nupdate = 10),
ehist = realtimeplotter(;
setup,
plot = energy_history_plot,
nupdate = 10,
displayfig = false,
),
espec = realtimeplotter(;
setup,
plot = energy_spectrum_plot,
nupdate = 10,
displayfig = false,
),
log = timelogger(; nupdate = 100),
),
);[ Info: t = 0.10262 Δt = 0.00097 umax = 3.6 itertime = 0.019
[ Info: t = 0.211895 Δt = 0.0011 umax = 3.2 itertime = 0.011
[ Info: t = 0.328277 Δt = 0.0014 umax = 2.6 itertime = 0.0094
[ Info: t = 0.443488 Δt = 0.0011 umax = 3.2 itertime = 0.0095
[ Info: t = 0.553206 Δt = 0.0011 umax = 3.2 itertime = 0.0093
[ Info: t = 0.659001 Δt = 0.001 umax = 3.4 itertime = 0.0093
[ Info: t = 0.77312 Δt = 0.0013 umax = 2.6 itertime = 0.0094
[ Info: t = 0.916507 Δt = 0.0014 umax = 2.6 itertime = 0.0093
[ Info: Finished after 855 time steps and 9.2 secondsPost-process
We may visualize or export the computed fields
Energy history
julia
outputs.ehist
Energy spectrum
julia
outputs.espec
Plot field
julia
fieldplot(state; setup)
Copy-pasteable code
Below is the full code for this example stripped of comments and output.
julia
using WGLMakie
using IncompressibleNavierStokes
# using CUDA
n = 256
ax = LinRange(0.0, 1.0, n + 1)
setup = Setup(;
x = (ax, ax),
boundary_conditions = (;
u = ((PeriodicBC(), PeriodicBC()), (PeriodicBC(), PeriodicBC())),
),
# backend = CUDABackend(),
)
u = random_field(setup, 0.0);
state, outputs = solve_unsteady(;
setup,
start = (; u),
tlims = (0.0, 1.0),
params = (; viscosity = 2.5e-4),
processors = (
rtp = realtimeplotter(; setup, nupdate = 10),
ehist = realtimeplotter(;
setup,
plot = energy_history_plot,
nupdate = 10,
displayfig = false,
),
espec = realtimeplotter(;
setup,
plot = energy_spectrum_plot,
nupdate = 10,
displayfig = false,
),
log = timelogger(; nupdate = 100),
),
);
outputs.ehist
outputs.espec
fieldplot(state; setup)This page was generated using Literate.jl.