`ZonalFlow`

is a spectral solver for Direct Numerical Simulation (DNS) and Direct Statistical Simulation (DSS) of the barotropic vorticity equation on the beta-plane.

DNS can be performed for the following equations:

- NL: original (fully non-linear) master equations
- QL: quasilinear equations
- GQL: generalised quasilinear equations

DSS can be performed making use of the following equations:

- CE2: cumulant expansions at second order
- GCE2: generalised cumulant expansions at second order

`ZonalFlow`

uses time integrators from the OrdinaryDiffEq.jl and StochasticDiffEq.jl packages. Choice of unity-rank or full-rank initialisation is provided, and the following types of problems (corresponding to different driving mechanisms) can be solved:

Simulation data is saved as `.jld2`

files and the post-processed output is saved in `.npz`

files (sample `Python`

post-processing files are located in the examples directory).

Add `ZonalFlow`

using the `Julia`

package manager as:

```
julia> using Pkg
julia> Pkg.add("ZonalFlow")
```

Example scripts are located in the examples directory. A fully-nonlinear solution of stochastically-driven jets can be obtained by the following code:

```
using Logging: global_logger
using TerminalLoggers: TerminalLogger
global_logger(TerminalLogger())
using ZonalFlow
tspan = (0.0,1000.0);
tsargs = (
dt=0.001,
adaptive=false,
progress=true,
progress_steps=100000,
save_everystep=false,
saveat=100,
save_noise=false
);
domain = Domain(extent=(2π,2π),res=(16,16));
coeffs = Coefficients(Ω=5.0,θ=0.0,μ=0.01,ν=0.0,ν₄=1.0);
forcing = Stochastic(kf=10,dk=4,ε=0.01);
prob = BetaPlane(domain,coeffs,forcing);
eq = NL()
sol = integrate(prob,eq,tspan;tsargs...);
write(prob,eq,sol,dn="data/",fn="jets_nl")
```

[1] Marston et al. (2008) Journal of Atmospheric Sciences

[2] Tobias and Marston (2017) Physics of Fluids

[3] Constantinou et al. (2016) Journal of Atmospheric Sciences

MIT