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 CairoMakieBuild 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);
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.