Eastern North Atlantic

This example builds, runs, and analyzes the public Covert et al. (2022) development case for 18 July 2017, 06–12 UTC. The domain is 8.96 km square with 35 m horizontal spacing and 192 reconstructed vertical levels. It uses prescribed surface fluxes, simple longwave radiation, and no mean-wind nudging. This configuration differs from both official LASSO and the larger, nine-hour published experiment.

Fetch the inputs with julia data_wrangling/fetch_covert_inputs.jl, then run julia --project cases/eastern_north_atlantic.jl on an NVIDIA GPU.

using BreezeLab
using Oceananigans, Oceananigans.Units
using CairoMakie

Build the simulation

The package constructor returns a case without advancing its clock. Here we choose fixed-number P3 microphysics (:p3_n75); :one_moment and :p3_aer2 are also available. The aerosol-coupled member uses a prescribed CCN reservoir.

arch = GPU()
Nx, Ny = 256, 256
z_faces = covert_public_bin_vertical_faces()
stop_time = 6hours
timeseries_interval = 60seconds
profile_interval = 1hour
slice_interval = 1hour

output_dir = joinpath(pkgdir(BreezeLab), "output", "documentation", "ena")
case = eastern_north_atlantic(; arch, Nx, Ny, z_faces, stop_time,
                              microphysics = :p3_n75,
                              output_dir, output_prefix = "ena",
                              timeseries_interval, profile_interval, slice_interval)
simulation = case.simulation;

Run

Save the configuration, input checksums, and protocol overrides alongside the output. This six-hour simulation is a substantial GPU run; output writers replace files with the same prefix when the example is rerun.

mkpath(output_dir)
write_provenance(joinpath(output_dir, "provenance.toml"), case)
run!(simulation)
[ Info: Initializing simulation...
[ Info: iter      0, t = 0 seconds, Δt = 500 ms, wall = 3.804 minutes | max|w| 0.00 m/s, LWP 0.0 g/m², CF 0.00, max qᶜˡ 0.00e+00, max qʳ 0.00e+00, rain 0.000 mm/d, T ∈ [207.2, 294.4]
[ Info:     ... simulation initialization complete (2.632 minutes)
[ Info: Executing initial time step...
[ Info:     ... initial time step complete (17.778 seconds).
[ Info: iter   1200, t = 10 minutes, Δt = 500 ms, wall = 7.646 minutes | max|w| 0.26 m/s, LWP 122.4 g/m², CF 1.00, max qᶜˡ 6.27e-04, max qʳ 1.60e-06, rain 0.004 mm/d, T ∈ [207.2, 294.8]
[ Info: iter   2400, t = 20 minutes, Δt = 500 ms, wall = 10.929 minutes | max|w| 2.17 m/s, LWP 128.4 g/m², CF 1.00, max qᶜˡ 8.59e-04, max qʳ 5.66e-06, rain 0.017 mm/d, T ∈ [207.2, 295.0]
[ Info: iter   3600, t = 30 minutes, Δt = 500 ms, wall = 14.212 minutes | max|w| 2.56 m/s, LWP 116.2 g/m², CF 1.00, max qᶜˡ 8.21e-04, max qʳ 1.28e-05, rain 0.002 mm/d, T ∈ [207.2, 294.9]
[ Info: iter   4800, t = 40 minutes, Δt = 500 ms, wall = 17.491 minutes | max|w| 3.32 m/s, LWP 116.1 g/m², CF 1.00, max qᶜˡ 1.00e-03, max qʳ 1.79e-05, rain 0.008 mm/d, T ∈ [207.2, 295.0]
[ Info: iter   6000, t = 50 minutes, Δt = 500 ms, wall = 20.749 minutes | max|w| 3.86 m/s, LWP 112.9 g/m², CF 1.00, max qᶜˡ 1.05e-03, max qʳ 2.04e-05, rain 0.019 mm/d, T ∈ [207.2, 295.0]
[ Info: iter   7200, t = 1 hour, Δt = 500 ms, wall = 24.023 minutes | max|w| 3.68 m/s, LWP 116.5 g/m², CF 1.00, max qᶜˡ 1.06e-03, max qʳ 1.99e-05, rain 0.021 mm/d, T ∈ [207.2, 295.0]
[ Info: iter   8400, t = 1.167 hours, Δt = 500 ms, wall = 27.297 minutes | max|w| 3.82 m/s, LWP 122.0 g/m², CF 1.00, max qᶜˡ 1.09e-03, max qʳ 2.16e-05, rain 0.019 mm/d, T ∈ [207.2, 294.9]
[ Info: iter   9600, t = 1.333 hours, Δt = 500 ms, wall = 30.546 minutes | max|w| 3.42 m/s, LWP 128.9 g/m², CF 1.00, max qᶜˡ 1.12e-03, max qʳ 2.10e-05, rain 0.031 mm/d, T ∈ [207.2, 294.9]
[ Info: iter  10800, t = 1.500 hours, Δt = 500 ms, wall = 33.810 minutes | max|w| 3.56 m/s, LWP 133.1 g/m², CF 1.00, max qᶜˡ 1.06e-03, max qʳ 2.40e-05, rain 0.035 mm/d, T ∈ [207.2, 294.9]
[ Info: iter  12000, t = 1.667 hours, Δt = 500 ms, wall = 37.052 minutes | max|w| 3.44 m/s, LWP 137.4 g/m², CF 1.00, max qᶜˡ 1.03e-03, max qʳ 3.48e-05, rain 0.045 mm/d, T ∈ [207.2, 294.9]
[ Info: iter  13200, t = 1.833 hours, Δt = 500 ms, wall = 40.325 minutes | max|w| 3.53 m/s, LWP 142.1 g/m², CF 1.00, max qᶜˡ 1.05e-03, max qʳ 3.61e-05, rain 0.049 mm/d, T ∈ [207.2, 294.9]
[ Info: iter  14400, t = 2 hours, Δt = 500 ms, wall = 43.583 minutes | max|w| 3.18 m/s, LWP 146.5 g/m², CF 1.00, max qᶜˡ 1.08e-03, max qʳ 3.56e-05, rain 0.056 mm/d, T ∈ [207.2, 294.9]
[ Info: iter  15600, t = 2.167 hours, Δt = 500 ms, wall = 46.831 minutes | max|w| 3.12 m/s, LWP 151.7 g/m², CF 1.00, max qᶜˡ 1.01e-03, max qʳ 4.08e-05, rain 0.064 mm/d, T ∈ [207.2, 294.8]
[ Info: iter  16800, t = 2.333 hours, Δt = 500 ms, wall = 50.131 minutes | max|w| 3.41 m/s, LWP 156.5 g/m², CF 1.00, max qᶜˡ 1.01e-03, max qʳ 4.24e-05, rain 0.070 mm/d, T ∈ [207.2, 294.8]
[ Info: iter  18000, t = 2.500 hours, Δt = 500 ms, wall = 53.386 minutes | max|w| 3.37 m/s, LWP 163.0 g/m², CF 1.00, max qᶜˡ 1.04e-03, max qʳ 3.97e-05, rain 0.070 mm/d, T ∈ [207.2, 294.8]
[ Info: iter  19200, t = 2.667 hours, Δt = 500 ms, wall = 56.631 minutes | max|w| 3.55 m/s, LWP 167.8 g/m², CF 1.00, max qᶜˡ 9.87e-04, max qʳ 4.71e-05, rain 0.068 mm/d, T ∈ [207.2, 294.7]
[ Info: iter  20400, t = 2.833 hours, Δt = 500 ms, wall = 59.880 minutes | max|w| 3.22 m/s, LWP 172.0 g/m², CF 1.00, max qᶜˡ 9.95e-04, max qʳ 4.07e-05, rain 0.072 mm/d, T ∈ [207.2, 294.8]
[ Info: iter  21600, t = 3 hours, Δt = 500 ms, wall = 1.052 hours | max|w| 3.53 m/s, LWP 175.7 g/m², CF 1.00, max qᶜˡ 9.72e-04, max qʳ 4.35e-05, rain 0.077 mm/d, T ∈ [207.3, 294.8]
[ Info: iter  22800, t = 3.167 hours, Δt = 500 ms, wall = 1.106 hours | max|w| 3.55 m/s, LWP 177.1 g/m², CF 1.00, max qᶜˡ 9.79e-04, max qʳ 5.09e-05, rain 0.075 mm/d, T ∈ [207.3, 294.7]
[ Info: iter  24000, t = 3.333 hours, Δt = 500 ms, wall = 1.160 hours | max|w| 3.60 m/s, LWP 178.4 g/m², CF 1.00, max qᶜˡ 9.44e-04, max qʳ 4.78e-05, rain 0.078 mm/d, T ∈ [207.3, 294.7]
[ Info: iter  25200, t = 3.500 hours, Δt = 500 ms, wall = 1.215 hours | max|w| 3.73 m/s, LWP 180.1 g/m², CF 1.00, max qᶜˡ 9.45e-04, max qʳ 4.74e-05, rain 0.078 mm/d, T ∈ [207.3, 294.6]
[ Info: iter  26400, t = 3.667 hours, Δt = 500 ms, wall = 1.269 hours | max|w| 4.42 m/s, LWP 180.7 g/m², CF 1.00, max qᶜˡ 9.96e-04, max qʳ 4.86e-05, rain 0.069 mm/d, T ∈ [207.3, 294.6]
[ Info: iter  27600, t = 3.833 hours, Δt = 500 ms, wall = 1.323 hours | max|w| 3.32 m/s, LWP 182.4 g/m², CF 1.00, max qᶜˡ 9.51e-04, max qʳ 3.86e-05, rain 0.068 mm/d, T ∈ [207.3, 294.6]
[ Info: iter  28800, t = 4 hours, Δt = 500 ms, wall = 1.377 hours | max|w| 3.61 m/s, LWP 183.8 g/m², CF 1.00, max qᶜˡ 9.48e-04, max qʳ 3.92e-05, rain 0.069 mm/d, T ∈ [207.3, 294.5]
[ Info: iter  30000, t = 4.167 hours, Δt = 500 ms, wall = 1.432 hours | max|w| 4.06 m/s, LWP 184.3 g/m², CF 1.00, max qᶜˡ 9.55e-04, max qʳ 5.69e-05, rain 0.069 mm/d, T ∈ [207.3, 294.5]
[ Info: iter  31200, t = 4.333 hours, Δt = 500 ms, wall = 1.485 hours | max|w| 3.77 m/s, LWP 184.5 g/m², CF 1.00, max qᶜˡ 9.72e-04, max qʳ 4.65e-05, rain 0.069 mm/d, T ∈ [207.3, 294.4]
[ Info: iter  32400, t = 4.500 hours, Δt = 500 ms, wall = 1.539 hours | max|w| 3.59 m/s, LWP 186.1 g/m², CF 1.00, max qᶜˡ 9.76e-04, max qʳ 4.53e-05, rain 0.069 mm/d, T ∈ [207.3, 294.4]
[ Info: iter  33600, t = 4.667 hours, Δt = 500 ms, wall = 1.594 hours | max|w| 4.07 m/s, LWP 187.5 g/m², CF 1.00, max qᶜˡ 9.80e-04, max qʳ 5.08e-05, rain 0.074 mm/d, T ∈ [207.3, 294.4]
[ Info: iter  34800, t = 4.833 hours, Δt = 500 ms, wall = 1.648 hours | max|w| 4.00 m/s, LWP 189.4 g/m², CF 1.00, max qᶜˡ 9.74e-04, max qʳ 4.16e-05, rain 0.077 mm/d, T ∈ [207.3, 294.4]
[ Info: iter  36000, t = 5 hours, Δt = 500 ms, wall = 1.702 hours | max|w| 4.20 m/s, LWP 190.5 g/m², CF 1.00, max qᶜˡ 9.46e-04, max qʳ 4.37e-05, rain 0.081 mm/d, T ∈ [207.3, 294.3]
[ Info: iter  37200, t = 5.167 hours, Δt = 500 ms, wall = 1.756 hours | max|w| 3.64 m/s, LWP 191.2 g/m², CF 1.00, max qᶜˡ 9.69e-04, max qʳ 4.73e-05, rain 0.087 mm/d, T ∈ [207.3, 294.3]
[ Info: iter  38400, t = 5.333 hours, Δt = 500 ms, wall = 1.810 hours | max|w| 3.52 m/s, LWP 191.9 g/m², CF 1.00, max qᶜˡ 9.72e-04, max qʳ 5.83e-05, rain 0.093 mm/d, T ∈ [207.3, 294.2]
[ Info: iter  39600, t = 5.500 hours, Δt = 500 ms, wall = 1.864 hours | max|w| 3.98 m/s, LWP 192.7 g/m², CF 1.00, max qᶜˡ 1.03e-03, max qʳ 4.42e-05, rain 0.098 mm/d, T ∈ [207.3, 294.2]
[ Info: iter  40800, t = 5.667 hours, Δt = 500 ms, wall = 1.918 hours | max|w| 4.74 m/s, LWP 192.7 g/m², CF 1.00, max qᶜˡ 9.69e-04, max qʳ 5.28e-05, rain 0.084 mm/d, T ∈ [207.3, 294.2]
[ Info: iter  42000, t = 5.833 hours, Δt = 500 ms, wall = 1.973 hours | max|w| 4.08 m/s, LWP 193.6 g/m², CF 1.00, max qᶜˡ 1.02e-03, max qʳ 4.16e-05, rain 0.086 mm/d, T ∈ [207.3, 294.1]
[ Info: Simulation is stopping after running for 2.003 hours.
[ Info: Simulation time 6 hours equals or exceeds stop time 6 hours.
[ Info: iter  43200, t = 6 hours, Δt = 500 ms, wall = 2.027 hours | max|w| 3.56 m/s, LWP 195.5 g/m², CF 1.00, max qᶜˡ 9.75e-04, max qʳ 5.05e-05, rain 0.091 mm/d, T ∈ [207.3, 294.1]

Analyze cloud water and rain

Read the saved horizontal means. Cloud liquid water path is stored in kg m⁻²; multiply by 1000 for g m⁻². The downward surface rain mass flux is in kg m⁻² s⁻¹; multiplying by seconds per day gives mm day⁻¹ of liquid water. These are model diagnostics; comparison with ARM requires matching its sampling and retrieval definitions.

filename = joinpath(output_dir, "ena_timeseries.jld2")
lwp = FieldTimeSeries(filename, "lwp")
rain = FieldTimeSeries(filename, "rain_flux")
times = lwp.times ./ hour
cloud_water_path = [1e3 * lwp[n][1, 1, 1] for n in eachindex(times)]
rain_rate = [86400 * rain[n][1, 1, 1] for n in eachindex(times)]

fig = Figure(size = (900, 650))
ax_lwp = Axis(fig[1, 1], xlabel = "Hours since 06 UTC, 18 July 2017",
              ylabel = "Cloud liquid water path (g m⁻²)")
ax_rain = Axis(fig[2, 1], xlabel = "Hours since 06 UTC, 18 July 2017",
               ylabel = "Surface rain rate (mm day⁻¹)")
lines!(ax_lwp, times, cloud_water_path)
lines!(ax_rain, times, rain_rate)
save(joinpath(output_dir, "cloud_water_and_rain.png"), fig)
cp(joinpath(output_dir, "cloud_water_and_rain.png"), "eastern_north_atlantic.png"; force=true);

Cloud water path and surface rain rate

Execution environment

using InteractiveUtils: versioninfo
versioninfo()
import Pkg
Pkg.status()
Julia Version 1.12.7
Commit 6d172b025e4 (2026-08-15 08:05 UTC)
Build Info:
  Official https://julialang.org release
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 16 × AMD EPYC 7R13 Processor
  WORD_SIZE: 64
  LLVM: libLLVM-18.1.7 (ORCJIT, znver3)
  GC: Built with stock GC
Threads: 6 default, 1 interactive, 6 GC (on 16 virtual cores)
Environment:
  JULIA_NUM_PRECOMPILE_TASKS = 6
  JULIA_PKG_PRECOMPILE_AUTO = 0
  JULIA_DEPOT_PATH = /shared/home/greg/breezelab-work/integration/depot/AMD_EPYC_7R13_Processor_:/shared/home/greg/breezelab-work/tracer-mip/depot/AMD_EPYC_7R13_Processor_:/shared/home/greg/breezelab-work/tracer-dp-scream/depot/AMD_EPYC_7R13_Processor_:/shared/home/greg/breezelab-work/sea-starr/depot/AMD_EPYC_7R13_Processor_:/shared/home/greg/breezelab-runs/docs-20261007-8dc824d/depot-compute/AMD_EPYC_7R13_Processor_:/shared/home/greg/breezelab-runs/docs-20261007-8dc824d/depot-login:/shared/home/greg/breezelab-runs/20261006/depot:/shared/home/greg/.julia:
  JULIA_NUM_THREADS = 6
Status `~/breezelab-work/integration/docs/Project.toml`
  [95b707ca] BreezeLab v0.1.0 `..`
  [13f3f980] CairoMakie v0.15.15
  [e30172f5] Documenter v1.19.0
  [98b081ad] Literate v2.21.0
  [9e8cae18] Oceananigans v0.113.3 `https://github.com/CliMA/Oceananigans.jl#847e125`

This page was generated using Literate.jl.