Skip to content

Commit

Permalink
Merge pull request #157 from FourierFlows/ncc/mp4-to-gif
Browse files Browse the repository at this point in the history
Convert all animations in Docs from mp4 to gifs
  • Loading branch information
navidcy authored Dec 2, 2020
2 parents bd1d48c + c9e1a2e commit 9932129
Show file tree
Hide file tree
Showing 10 changed files with 39 additions and 46 deletions.
2 changes: 1 addition & 1 deletion docs/make.jl
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ Timer(t -> println(" "), 0, interval=240)
format = Documenter.HTML(
collapselevel = 2,
prettyurls = get(ENV, "CI", nothing) == "true",
canonical = "https://fourierflows.github.io/GeophysicalFlowsDocumentation/dev/"
canonical = "https://fourierflows.github.io/GeophysicalFlowsDocumentation/stable/"
)

makedocs(
Expand Down
9 changes: 2 additions & 7 deletions docs/src/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,15 @@

`GeophysicalFlows.jl` is a collection of modules which leverage the
[FourierFlows.jl](https://github.com/FourierFlows/FourierFlows.jl) framework to provide
solvers for problems in Geophysical Fluid Dynamics, on periodic domains and using Fourier-based pseudospectral methods.
solvers for problems in Geophysical Fluid Dynamics, on periodic domains using Fourier-based pseudospectral methods.

## Examples

Examples aim to demonstrate the main functionalities of each module. Have a look at our Examples collection!

!!! warning "Animations and Mac OS X Safari"
Often animations included the documentation, e.g., those in the [2D Navier-Stokes decaying turbulence example](generated/twodnavierstokes_decaying/)
don't show up in Safari. Until this issue is fixed we suggest using alternative browsers
to view the documentation.

## Developers

GeophysicalFlows is currently being developed by [Navid C. Constantinou](http://www.navidconstantinou.com) and [Gregory L. Wagner](https://glwagner.github.io).
GeophysicalFlows.jl is currently being developed by [Navid C. Constantinou](http://www.navidconstantinou.com) and [Gregory L. Wagner](https://glwagner.github.io).

## Cite

Expand Down
13 changes: 6 additions & 7 deletions examples/barotropicqg_betadecay.jl
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ nothing # hide
n = 128 # 2D resolution = n²
stepper = "FilteredRK4" # timestepper
dt = 0.05 # timestep
nsteps = 2000 # total number of time-steps
nsteps = 1500 # total number of time-steps
nsubs = 10 # number of time-steps for intermediate logging/plotting (nsteps must be multiple of nsubs)
nothing # hide

Expand Down Expand Up @@ -71,7 +71,7 @@ qih *= sqrt(E₀ / Ein) # normalize qi to have energy E₀
qi = irfft(qih, grid.nx)

BarotropicQG.set_zeta!(prob, qi)
nothing #hide
nothing # hide

# Let's plot the initial vorticity field:

Expand Down Expand Up @@ -103,7 +103,7 @@ p2 = contourf(x, y, vars.psi',
framestyle = :box)

l = @layout Plots.grid(1, 2)
p = plot(p1, p2, layout=l, size=(900, 400))
p = plot(p1, p2, layout=l, size = (900, 800))


# ## Diagnostics
Expand Down Expand Up @@ -131,8 +131,7 @@ nothing # hide

# and then create Output.
get_sol(prob) = sol # extracts the Fourier-transformed solution
get_u(prob) = irfft(im * grid.l .* grid.invKrsq .* sol, grid.nx)
out = Output(prob, filename, (:sol, get_sol), (:u, get_u))
out = Output(prob, filename, (:sol, get_sol))
nothing # hide


Expand Down Expand Up @@ -214,7 +213,7 @@ p = plot_output(prob)

anim = @animate for j = 0:round(Int, nsteps/nsubs)

if j % (1000 / nsubs) == 0
if j % (500 / nsubs) == 0
cfl = clock.dt * maximum([maximum(vars.u) / grid.dx, maximum(vars.v) / grid.dy])

log = @sprintf("step: %04d, t: %d, cfl: %.2f, E: %.4f, Q: %.4f, walltime: %.2f min",
Expand All @@ -234,7 +233,7 @@ anim = @animate for j = 0:round(Int, nsteps/nsubs)

end

mp4(anim, "barotropicqg_betadecay.mp4", fps=12)
gif(anim, "barotropicqg_betadecay.gif", fps=8)

# ## Save

Expand Down
4 changes: 2 additions & 2 deletions examples/barotropicqg_betaforced.jl
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ function plot_output(prob)
xlabel = "μt")

l = @layout Plots.grid(2, 3)
p = plot(pζ, pζm, pE, pψ, pum, pZ, layout=l, size = (1000, 600), dpi=150)
p = plot(pζ, pζm, pE, pψ, pum, pZ, layout=l, size = (1000, 600))

return p
end
Expand Down Expand Up @@ -265,7 +265,7 @@ anim = @animate for j = 0:Int(nsteps / nsubs)
BarotropicQG.updatevars!(prob)
end

mp4(anim, "barotropicqg_betaforced.mp4", fps=18)
gif(anim, "barotropicqg_betaforced.gif", fps=18)


# ## Save
Expand Down
4 changes: 2 additions & 2 deletions examples/barotropicqg_decay_topography.jl
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ qih *= sqrt(E₀ / energy(qih, grid)) # normalize qi to have energy
qi = irfft(qih, grid.nx)

BarotropicQG.set_zeta!(prob, qi)
nothing #hide
nothing # hide

# Let's plot the initial vorticity field:

Expand Down Expand Up @@ -231,4 +231,4 @@ anim = @animate for j = 0:round(Int, nsteps/nsubs)
BarotropicQG.updatevars!(prob)
end

mp4(anim, "barotropicqg_decay_topography.mp4", fps=12)
gif(anim, "barotropicqg_decay_topography.gif", fps=12)
4 changes: 2 additions & 2 deletions examples/barotropicqgql_betaforced.jl
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ function plot_output(prob)
xlabel = "μt")

l = @layout Plots.grid(2, 3)
p = plot(pζ, pζm, pE, pψ, pum, pZ, layout=l, size = (1000, 600), dpi=150)
p = plot(pζ, pζm, pE, pψ, pum, pZ, layout=l, size = (1000, 600))

return p
end
Expand Down Expand Up @@ -280,7 +280,7 @@ anim = @animate for j = 0:round(Int, nsteps / nsubs)
BarotropicQGQL.updatevars!(prob)
end

mp4(anim, "barotropicqgql_betaforced.mp4", fps=18)
gif(anim, "barotropicqgql_betaforced.gif", fps=18)


# ## Save
Expand Down
38 changes: 19 additions & 19 deletions examples/multilayerqg_2layer.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
using FourierFlows, Plots, Printf

using FFTW: rfft, irfft
using Random: seed!
import GeophysicalFlows.MultilayerQG
import GeophysicalFlows.MultilayerQG: energies

Expand All @@ -22,9 +23,7 @@ nothing # hide

# ## Numerical parameters and time-stepping parameters

nx = 128 # 2D resolution = nx^2
ny = nx

n = 128 # 2D resolution = n²
stepper = "FilteredRK4" # timestepper
dt = 6e-3 # timestep
nsteps = 7000 # total number of time-steps
Expand All @@ -33,14 +32,14 @@ nothing # hide


# ## Physical parameters
Lx = 2π # domain size
μ = 5e-2 # bottom drag
β = 5 # the y-gradient of planetary PV
L = 2π # domain size
μ = 5e-2 # bottom drag
β = 5 # the y-gradient of planetary PV

nlayers = 2 # number of layers
f₀, g = 1, 1 # Coriolis parameter and gravitational constant
H = [0.2, 0.8] # the rest depths of each layer
ρ = [4.0, 5.0] # the density of each layer
nlayers = 2 # number of layers
f₀, g = 1, 1 # Coriolis parameter and gravitational constant
H = [0.2, 0.8] # the rest depths of each layer
ρ = [4.0, 5.0] # the density of each layer

U = zeros(nlayers) # the imposed mean zonal flow in each layer
U[1] = 1.0
Expand All @@ -50,7 +49,7 @@ nothing # hide

# ## Problem setup
# We initialize a `Problem` by providing a set of keyword arguments,
prob = MultilayerQG.Problem(nlayers, dev; nx=nx, Lx=Lx, f₀=f₀, g=g, H=H, ρ=ρ, U=U, dt=dt, stepper=stepper, μ=μ, β=β)
prob = MultilayerQG.Problem(nlayers, dev; nx=n, Lx=L, f₀=f₀, g=g, H=H, ρ=ρ, U=U, dt=dt, stepper=stepper, μ=μ, β=β)
nothing # hide

# and define some shortcuts.
Expand All @@ -64,7 +63,8 @@ nothing # hide
# Our initial condition is some small amplitude random noise. We smooth our initial
# condidtion using the `timestepper`'s high-wavenumber `filter`.

q_i = 4e-3randn((nx, ny, nlayers))
seed!(1234) # reset of the random number generator for reproducibility
q_i = 4e-3randn((grid.nx, grid.ny, nlayers))
qh_i = prob.timestepper.filter .* rfft(q_i, (1, 2)) # only apply rfft in dims=1, 2
q_i = irfft(qh_i, grid.nx, (1, 2)) # only apply irfft in dims=1, 2

Expand Down Expand Up @@ -108,7 +108,7 @@ function get_u(prob)
end

out = Output(prob, filename, (:sol, get_sol), (:u, get_u))
nothing #hide
nothing # hide


# ## Visualizing the simulation
Expand All @@ -122,15 +122,15 @@ function plot_output(prob)
Lx, Ly = prob.grid.Lx, prob.grid.Ly

l = @layout Plots.grid(2, 3)
p = plot(layout=l, size = (1000, 600), dpi=150)
p = plot(layout=l, size = (1000, 600))

for m in 1:nlayers
heatmap!(p[(m-1) * 3 + 1], x, y, vars.q[:, :, m]',
aspectratio = 1,
legend = false,
c = :balance,
xlims = (-Lx / 2, Lx / 2),
ylims = (-Ly / 2, Ly / 2),
xlims = (-Lx/2, Lx/2),
ylims = (-Ly/2, Ly/2),
clims = symlims,
xticks = -3:3,
yticks = -3:3,
Expand All @@ -144,8 +144,8 @@ function plot_output(prob)
aspectratio = 1,
legend = false,
c = :viridis,
xlims = (-Lx / 2, Lx / 2),
ylims = (-Ly / 2, Ly / 2),
xlims = (-Lx/2, Lx/2),
ylims = (-Ly/2, Ly/2),
clims = symlims,
xticks = -3:3,
yticks = -3:3,
Expand Down Expand Up @@ -212,7 +212,7 @@ anim = @animate for j = 0:round(Int, nsteps / nsubs)
MultilayerQG.updatevars!(prob)
end

mp4(anim, "multilayerqg_2layer.mp4", fps=18)
gif(anim, "multilayerqg_2layer.gif", fps=18)


# ## Save
Expand Down
5 changes: 2 additions & 3 deletions examples/surfaceqg_decaying.jl
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,7 @@ function plot_output(prob)
xlabel = "t")

layout = @layout [a{0.5w} Plots.grid(2, 1)]
p = plot(pbₛ, pKE, pb², layout=layout, size = (900, 500), dpi=150)
p = plot(pbₛ, pKE, pb², layout=layout, size = (900, 500))

return p
end
Expand Down Expand Up @@ -195,7 +195,7 @@ anim = @animate for j = 0:round(Int, nsteps/nsubs)
SurfaceQG.updatevars!(prob)
end

mp4(anim, "sqg_ellipticalvortex.mp4", fps=14)
gif(anim, "sqg_ellipticalvortex.gif", fps=14)

# Let's see how all flow fields look like at the end of the simulation.

Expand Down Expand Up @@ -243,4 +243,3 @@ layout = @layout [a{0.5h}; b{0.5w} c{0.5w}]
plot_final = plot(pb, pu, pv, layout=layout, size = (800, 800))

# Last we can save the output by calling `saveoutput(out)`.

4 changes: 2 additions & 2 deletions examples/twodnavierstokes_decaying.jl
Original file line number Diff line number Diff line change
Expand Up @@ -159,7 +159,7 @@ anim = @animate for j = 0:Int(nsteps/nsubs)
TwoDNavierStokes.updatevars!(prob)
end

mp4(anim, "twodturb.mp4", fps=18)
gif(anim, "twodturb.gif", fps=18)


# Last we save the output.
Expand All @@ -168,7 +168,7 @@ saveoutput(out)

# ## Radial energy spectrum

# After the simulation is done we plot the radial energy spectrum to illustrate
# After the simulation is done we plot the instantaneous radial energy spectrum to illustrate
# how `FourierFlows.radialspectrum` can be used,

E = @. 0.5 * (vars.u^2 + vars.v^2) # energy density
Expand Down
2 changes: 1 addition & 1 deletion examples/twodnavierstokes_stochasticforcing.jl
Original file line number Diff line number Diff line change
Expand Up @@ -175,4 +175,4 @@ anim = @animate for j = 0:round(Int, nsteps / nsubs)
TwoDNavierStokes.updatevars!(prob)
end

mp4(anim, "twodturb_forced.mp4", fps=18)
gif(anim, "twodturb_forced.gif", fps=18)

0 comments on commit 9932129

Please sign in to comment.