From f11a2803f9f3767cdb40a1f78eba475de75f9fc5 Mon Sep 17 00:00:00 2001 From: "Navid C. Constantinou" Date: Thu, 9 Oct 2025 11:52:02 +1100 Subject: [PATCH 01/26] Update CI to Julia version to 1.12.0 --- .buildkite/pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index d8c4d0fcd3..94b496744f 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -1,5 +1,5 @@ env: - JULIA_VERSION: "1.10.10" + JULIA_VERSION: "1.12.0" BUILDKITE_HOME: "/var/lib/buildkite-agent" JULIA_DEPOT_PATH: "$BUILDKITE_HOME/.julia-oceananigans" JULIA_PKG_SERVER_REGISTRY_PREFERENCE: eager From 0b1776800d8eabe31b9ab8ffecf321fd725a97c5 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Thu, 9 Oct 2025 08:52:22 +0200 Subject: [PATCH 02/26] try increasing reactant compact --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index bd60fd23ae..da9ea87d8c 100644 --- a/Project.toml +++ b/Project.toml @@ -92,7 +92,7 @@ OffsetArrays = "1.4" OrderedCollections = "1.1" Printf = "1.9" Random = "1.9" -Reactant = "0.2.162" +Reactant = "0.2.169" ReactantCore = "0.1" Rotations = "1.0" SeawaterPolynomials = "0.3.9" From 244442db203b402680ae3fdf86e68ea71ef1e5f9 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Thu, 9 Oct 2025 09:10:13 +0200 Subject: [PATCH 03/26] try without reactant --- .buildkite/pipeline.yml | 6 +++--- Project.toml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 94b496744f..d266382956 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -86,10 +86,10 @@ steps: - "πŸ‚ lagrangian_particles" - "πŸ§… multi_region" - "🦧 scripts" - - "πŸ‘Ί enzyme" + # - "πŸ‘Ί enzyme" - "🍱 xesmf" - - "πŸ‘Ή reactant_1" - - "🎭 reactant_2" + # - "πŸ‘Ή reactant_1" + # - "🎭 reactant_2" retry: automatic: - exit_status: 1 diff --git a/Project.toml b/Project.toml index 3ba7f0a4d3..42c3245fa9 100644 --- a/Project.toml +++ b/Project.toml @@ -110,14 +110,14 @@ AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" CUDA_Runtime_jll = "76a88914-d11a-5bdc-97e0-2f5a05c973a2" DataDeps = "124859b0-ceae-595e-8997-d05f6a7a8dfe" -Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" +# Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" MPIPreferences = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" Metal = "dde4c033-4e86-420c-a63e-0dd931031962" -Reactant = "3c362404-f566-11ee-1572-e11a4b42c853" +# Reactant = "3c362404-f566-11ee-1572-e11a4b42c853" SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" TimesDates = "bdfc003b-8df8-5c39-adcd-3a9087f5df4a" oneAPI = "8f75cd03-7ff8-4ecb-9b8f-daf728133b1b" [targets] -test = ["AMDGPU", "CUDA", "oneAPI", "DataDeps", "SafeTestsets", "Test", "Enzyme", "Reactant", "Metal", "XESMF", "CUDA_Runtime_jll", "MPIPreferences", "TimesDates", "NCDatasets"] +test = ["AMDGPU", "CUDA", "oneAPI", "DataDeps", "SafeTestsets", "Test", "Metal", "XESMF", "CUDA_Runtime_jll", "MPIPreferences", "TimesDates", "NCDatasets"] From ef56cacb690b33cbfec32e387b17c734b231f815 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Thu, 9 Oct 2025 09:29:34 +0200 Subject: [PATCH 04/26] just run the docs --- .buildkite/pipeline.yml | 38 +++++++++++++++++++------------------- test/test_init.jl | 2 +- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index d266382956..7fd7dfc706 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -68,26 +68,26 @@ steps: - "GPU" group: - "πŸ‡ unit" - - "πŸ‘» abstract_operations" - - "πŸ•Š poisson_solvers_1" - - "πŸ¦– poisson_solvers_2" - - "🦀 general_solvers" - - "🎣 turbulence_closures" - - "πŸ¦€ time_stepping_1" - - "🦈 time_stepping_2" - - "🦟 time_stepping_3" - - "🐫 nonhydrostatic_regression" - - "πŸ™ hydrostatic_free_surface" - - "🫐 tripolar_grid" - - "πŸ₯‘ vertical_coordinate" - - "πŸ™ˆ hydrostatic_regression" - - "🦒 shallow_water" - - "🐳 simulation" - - "πŸ‚ lagrangian_particles" - - "πŸ§… multi_region" - - "🦧 scripts" + # - "πŸ‘» abstract_operations" + # - "πŸ•Š poisson_solvers_1" + # - "πŸ¦– poisson_solvers_2" + # - "🦀 general_solvers" + # - "🎣 turbulence_closures" + # - "πŸ¦€ time_stepping_1" + # - "🦈 time_stepping_2" + # - "🦟 time_stepping_3" + # - "🐫 nonhydrostatic_regression" + # - "πŸ™ hydrostatic_free_surface" + # - "🫐 tripolar_grid" + # - "πŸ₯‘ vertical_coordinate" + # - "πŸ™ˆ hydrostatic_regression" + # - "🦒 shallow_water" + # - "🐳 simulation" + # - "πŸ‚ lagrangian_particles" + # - "πŸ§… multi_region" + # - "🦧 scripts" # - "πŸ‘Ί enzyme" - - "🍱 xesmf" + # - "🍱 xesmf" # - "πŸ‘Ή reactant_1" # - "🎭 reactant_2" retry: diff --git a/test/test_init.jl b/test/test_init.jl index d13eeb249a..de6923e755 100644 --- a/test/test_init.jl +++ b/test/test_init.jl @@ -1,4 +1,4 @@ -using Enzyme +# using Enzyme using CUDA using Metal using AMDGPU From d1b7f3c968846375b1376e4550b83e756e6f1c21 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Thu, 9 Oct 2025 10:04:31 +0200 Subject: [PATCH 05/26] bugfix --- src/Utils/prettysummary.jl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Utils/prettysummary.jl b/src/Utils/prettysummary.jl index 6a3dfcd2b9..7856ad2679 100644 --- a/src/Utils/prettysummary.jl +++ b/src/Utils/prettysummary.jl @@ -5,8 +5,7 @@ prettysummary(x, args...) = summary(x) function prettysummary(f::Function, showmethods=true) ft = typeof(f) - mt = ft.name.mt - name = mt.name + name = ft.name.name n = length(methods(f)) m = n==1 ? "method" : "methods" sname = string(name) From bdbfd4f6daa77cf712f47a25ef42b2b260cbaabc Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Thu, 9 Oct 2025 10:24:42 +0200 Subject: [PATCH 06/26] Change grid bottom function to GridFittedBottom --- examples/internal_tide.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/internal_tide.jl b/examples/internal_tide.jl index 86ced24342..5d3f970b87 100644 --- a/examples/internal_tide.jl +++ b/examples/internal_tide.jl @@ -43,7 +43,7 @@ width = 20kilometers hill(x) = hβ‚€ * exp(-x^2 / 2width^2) bottom(x) = - H + hill(x) -grid = ImmersedBoundaryGrid(underlying_grid, PartialCellBottom(bottom)) +grid = ImmersedBoundaryGrid(underlying_grid, GridFittedBottom(bottom)) # Let's see how the domain with the bathymetry is. From d040a0cb982abaa00ed84ef6e8fd617ea407d412 Mon Sep 17 00:00:00 2001 From: "Navid C. Constantinou" Date: Thu, 9 Oct 2025 19:26:54 +1100 Subject: [PATCH 07/26] Update warning for Julia version compatibility --- src/Oceananigans.jl | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Oceananigans.jl b/src/Oceananigans.jl index 400b2f3185..8cd98a34b6 100644 --- a/src/Oceananigans.jl +++ b/src/Oceananigans.jl @@ -121,10 +121,10 @@ using DocStringExtensions using FFTW function __init__() - if VERSION >= v"1.11.0" - @warn """You are using Julia v1.11 or later!" - Oceananigans is currently tested on Julia v1.10." - If you find issues with Julia v1.11 or later," + if VERSION >= v"1.13.0" + @warn """You are using Julia v1.13 or later!" + Oceananigans is currently tested on Julia v1.12." + If you find issues with Julia v1.13 or later," please report at https://github.com/CliMA/Oceananigans.jl/issues/new""" end From 57f395ed947ba62e59ea791bebb4910d7205f919 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Thu, 9 Oct 2025 10:42:32 +0200 Subject: [PATCH 08/26] take up the changes in #3836 --- .../update_hydrostatic_free_surface_model_state.jl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Models/HydrostaticFreeSurfaceModels/update_hydrostatic_free_surface_model_state.jl b/src/Models/HydrostaticFreeSurfaceModels/update_hydrostatic_free_surface_model_state.jl index 16587f9d77..e480f48f92 100644 --- a/src/Models/HydrostaticFreeSurfaceModels/update_hydrostatic_free_surface_model_state.jl +++ b/src/Models/HydrostaticFreeSurfaceModels/update_hydrostatic_free_surface_model_state.jl @@ -60,9 +60,9 @@ function mask_immersed_model_fields!(model, grid) Ξ· = displacement(model.free_surface) fields_to_mask = merge(model.auxiliary_fields, prognostic_fields(model)) - foreach(fields_to_mask) do field - if field !== Ξ· - mask_immersed_field!(field) + foreach(keys(fields_to_mask)) do key + if key != :Ξ· + @inbounds mask_immersed_field!(fields_to_mask[key]) end end mask_immersed_field_xy!(Ξ·, k=size(grid, 3)+1) From 0d34ac0330083c35628f53453d80da2c552a0c87 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Thu, 9 Oct 2025 11:51:46 +0200 Subject: [PATCH 09/26] try without distributed --- docs/make.jl | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/docs/make.jl b/docs/make.jl index d08c291b52..5fe882b6da 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -1,7 +1,7 @@ -using Distributed -Distributed.addprocs(2) +# using Distributed +# Distributed.addprocs(2) -@everywhere begin +# @everywhere begin using Documenter using DocumenterCitations using Literate @@ -48,11 +48,12 @@ Distributed.addprocs(2) "one_dimensional_diffusion.jl", "internal_wave.jl", ] -end +# end -@info string("Executing the examples using ", Distributed.nprocs(), " processes") +# @info string("Executing the examples using ", Distributed.nprocs(), " processes") -Distributed.pmap(1:length(example_scripts)) do n +# Distributed.pmap(1:length(example_scripts)) do n +for n in 1:length(example_scripts) example = example_scripts[n] example_filepath = joinpath(EXAMPLES_DIR, example) withenv("JULIA_DEBUG" => "Literate") do @@ -64,7 +65,7 @@ Distributed.pmap(1:length(example_scripts)) do n end end -Distributed.rmprocs() +# Distributed.rmprocs() ##### ##### Organize page hierarchies From e0f513703811940587b569943e893c463852e0ef Mon Sep 17 00:00:00 2001 From: "Navid C. Constantinou" Date: Thu, 16 Oct 2025 08:34:21 +1100 Subject: [PATCH 10/26] imports alphabetically --- src/MultiRegion/multi_region_field.jl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/MultiRegion/multi_region_field.jl b/src/MultiRegion/multi_region_field.jl index b425df8220..0aac7296a2 100644 --- a/src/MultiRegion/multi_region_field.jl +++ b/src/MultiRegion/multi_region_field.jl @@ -1,17 +1,17 @@ +using Oceananigans.AbstractOperations: AbstractOperation, compute_computed_field! using Oceananigans.BoundaryConditions: default_auxiliary_bc using Oceananigans.Fields: FunctionField, data_summary, AbstractField, instantiated_location -using Oceananigans.AbstractOperations: AbstractOperation, compute_computed_field! using Oceananigans.Operators: assumed_field_location using Oceananigans.OutputWriters: output_indices using Base: @propagate_inbounds +import Oceananigans.BoundaryConditions: regularize_field_boundary_conditions, FieldBoundaryConditions +import Oceananigans.Diagnostics: hasnan import Oceananigans.DistributedComputations: reconstruct_global_field, CommunicationBuffers -import Oceananigans.BoundaryConditions: regularize_field_boundary_conditions +import Oceananigans.Fields: set!, compute!, compute_at!, interior, communication_buffers, + validate_field_data, validate_boundary_conditions, validate_indices import Oceananigans.Grids: xnodes, ynodes -import Oceananigans.Fields: set!, compute!, compute_at!, interior, validate_field_data, validate_boundary_conditions -import Oceananigans.Fields: validate_indices, communication_buffers -import Oceananigans.Diagnostics: hasnan import Base: fill!, axes From 2173b31283d435c061ef25a280b8cf8b96a99a91 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Mon, 3 Nov 2025 18:05:17 +0100 Subject: [PATCH 11/26] use a local accumulator and reinstate tests --- .buildkite/pipeline.yml | 40 +++++++++---------- .../update_hydrostatic_pressure.jl | 6 ++- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 174428b05e..81adeba894 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -80,27 +80,27 @@ steps: - "GPU" group: - "πŸ‡ unit" - # - "πŸ‘» abstract_operations" - # - "πŸ•Š poisson_solvers_1" + - "πŸ‘» abstract_operations" + - "πŸ•Š poisson_solvers_1" - "πŸ¦– poisson_solvers_2" - # - "🦀 general_solvers" - # - "🎣 turbulence_closures" - # - "πŸ¦€ time_stepping_1" - # - "🦈 time_stepping_2" - # - "🦟 time_stepping_3" - # - "🐫 nonhydrostatic_regression" - # - "πŸ™ hydrostatic_free_surface" - # - "🫐 tripolar_grid" - # - "πŸ₯‘ vertical_coordinate" - # - "πŸ™ˆ hydrostatic_regression" - # - "🦒 shallow_water" - # - "🐳 simulation" - # - "πŸ‚ lagrangian_particles" - # - "πŸ§… multi_region" - # - "🦧 scripts" - # - "πŸ‘Ί enzyme" - # - "🍱 xesmf" - # - "πŸ‘Ή reactant_1" + - "🦀 general_solvers" + - "🎣 turbulence_closures" + - "πŸ¦€ time_stepping_1" + - "🦈 time_stepping_2" + - "🦟 time_stepping_3" + - "🐫 nonhydrostatic_regression" + - "πŸ™ hydrostatic_free_surface" + - "🫐 tripolar_grid" + - "πŸ₯‘ vertical_coordinate" + - "πŸ™ˆ hydrostatic_regression" + - "🦒 shallow_water" + - "🐳 simulation" + - "πŸ‚ lagrangian_particles" + - "πŸ§… multi_region" + - "🦧 scripts" + - "πŸ‘Ί enzyme" + - "🍱 xesmf" + - "πŸ‘Ή reactant_1" - "🎭 reactant_2" retry: diff --git a/src/Models/NonhydrostaticModels/update_hydrostatic_pressure.jl b/src/Models/NonhydrostaticModels/update_hydrostatic_pressure.jl index a5733295a2..744425fd28 100644 --- a/src/Models/NonhydrostaticModels/update_hydrostatic_pressure.jl +++ b/src/Models/NonhydrostaticModels/update_hydrostatic_pressure.jl @@ -12,10 +12,12 @@ the `buoyancy_perturbationᢜᢜᢜ` downwards: @kernel function _update_hydrostatic_pressure!(pHYβ€², grid, buoyancy, C) i, j = @index(Global, NTuple) - @inbounds pHYβ€²[i, j, grid.Nz] = - z_dot_g_bᢜᢜᢠ(i, j, grid.Nz+1, grid, buoyancy, C) * Ξ”zᢜᢜᢠ(i, j, grid.Nz+1, grid) + pᡏ = - z_dot_g_bᢜᢜᢠ(i, j, grid.Nz+1, grid, buoyancy, C) * Ξ”zᢜᢜᢠ(i, j, grid.Nz+1, grid) + @inbounds pHYβ€²[i, j, grid.Nz] = pᡏ for k in grid.Nz-1 : -1 : 1 - @inbounds pHYβ€²[i, j, k] = pHYβ€²[i, j, k+1] - z_dot_g_bᢜᢜᢠ(i, j, k+1, grid, buoyancy, C) * Ξ”zᢜᢜᢠ(i, j, k+1, grid) + pᡏ -= z_dot_g_bᢜᢜᢠ(i, j, k+1, grid, buoyancy, C) * Ξ”zᢜᢜᢠ(i, j, k+1, grid) + @inbounds pHYβ€²[i, j, k] = pᡏ end end From 052c60f6448ad4156d1467254d8be1cd2112b63b Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Mon, 3 Nov 2025 18:07:23 +0100 Subject: [PATCH 12/26] reinstate all tests --- .buildkite/pipeline.yml | 4 ++-- Project.toml | 6 +++--- test/test_init.jl | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 81adeba894..9af88355cc 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -79,10 +79,11 @@ steps: - "CPU" - "GPU" group: + - "πŸ¦– poisson_solvers_2" + - "🎭 reactant_2" - "πŸ‡ unit" - "πŸ‘» abstract_operations" - "πŸ•Š poisson_solvers_1" - - "πŸ¦– poisson_solvers_2" - "🦀 general_solvers" - "🎣 turbulence_closures" - "πŸ¦€ time_stepping_1" @@ -101,7 +102,6 @@ steps: - "πŸ‘Ί enzyme" - "🍱 xesmf" - "πŸ‘Ή reactant_1" - - "🎭 reactant_2" retry: automatic: diff --git a/Project.toml b/Project.toml index f9b733799a..796204aae7 100755 --- a/Project.toml +++ b/Project.toml @@ -110,14 +110,14 @@ AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" CUDA_Runtime_jll = "76a88914-d11a-5bdc-97e0-2f5a05c973a2" DataDeps = "124859b0-ceae-595e-8997-d05f6a7a8dfe" -# Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" +Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" MPIPreferences = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" Metal = "dde4c033-4e86-420c-a63e-0dd931031962" -# Reactant = "3c362404-f566-11ee-1572-e11a4b42c853" +Reactant = "3c362404-f566-11ee-1572-e11a4b42c853" SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" TimesDates = "bdfc003b-8df8-5c39-adcd-3a9087f5df4a" oneAPI = "8f75cd03-7ff8-4ecb-9b8f-daf728133b1b" [targets] -test = ["AMDGPU", "CUDA", "oneAPI", "DataDeps", "SafeTestsets", "Test", "Metal", "XESMF", "CUDA_Runtime_jll", "MPIPreferences", "TimesDates", "NCDatasets"] +test = ["AMDGPU", "CUDA", "oneAPI", "DataDeps", "SafeTestsets", "Test", "Enzyme", "Reactant", "Metal", "XESMF", "CUDA_Runtime_jll", "MPIPreferences", "TimesDates", "NCDatasets"] \ No newline at end of file diff --git a/test/test_init.jl b/test/test_init.jl index de6923e755..d13eeb249a 100644 --- a/test/test_init.jl +++ b/test/test_init.jl @@ -1,4 +1,4 @@ -# using Enzyme +using Enzyme using CUDA using Metal using AMDGPU From 70e3b0a46394fcbfc246661f03dc3d47d4d6ac7a Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Mon, 3 Nov 2025 18:07:45 +0100 Subject: [PATCH 13/26] white line --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 796204aae7..711a90c7c8 100755 --- a/Project.toml +++ b/Project.toml @@ -120,4 +120,4 @@ TimesDates = "bdfc003b-8df8-5c39-adcd-3a9087f5df4a" oneAPI = "8f75cd03-7ff8-4ecb-9b8f-daf728133b1b" [targets] -test = ["AMDGPU", "CUDA", "oneAPI", "DataDeps", "SafeTestsets", "Test", "Enzyme", "Reactant", "Metal", "XESMF", "CUDA_Runtime_jll", "MPIPreferences", "TimesDates", "NCDatasets"] \ No newline at end of file +test = ["AMDGPU", "CUDA", "oneAPI", "DataDeps", "SafeTestsets", "Test", "Enzyme", "Reactant", "Metal", "XESMF", "CUDA_Runtime_jll", "MPIPreferences", "TimesDates", "NCDatasets"] From ec35ad90452166dde010ea44cd014d1730bcee50 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Mon, 3 Nov 2025 18:26:49 +0100 Subject: [PATCH 14/26] reinstate distributed examples --- docs/make.jl | 50 +++++++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/docs/make.jl b/docs/make.jl index 044d32f202..77fdf8bc91 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -1,7 +1,7 @@ -# using Distributed -# Distributed.addprocs(2) +using Distributed +Distributed.addprocs(2) -# @everywhere begin +@everywhere begin using Documenter using DocumenterCitations using Literate @@ -49,12 +49,11 @@ "one_dimensional_diffusion.jl", "internal_wave.jl", ] -# end +end -# @info string("Executing the examples using ", Distributed.nprocs(), " processes") +@info string("Executing the examples using ", Distributed.nprocs(), " processes") -# Distributed.pmap(1:length(example_scripts)) do n -for n in 1:length(example_scripts) +Distributed.pmap(1:length(example_scripts)) do n example = example_scripts[n] example_filepath = joinpath(EXAMPLES_DIR, example) withenv("JULIA_DEBUG" => "Literate") do @@ -66,7 +65,7 @@ for n in 1:length(example_scripts) end end -# Distributed.rmprocs() +Distributed.rmprocs() ##### ##### Organize page hierarchies @@ -87,18 +86,23 @@ example_pages = [ "Tilted bottom boundary layer" => "literated/tilted_bottom_boundary_layer.md" ] -model_setup_pages = [ - "Overview" => "model_setup/overview.md", - "Coriolis (rotation)" => "model_setup/coriolis.md", - "Buoyancy models and equation of state" => "model_setup/buoyancy_and_equation_of_state.md", - "Boundary conditions" => "model_setup/boundary_conditions.md", - "Forcing functions" => "model_setup/forcing_functions.md", - "Background fields" => "model_setup/background_fields.md", - "Turbulent diffusivity closures and LES models" => "model_setup/turbulent_diffusivity_closures_and_les_models.md", - "Lagrangian particles" => "model_setup/lagrangian_particles.md", - "Callbacks" => "model_setup/callbacks.md", - "Output writers" => "model_setup/output_writers.md", - "Checkpointing" => "model_setup/checkpointing.md", +model_pages = [ + "Overview" => "models/models_overview.md", + "Coriolis forces" => "models/coriolis.md", + "Buoyancy and equations of state" => "models/buoyancy_and_equation_of_state.md", + "Turbulence closures" => "models/turbulence_closures.md", + "Boundary conditions" => "models/boundary_conditions.md", + "Forcings" => "models/forcing_functions.md", + "Lagrangian particles" => "models/lagrangian_particles.md", + "Background fields" => "models/background_fields.md", +] + +simulation_pages = [ + "Overview" => "simulations/simulations_overview.md", + # "Callbacks" => "simulations/callbacks.md", + "Schedules" => "simulations/schedules.md", + "Output writers" => "simulations/output_writers.md", + "Checkpointing" => "simulations/checkpointing.md", ] physics_pages = [ @@ -148,12 +152,12 @@ pages = [ "Fields" => "fields.md", "Operations" => "operations.md", # TODO: - # - Develop the following three tutorials on reductions, simulations, and post-processing + # - Develop the following tutorials on reductions and post-processing # - Refactor the model setup pages and make them more tutorial-like. # "Averages, integrals, and cumulative integrals" => "reductions_and_accumulations.md", - # "Simulations" => simulations.md, # "FieldTimeSeries and post-processing" => field_time_series.md, - "Models" => model_setup_pages, + "Models" => model_pages, + "Simulations" => simulation_pages, "Physics" => physics_pages, "Numerical implementation" => numerical_pages, "Simulation tips" => "simulation_tips.md", From 82caad073e70aa4cf9955a843ac953901692e898 Mon Sep 17 00:00:00 2001 From: "Navid C. Constantinou" Date: Tue, 4 Nov 2025 08:00:42 +1100 Subject: [PATCH 15/26] Update KernelAbstractions version to 0.9.39 --- Project.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Project.toml b/Project.toml index 711a90c7c8..32289204c5 100755 --- a/Project.toml +++ b/Project.toml @@ -77,7 +77,7 @@ GPUArraysCore = "0.2" Glob = "1.3" InteractiveUtils = "1.9" JLD2 = "0.4, 0.5, 0.6" -KernelAbstractions = "0.9.21" +KernelAbstractions = "0.9.39" Krylov = "0.10.0" KrylovPreconditioners = "0.3.2" LinearAlgebra = "1.9" From b058bad4fd1393ea6cb302a26ae43f42bebcfc8d Mon Sep 17 00:00:00 2001 From: "Navid C. Constantinou" Date: Tue, 4 Nov 2025 09:00:25 +1100 Subject: [PATCH 16/26] Disable doctest temporarily --- docs/make.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/make.jl b/docs/make.jl index 77fdf8bc91..b48040eb62 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -195,7 +195,7 @@ makedocs(; sitename = "Oceananigans.jl", plugins = [bib], warnonly = [:cross_references], draft = false, # set to true to speed things up - doctest = true, # set to false to speed things up + doctest = false, # set to false to speed things up doctestfilters = [ r"β”Œ Warning:.*", # remove standard warning lines r"β”” @ .*", # remove the source location of warnings From 00d1a6699ddf0ae3326f40425ff65dd6a1ec9325 Mon Sep 17 00:00:00 2001 From: "Navid C. Constantinou" Date: Tue, 4 Nov 2025 09:04:58 +1100 Subject: [PATCH 17/26] Update pipeline.yml --- .buildkite/pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 9af88355cc..45969f15fe 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -1,5 +1,5 @@ env: - JULIA_VERSION: "1.12.0" + JULIA_VERSION: "1.12.1" BUILDKITE_HOME: "/var/lib/buildkite-agent" JULIA_DEPOT_PATH: "$BUILDKITE_HOME/.julia-oceananigans" JULIA_PKG_SERVER_REGISTRY_PREFERENCE: eager From ef4fed297a882db1bcdf285853416bf26071ce9d Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Tue, 4 Nov 2025 11:26:17 +0100 Subject: [PATCH 18/26] separate out reactant and enzyme tests --- .buildkite/pipeline-enzyme.yml | 95 ++++++++++++++++++++++++++++++++++ .buildkite/pipeline.yml | 6 --- test/test_init.jl | 1 - 3 files changed, 95 insertions(+), 7 deletions(-) create mode 100644 .buildkite/pipeline-enzyme.yml diff --git a/.buildkite/pipeline-enzyme.yml b/.buildkite/pipeline-enzyme.yml new file mode 100644 index 0000000000..331b024a8c --- /dev/null +++ b/.buildkite/pipeline-enzyme.yml @@ -0,0 +1,95 @@ +env: + JULIA_VERSION: "1.11.7" + BUILDKITE_HOME: "/var/lib/buildkite-agent" + JULIA_DEPOT_PATH: "$BUILDKITE_HOME/.julia-oceananigans" + JULIA_PKG_SERVER_REGISTRY_PREFERENCE: eager + XLA_REACTANT_GPU_PREALLOCATE: false + OCEANANIGANS_DIR: "$HOME/Oceananigans.jl-$BUILDKITE_BUILD_NUMBER" + +agents: + queue: "Oceananigans" +with: + coverage: false + +steps: + - label: "πŸ•οΈ initialize environment" + key: "init" + agents: + queue: "Oceananigans-nautilus" + env: + TEST_GROUP: "init" + command: | + juliaup add $JULIA_VERSION + + mkdir -p "$OCEANANIGANS_DIR" + rsync -a . "$OCEANANIGANS_DIR/" + cd "$OCEANANIGANS_DIR" + + julia +$JULIA_VERSION -O0 --color=yes --project -e 'using Pkg; Pkg.test()' + retry: + automatic: + - exit_status: 1 + limit: 1 + + - label: "{{ matrix.architecture }} - {{ matrix.group }} tests" + key: "tests" + depends_on: "init" + agents: + queue: "Oceananigans-nautilus" + command: | + # Add matrix-specific environment variables + if [[ "{{ matrix.architecture }}" == "CPU" ]]; then + export CUDA_VISIBLE_DEVICES="-1" + export TEST_ARCHITECTURE="CPU" + else + export CUDA_VISIBLE_DEVICES="0" + export TEST_ARCHITECTURE="GPU" + fi + + # Force IFRT runtime for Reactant (this can be moved to Project.toml on 1.11) + touch LocalPreferences.toml + echo "[Reactant]" >> LocalPreferences.toml + echo "xla_runtime = \"IFRT\"" >> LocalPreferences.toml + cat LocalPreferences.toml + + # Strip emoji for environment variable + group="{{ matrix.group }}" + export TEST_GROUP="\${group#* }" + echo $TEST_GROUP + + # Run tests + cd "$OCEANANIGANS_DIR" + julia +$JULIA_VERSION -O0 --color=yes --project -e 'using Pkg; Pkg.test()' + + matrix: + setup: + architecture: + - "CPU" + - "GPU" + group: + - "🎭 reactant_2" + - "πŸ‘Ί enzyme" + - "πŸ‘Ή reactant_1" + + retry: + automatic: + - exit_status: 1 + limit: 1 + + ##### + ##### Blocking wait on tests and documentation + ##### + + - wait: ~ + continue_on_failure: true + + ##### + ##### Clean up + ##### + + - label: "🧹 clean up environment" + agents: + queue: "Oceananigans-nautilus" + commands: + - "test -d $OCEANANIGANS_DIR && du -hs $OCEANANIGANS_DIR || true" + - "test -d $OCEANANIGANS_DIR && rm -rf $OCEANANIGANS_DIR || true" diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 45969f15fe..430e2ae0ef 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -58,12 +58,6 @@ steps: export TEST_ARCHITECTURE="GPU" fi - # Force IFRT runtime for Reactant (this can be moved to Project.toml on 1.11) - touch LocalPreferences.toml - echo "[Reactant]" >> LocalPreferences.toml - echo "xla_runtime = \"IFRT\"" >> LocalPreferences.toml - cat LocalPreferences.toml - # Strip emoji for environment variable group="{{ matrix.group }}" export TEST_GROUP="\${group#* }" diff --git a/test/test_init.jl b/test/test_init.jl index d13eeb249a..48a656d980 100644 --- a/test/test_init.jl +++ b/test/test_init.jl @@ -1,4 +1,3 @@ -using Enzyme using CUDA using Metal using AMDGPU From 2aeabaa26720745f9deab41a54e54160d04f2153 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Tue, 4 Nov 2025 11:29:39 +0100 Subject: [PATCH 19/26] try like this --- .buildkite/pipeline-enzyme.yml | 95 ---------------------------------- .buildkite/pipeline.yml | 63 ++++++++++++++++++++-- 2 files changed, 59 insertions(+), 99 deletions(-) delete mode 100644 .buildkite/pipeline-enzyme.yml diff --git a/.buildkite/pipeline-enzyme.yml b/.buildkite/pipeline-enzyme.yml deleted file mode 100644 index 331b024a8c..0000000000 --- a/.buildkite/pipeline-enzyme.yml +++ /dev/null @@ -1,95 +0,0 @@ -env: - JULIA_VERSION: "1.11.7" - BUILDKITE_HOME: "/var/lib/buildkite-agent" - JULIA_DEPOT_PATH: "$BUILDKITE_HOME/.julia-oceananigans" - JULIA_PKG_SERVER_REGISTRY_PREFERENCE: eager - XLA_REACTANT_GPU_PREALLOCATE: false - OCEANANIGANS_DIR: "$HOME/Oceananigans.jl-$BUILDKITE_BUILD_NUMBER" - -agents: - queue: "Oceananigans" -with: - coverage: false - -steps: - - label: "πŸ•οΈ initialize environment" - key: "init" - agents: - queue: "Oceananigans-nautilus" - env: - TEST_GROUP: "init" - command: | - juliaup add $JULIA_VERSION - - mkdir -p "$OCEANANIGANS_DIR" - rsync -a . "$OCEANANIGANS_DIR/" - cd "$OCEANANIGANS_DIR" - - julia +$JULIA_VERSION -O0 --color=yes --project -e 'using Pkg; Pkg.test()' - retry: - automatic: - - exit_status: 1 - limit: 1 - - - label: "{{ matrix.architecture }} - {{ matrix.group }} tests" - key: "tests" - depends_on: "init" - agents: - queue: "Oceananigans-nautilus" - command: | - # Add matrix-specific environment variables - if [[ "{{ matrix.architecture }}" == "CPU" ]]; then - export CUDA_VISIBLE_DEVICES="-1" - export TEST_ARCHITECTURE="CPU" - else - export CUDA_VISIBLE_DEVICES="0" - export TEST_ARCHITECTURE="GPU" - fi - - # Force IFRT runtime for Reactant (this can be moved to Project.toml on 1.11) - touch LocalPreferences.toml - echo "[Reactant]" >> LocalPreferences.toml - echo "xla_runtime = \"IFRT\"" >> LocalPreferences.toml - cat LocalPreferences.toml - - # Strip emoji for environment variable - group="{{ matrix.group }}" - export TEST_GROUP="\${group#* }" - echo $TEST_GROUP - - # Run tests - cd "$OCEANANIGANS_DIR" - julia +$JULIA_VERSION -O0 --color=yes --project -e 'using Pkg; Pkg.test()' - - matrix: - setup: - architecture: - - "CPU" - - "GPU" - group: - - "🎭 reactant_2" - - "πŸ‘Ί enzyme" - - "πŸ‘Ή reactant_1" - - retry: - automatic: - - exit_status: 1 - limit: 1 - - ##### - ##### Blocking wait on tests and documentation - ##### - - - wait: ~ - continue_on_failure: true - - ##### - ##### Clean up - ##### - - - label: "🧹 clean up environment" - agents: - queue: "Oceananigans-nautilus" - commands: - - "test -d $OCEANANIGANS_DIR && du -hs $OCEANANIGANS_DIR || true" - - "test -d $OCEANANIGANS_DIR && rm -rf $OCEANANIGANS_DIR || true" diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 430e2ae0ef..b98a6ede94 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -1,5 +1,6 @@ env: JULIA_VERSION: "1.12.1" + JULIA_VERSION_ENZYME: "1.11.7" BUILDKITE_HOME: "/var/lib/buildkite-agent" JULIA_DEPOT_PATH: "$BUILDKITE_HOME/.julia-oceananigans" JULIA_PKG_SERVER_REGISTRY_PREFERENCE: eager @@ -12,7 +13,7 @@ with: coverage: false steps: - - label: "πŸ•οΈ initialize environment" + - label: "πŸ•οΈ initialize general environment" key: "init" agents: queue: "Oceananigans-nautilus" @@ -31,6 +32,25 @@ steps: - exit_status: 1 limit: 1 + - label: "πŸ•οΈ initialize enzyme environment" + key: "init_enzyme" + agents: + queue: "Oceananigans-nautilus" + env: + TEST_GROUP: "init" + command: | + juliaup add $JULIA_VERSION + + mkdir -p "$OCEANANIGANS_DIR" + rsync -a . "$OCEANANIGANS_DIR/" + cd "$OCEANANIGANS_DIR" + + julia +$JULIA_VERSION_ENZYME -O0 --color=yes --project -e 'using Pkg; Pkg.test()' + retry: + automatic: + - exit_status: 1 + limit: 1 + - label: "πŸ¦‰ documentation" depends_on: "init" agents: @@ -74,7 +94,6 @@ steps: - "GPU" group: - "πŸ¦– poisson_solvers_2" - - "🎭 reactant_2" - "πŸ‡ unit" - "πŸ‘» abstract_operations" - "πŸ•Š poisson_solvers_1" @@ -93,15 +112,51 @@ steps: - "πŸ‚ lagrangian_particles" - "πŸ§… multi_region" - "🦧 scripts" - - "πŸ‘Ί enzyme" - "🍱 xesmf" - - "πŸ‘Ή reactant_1" retry: automatic: - exit_status: 1 limit: 1 + - label: "{{ matrix.architecture }} - {{ matrix.group }} tests" + key: "tests" + depends_on: "init_enzyme" + agents: + queue: "Oceananigans-nautilus" + command: | + # Add matrix-specific environment variables + if [[ "{{ matrix.architecture }}" == "CPU" ]]; then + export CUDA_VISIBLE_DEVICES="-1" + export TEST_ARCHITECTURE="CPU" + else + export CUDA_VISIBLE_DEVICES="0" + export TEST_ARCHITECTURE="GPU" + fi + + # Strip emoji for environment variable + group="{{ matrix.group }}" + export TEST_GROUP="\${group#* }" + echo $TEST_GROUP + + # Run tests + cd "$OCEANANIGANS_DIR" + julia +$JULIA_VERSIO_ENZYME -O0 --color=yes --project -e 'using Pkg; Pkg.test()' + + matrix: + setup: + architecture: + - "CPU" + - "GPU" + group: + - "🎭 reactant_2" + - "πŸ‘Ί enzyme" + - "πŸ‘Ή reactant_1" + + retry: + automatic: + - exit_status: 1 + limit: 1 ##### ##### Blocking wait on tests and documentation ##### From c5843342a339debca1ac89726ec7da1af448e25c Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Tue, 4 Nov 2025 11:30:48 +0100 Subject: [PATCH 20/26] don't need to make the new directory --- .buildkite/pipeline.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index b98a6ede94..c4d67430f0 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -40,9 +40,6 @@ steps: TEST_GROUP: "init" command: | juliaup add $JULIA_VERSION - - mkdir -p "$OCEANANIGANS_DIR" - rsync -a . "$OCEANANIGANS_DIR/" cd "$OCEANANIGANS_DIR" julia +$JULIA_VERSION_ENZYME -O0 --color=yes --project -e 'using Pkg; Pkg.test()' From 2e21f559871161ba2ed15c969673d6c0961afba4 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Tue, 4 Nov 2025 11:30:56 +0100 Subject: [PATCH 21/26] fixing --- .buildkite/pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index c4d67430f0..4901789734 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -39,7 +39,7 @@ steps: env: TEST_GROUP: "init" command: | - juliaup add $JULIA_VERSION + juliaup add $JULIA_VERSION_ENZYME cd "$OCEANANIGANS_DIR" julia +$JULIA_VERSION_ENZYME -O0 --color=yes --project -e 'using Pkg; Pkg.test()' From 5b0f7bc7abd8deb8c2d290d554b3d9a8fcf68500 Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Tue, 4 Nov 2025 11:31:26 +0100 Subject: [PATCH 22/26] use a new key --- .buildkite/pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 4901789734..544f7dbbc9 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -117,7 +117,7 @@ steps: limit: 1 - label: "{{ matrix.architecture }} - {{ matrix.group }} tests" - key: "tests" + key: "tests_enzyme_reactant" depends_on: "init_enzyme" agents: queue: "Oceananigans-nautilus" From 498db3b4d8de15b493ca4bc192ae5feac04d126b Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Tue, 4 Nov 2025 11:32:21 +0100 Subject: [PATCH 23/26] need to create the new folder --- .buildkite/pipeline.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 544f7dbbc9..a41b9f74a4 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -34,6 +34,7 @@ steps: - label: "πŸ•οΈ initialize enzyme environment" key: "init_enzyme" + depends_on: "init" agents: queue: "Oceananigans-nautilus" env: From 88580e159c2b1c99e4f1b1693d28dcda239eba3b Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Tue, 4 Nov 2025 11:38:30 +0100 Subject: [PATCH 24/26] mv manifest to new version --- .buildkite/pipeline.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index a41b9f74a4..64566084df 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -25,6 +25,7 @@ steps: mkdir -p "$OCEANANIGANS_DIR" rsync -a . "$OCEANANIGANS_DIR/" cd "$OCEANANIGANS_DIR" + mv Manifest.toml Manifest-v12.0.toml julia +$JULIA_VERSION -O0 --color=yes --project -e 'using Pkg; Pkg.test()' retry: From e776c216339cabdb7ce159affbb8d3d67e8100dc Mon Sep 17 00:00:00 2001 From: Simone Silvestri Date: Tue, 4 Nov 2025 11:42:53 +0100 Subject: [PATCH 25/26] Update .buildkite/pipeline.yml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: MosΓ¨ Giordano <765740+giordano@users.noreply.github.com> --- .buildkite/pipeline.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 64566084df..a6d2acfab4 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -25,7 +25,7 @@ steps: mkdir -p "$OCEANANIGANS_DIR" rsync -a . "$OCEANANIGANS_DIR/" cd "$OCEANANIGANS_DIR" - mv Manifest.toml Manifest-v12.0.toml + mv Manifest.toml Manifest-v1.12.toml julia +$JULIA_VERSION -O0 --color=yes --project -e 'using Pkg; Pkg.test()' retry: From 94bc181dd83d20f396c6bb30704baf1ab5cf5e0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mos=C3=A8=20Giordano?= <765740+giordano@users.noreply.github.com> Date: Tue, 4 Nov 2025 23:36:53 +0000 Subject: [PATCH 26/26] [CI] Automatically create version-specific manifests --- .buildkite/pipeline.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index a6d2acfab4..b31dc7076c 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -25,9 +25,11 @@ steps: mkdir -p "$OCEANANIGANS_DIR" rsync -a . "$OCEANANIGANS_DIR/" cd "$OCEANANIGANS_DIR" - mv Manifest.toml Manifest-v1.12.toml julia +$JULIA_VERSION -O0 --color=yes --project -e 'using Pkg; Pkg.test()' + # After we have instantiated the general environment, move manifest to the + # version-specific filename, not to clash with the manifest for Enzyme. + mv -v Manifest.toml Manifest-v$(echo "${JULIA_VERSION}" | cut -d. -f1-2).toml retry: automatic: - exit_status: 1 @@ -45,6 +47,9 @@ steps: cd "$OCEANANIGANS_DIR" julia +$JULIA_VERSION_ENZYME -O0 --color=yes --project -e 'using Pkg; Pkg.test()' + # After we have instantiated the Enzyme environment, move manifest to the + # version-specific filename, not to clash with the general manifest. + mv -v Manifest.toml Manifest-v$(echo "${JULIA_VERSION_ENZYME}" | cut -d. -f1-2).toml retry: automatic: - exit_status: 1 @@ -140,7 +145,7 @@ steps: # Run tests cd "$OCEANANIGANS_DIR" - julia +$JULIA_VERSIO_ENZYME -O0 --color=yes --project -e 'using Pkg; Pkg.test()' + julia +$JULIA_VERSION_ENZYME -O0 --color=yes --project -e 'using Pkg; Pkg.test()' matrix: setup: