There is a newer version of the record available.

Published January 15, 2026 | Version v0.3.0
Software Open

Breeze.jl

  • 1. Aeolus Labs, Massachusetts Institute of Technology
  • 2. University of Melbourne
  • 3. University College London
  • 4. Aeolus Labs
  • 5. University of Tasmania

Description

Breeze v0.3.0

Diff since v0.2.1

Breaking changes

  1. Function Argument Order Changes (most impactful) Several thermodynamic functions had their argument order changed to be more consistent (temperature first):

density(p, T, q, constants)density(T, p, q, constants) vapor_pressure(ρ, T, qᵛ, constants)vapor_pressure(T, ρ, qᵛ, constants)

This affects any code directly calling these low-level thermodynamics functions.

  1. Default Timestepper Change

The default timestepper changed from :RungeKutta3 to :SSPRungeKutta3:

# Old default
timestepper = :RungeKutta3

# New default
timestepper = :SSPRungeKutta3
  1. Radiation Model API Changes

The RadiativeTransferModel constructor now uses an optics type system:

  • New types: GrayOptics, ClearSkyOptics, AllSkyOptics
  • The old optical_thickness field was replaced with a more structured optics approach
  • Added BackgroundAtmosphere, liquid_effective_radius, ice_effective_radius fields
  1. New Dynamics Types (additive, but may affect dispatch)

New dynamics types were added: CompressibleDynamics - for fully compressible Euler equations PrescribedDynamics / KinematicModel - for kinematic models with prescribed velocity fields

  1. Module Restructuring

Thermodynamic formulations were moved from AtmosphereModels to their own top-level modules:

StaticEnergyFormulations/
PotentialTemperatureFormulations/
AnelasticEquations/
CompressibleEquations/
KinematicDriver/

This is mostly internal, but could affect code that imports from internal module paths.

Merged pull requests:

  • Native implementation of DCMIP2016 Kessler microphysics (#241) (@kaiyuan-cheng)
  • Implement SSPRungeKutta3TimeStepper (#291) (@glwagner)
  • Clear sky optics for RadiativeTransferModel from RRTMGP.jl (#334) (@glwagner)
  • [CI] Fix triggers of docs builds and condition for setting BREEZE_LABEL_BUILD_ALL_EXAMPLES (#346) (@giordano)
  • Add Zenodo badge + CITATION.cff (#349) (@navidcy)
  • Delete .github/workflows/DocPreviewsCleanup.yml (#350) (@navidcy)
  • Simplify author affiliation formatting in CITATION.cff (#353) (@navidcy)
  • [docs] Add a note about reproducibility of the simulations (#354) (@giordano)
  • [CI] Don't trigger docs builds on labeled events (#355) (@giordano)
  • CompressibleDynamics with simple explicit time-stepping (#356) (@glwagner)
  • Fix reference in docstring for thermodynamic adjustment factor (#357) (@glwagner)
  • NFC: Simplify Oceananigans compat bounds (#360) (@giordano)
  • [docs] Don't actually save unused figures in Literate examples (#361) (@giordano)
  • Update Oceananigans requirement from 0.102.2 to 0.102.2, 0.103 (#362) (@dependabot[bot])
  • Add test for error path in RadiativeTransferModel constructor (#363) (@giordano)
  • [docs] Minor improvements to the acoustic wave example (#365) (@giordano)
  • [docs] Build RICO example only on-demand (#366) (@giordano)
  • Implement AllSkyOptics for RadiativeTransferModel (#367) (@glwagner)
  • Add capability to set relative humidity directly (#368) (@glwagner)
  • Refactor thermodynamic formulations into independent modules (#372) (@glwagner)
  • Support 2M microphysics from CloudMicrophysics (#373) (@glwagner)
  • [CI] Reduce parallel jobs on GPU runners (#374) (@giordano)
  • Always reset Float64 as default float type at the end (#375) (@giordano)
  • [CI] Only cache scratchspaces for GPU jobs (#376) (@giordano)
  • [docs] Automatically generate list of modules for API page (#377) (@giordano)
  • Automatically list all subtypes of AbstractOptics in error message (#378) (@giordano)
  • Increase relative humidity in cloud kelvin helmholtz (#379) (@glwagner)
  • Remove all imports, take 2 (#380) (@giordano)
  • [docs] Use more DocStringExtensions utils, and add more crossrefs (#381) (@giordano)
  • Add TetensFormula saturation vapor pressure (#384) (@glwagner)
  • Add bibtex entry and fixes some docs refs (#388) (@navidcy)
  • Add support for vertically implicit time discretization (#390) (@glwagner)
  • [AGENTS.md] Add instructions about MCPRepl and port some advice from Oceananigans (#391) (@glwagner)
  • [CI] Run jobs with Julia v1.12.4 (#392) (@giordano)
  • Implement a KinematicModel based on PrescribedVelocityFields (#394) (@glwagner)
  • [CI] Use Breeze Docker images with julia version number in the tag (#399) (@giordano)
  • Avoid all Core.Boxes in Breeze (#400) (@giordano)
  • Remove stale imports (#401) (@giordano)
  • Update README and docs landing with list of features, roadmap, and gallery (#402) (@glwagner)
  • Bump to 0.3.0 (#403) (@glwagner)
  • Try to make the tests cheaper (#404) (@glwagner)
  • Cleanup whitespaces in Breeze codebase (#406) (@giordano)

Closed issues:

  • Support setting RelativeHumidity in set! (#282)
  • Insanely cool cloud visualization in docs / README (#315)
  • Non-reproducible simulations (#351)
  • Use TabulatedFunction to accelerate evaluation of saturation_vapor_pressure (#370)
  • AtmosphereModel description for Docs landing page/README needs update? (#393)

Notes

If you use Breeze.jl in your research, teaching, or for fun, please cite it using the metadata below.

Files

NumericalEarth/Breeze.jl-v0.3.0.zip

Files (342.6 kB)

Name Size Download all
md5:6c7d0481739cf23e9e5d6c2091ec5f8a
342.6 kB Preview Download

Additional details

Related works