diff --git a/.github/workflows/Documenter.yml b/.github/workflows/Documenter.yml index 9a4c2115..e09ad953 100644 --- a/.github/workflows/Documenter.yml +++ b/.github/workflows/Documenter.yml @@ -18,7 +18,7 @@ jobs: - uses: actions/checkout@v3 - uses: julia-actions/setup-julia@latest with: - version: 1.8 + version: '1.10' show-versioninfo: true - name: Install dependencies run: | diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b8ca3d6e..2de719ee 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,8 @@ name: CI + +env: + DATADEPS_ALWAYS_ACCEPT: true + on: push: branches: [main] @@ -12,27 +16,22 @@ jobs: fail-fast: false matrix: version: - - '1.8' + - '1.10' # We don't want to test on Julia versions more recent than 1.6 until we # figure out a robust solution for serializing / deserializing Oceananigans Grids. # - '1' # automatically expands to the latest stable 1.x release of Julia # - nightly os: - ubuntu-latest + - windows-latest arch: - x64 - x86 include: # test macOS and Windows with latest Julia only - os: macOS-latest - arch: x64 - version: 1.8 - - os: windows-latest - arch: x64 - version: 1.8 - - os: windows-latest - arch: x86 - version: 1.8 + arch: arm64 + version: '1.10' steps: - uses: actions/checkout@v3 - uses: julia-actions/setup-julia@latest diff --git a/Manifest.toml b/Manifest.toml index 225c8fa6..2e1965aa 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -1,41 +1,70 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.8.5" +julia_version = "1.10.0" manifest_format = "2.0" -project_hash = "b5ee3b7490b90cb8c188f7bc3e3bdb7cc3543ebb" +project_hash = "baeb066f541e6e27bf84370578e1c12f0a285b72" [[deps.AMD]] -deps = ["Libdl", "LinearAlgebra", "SparseArrays", "Test"] -git-tree-sha1 = "00163dc02b882ca5ec032400b919e5f5011dbd31" +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse_jll"] +git-tree-sha1 = "45a1272e3f809d36431e57ab22703c6896b8908f" uuid = "14f7f29c-3bd6-536c-9a0b-7339e30b5a3e" -version = "0.5.0" +version = "0.5.3" [[deps.AbstractFFTs]] -deps = ["ChainRulesCore", "LinearAlgebra"] -git-tree-sha1 = "16b6dbc4cf7caee4e1e75c49485ec67b667098a0" +deps = ["LinearAlgebra"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" -version = "1.3.1" +version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" [[deps.AbstractTrees]] -git-tree-sha1 = "faa260e4cb5aba097a73fab382dd4b5819d8ec8c" +git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" -version = "0.4.4" +version = "0.4.5" [[deps.Adapt]] deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "cc37d689f599e8df4f464b2fa3870ff7db7492ef" +git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "3.6.1" +version = "4.0.4" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" [[deps.ArgTools]] uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" version = "1.1.1" [[deps.ArrayInterface]] -deps = ["Adapt", "LinearAlgebra", "Requires", "SnoopPrecompile", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "38911c7737e123b28182d89027f4216cfc8a9da7" +deps = ["Adapt", "LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "44691067188f6bd1b2289552a23e4b7572f4528d" uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.4.3" +version = "7.9.0" + + [deps.ArrayInterface.extensions] + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceChainRulesExt = "ChainRules" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + ArrayInterfaceReverseDiffExt = "ReverseDiff" + ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" + ArrayInterfaceTrackerExt = "Tracker" + + [deps.ArrayInterface.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" [[deps.Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" @@ -57,91 +86,112 @@ uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" [[deps.BenchmarkTools]] deps = ["JSON", "Logging", "Printf", "Profile", "Statistics", "UUIDs"] -git-tree-sha1 = "d9a9701b899b30332bbcb3e1679c41cce81fb0e8" +git-tree-sha1 = "f1dff6729bc61f4d49e140da1af55dcd1ac97b2f" uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" -version = "1.3.2" +version = "1.5.0" [[deps.BitFlags]] -git-tree-sha1 = "43b1a4a8f797c1cddadf60499a8a077d4af2cd2d" +git-tree-sha1 = "2dc09997850d68179b69dafb58ae806167a32b1b" uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" -version = "0.1.7" +version = "0.1.8" [[deps.BlockDiagonals]] deps = ["ChainRulesCore", "FillArrays", "FiniteDifferences", "LinearAlgebra"] -git-tree-sha1 = "ffd635c19b56f50d1d4278d876219644299b5711" +git-tree-sha1 = "920d3775e35c519a2aced9e7bbe9ac61218eeead" uuid = "0a1fb500-61f7-11e9-3c65-f5ef3456f9f0" -version = "0.1.41" +version = "0.1.42" + +[[deps.Blosc_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Lz4_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "19b98ee7e3db3b4eff74c5c9c72bf32144e24f10" +uuid = "0b7ba130-8d10-5ba8-a3d6-c5182647fed9" +version = "1.21.5+0" [[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" +git-tree-sha1 = "9e2a6b69137e6969bab0152632dcb3bc108c8bdd" uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" -version = "1.0.8+0" +version = "1.0.8+1" [[deps.CEnum]] -git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" -version = "0.4.2" +version = "0.5.0" [[deps.CFTime]] deps = ["Dates", "Printf"] -git-tree-sha1 = "ed2e76c1c3c43fd9d0cb9248674620b29d71f2d1" +git-tree-sha1 = "5afb5c5ba2688ca43a9ad2e5a91cbb93921ccfa1" uuid = "179af706-886a-5703-950a-314cd64e0468" -version = "0.1.2" +version = "0.1.3" [[deps.CUDA]] -deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CUDA_Driver_jll", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "CompilerSupportLibraries_jll", "ExprTools", "GPUArrays", "GPUCompiler", "KernelAbstractions", "LLVM", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "Preferences", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "Requires", "SparseArrays", "SpecialFunctions", "UnsafeAtomicsLLVM"] -git-tree-sha1 = "8547829ee0da896ce48a24b8d2f4bf929cf3e45e" +deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CUDA_Driver_jll", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "Crayons", "DataFrames", "ExprTools", "GPUArrays", "GPUCompiler", "KernelAbstractions", "LLVM", "LLVMLoopInfo", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "NVTX", "Preferences", "PrettyTables", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "Requires", "SparseArrays", "StaticArrays", "Statistics"] +git-tree-sha1 = "baa8ea7a1ea63316fa3feb454635215773c9c845" uuid = "052768ef-5323-5732-b1bb-66c8b64840ba" -version = "4.1.4" +version = "5.2.0" +weakdeps = ["ChainRulesCore", "SpecialFunctions"] + + [deps.CUDA.extensions] + ChainRulesCoreExt = "ChainRulesCore" + SpecialFunctionsExt = "SpecialFunctions" [[deps.CUDA_Driver_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] -git-tree-sha1 = "498f45593f6ddc0adff64a9310bb6710e851781b" +git-tree-sha1 = "d01bfc999768f0a31ed36f5d22a76161fc63079c" uuid = "4ee394cb-3365-5eb0-8335-949819d2adfc" -version = "0.5.0+1" +version = "0.7.0+1" [[deps.CUDA_Runtime_Discovery]] deps = ["Libdl"] -git-tree-sha1 = "bcc4a23cbbd99c8535a5318455dcf0f2546ec536" +git-tree-sha1 = "2cb12f6b2209f40a4b8967697689a47c50485490" uuid = "1af6417a-86b4-443c-805f-a4643ffb695f" -version = "0.2.2" +version = "0.2.3" [[deps.CUDA_Runtime_jll]] deps = ["Artifacts", "CUDA_Driver_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "81eed046f28a0cdd0dc1f61d00a49061b7cc9433" +git-tree-sha1 = "8e25c009d2bf16c2c31a70a6e9e8939f7325cc84" uuid = "76a88914-d11a-5bdc-97e0-2f5a05c973a2" -version = "0.5.0+2" +version = "0.11.1+0" [[deps.ChainRulesCore]] -deps = ["Compat", "LinearAlgebra", "SparseArrays"] -git-tree-sha1 = "c6d890a52d2c4d55d326439580c3b8d0875a77d9" +deps = ["Compat", "LinearAlgebra"] +git-tree-sha1 = "575cd02e080939a33b6df6c5853d14924c08e35b" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.15.7" +version = "1.23.0" +weakdeps = ["SparseArrays"] -[[deps.ChangesOfVariables]] -deps = ["ChainRulesCore", "LinearAlgebra", "Test"] -git-tree-sha1 = "485193efd2176b88e6622a39a246f8c5b600e74e" -uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" -version = "0.1.6" + [deps.ChainRulesCore.extensions] + ChainRulesCoreSparseArraysExt = "SparseArrays" [[deps.CodecBzip2]] deps = ["Bzip2_jll", "Libdl", "TranscodingStreams"] -git-tree-sha1 = "2e62a725210ce3c3c2e1a3080190e7ca491f18d7" +git-tree-sha1 = "9b1ca1aa6ce3f71b3d1840c538a8210a043625eb" uuid = "523fee87-0ab8-5b00-afb7-3ecf72e48cfd" -version = "0.7.2" +version = "0.8.2" [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] -git-tree-sha1 = "9c209fb7536406834aa938fb149964b985de6c83" +git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73" uuid = "944b1d66-785c-5afd-91f1-9de20f533193" -version = "0.7.1" +version = "0.7.4" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "eb7f0f8307f71fac7c606984ea5fb2817275d6e4" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.4" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "fc08e5930ee9a4e03f84bfb5211cb54e7769758a" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.10" [[deps.CommonDataModel]] -deps = ["CFTime", "DataStructures", "Dates", "Preferences", "Printf"] -git-tree-sha1 = "60ccfcd76179c96ca21d3b5a5ae04d7b6a7439e7" +deps = ["CFTime", "DataStructures", "Dates", "Preferences", "Printf", "Statistics"] +git-tree-sha1 = "d7d7b58e149f19c322840a50d1bc20e8c23addb4" uuid = "1fbeeb36-5f17-413c-809b-666fb144f157" -version = "0.2.2" +version = "0.3.5" [[deps.CommonSubexpressions]] deps = ["MacroTools", "Test"] @@ -150,27 +200,45 @@ uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" version = "0.3.0" [[deps.Compat]] -deps = ["Dates", "LinearAlgebra", "UUIDs"] -git-tree-sha1 = "7a60c856b9fa189eb34f5f8a6f6b5529b7942957" +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "c955881e3c981181362ae4088b35995446298b80" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.6.1" +version = "4.14.0" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" [[deps.CompilerSupportLibraries_jll]] deps = ["Artifacts", "Libdl"] uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "1.0.1+0" +version = "1.0.5+1" + +[[deps.ConcurrentUtilities]] +deps = ["Serialization", "Sockets"] +git-tree-sha1 = "6cbbd4d241d7e6579ab354737f4dd95ca43946e1" +uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" +version = "2.4.1" [[deps.ConstructionBase]] deps = ["LinearAlgebra"] -git-tree-sha1 = "89a9db8d28102b094992472d333674bd1a83ce2a" +git-tree-sha1 = "260fd2400ed2dab602a7c15cf10c1933c59930a2" uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" -version = "1.5.1" +version = "1.5.5" + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" + + [deps.ConstructionBase.weakdeps] + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" [[deps.Convex]] deps = ["AbstractTrees", "BenchmarkTools", "LDLFactorizations", "LinearAlgebra", "MathOptInterface", "OrderedCollections", "SparseArrays", "Test"] -git-tree-sha1 = "af4188609c0620ed4b0e4493ed416d3c8b2dadeb" +git-tree-sha1 = "e84e371b9206bdd678fe7a8cf809c7dec949e88f" uuid = "f65535da-76fb-5f13-bab9-19810c17039a" -version = "0.15.3" +version = "0.15.4" [[deps.Crayons]] git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" @@ -179,26 +247,32 @@ version = "4.1.1" [[deps.CubedSphere]] deps = ["Elliptic", "FFTW", "Printf", "ProgressBars", "SpecialFunctions", "TaylorSeries", "Test"] -git-tree-sha1 = "db9c12cb765cc048e158987388287c52baddf57d" +git-tree-sha1 = "10134667d7d3569b191a65801514271b8a93b292" uuid = "7445602f-e544-4518-8976-18f8e8ae6cdb" -version = "0.2.2" +version = "0.2.5" [[deps.DataAPI]] -git-tree-sha1 = "e8119c1a33d267e16108be441a287a6981ba1630" +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" -version = "1.14.0" +version = "1.16.0" [[deps.DataDeps]] -deps = ["HTTP", "Libdl", "Reexport", "SHA", "p7zip_jll"] -git-tree-sha1 = "bc0a264d3e7b3eeb0b6fc9f6481f970697f29805" +deps = ["HTTP", "Libdl", "Reexport", "SHA", "Scratch", "p7zip_jll"] +git-tree-sha1 = "8ae085b71c462c2cb1cfedcb10c3c877ec6cf03f" uuid = "124859b0-ceae-595e-8997-d05f6a7a8dfe" -version = "0.7.10" +version = "0.7.13" + +[[deps.DataFrames]] +deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "REPL", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "04c738083f29f86e62c8afc341f0967d8717bdb8" +uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +version = "1.6.1" [[deps.DataStructures]] deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "d1fff3a548102f48987a52a2e0d114fa97d730f0" +git-tree-sha1 = "0f4b5d62a88d8f59003e43c25a8a90de9eb76317" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.13" +version = "0.18.18" [[deps.DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -209,12 +283,6 @@ version = "1.0.0" deps = ["Printf"] uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" -[[deps.DensityInterface]] -deps = ["InverseFunctions", "Test"] -git-tree-sha1 = "80c3e8639e3353e5d2912fb3a1916b8455e2494b" -uuid = "b429d917-457f-4dbc-8f4c-0cc954292b1d" -version = "0.4.0" - [[deps.DiffResults]] deps = ["StaticArraysCore"] git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" @@ -223,25 +291,46 @@ version = "1.1.0" [[deps.DiffRules]] deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] -git-tree-sha1 = "a4ad7ef19d2cdc2eff57abbbe68032b1cd0bd8f8" +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" -version = "1.13.0" +version = "1.15.1" + +[[deps.DiskArrays]] +deps = ["LRUCache", "OffsetArrays"] +git-tree-sha1 = "ef25c513cad08d7ebbed158c91768ae32f308336" +uuid = "3c3547ce-8d99-4f5e-a174-61eb10b00ae3" +version = "0.3.23" [[deps.Distances]] -deps = ["LinearAlgebra", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "49eba9ad9f7ead780bfb7ee319f962c811c6d3b2" +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] +git-tree-sha1 = "66c4c81f259586e8f002eacebc177e1fb06363b0" uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" -version = "0.10.8" +version = "0.10.11" +weakdeps = ["ChainRulesCore", "SparseArrays"] + + [deps.Distances.extensions] + DistancesChainRulesCoreExt = "ChainRulesCore" + DistancesSparseArraysExt = "SparseArrays" [[deps.Distributed]] deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" [[deps.Distributions]] -deps = ["ChainRulesCore", "DensityInterface", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SparseArrays", "SpecialFunctions", "Statistics", "StatsBase", "StatsFuns", "Test"] -git-tree-sha1 = "13027f188d26206b9e7b863036f87d2f2e7d013a" +deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "7c302d7a5fec5214eb8a5a4c466dcf7a51fcf169" uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.25.87" +version = "0.25.107" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + DistributionsTestExt = "Test" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [[deps.DocStringExtensions]] deps = ["LibGit2"] @@ -256,9 +345,9 @@ version = "1.6.0" [[deps.ElasticArrays]] deps = ["Adapt"] -git-tree-sha1 = "e1c40d78de68e9a2be565f0202693a158ec9ad85" +git-tree-sha1 = "75e5697f521c9ab89816d3abeea806dfc5afb967" uuid = "fdbdab4c-e67f-52f5-8c3f-e7b388dad3d4" -version = "1.2.11" +version = "1.2.12" [[deps.ElasticPDMats]] deps = ["LinearAlgebra", "MacroTools", "PDMats"] @@ -277,16 +366,22 @@ git-tree-sha1 = "b2945201dc88e865f8766bd09344eeeb9358d7de" uuid = "aa8a2aa5-91d8-4396-bcef-d4f2ec43552d" version = "0.13.1" +[[deps.ExceptionUnwrapping]] +deps = ["Test"] +git-tree-sha1 = "dcb08a0d93ec0b1cdc4af184b26b591e9695423a" +uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" +version = "0.1.10" + [[deps.ExprTools]] -git-tree-sha1 = "c1d06d129da9f55715c6c212866f5b1bddc5fa00" +git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" -version = "0.1.9" +version = "0.1.10" [[deps.FFTW]] deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] -git-tree-sha1 = "f9818144ce7c8c41edf5c4c179c684d92aa4d9fe" +git-tree-sha1 = "4820348781ae578893311153d69049a93d05f39d" uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" -version = "1.6.0" +version = "1.8.0" [[deps.FFTW_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -302,58 +397,88 @@ version = "0.4.9" [[deps.FileIO]] deps = ["Pkg", "Requires", "UUIDs"] -git-tree-sha1 = "7be5f99f7d15578798f338f5433b6c432ea8037b" +git-tree-sha1 = "82d8afa92ecf4b52d78d869f038ebfb881267322" uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" -version = "1.16.0" +version = "1.16.3" [[deps.FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" [[deps.FillArrays]] -deps = ["LinearAlgebra", "Random", "SparseArrays", "Statistics"] -git-tree-sha1 = "7072f1e3e5a8be51d525d64f63d3ec1287ff2790" +deps = ["LinearAlgebra", "Random"] +git-tree-sha1 = "35f0c0f345bff2c6d636f95fdb136323b5a796ef" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "0.13.11" +version = "1.7.0" +weakdeps = ["SparseArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStatisticsExt = "Statistics" [[deps.FiniteDiff]] -deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays", "StaticArrays"] -git-tree-sha1 = "03fcb1c42ec905d15b305359603888ec3e65f886" +deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays"] +git-tree-sha1 = "bc0c5092d6caaea112d3c8e3b238d61563c58d5f" uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" -version = "2.19.0" +version = "2.23.0" + + [deps.FiniteDiff.extensions] + FiniteDiffBandedMatricesExt = "BandedMatrices" + FiniteDiffBlockBandedMatricesExt = "BlockBandedMatrices" + FiniteDiffStaticArraysExt = "StaticArrays" + + [deps.FiniteDiff.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" [[deps.FiniteDifferences]] deps = ["ChainRulesCore", "LinearAlgebra", "Printf", "Random", "Richardson", "SparseArrays", "StaticArrays"] -git-tree-sha1 = "3f605dd6db5640c5278f2551afc9427656439f42" +git-tree-sha1 = "d77e4697046989f44dce3ed66269aaf1611a3406" uuid = "26cc04aa-876d-5657-8c51-4c34ba976000" -version = "0.12.26" +version = "0.12.31" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.4" [[deps.ForwardDiff]] -deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions", "StaticArrays"] -git-tree-sha1 = "00e252f4d706b3d55a8863432e742bf5717b498d" +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" uuid = "f6369f11-7733-5829-9624-2563aa707210" -version = "0.10.35" +version = "0.10.36" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" [[deps.Future]] deps = ["Random"] uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" +[[deps.GMP_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "781609d7-10c4-51f6-84f2-b8444358ff6d" +version = "6.2.1+6" + [[deps.GPUArrays]] deps = ["Adapt", "GPUArraysCore", "LLVM", "LinearAlgebra", "Printf", "Random", "Reexport", "Serialization", "Statistics"] -git-tree-sha1 = "9ade6983c3dbbd492cf5729f865fe030d1541463" +git-tree-sha1 = "47e4686ec18a9620850bad110b79966132f14283" uuid = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" -version = "8.6.6" +version = "10.0.2" [[deps.GPUArraysCore]] deps = ["Adapt"] -git-tree-sha1 = "1cd7f0af1aa58abc02ea1d872953a97359cb87fa" +git-tree-sha1 = "ec632f177c0d990e64d955ccc1b8c04c485a0950" uuid = "46192b85-c4d5-4398-a991-12ede77f4527" -version = "0.1.4" +version = "0.1.6" [[deps.GPUCompiler]] deps = ["ExprTools", "InteractiveUtils", "LLVM", "Libdl", "Logging", "Scratch", "TimerOutputs", "UUIDs"] -git-tree-sha1 = "e9a9173cd77e16509cdf9c1663fda19b22a518b7" +git-tree-sha1 = "a846f297ce9d09ccba02ead0cae70690e072a119" uuid = "61eb1bfa-7361-4325-ad38-22787b887f55" -version = "0.19.3" +version = "0.25.0" [[deps.GaussianProcesses]] deps = ["Distances", "Distributions", "ElasticArrays", "ElasticPDMats", "FastGaussQuadrature", "ForwardDiff", "LinearAlgebra", "Optim", "PDMats", "Printf", "ProgressMeter", "Random", "RecipesBase", "ScikitLearnBase", "SpecialFunctions", "StaticArrays", "Statistics", "StatsFuns"] @@ -366,17 +491,29 @@ git-tree-sha1 = "97285bbd5230dd766e9ef6749b80fc617126d496" uuid = "c27321d9-0574-5035-807b-f59d2c89b15c" version = "1.3.1" +[[deps.GnuTLS_jll]] +deps = ["Artifacts", "GMP_jll", "JLLWrappers", "Libdl", "Nettle_jll", "P11Kit_jll", "Zlib_jll"] +git-tree-sha1 = "f3c0936dd685d57fa0b1eee7dbebf382b969ea63" +uuid = "0951126a-58fd-58f1-b5b3-b08c7c4a876d" +version = "3.8.3+0" + [[deps.HDF5_jll]] -deps = ["Artifacts", "JLLWrappers", "LibCURL_jll", "Libdl", "OpenSSL_jll", "Pkg", "Zlib_jll"] -git-tree-sha1 = "4cc2bb72df6ff40b055295fdef6d92955f9dede8" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "OpenSSL_jll", "TOML", "Zlib_jll", "libaec_jll"] +git-tree-sha1 = "e4591176488495bf44d7456bd73179d87d5e6eab" uuid = "0234f1f7-429e-5d53-9886-15a909be8d59" -version = "1.12.2+2" +version = "1.14.3+1" [[deps.HTTP]] -deps = ["Base64", "CodecZlib", "Dates", "IniFile", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] -git-tree-sha1 = "37e4657cd56b11abe3d10cd4a1ec5fbdb4180263" +deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] +git-tree-sha1 = "995f762e0182ebc50548c434c171a5bb6635f8e4" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" -version = "1.7.4" +version = "1.10.4" + +[[deps.Hwloc_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "ca0f6bf568b4bfc807e7537f081c81e35ceca114" +uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" +version = "2.10.0+0" [[deps.IfElse]] git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" @@ -389,16 +526,17 @@ git-tree-sha1 = "6c676e79f98abb6d33fa28122cad099f1e464afe" uuid = "40713840-3770-5561-ab4c-a76e7d0d7895" version = "0.2.1" -[[deps.IniFile]] -git-tree-sha1 = "f550e6e32074c939295eb5ea6de31849ac2c9625" -uuid = "83e8ac13-25f8-5344-8a64-a9f2b223428f" -version = "0.5.1" +[[deps.InlineStrings]] +deps = ["Parsers"] +git-tree-sha1 = "9cc2baf75c6d09f9da536ddf58eb2f29dedaf461" +uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" +version = "1.4.0" [[deps.IntelOpenMP_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "0cb9352ef2e01574eeebdb102948a58740dcaf83" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "5fdf2fe6724d8caabf43b557b84ce53f3b7e2f6b" uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" -version = "2023.1.0+0" +version = "2024.0.2+0" [[deps.InteractiveUtils]] deps = ["Markdown"] @@ -406,9 +544,18 @@ uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" [[deps.InverseFunctions]] deps = ["Test"] -git-tree-sha1 = "49510dfcb407e572524ba94aeae2fced1f3feb0f" +git-tree-sha1 = "896385798a8d49a255c398bd49162062e4a4c435" uuid = "3587e190-3f89-42d0-90ee-14403ec27112" -version = "0.1.8" +version = "0.1.13" +weakdeps = ["Dates"] + + [deps.InverseFunctions.extensions] + DatesExt = "Dates" + +[[deps.InvertedIndices]] +git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" +uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" +version = "1.3.0" [[deps.IrrationalConstants]] git-tree-sha1 = "7fd44fd4ff43fc60815f8e764c0f352b83c49151" @@ -417,9 +564,9 @@ version = "0.1.1" [[deps.IterativeSolvers]] deps = ["LinearAlgebra", "Printf", "Random", "RecipesBase", "SparseArrays"] -git-tree-sha1 = "1169632f425f79429f245113b775a0e3d121457c" +git-tree-sha1 = "59545b0a2b27208b0650df0a46b8e3019f85055b" uuid = "42fd0dbc-a981-5370-80f2-aaf504508153" -version = "0.9.2" +version = "0.9.4" [[deps.IteratorInterfaceExtensions]] git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" @@ -427,16 +574,16 @@ uuid = "82899510-4779-5014-852e-03e436cf321d" version = "1.0.0" [[deps.JLD2]] -deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "Printf", "Reexport", "Requires", "TranscodingStreams", "UUIDs"] -git-tree-sha1 = "42c17b18ced77ff0be65957a591d34f4ed57c631" +deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "PrecompileTools", "Printf", "Reexport", "Requires", "TranscodingStreams", "UUIDs"] +git-tree-sha1 = "5ea6acdd53a51d897672edb694e3cc2912f3f8a7" uuid = "033835bb-8acc-5ee8-8aae-3f567f8a3819" -version = "0.4.31" +version = "0.4.46" [[deps.JLLWrappers]] -deps = ["Preferences"] -git-tree-sha1 = "abc9885a7ca2052a736a600f7fa66209f96506e1" +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.4.1" +version = "1.5.0" [[deps.JSON]] deps = ["Dates", "Mmap", "Parsers", "Unicode"] @@ -445,34 +592,75 @@ uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" version = "0.21.4" [[deps.JSON3]] -deps = ["Dates", "Mmap", "Parsers", "SnoopPrecompile", "StructTypes", "UUIDs"] -git-tree-sha1 = "84b10656a41ef564c39d2d477d7236966d2b5683" +deps = ["Dates", "Mmap", "Parsers", "PrecompileTools", "StructTypes", "UUIDs"] +git-tree-sha1 = "eb3edce0ed4fa32f75a0a11217433c31d56bd48b" uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" -version = "1.12.0" +version = "1.14.0" + + [deps.JSON3.extensions] + JSON3ArrowExt = ["ArrowTypes"] + + [deps.JSON3.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" + +[[deps.JuliaNVTXCallbacks_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "af433a10f3942e882d3c671aacb203e006a5808f" +uuid = "9c1d0b0a-7046-5b2e-a33f-ea22f176ac7e" +version = "0.2.1+0" [[deps.KernelAbstractions]] -deps = ["Adapt", "Atomix", "InteractiveUtils", "LinearAlgebra", "MacroTools", "SnoopPrecompile", "SparseArrays", "StaticArrays", "UUIDs", "UnsafeAtomics", "UnsafeAtomicsLLVM"] -git-tree-sha1 = "976231af02176082fb266a9f96a59da51fcacf20" +deps = ["Adapt", "Atomix", "InteractiveUtils", "LinearAlgebra", "MacroTools", "PrecompileTools", "Requires", "SparseArrays", "StaticArrays", "UUIDs", "UnsafeAtomics", "UnsafeAtomicsLLVM"] +git-tree-sha1 = "ed7167240f40e62d97c1f5f7735dea6de3cc5c49" uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" -version = "0.9.2" +version = "0.9.18" + + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + + [deps.KernelAbstractions.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" [[deps.LDLFactorizations]] deps = ["AMD", "LinearAlgebra", "SparseArrays", "Test"] -git-tree-sha1 = "cbf4b646f82bfc58bb48bcca9dcce2eb88da4cd1" +git-tree-sha1 = "70f582b446a1c3ad82cf87e62b878668beef9d13" uuid = "40e66cde-538c-5869-a4ad-c39174c6795b" -version = "0.10.0" +version = "0.10.1" [[deps.LLVM]] -deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Printf", "Unicode"] -git-tree-sha1 = "a8960cae30b42b66dd41808beb76490519f6f9e2" +deps = ["CEnum", "LLVMExtra_jll", "Libdl", "Preferences", "Printf", "Requires", "Unicode"] +git-tree-sha1 = "ab01dde107f21aa76144d0771dccc08f152ccac7" uuid = "929cbde3-209d-540e-8aea-75f648917ca0" -version = "5.0.0" +version = "6.6.2" +weakdeps = ["BFloat16s"] + + [deps.LLVM.extensions] + BFloat16sExt = "BFloat16s" [[deps.LLVMExtra_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl", "TOML"] -git-tree-sha1 = "09b7505cc0b1cee87e5d4a26eea61d2e1b0dcd35" +git-tree-sha1 = "88b916503aac4fb7f701bb625cd84ca5dd1677bc" uuid = "dad2f222-ce93-54a1-a47d-0025e8a3acab" -version = "0.0.21+0" +version = "0.0.29+0" + +[[deps.LLVMLoopInfo]] +git-tree-sha1 = "2e5c102cfc41f48ae4740c7eca7743cc7e7b75ea" +uuid = "8b046642-f1f6-4319-8d3c-209ddc03c586" +version = "1.0.0" + +[[deps.LRUCache]] +git-tree-sha1 = "b3cc6698599b10e652832c2f23db3cab99d51b59" +uuid = "8ac3fa9e-de4c-5943-b1dc-09c6b5f20637" +version = "1.6.1" +weakdeps = ["Serialization"] + + [deps.LRUCache.extensions] + SerializationExt = ["Serialization"] + +[[deps.LaTeXStrings]] +git-tree-sha1 = "50901ebc375ed41dbf8058da26f9de442febbbec" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.1" [[deps.LazyArtifacts]] deps = ["Artifacts", "Pkg"] @@ -481,30 +669,35 @@ uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" [[deps.LibCURL]] deps = ["LibCURL_jll", "MozillaCACerts_jll"] uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" -version = "0.6.3" +version = "0.6.4" [[deps.LibCURL_jll]] deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "7.84.0+0" +version = "8.4.0+0" [[deps.LibGit2]] -deps = ["Base64", "NetworkOptions", "Printf", "SHA"] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.6.4+0" + [[deps.LibSSH2_jll]] deps = ["Artifacts", "Libdl", "MbedTLS_jll"] uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" -version = "1.10.2+0" +version = "1.11.0+1" [[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" [[deps.Libiconv_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "c7cb1f5d892775ba13767a87c7ada0b980ea0a71" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175" uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" -version = "1.16.1+2" +version = "1.17.0+0" [[deps.LineSearches]] deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"] @@ -513,86 +706,110 @@ uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" version = "7.2.0" [[deps.LinearAlgebra]] -deps = ["Libdl", "libblastrampoline_jll"] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" [[deps.LogExpFunctions]] -deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "0a1b7c2863e44523180fdb3146534e265a91870b" +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "18144f3e9cbe9b15b070288eef858f71b291ce37" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.23" +version = "0.3.27" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" [[deps.Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" [[deps.LoggingExtras]] deps = ["Dates", "Logging"] -git-tree-sha1 = "cedb76b37bc5a6c702ade66be44f831fa23c681e" +git-tree-sha1 = "c1dd6d7978c12545b4179fb6153b9250c96b0075" uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" -version = "1.0.0" +version = "1.0.3" + +[[deps.Lz4_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6c26c5e8a4203d43b5497be3ec5d4e0c3cde240a" +uuid = "5ced341a-0733-55b8-9ab6-a4889d929147" +version = "1.9.4+0" [[deps.MKL_jll]] -deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] -git-tree-sha1 = "2ce8695e1e699b68702c03402672a69f54b8aca9" +deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "72dc3cf284559eb8f53aa593fe62cb33f83ed0c0" uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" -version = "2022.2.0+0" +version = "2024.0.0+0" [[deps.MPI]] -deps = ["Distributed", "DocStringExtensions", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "Requires", "Serialization", "Sockets"] -git-tree-sha1 = "6d72bafd3960f9c119ceb8f034fef28346490fe5" +deps = ["Distributed", "DocStringExtensions", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "PkgVersion", "PrecompileTools", "Requires", "Serialization", "Sockets"] +git-tree-sha1 = "4e3136db3735924f96632a5b40a5979f1f53fa07" uuid = "da04e1cc-30fd-572f-bb4f-1f8673147195" -version = "0.20.8" +version = "0.20.19" + + [deps.MPI.extensions] + AMDGPUExt = "AMDGPU" + CUDAExt = "CUDA" + + [deps.MPI.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" [[deps.MPICH_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "d790fbd913f85e8865c55bf4725aff197c5155c8" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "656036b9ed6f942d35e536e249600bc31d0f9df8" uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" -version = "4.1.1+1" +version = "4.2.0+0" [[deps.MPIPreferences]] deps = ["Libdl", "Preferences"] -git-tree-sha1 = "71f937129731a29eabe6969db2c90368a4408933" +git-tree-sha1 = "8f6af051b9e8ec597fa09d8885ed79fd582f33c9" uuid = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" -version = "0.1.7" +version = "0.1.10" [[deps.MPItrampoline_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "b3dcf8e1c610a10458df3c62038c8cc3a4d6291d" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "77c3bd69fdb024d75af38713e883d0f249ce19c2" uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" -version = "5.3.0+0" +version = "5.3.2+0" [[deps.MacroTools]] deps = ["Markdown", "Random"] -git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2" +git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.10" +version = "0.5.13" [[deps.Markdown]] deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" [[deps.MathOptInterface]] -deps = ["BenchmarkTools", "CodecBzip2", "CodecZlib", "DataStructures", "ForwardDiff", "JSON", "LinearAlgebra", "MutableArithmetics", "NaNMath", "OrderedCollections", "Printf", "SnoopPrecompile", "SparseArrays", "SpecialFunctions", "Test", "Unicode"] -git-tree-sha1 = "3b38f6fbd62cbd61d8dbf625136d7b75478bf2c5" +deps = ["BenchmarkTools", "CodecBzip2", "CodecZlib", "DataStructures", "ForwardDiff", "JSON", "LinearAlgebra", "MutableArithmetics", "NaNMath", "OrderedCollections", "PrecompileTools", "Printf", "SparseArrays", "SpecialFunctions", "Test", "Unicode"] +git-tree-sha1 = "679c1aec6934d322783bd15db4d18f898653be4f" uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" -version = "1.15.0" +version = "1.27.0" [[deps.MbedTLS]] -deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "Random", "Sockets"] -git-tree-sha1 = "03a9b9718f5682ecb107ac9f7308991db4ce395b" +deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] +git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf" uuid = "739be429-bea8-5141-9913-cc70e7f3736d" -version = "1.1.7" +version = "1.1.9" [[deps.MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.0+0" +version = "2.28.2+1" [[deps.MicrosoftMPI_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "a8027af3d1743b3bfae34e54872359fdebb31422" +git-tree-sha1 = "f12a29c4400ba812841c6ace3f4efbb6dbb3ba01" uuid = "9237b28f-5490-5468-be7b-bb81f5f5e6cf" -version = "10.1.3+4" +version = "10.1.4+2" [[deps.Missings]] deps = ["DataAPI"] @@ -605,19 +822,19 @@ uuid = "a63ad114-7e13-5084-954f-fe012c677804" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2022.2.1" +version = "2023.1.10" [[deps.MutableArithmetics]] deps = ["LinearAlgebra", "SparseArrays", "Test"] -git-tree-sha1 = "3295d296288ab1a0a2528feb424b854418acff57" +git-tree-sha1 = "302fd161eb1c439e4115b51ae456da4e9984f130" uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" -version = "1.2.3" +version = "1.4.1" [[deps.NCDatasets]] -deps = ["CFTime", "CommonDataModel", "DataStructures", "Dates", "NetCDF_jll", "NetworkOptions", "Printf"] -git-tree-sha1 = "afd015e81e60cfbdba04ef59bcdc80e18bd613cd" +deps = ["CFTime", "CommonDataModel", "DataStructures", "Dates", "DiskArrays", "NetCDF_jll", "NetworkOptions", "Printf"] +git-tree-sha1 = "d40d24d12f710c39d3a66be99c567ce0032f28a7" uuid = "85f8d34a-cbdd-5861-8df4-14fed0d494ab" -version = "0.12.14" +version = "0.14.3" [[deps.NLSolversBase]] deps = ["DiffResults", "Distributed", "FiniteDiff", "ForwardDiff"] @@ -625,6 +842,18 @@ git-tree-sha1 = "a0b464d183da839699f4c79e7606d9d186ec172c" uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" version = "7.8.3" +[[deps.NVTX]] +deps = ["Colors", "JuliaNVTXCallbacks_jll", "Libdl", "NVTX_jll"] +git-tree-sha1 = "53046f0483375e3ed78e49190f1154fa0a4083a1" +uuid = "5da4648a-3479-48b8-97b9-01cb529c0a1f" +version = "0.3.4" + +[[deps.NVTX_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ce3269ed42816bf18d500c9f63418d4b0d9f5a3b" +uuid = "e98f9f5b-d649-5603-91fd-7774390e6439" +version = "3.1.0+2" + [[deps.NaNMath]] deps = ["OpenLibm_jll"] git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" @@ -632,62 +861,75 @@ uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" version = "1.0.2" [[deps.NetCDF_jll]] -deps = ["Artifacts", "HDF5_jll", "JLLWrappers", "LibCURL_jll", "Libdl", "Pkg", "XML2_jll", "Zlib_jll"] -git-tree-sha1 = "072f8371f74c3b9e1b26679de7fbf059d45ea221" +deps = ["Artifacts", "Blosc_jll", "Bzip2_jll", "HDF5_jll", "JLLWrappers", "LibCURL_jll", "Libdl", "OpenMPI_jll", "XML2_jll", "Zlib_jll", "Zstd_jll", "libzip_jll"] +git-tree-sha1 = "a8af1798e4eb9ff768ce7fdefc0e957097793f15" uuid = "7243133f-43d8-5620-bbf4-c2c921802cf3" -version = "400.902.5+1" +version = "400.902.209+0" + +[[deps.Nettle_jll]] +deps = ["Artifacts", "GMP_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "eca63e3847dad608cfa6a3329b95ef674c7160b4" +uuid = "4c82536e-c426-54e4-b420-14f461c4ed8b" +version = "3.7.2+0" [[deps.NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" version = "1.2.0" [[deps.Oceananigans]] -deps = ["Adapt", "CUDA", "Crayons", "CubedSphere", "Dates", "DocStringExtensions", "FFTW", "Glob", "IncompleteLU", "InteractiveUtils", "IterativeSolvers", "JLD2", "KernelAbstractions", "LinearAlgebra", "Logging", "MPI", "NCDatasets", "OffsetArrays", "OrderedCollections", "PencilArrays", "PencilFFTs", "Pkg", "Printf", "Random", "Rotations", "SeawaterPolynomials", "SparseArrays", "Statistics", "StructArrays"] -git-tree-sha1 = "04f72d38d2c7e5dde95523dc6d56f31a025a56ca" -repo-rev = "glw/max-mixing-length" -repo-url = "https://github.com/CliMA/Oceananigans.jl.git" +deps = ["Adapt", "CUDA", "Crayons", "CubedSphere", "Dates", "Distances", "DocStringExtensions", "FFTW", "Glob", "IncompleteLU", "InteractiveUtils", "IterativeSolvers", "JLD2", "KernelAbstractions", "LinearAlgebra", "Logging", "MPI", "NCDatasets", "OffsetArrays", "OrderedCollections", "PencilArrays", "PencilFFTs", "Pkg", "Printf", "Random", "Rotations", "SeawaterPolynomials", "SparseArrays", "Statistics", "StructArrays"] +git-tree-sha1 = "4672af7242405313743af45168bfce3d87b84b2c" uuid = "9e8cae18-63c1-5223-a75c-80ca9d6e9a09" -version = "0.81.0" +version = "0.90.11" + + [deps.Oceananigans.extensions] + OceananigansEnzymeExt = "Enzyme" + + [deps.Oceananigans.weakdeps] + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" [[deps.OffsetArrays]] -deps = ["Adapt"] -git-tree-sha1 = "82d7c9e310fe55aa54996e6f7f94674e2a38fcb4" +git-tree-sha1 = "6a731f2b5c03157418a20c12195eb4b74c8f8621" uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" -version = "1.12.9" +version = "1.13.0" +weakdeps = ["Adapt"] + + [deps.OffsetArrays.extensions] + OffsetArraysAdaptExt = "Adapt" [[deps.OpenBLAS32_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "9c6c2ed4b7acd2137b878eb96c68e63b76199d0f" +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6065c4cff8fee6c6770b277af45d5082baacdba1" uuid = "656ef2d0-ae68-5445-9ca0-591084a874a2" -version = "0.3.17+0" +version = "0.3.24+0" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.20+0" +version = "0.3.23+2" [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.1+0" +version = "0.8.1+2" [[deps.OpenMPI_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "f3080f4212a8ba2ceb10a34b938601b862094314" +git-tree-sha1 = "e25c1778a98e34219a00455d6e4384e017ea9762" uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" -version = "4.1.5+0" +version = "4.1.6+0" [[deps.OpenSSL]] deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] -git-tree-sha1 = "5b3e170ea0724f1e3ed6018c5b006c190f80e87d" +git-tree-sha1 = "af81a32750ebc831ee28bdaaba6e1067decef51e" uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" -version = "1.3.5" +version = "1.4.2" [[deps.OpenSSL_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "9ff31d101d987eb9d66bd8b176ac7c277beccd09" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "60e3045590bd104a16fefb12836c00c0ef8c7f8c" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "1.1.20+0" +version = "3.0.13+0" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] @@ -696,15 +938,25 @@ uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" version = "0.5.5+0" [[deps.Optim]] -deps = ["Compat", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] -git-tree-sha1 = "a89b11f0f354f06099e4001c151dffad7ebab015" +deps = ["Compat", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "PackageExtensionCompat", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] +git-tree-sha1 = "d1223e69af90b6d26cea5b6f3b289b3148ba702c" uuid = "429524aa-4258-5aef-a3af-852621145aeb" -version = "1.7.5" +version = "1.9.3" +weakdeps = ["MathOptInterface"] + + [deps.Optim.extensions] + OptimMOIExt = "MathOptInterface" [[deps.OrderedCollections]] -git-tree-sha1 = "d321bf2de576bf25ec4d3e4360faca399afca282" +git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.6.0" +version = "1.6.3" + +[[deps.P11Kit_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "2cd396108e178f3ae8dedbd8e938a18726ab2fbf" +uuid = "c2071276-7c44-58a7-b746-946036e04d0a" +version = "0.24.1+0" [[deps.PDMats]] deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse", "Test"] @@ -712,6 +964,12 @@ git-tree-sha1 = "95a4038d1011dfdbde7cecd2ad0ac411e53ab1bc" uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" version = "0.10.1" +[[deps.PackageExtensionCompat]] +git-tree-sha1 = "fb28e33b8a95c4cee25ce296c817d89cc2e53518" +uuid = "65ce6f38-6b18-4e1d-a461-8949797d7930" +version = "1.0.2" +weakdeps = ["Requires", "TOML"] + [[deps.Parameters]] deps = ["OrderedCollections", "UnPack"] git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" @@ -719,27 +977,47 @@ uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" version = "0.12.3" [[deps.Parsers]] -deps = ["Dates", "SnoopPrecompile"] -git-tree-sha1 = "478ac6c952fddd4399e71d4779797c538d0ff2bf" +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "2.5.8" +version = "2.8.1" [[deps.PencilArrays]] -deps = ["Adapt", "JSON3", "LinearAlgebra", "MPI", "OffsetArrays", "Random", "Reexport", "Requires", "StaticArrayInterface", "StaticArrays", "StaticPermutations", "Strided", "TimerOutputs", "VersionParsing"] -git-tree-sha1 = "9d017f3a875a9f22b0649c7d72671b1b25441179" +deps = ["Adapt", "JSON3", "LinearAlgebra", "MPI", "OffsetArrays", "Random", "Reexport", "StaticArrayInterface", "StaticArrays", "StaticPermutations", "Strided", "TimerOutputs", "VersionParsing"] +git-tree-sha1 = "6510e851700a851944f7ffa5cd990cced4802ad2" uuid = "0e08944d-e94e-41b1-9406-dcf66b6a9d2e" -version = "0.17.11" +version = "0.19.3" + + [deps.PencilArrays.extensions] + PencilArraysDiffEqExt = ["DiffEqBase"] + PencilArraysHDF5Ext = ["HDF5"] + + [deps.PencilArrays.weakdeps] + DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e" + HDF5 = "f67ccb44-e63f-5c2f-98bd-6dc0ccc4ba2f" [[deps.PencilFFTs]] deps = ["AbstractFFTs", "FFTW", "LinearAlgebra", "MPI", "PencilArrays", "Reexport", "TimerOutputs"] -git-tree-sha1 = "602dc6232e4c2747035dd39a0e6569fccb9e9337" +git-tree-sha1 = "bd69f3f0ee248cfb4241800aefb705b5ded592ff" uuid = "4a48f351-57a6-4416-9ec4-c37015456aae" -version = "0.14.3" +version = "0.15.1" [[deps.Pkg]] -deps = ["Artifacts", "Dates", "Downloads", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.8.0" +version = "1.10.0" + +[[deps.PkgVersion]] +deps = ["Pkg"] +git-tree-sha1 = "f9501cc0430a26bc3d156ae1b5b0c1b47af4d6da" +uuid = "eebad327-c553-4316-9ea0-9fa01ccd7688" +version = "0.3.3" + +[[deps.PooledArrays]] +deps = ["DataAPI", "Future"] +git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" +uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" +version = "1.4.3" [[deps.PositiveFactorizations]] deps = ["LinearAlgebra"] @@ -747,11 +1025,23 @@ git-tree-sha1 = "17275485f373e6673f7e7f97051f703ed5b15b20" uuid = "85a6dd25-e78a-55b7-8502-1745935b8125" version = "0.2.4" +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.1" + [[deps.Preferences]] deps = ["TOML"] -git-tree-sha1 = "47e5f437cc0e7ef2ce8406ce1e7e24d44915f88d" +git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.3.0" +version = "1.4.3" + +[[deps.PrettyTables]] +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "88b895d13d53b5577fd53379d913b9ab9ac82660" +uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +version = "2.3.1" [[deps.Printf]] deps = ["Unicode"] @@ -763,41 +1053,41 @@ uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" [[deps.ProgressBars]] deps = ["Printf"] -git-tree-sha1 = "9d84c8646109eb8bc7a006d59b157c64d5155c81" +git-tree-sha1 = "b437cdb0385ed38312d91d9c00c20f3798b30256" uuid = "49802e3a-d2f1-5c88-81d8-b72133a6f568" -version = "1.5.0" +version = "1.5.1" [[deps.ProgressMeter]] deps = ["Distributed", "Printf"] -git-tree-sha1 = "d7a7aef8f8f2d537104f170139553b14dfe39fe9" +git-tree-sha1 = "763a8ceb07833dd51bb9e3bbca372de32c0605ad" uuid = "92933f4c-e287-5a05-a399-4b506db050ca" -version = "1.7.2" +version = "1.10.0" [[deps.QuadGK]] deps = ["DataStructures", "LinearAlgebra"] -git-tree-sha1 = "6ec7ac8412e83d57e313393220879ede1740f9ee" +git-tree-sha1 = "9b23c31e76e333e6fb4c1595ae6afa74966a729e" uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" -version = "2.8.2" +version = "2.9.4" [[deps.Quaternions]] deps = ["LinearAlgebra", "Random", "RealDot"] -git-tree-sha1 = "da095158bdc8eaccb7890f9884048555ab771019" +git-tree-sha1 = "994cc27cdacca10e68feb291673ec3a76aa2fae9" uuid = "94ee1d12-ae83-5a48-8b1c-48b8ff168ae0" -version = "0.7.4" +version = "0.7.6" [[deps.REPL]] deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" [[deps.Random]] -deps = ["SHA", "Serialization"] +deps = ["SHA"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" [[deps.Random123]] deps = ["Random", "RandomNumbers"] -git-tree-sha1 = "7a1a306b72cfa60634f03a911405f4e64d1b718b" +git-tree-sha1 = "4743b43e5a9c4a2ede372de7061eed81795b12e7" uuid = "74087812-796a-5b5d-8853-05524746bad3" -version = "1.6.0" +version = "1.7.0" [[deps.RandomNumbers]] deps = ["Random", "Requires"] @@ -812,10 +1102,10 @@ uuid = "c1ae055f-0cd5-4b69-90a6-9a35b1a98df9" version = "0.1.0" [[deps.RecipesBase]] -deps = ["SnoopPrecompile"] -git-tree-sha1 = "261dddd3b862bd2c940cf6ca4d1c8fe593e457c8" +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" -version = "1.3.3" +version = "1.3.4" [[deps.Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" @@ -830,9 +1120,9 @@ version = "1.3.0" [[deps.Richardson]] deps = ["LinearAlgebra"] -git-tree-sha1 = "e03ca566bec93f8a3aeb059c8ef102f268a38949" +git-tree-sha1 = "48f038bfd83344065434089c2a79417f38715c41" uuid = "708f8203-808e-40c0-ba2d-98a6953ed40d" -version = "1.4.0" +version = "1.4.2" [[deps.Rmath]] deps = ["Random", "Rmath_jll"] @@ -847,34 +1137,32 @@ uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" version = "0.4.0+0" [[deps.Rotations]] -deps = ["LinearAlgebra", "Quaternions", "Random", "StaticArrays", "Statistics"] -git-tree-sha1 = "72a6abdcd088764878b473102df7c09bbc0548de" +deps = ["LinearAlgebra", "Quaternions", "Random", "StaticArrays"] +git-tree-sha1 = "2a0a5d8569f481ff8840e3b7c84bbf188db6a3fe" uuid = "6038ab10-8711-5258-84ad-4b1120ba62dc" -version = "1.4.0" +version = "1.7.0" +weakdeps = ["RecipesBase"] + + [deps.Rotations.extensions] + RotationsRecipesBaseExt = "RecipesBase" [[deps.SCS]] -deps = ["MathOptInterface", "Requires", "SCS_GPU_jll", "SCS_MKL_jll", "SCS_jll", "SparseArrays"] -git-tree-sha1 = "05c1ed62a8d78827d0dd1a9fa04040a4a254bf08" +deps = ["MathOptInterface", "Requires", "SCS_GPU_jll", "SCS_jll", "SparseArrays"] +git-tree-sha1 = "8d908b7c81e199ee92d17b6192849e8c43d2f31d" uuid = "c946c3f1-0d1f-5ce8-9dea-7daa1f7e2d13" -version = "1.1.4" +version = "1.1.2" [[deps.SCS_GPU_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "OpenBLAS32_jll"] -git-tree-sha1 = "6a61274837cfa050bd996910d347e876bef3a6b3" +deps = ["Artifacts", "JLLWrappers", "Libdl", "OpenBLAS32_jll", "Pkg"] +git-tree-sha1 = "f912271ecccb00acaddfab2943e9b33d5ec36d3b" uuid = "af6e375f-46ec-5fa0-b791-491b0dfa44a4" -version = "3.2.3+1" - -[[deps.SCS_MKL_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "MKL_jll"] -git-tree-sha1 = "15b887b4b1f747f98b22fba2225fe7cd26861cea" -uuid = "3f2553a9-4106-52be-b7dd-865123654657" -version = "3.2.3+0" +version = "3.2.0+0" [[deps.SCS_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "OpenBLAS32_jll"] -git-tree-sha1 = "e4902566d6207206c27fe6f45e8c2d28c34889df" +deps = ["Artifacts", "JLLWrappers", "Libdl", "OpenBLAS32_jll", "Pkg"] +git-tree-sha1 = "ba5c0d3b23220d3598d2877b4cf913e3fcf8add3" uuid = "f4f2fc5b-1d94-523c-97ea-2ab488bedf4b" -version = "3.2.3+0" +version = "3.2.0+0" [[deps.SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" @@ -888,14 +1176,20 @@ version = "0.5.0" [[deps.Scratch]] deps = ["Dates"] -git-tree-sha1 = "30449ee12237627992a99d5e30ae63e4d78cd24a" +git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" uuid = "6c6a2e73-6563-6170-7368-637461726353" -version = "1.2.0" +version = "1.2.1" [[deps.SeawaterPolynomials]] -git-tree-sha1 = "958ba75b90c7c8a117d041d33184134201cf8c0f" +git-tree-sha1 = "6d85acd6de472f8e6da81c61c7c5b6280a55e0bc" uuid = "d496a93d-167e-4197-9f49-d3af4ff8fe40" -version = "0.3.2" +version = "0.3.4" + +[[deps.SentinelArrays]] +deps = ["Dates", "Random"] +git-tree-sha1 = "0e7508ff27ba32f26cd459474ca2ede1bc10991f" +uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" +version = "1.4.1" [[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" @@ -911,53 +1205,62 @@ git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" version = "1.1.0" -[[deps.SnoopPrecompile]] -deps = ["Preferences"] -git-tree-sha1 = "e760a70afdcd461cf01a575947738d359234665c" -uuid = "66db9d55-30c0-4569-8b51-7e840670fc0c" -version = "1.0.3" - [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" [[deps.SortingAlgorithms]] deps = ["DataStructures"] -git-tree-sha1 = "a4ada03f999bd01b3a25dcaa30b2d929fe537e00" +git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" -version = "1.1.0" +version = "1.2.1" [[deps.SparseArrays]] -deps = ["LinearAlgebra", "Random"] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.10.0" [[deps.SpecialFunctions]] -deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "ef28127915f4229c971eb43f3fc075dd3fe91880" +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "e2cfc4012a19088254b3950b85c3c1d8882d864d" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.2.0" +version = "2.3.1" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" [[deps.Static]] deps = ["IfElse"] -git-tree-sha1 = "08be5ee09a7632c32695d954a602df96a877bf0d" +git-tree-sha1 = "d2fdac9ff3906e27f7a618d47b676941baa6c80c" uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" -version = "0.8.6" +version = "0.8.10" [[deps.StaticArrayInterface]] -deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "Requires", "SnoopPrecompile", "SparseArrays", "Static", "SuiteSparse"] -git-tree-sha1 = "33040351d2403b84afce74dae2e22d3f5b18edcb" +deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "PrecompileTools", "Requires", "SparseArrays", "Static", "SuiteSparse"] +git-tree-sha1 = "5d66818a39bb04bf328e92bc933ec5b4ee88e436" uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" -version = "1.4.0" +version = "1.5.0" +weakdeps = ["OffsetArrays", "StaticArrays"] + + [deps.StaticArrayInterface.extensions] + StaticArrayInterfaceOffsetArraysExt = "OffsetArrays" + StaticArrayInterfaceStaticArraysExt = "StaticArrays" [[deps.StaticArrays]] -deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"] -git-tree-sha1 = "63e84b7fdf5021026d0f17f76af7c57772313d99" +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "bf074c045d3d5ffd956fa0a461da38a44685d6b2" uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.5.21" +version = "1.9.3" +weakdeps = ["ChainRulesCore", "Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" [[deps.StaticArraysCore]] -git-tree-sha1 = "6b7ba252635a5eff6a0b0664a41ee140a1c9e72a" +git-tree-sha1 = "36b3d696ce6366023a0ea192b4cd442268995a0d" uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" -version = "1.4.0" +version = "1.4.2" [[deps.StaticPermutations]] git-tree-sha1 = "193c3daa18ff3e55c1dae66acb6a762c4a3bdb0b" @@ -967,12 +1270,13 @@ version = "0.3.0" [[deps.Statistics]] deps = ["LinearAlgebra", "SparseArrays"] uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.10.0" [[deps.StatsAPI]] deps = ["LinearAlgebra"] -git-tree-sha1 = "45a7769a04a3cf80da1c1c7c60caf932e6f4c9f7" +git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" -version = "1.6.0" +version = "1.7.0" [[deps.StatsBase]] deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] @@ -988,21 +1292,38 @@ version = "0.9.18" [[deps.Strided]] deps = ["LinearAlgebra", "StridedViews", "TupleTools"] -git-tree-sha1 = "192afa350a398bd576a187968f3a75daa30465af" +git-tree-sha1 = "40c69be0e1b72ee2f42923b7d1ff13e0b04e675c" uuid = "5e0ebb24-38b0-5f93-81fe-25c709ecae67" -version = "2.0.0" +version = "2.0.4" [[deps.StridedViews]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "339602e6e606bec4eeddfb2d5e430f109f426577" +deps = ["LinearAlgebra", "PackageExtensionCompat"] +git-tree-sha1 = "5b765c4e401693ab08981989f74a36a010aa1d8e" uuid = "4db3bf67-4bd7-4b4e-b153-31dc3fb37143" -version = "0.1.1" +version = "0.2.2" +weakdeps = ["CUDA"] + + [deps.StridedViews.extensions] + StridedViewsCUDAExt = "CUDA" + +[[deps.StringManipulation]] +deps = ["PrecompileTools"] +git-tree-sha1 = "a04cabe79c5f01f4d723cc6704070ada0b9d46d5" +uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" +version = "0.3.4" [[deps.StructArrays]] -deps = ["Adapt", "DataAPI", "GPUArraysCore", "StaticArraysCore", "Tables"] -git-tree-sha1 = "521a0e828e98bb69042fec1809c1b5a680eb7389" +deps = ["ConstructionBase", "DataAPI", "Tables"] +git-tree-sha1 = "f4dc295e983502292c4c3f951dbb4e985e35b3be" uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" -version = "0.6.15" +version = "0.6.18" +weakdeps = ["Adapt", "GPUArraysCore", "SparseArrays", "StaticArrays"] + + [deps.StructArrays.extensions] + StructArraysAdaptExt = "Adapt" + StructArraysGPUArraysCoreExt = "GPUArraysCore" + StructArraysSparseArraysExt = "SparseArrays" + StructArraysStaticArraysExt = "StaticArrays" [[deps.StructTypes]] deps = ["Dates", "UUIDs"] @@ -1014,15 +1335,21 @@ version = "1.10.0" deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.2.1+1" + [[deps.Suppressor]] -git-tree-sha1 = "c6ed566db2fe3931292865b966d6d140b7ef32a9" +deps = ["Logging"] +git-tree-sha1 = "6cd9e4a207964c07bf6395beff7a1e8f21d0f3b2" uuid = "fd094767-a336-5f1f-9728-57cf17d0bbfb" -version = "0.2.1" +version = "0.2.6" [[deps.TOML]] deps = ["Dates"] uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.0" +version = "1.0.3" [[deps.TableTraits]] deps = ["IteratorInterfaceExtensions"] @@ -1031,21 +1358,27 @@ uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" version = "1.0.1" [[deps.Tables]] -deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits", "Test"] -git-tree-sha1 = "1544b926975372da01227b382066ab70e574a3ec" +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "LinearAlgebra", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "cb76cf677714c095e535e3501ac7954732aeea2d" uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" -version = "1.10.1" +version = "1.11.1" [[deps.Tar]] deps = ["ArgTools", "SHA"] uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" -version = "1.10.1" +version = "1.10.0" [[deps.TaylorSeries]] deps = ["LinearAlgebra", "Markdown", "Requires", "SparseArrays"] -git-tree-sha1 = "87baeec9ad6273ed8040a93fbbbaa039fa955f1f" +git-tree-sha1 = "1c7170668366821b0c4c4fe03ee78f8d6cf36e2c" uuid = "6aa5eb33-94cf-58f4-a9d0-e4b2c4fc25ea" -version = "0.12.2" +version = "0.16.0" + + [deps.TaylorSeries.extensions] + TaylorSeriesIAExt = "IntervalArithmetic" + + [deps.TaylorSeries.weakdeps] + IntervalArithmetic = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" [[deps.Test]] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] @@ -1053,25 +1386,28 @@ uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [[deps.TimerOutputs]] deps = ["ExprTools", "Printf"] -git-tree-sha1 = "f2fd3f288dfc6f507b0c3a2eb3bac009251e548b" +git-tree-sha1 = "f548a9e9c490030e545f72074a41edfd0e5bcdd7" uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" -version = "0.5.22" +version = "0.5.23" [[deps.TranscodingStreams]] -deps = ["Random", "Test"] -git-tree-sha1 = "0b829474fed270a4b0ab07117dce9b9a2fa7581a" +git-tree-sha1 = "a09c933bebed12501890d8e92946bbab6a1690f1" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.9.12" +version = "0.10.5" +weakdeps = ["Random", "Test"] + + [deps.TranscodingStreams.extensions] + TestExt = ["Test", "Random"] [[deps.TupleTools]] -git-tree-sha1 = "3c712976c47707ff893cf6ba4354aa14db1d8938" +git-tree-sha1 = "41d61b1c545b06279871ef1a4b5fcb2cac2191cd" uuid = "9d95972d-f1c8-5527-a6e0-b4b365fa01f6" -version = "1.3.0" +version = "1.5.0" [[deps.URIs]] -git-tree-sha1 = "074f993b0ca030848b897beff716d93aca60f06a" +git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b" uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" -version = "1.4.2" +version = "1.5.1" [[deps.UUIDs]] deps = ["Random", "SHA"] @@ -1092,9 +1428,9 @@ version = "0.2.1" [[deps.UnsafeAtomicsLLVM]] deps = ["LLVM", "UnsafeAtomics"] -git-tree-sha1 = "ea37e6066bf194ab78f4e747f5245261f17a7175" +git-tree-sha1 = "323e3d0acf5e78a56dfae7bd8928c989b4f3083e" uuid = "d80eeb9a-aca5-4d75-85e5-170c8b632249" -version = "0.1.2" +version = "0.1.3" [[deps.VersionParsing]] git-tree-sha1 = "58d6e80b4ee071f5efd07fda82cb9fbe17200868" @@ -1102,27 +1438,51 @@ uuid = "81def892-9a0e-5fdd-b105-ffc91e053289" version = "1.3.0" [[deps.XML2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] -git-tree-sha1 = "93c41695bc1c08c46c5899f4fe06d6ead504bb73" +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] +git-tree-sha1 = "07e470dabc5a6a4254ffebc29a1b3fc01464e105" uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.10.3+0" +version = "2.12.5+0" + +[[deps.XZ_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "31c421e5516a6248dfb22c194519e37effbf1f30" +uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" +version = "5.6.1+0" [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.12+3" +version = "1.2.13+1" + +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "49ce682769cd5de6c72dcf1b94ed7790cd08974c" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.5+0" + +[[deps.libaec_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "46bf7be2917b59b761247be3f317ddf75e50e997" +uuid = "477f73a3-ac25-53e9-8cc3-50b2fa2566f0" +version = "1.1.2+0" [[deps.libblastrampoline_jll]] -deps = ["Artifacts", "Libdl", "OpenBLAS_jll"] +deps = ["Artifacts", "Libdl"] uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.1.1+0" +version = "5.8.0+1" + +[[deps.libzip_jll]] +deps = ["Artifacts", "Bzip2_jll", "GnuTLS_jll", "JLLWrappers", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "3282b7d16ae7ac3e57ec2f3fa8fafb564d8f9f7f" +uuid = "337d8026-41b4-5cde-a456-74a10e5b31d1" +version = "1.10.1+0" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.48.0+0" +version = "1.52.0+1" [[deps.p7zip_jll]] deps = ["Artifacts", "Libdl"] uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+0" +version = "17.4.0+2" diff --git a/Project.toml b/Project.toml index 3501735e..f0b82c05 100644 --- a/Project.toml +++ b/Project.toml @@ -2,7 +2,7 @@ name = "ParameterEstimocean" uuid = "eca81dc5-87a6-4430-aec8-c76695404a43" license = "MIT" authors = ["Climate Modeling Alliance and contributors"] -version = "0.14.3" +version = "0.14.4" [deps] BlockDiagonals = "0a1fb500-61f7-11e9-3c65-f5ef3456f9f0" @@ -28,7 +28,6 @@ Suppressor = "fd094767-a336-5f1f-9728-57cf17d0bbfb" [compat] BlockDiagonals = "0.1.36" -CUDA = "4" DataDeps = "0.7" Distributions = "0.25" DocStringExtensions = "0.8, 0.9" @@ -37,7 +36,7 @@ GaussianProcesses = "0.12" JLD2 = "0.4" LineSearches = "7" MPI = "0.20" -Oceananigans = "0.81" +Oceananigans = "0.91 - 0.99" OffsetArrays = "1" OrderedCollections = "1" ProgressBars = "1" diff --git a/examples/calibrate_zonally_averaged_baroclinic_adjustment.jl b/examples/calibrate_zonally_averaged_baroclinic_adjustment.jl index 5a6912ee..4c371c09 100644 --- a/examples/calibrate_zonally_averaged_baroclinic_adjustment.jl +++ b/examples/calibrate_zonally_averaged_baroclinic_adjustment.jl @@ -8,7 +8,7 @@ using Oceananigans.Models.HydrostaticFreeSurfaceModels: SliceEnsembleSize using Oceananigans.TurbulenceClosures: FluxTapering using LinearAlgebra, CairoMakie, DataDeps, JLD2 -using Oceananigans.Architectures: arch_array +using Oceananigans.Architectures: on_architecture # using ElectronDisplay @@ -84,7 +84,7 @@ close(file) gent_mcwilliams_diffusivity = IsopycnalSkewSymmetricDiffusivity(slope_limiter = FluxTapering(1e-2)) -gm_closure_ensemble = arch_array(architecture, [deepcopy(gent_mcwilliams_diffusivity) for _ = 1:Nensemble]) +gm_closure_ensemble = on_architecture(architecture, [deepcopy(gent_mcwilliams_diffusivity) for _ = 1:Nensemble]) closure_ensemble = (gm_closure_ensemble, closures[1], closures[2]) diff --git a/examples/intro_to_inverse_problems.jl b/examples/intro_to_inverse_problems.jl index f1478575..b177a38c 100644 --- a/examples/intro_to_inverse_problems.jl +++ b/examples/intro_to_inverse_problems.jl @@ -19,7 +19,7 @@ using ParameterEstimocean using Oceananigans -using Oceananigans.Architectures: arch_array +using Oceananigans.Architectures: on_architecture using Oceananigans.Units using Oceananigans.Models.HydrostaticFreeSurfaceModels: ColumnEnsembleSize using Oceananigans.TurbulenceClosures: ConvectiveAdjustmentVerticalDiffusivity @@ -64,7 +64,7 @@ function extract_perfect_parameters(observations, Nensemble) Qᵘ[:, j] .= obs.metadata.parameters.Qᵘ Qᵇ[:, j] .= obs.metadata.parameters.Qᵇ N²[:, j] .= obs.metadata.parameters.N² - f[:, j] .= obs.metadata.coriolis.f + f[:, j] .= obs.metadata.coriolis.f end file = jldopen(first(observations).path) @@ -90,10 +90,10 @@ function build_ensemble_simulation(observations, arch=CPU(); Nensemble=1) column_ensemble_size = ColumnEnsembleSize(Nz=Nz, ensemble=(Nensemble, Nbatch), Hz=Hz) ensemble_grid = RectilinearGrid(arch, size = column_ensemble_size, topology = (Flat, Flat, Bounded), z = (-Lz, 0)) - coriolis_ensemble = arch_array(arch, [FPlane(f=f[i, j]) for i = 1:Nensemble, j=1:Nbatch]) - closure_ensemble = arch_array(arch, [deepcopy(closure) for i = 1:Nensemble, j=1:Nbatch]) + coriolis_ensemble = on_architecture(arch, [FPlane(f=f[i, j]) for i = 1:Nensemble, j=1:Nbatch]) + closure_ensemble = on_architecture(arch, [deepcopy(closure) for i = 1:Nensemble, j=1:Nbatch]) - Qᵘ, Qᵇ, N² = Tuple(arch_array(arch, p) for p in (Qᵘ, Qᵇ, N²)) + Qᵘ, Qᵇ, N² = Tuple(on_architecture(arch, p) for p in (Qᵘ, Qᵇ, N²)) u_bcs = FieldBoundaryConditions(top = FluxBoundaryCondition(Qᵘ)) b_bcs = FieldBoundaryConditions(top = FluxBoundaryCondition(Qᵇ), bottom = GradientBoundaryCondition(N²)) diff --git a/src/EnsembleSimulations.jl b/src/EnsembleSimulations.jl index 9365b5de..400b7ba4 100644 --- a/src/EnsembleSimulations.jl +++ b/src/EnsembleSimulations.jl @@ -9,7 +9,10 @@ using ..Observations: SyntheticObservations, batch, tupleit using Oceananigans using Oceananigans.Models.HydrostaticFreeSurfaceModels: ColumnEnsembleSize -using Oceananigans.Architectures: arch_array +using Oceananigans.Architectures: on_architecture + +@inline array_forcing_func(i, j, k, grid, clock, model_fields, f) = @inbounds f[i, j, k] +array_forcing(array) = Forcing(array_forcing_func, discrete_form=true, parameters=array) function ensemble_column_model_simulation(observations; closure, @@ -18,6 +21,7 @@ function ensemble_column_model_simulation(observations; verbose = true, architecture = CPU(), tracers = :b, + forced_fields = tuple(), buoyancy = BuoyancyTracer(), non_ensemble_closure = nothing, kwargs...) @@ -40,10 +44,10 @@ function ensemble_column_model_simulation(observations; z = (-Lz, 0)) coriolis_ensemble = [FPlane(f=observations[j].metadata.coriolis.f) for i = 1:Nensemble, j=1:Nbatch] - coriolis_ensemble = arch_array(architecture, coriolis_ensemble) + coriolis_ensemble = on_architecture(architecture, coriolis_ensemble) closure_ensemble = [deepcopy(closure) for i = 1:Nensemble, j=1:Nbatch] - closure_ensemble = arch_array(architecture, closure_ensemble) + closure_ensemble = on_architecture(architecture, closure_ensemble) if isnothing(non_ensemble_closure) closure = closure_ensemble @@ -63,7 +67,11 @@ function ensemble_column_model_simulation(observations; boundary_conditions = merge(momentum_boundary_conditions, tracer_boundary_conditions) - ensemble_model = HydrostaticFreeSurfaceModel(; grid, tracers, buoyancy, boundary_conditions, closure, + forced_fields = tupleit(forced_fields) + forcing = NamedTuple(name => array_forcing(CenterField(grid)) for name in forced_fields) + + ensemble_model = HydrostaticFreeSurfaceModel(; grid, tracers, buoyancy, boundary_conditions, + closure, forcing, coriolis = coriolis_ensemble, kwargs...) @@ -73,3 +81,4 @@ function ensemble_column_model_simulation(observations; end end # module + diff --git a/src/InverseProblems.jl b/src/InverseProblems.jl index 6e4846df..8fe483ee 100644 --- a/src/InverseProblems.jl +++ b/src/InverseProblems.jl @@ -30,9 +30,9 @@ using ..Observations: import ..Parameters: closure_with_parameters -using Oceananigans: run!, fields, FieldTimeSeries, CPU -using Oceananigans.Architectures: architecture -using Oceananigans.OutputReaders: InMemory +using Oceananigans: run!, fields, FieldTimeSeries +using Oceananigans.Architectures: architecture, CPU, GPU +using Oceananigans.OutputReaders: InMemory, Linear using Oceananigans.Fields: interior, location using Oceananigans.Utils: prettysummary using Oceananigans.Grids: Flat, Bounded, @@ -41,6 +41,7 @@ using Oceananigans.Grids: Flat, Bounded, topology, halo_size, interior_parent_indices, cpu_face_constructor_z + using Oceananigans.Models.HydrostaticFreeSurfaceModels: SingleColumnGrid, YZSliceGrid, ColumnEnsembleSize import ..Transformations: normalize! @@ -354,10 +355,25 @@ Base.length(batch::BatchedInverseProblem) = length(batch.batch) Nensemble(batched_ip::BatchedInverseProblem) = Nensemble(first(batched_ip.batch)) function collect_forward_maps_asynchronously!(outputs, batched_ip, parameters; kw...) - for n = 1:length(batched_ip) - ip = batched_ip[n] - forward_map_output = forward_map(ip, parameters; kw...) - outputs[n] = batched_ip.weights[n] * forward_map_output + + ip1 = first(batched_ip) + grid = ip1.simulation.model.grid + arch = architecture(grid) + + if arch isa GPU + for n = 1:length(batched_ip) + ip = batched_ip[n] + forward_map_output = forward_map(ip, parameters; kw...) + outputs[n] = batched_ip.weights[n] * forward_map_output + end + end + + if arch isa CPU + asyncmap(1:length(batched_ip), ntasks=10) do n + ip = batched_ip[n] + forward_map_output = forward_map(ip, parameters; kw...) + outputs[n] = batched_ip.weights[n] * forward_map_output + end end return outputs @@ -572,7 +588,8 @@ function transpose_model_output(collector_grid::SingleColumnGrid, time_series_co raw_data = parent(field_time_series.data) data = OffsetArray(view(raw_data, :, j:j, :, :), 0, 0, -Hz, 0) - time_series = FieldTimeSeries{LX, LY, LZ, InMemory}(data, grid, nothing, times, indices) + time_series = FieldTimeSeries{LX, LY, LZ}(data, grid, InMemory(), nothing, + indices, times, nothing, nothing, Linear(), nothing) time_serieses[name] = time_series end diff --git a/src/Observations.jl b/src/Observations.jl index dedb1bf5..b6b64bc0 100644 --- a/src/Observations.jl +++ b/src/Observations.jl @@ -15,7 +15,7 @@ using Oceananigans.Grids: pop_flat_elements, topology, halo_size, on_architectur using Oceananigans.TimeSteppers: update_state!, reset! using Oceananigans.Fields: indices using Oceananigans.Utils: SpecifiedTimes, prettytime -using Oceananigans.Architectures: arch_array, architecture +using Oceananigans.Architectures: on_architecture, architecture using Oceananigans.OutputWriters: WindowedTimeAverage, AveragedSpecifiedTimes using JLD2 @@ -230,11 +230,11 @@ const not_metadata_names = ("serialized", "timeseries") read_group(group::JLD2.Group) = NamedTuple(Symbol(subgroup) => read_group(group[subgroup]) for subgroup in keys(group)) read_group(group) = group -using Oceananigans.Grids: ZRegRectilinearGrid +using Oceananigans.Grids: ZRegularRG function with_size(new_size, old_grid) - old_grid isa ZRegRectilinearGrid || + old_grid isa ZRegularRG || error("Cannot remake stretched grid \n $old_grid \n with a new size!") topo = topology(old_grid) @@ -331,7 +331,7 @@ function set!(model, observations::BatchedSyntheticObservations, time_index=1) observations_data = column_ensemble_interior(observations, field_name, time_index, model_field_size) # Reshape `observations_data` to the size of `model_field`'s interior - reshaped_data = arch_array(architecture(model_field), reshape(observations_data, size(model_field))) + reshaped_data = on_architecture(architecture(model_field), reshape(observations_data, size(model_field))) # Sets the interior of field `model_field` to values of `reshaped_data` model_field .= reshaped_data @@ -393,6 +393,8 @@ function FieldTimeSeriesCollector(collected_fields, times; collected_fields = averaged_collected_fields end + times = collect(times) + return FieldTimeSeriesCollector(grid, times, field_time_serieses, collected_fields, collection_times) end @@ -415,7 +417,7 @@ function (collector::FieldTimeSeriesCollector)(simulation) field_time_series = collector.field_time_serieses[field_name] if architecture(collector.grid) != architecture(simulation.model.grid) arch = architecture(collector.grid) - device_collected_field_data = arch_array(arch, parent(collector.collected_fields[field_name])) + device_collected_field_data = on_architecture(arch, parent(collector.collected_fields[field_name])) parent(field_time_series[time_index]) .= device_collected_field_data else set!(field_time_series[time_index], collector.collected_fields[field_name]) diff --git a/src/Parameters.jl b/src/Parameters.jl index 680738b2..d78a0477 100644 --- a/src/Parameters.jl +++ b/src/Parameters.jl @@ -2,7 +2,7 @@ module Parameters export FreeParameters, lognormal, ScaledLogitNormal -using Oceananigans.Architectures: CPU, arch_array, architecture +using Oceananigans.Architectures: CPU, on_architecture, architecture using Oceananigans.Utils: prettysummary using Oceananigans.TurbulenceClosures: AbstractTurbulenceClosure, ScalarDiffusivity using Oceananigans.TurbulenceClosures: AbstractTimeDiscretization, ExplicitTimeDiscretization @@ -590,13 +590,13 @@ the parameters for the any closure that is of type `AbstractArray`. The `arch`it (`CPU()` or `GPU()`) defines whethere `Array` or `CuArray` is returned. """ function new_closure_ensemble(closures::AbstractArray, parameter_ensemble, arch) - cpu_closures = arch_array(CPU(), closures) + cpu_closures = on_architecture(CPU(), closures) for (k, θₖ) in enumerate(parameter_ensemble) update_closure_ensemble_member!(cpu_closures, k, θₖ) end - return arch_array(arch, cpu_closures) + return on_architecture(arch, cpu_closures) end new_closure_ensemble(closures::Tuple, parameter_ensemble, arch) = diff --git a/src/PseudoSteppingSchemes.jl b/src/PseudoSteppingSchemes.jl index c5a058c6..5a12f10e 100644 --- a/src/PseudoSteppingSchemes.jl +++ b/src/PseudoSteppingSchemes.jl @@ -22,11 +22,11 @@ export Kovachki2018InitialConvergenceRatio export Iglesias2021 export Chada2021 -# If pseudo_stepping::Nothing, it's not adaptive; Δtₙ₊₁ = Δtₙ. -eki_update(::Nothing, Xₙ, Gₙ, eki, Δtₙ) = eki_update(ConstantPseudoTimeStep(Δtₙ), Xₙ, Gₙ, eki) +# If pseudo_stepping::Nothing, it's not adaptive; Δtⁿ⁺¹ = Δtⁿ. +eki_update(::Nothing, Xⁿ, Gⁿ, eki, Δtⁿ) = eki_update(ConstantPseudoTimeStep(Δtⁿ), Xⁿ, Gⁿ, eki) -# Δtₙ₊₁ selected according to `pseudo_stepping` -eki_update(pseudo_scheme, Xₙ, Gₙ, eki, Δtₙ) = eki_update(pseudo_scheme, Xₙ, Gₙ, eki) +# Δtⁿ⁺¹ selected according to `pseudo_stepping` +eki_update(pseudo_scheme, Xⁿ, Gⁿ, eki, Δtⁿ) = eki_update(pseudo_scheme, Xⁿ, Gⁿ, eki) function obs_noise_mean(eki) μ_noise = zeros(length(eki.mapped_observations)) @@ -40,84 +40,98 @@ obs_noise_covariance(eki) = eki.tikhonov ? eki.precomputed_arrays[:Σ] : eki.noi inv_obs_noise_covariance(eki) = eki.tikhonov ? eki.precomputed_arrays[:inv_Σ] : eki.precomputed_arrays[:inv_Γy] -function adaptive_step_parameters(pseudo_scheme, Xₙ, Gₙ, eki; +function adaptive_step_parameters(pseudo_scheme, Xⁿ, Gⁿ, eki; Δt = 1.0, covariance_inflation = 0.0, momentum_parameter = 0.0) - N_param, N_ens = size(Xₙ) - X̅ = mean(Xₙ, dims=2) + N_param, N_ens = size(Xⁿ) + X̅ = mean(Xⁿ, dims=2) # Forward map augmentation for Tikhonov regularization if eki.tikhonov - Gₙ = vcat(Gₙ, Xₙ) + Gⁿ = vcat(Gⁿ, Xⁿ) end - Xₙ₊₁, Δtₙ = eki_update(pseudo_scheme, Xₙ, Gₙ, eki, Δt) + Xⁿ⁺¹, Δtⁿ = eki_update(pseudo_scheme, Xⁿ, Gⁿ, eki, Δt) - # Apply momentum Xₙ ← Xₙ + λ(Xₙ - Xₙ₋₁) - @. Xₙ₊₁ = Xₙ₊₁ + momentum_parameter * (Xₙ₊₁ - Xₙ) + # Apply momentum Xⁿ ← Xⁿ + λ(Xⁿ - Xⁿ₋₁) + @. Xⁿ⁺¹ = Xⁿ⁺¹ + momentum_parameter * (Xⁿ⁺¹ - Xⁿ) # Apply covariance inflation - @. Xₙ₊₁ = Xₙ₊₁ + (Xₙ₊₁ - X̅) * covariance_inflation + @. Xⁿ⁺¹ = Xⁿ⁺¹ + (Xⁿ⁺¹ - X̅) * covariance_inflation - return Xₙ₊₁, Δtₙ + return Xⁿ⁺¹, Δtⁿ end -function iglesias_2013_update(Xₙ, Gₙ, eki; Δtₙ=1.0, perturb_observation=false) +function iglesias_2013_update(Xⁿ, Gⁿ, eki; Δtⁿ=1.0, perturb_observation=false) - N_obs, N_ens = size(Gₙ) + N_obs, N_ens = size(Gⁿ) y = observations(eki) Γy = obs_noise_covariance(eki) μ_noise = obs_noise_mean(eki) # Scale noise Γy using Δt. - Δt⁻¹Γy = Γy / Δtₙ + Δt⁻¹Γy = Γy / Δtⁿ + - y_perturbed = zeros(length(y), N_ens) - y_perturbed .= y if perturb_observation + ỹ = zeros(length(y), N_ens) + ỹ .= y + Δt⁻¹Γyᴴ = Matrix(Hermitian(Δt⁻¹Γy)) @assert Δt⁻¹Γyᴴ ≈ Δt⁻¹Γy + ξₙ = rand(MvNormal(μ_noise, Δt⁻¹Γyᴴ), N_ens) - y_perturbed .+= ξₙ # [N_obs x N_ens] + ỹ .+= ξₙ # [N_obs x N_ens] + else + ỹ = y end - Cᶿᵍ = cov(Xₙ, Gₙ, dims = 2, corrected = false) # [N_par × N_obs] - Cᵍᵍ = cov(Gₙ, Gₙ, dims = 2, corrected = false) # [N_obs × N_obs] + Cᶿᵍ = cov(Xⁿ, Gⁿ, dims = 2, corrected = false) # [N_par × N_obs] + Cᵍᵍ = cov(Gⁿ, Gⁿ, dims = 2, corrected = false) # [N_obs × N_obs] # EKI update: θ ← θ + Cᶿᵍ(Cᵍᵍ + h⁻¹Γy)⁻¹(y + ξₙ - g) - tmp = (Cᵍᵍ + Δt⁻¹Γy) \ (y_perturbed - Gₙ) # [N_obs × N_ens] - Xₙ₊₁ = Xₙ + (Cᶿᵍ * tmp) # [N_par × N_ens] + tmp = (Cᵍᵍ + Δt⁻¹Γy) \ (ỹ - Gⁿ) # [N_obs × N_ens] + Xⁿ⁺¹ = Xⁿ + (Cᶿᵍ * tmp) # [N_par × N_ens] - return Xₙ₊₁ + return Xⁿ⁺¹ end -frobenius_norm(A) = sqrt(sum(A .^ 2)) - -function compute_D(Xₙ, Gₙ, eki) +function compute_D(Xⁿ, Gⁿ, eki) y = observations(eki) - g̅ = mean(Gₙ, dims = 2) + g̅ = mean(Gⁿ, dims=2) Γy⁻¹ = inv_obs_noise_covariance(eki) # Transformation matrix (D(uₙ))ᵢⱼ = ⟨ G(u⁽ʲ⁾) - g̅, Γy⁻¹(G(u⁽ⁱ⁾) - y) ⟩ - D = transpose(Gₙ .- g̅) * Γy⁻¹ * (Gₙ .- y) + G′ = Gⁿ .- g̅ + + N_obs, N_ens = size(Gⁿ) + y = reshape(y, N_obs, 1) + ϵ = Gⁿ .- y + + D = transpose(G′) * Γy⁻¹ * ϵ return D end -function kovachki_2018_update(Xₙ, Gₙ, eki; Δt₀=1.0, D=nothing) - N_ens = size(Xₙ, 2) - D = isnothing(D) ? compute_D(Xₙ, Gₙ, eki) : D +frobenius_norm(A) = sqrt(sum(a -> a^2, A)) - # Calculate time step Δtₙ₋₁ = Δt₀ / (frobenius_norm(D(uₙ)) + ϵ) - Δtₙ = Δt₀ / frobenius_norm(D) +function kovachki_2018_update(Xⁿ, Gⁿ, eki; Δt₀=1.0, D=nothing) + + if isnothing(D) + D = compute_D(Xⁿ, Gⁿ, eki) + end + + # Calculate time step Δtⁿ⁻¹ = Δt₀ / (frobenius_norm(D(uₙ)) + ϵ) + Δtⁿ = Δt₀ / frobenius_norm(D) # Update - Xₙ₊₁ = Xₙ - (Δtₙ / N_ens) * Xₙ * D + N_ens = size(Xⁿ, 2) + Xⁿ⁺¹ = Xⁿ - (Δtⁿ / N_ens) * Xⁿ * D - return Xₙ₊₁, Δtₙ + return Xⁿ⁺¹, Δtⁿ end ##### @@ -177,46 +191,45 @@ Kovachki2018InitialConvergenceRatio(; initial_convergence_ratio=0.7) = Kovachki2018InitialConvergenceRatio(initial_convergence_ratio, 0.0) """ - eki_update(pseudo_scheme::ConstantPseudoTimeStep, Xₙ, Gₙ, eki) + eki_update(pseudo_scheme::ConstantPseudoTimeStep, Xⁿ, Gⁿ, eki) Implement an EKI update with a fixed time step given by `pseudo_scheme.step_size`. """ -function eki_update(pseudo_scheme::ConstantPseudoTimeStep, Xₙ, Gₙ, eki) - Δtₙ = pseudo_scheme.step_size - Xₙ₊₁ = iglesias_2013_update(Xₙ, Gₙ, eki; Δtₙ) - return Xₙ₊₁, Δtₙ +function eki_update(pseudo_scheme::ConstantPseudoTimeStep, Xⁿ, Gⁿ, eki) + Δtⁿ = pseudo_scheme.step_size + Xⁿ⁺¹ = iglesias_2013_update(Xⁿ, Gⁿ, eki; Δtⁿ) + return Xⁿ⁺¹, Δtⁿ end """ - eki_update(pseudo_scheme::Kovachki2018, Xₙ, Gₙ, eki) + eki_update(pseudo_scheme::Kovachki2018, Xⁿ, Gⁿ, eki) Implement an EKI update with an adaptive time step estimated as suggested by Kovachki et al. "Ensemble Kalman Inversion: A Derivative-Free Technique For Machine Learning Tasks" (2018). """ -function eki_update(pseudo_scheme::Kovachki2018, Xₙ, Gₙ, eki) +function eki_update(pseudo_scheme::Kovachki2018, Xⁿ, Gⁿ, eki) initial_step_size = pseudo_scheme.initial_step_size - Xₙ₊₁, Δtₙ = kovachki_2018_update(Xₙ, Gₙ, eki; Δt₀=initial_step_size) - + Xⁿ⁺¹, Δtⁿ = kovachki_2018_update(Xⁿ, Gⁿ, eki; Δt₀=initial_step_size) - return Xₙ₊₁, Δtₙ + return Xⁿ⁺¹, Δtⁿ end -function eki_update(pseudo_scheme::Kovachki2018InitialConvergenceRatio, Xₙ, Gₙ, eki) +function eki_update(pseudo_scheme::Kovachki2018InitialConvergenceRatio, Xⁿ, Gⁿ, eki) if pseudo_scheme.initial_step_size == 0 target = pseudo_scheme.initial_convergence_ratio - D = compute_D(Xₙ, Gₙ, eki) - det_cov_init = det(cov(Xₙ, dims = 2)) - conv_ratio(Xₙ₊₁) = det(cov(Xₙ₊₁, dims = 2)) / det_cov_init + D = compute_D(Xⁿ, Gⁿ, eki) + det_cov_init = det(cov(Xⁿ, dims = 2)) + conv_ratio(Xⁿ⁺¹) = det(cov(Xⁿ⁺¹, dims = 2)) / det_cov_init # First guess Δt₀ = 1.0 - Xₙ₊₁, Δtₙ = kovachki_2018_update(Xₙ, Gₙ, eki; Δt₀, D) + Xⁿ⁺¹, Δtⁿ = kovachki_2018_update(Xⁿ, Gⁿ, eki; Δt₀, D) # Coarse adjustment to find the right order of magnitude - r = conv_ratio(Xₙ₊₁) + r = conv_ratio(Xⁿ⁺¹) too_big = r > target i = too_big first_guess(i, Δt₀) = i ? Δt₀*2 : Δt₀/2 @@ -228,14 +241,14 @@ function eki_update(pseudo_scheme::Kovachki2018InitialConvergenceRatio, Xₙ, G # The first guess assumes that the convergence ratio decreases with increasing time step Δt₀_guess = first_guess(i, Δt₀) - Xₙ₊₁, Δtₙ = kovachki_2018_update(Xₙ, Gₙ, eki; Δt₀=Δt₀_guess, D) - r_test = conv_ratio(Xₙ₊₁) + Xⁿ⁺¹, Δtⁿ = kovachki_2018_update(Xⁿ, Gⁿ, eki; Δt₀=Δt₀_guess, D) + r_test = conv_ratio(Xⁿ⁺¹) if (r_test > r) == i # Convergence ratio didn't adjust in the direction we expected; try the other direction Δt₀_guess = second_guess(i, Δt₀) - Xₙ₊₁, Δtₙ = kovachki_2018_update(Xₙ, Gₙ, eki; Δt₀=Δt₀_guess, D) - r_test = conv_ratio(Xₙ₊₁) + Xⁿ⁺¹, Δtⁿ = kovachki_2018_update(Xⁿ, Gⁿ, eki; Δt₀=Δt₀_guess, D) + r_test = conv_ratio(Xⁿ⁺¹) end Δt₀ = Δt₀_guess @@ -250,8 +263,8 @@ function eki_update(pseudo_scheme::Kovachki2018InitialConvergenceRatio, Xₙ, G while !isapprox(r, target, atol=0.03, rtol=0.1) && iter < 10 Δt₀_test = Δt₀ * (r / target)^p - Xₙ₊₁, Δtₙ = kovachki_2018_update(Xₙ, Gₙ, eki; Δt₀=Δt₀_test, D) - r_test = conv_ratio(Xₙ₊₁) + Xⁿ⁺¹, Δtⁿ = kovachki_2018_update(Xⁿ, Gⁿ, eki; Δt₀=Δt₀_test, D) + r_test = conv_ratio(Xⁿ⁺¹) # Make sure the convergence ratio moved closer to the target; otherwise halt # to prevent divergence. @@ -266,72 +279,70 @@ function eki_update(pseudo_scheme::Kovachki2018InitialConvergenceRatio, Xₙ, G pseudo_scheme.initial_step_size = Δt₀ - return Xₙ₊₁, Δtₙ + return Xⁿ⁺¹, Δtⁿ else - return eki_update(Kovachki2018(initial_step_size = pseudo_scheme.initial_step_size), Xₙ, Gₙ, eki) + return eki_update(Kovachki2018(initial_step_size = pseudo_scheme.initial_step_size), Xⁿ, Gⁿ, eki) end end """ - eki_update(pseudo_scheme::ThresholdedConvergenceRatio, Xₙ, Gₙ, eki; initial_guess=nothing) + eki_update(pseudo_scheme::ThresholdedConvergenceRatio, Xⁿ, Gⁿ, eki; initial_guess=nothing) Implement an EKI update with an adaptive time step estimated as suggested by Chada, Neil and Tong, Xin "Convergence Aacceleration of Ensemble Kalman Inversion in Nonlinear Settings," Math. Comp. 91 (2022). """ -function eki_update(pseudo_scheme::Chada2021, Xₙ, Gₙ, eki) +function eki_update(pseudo_scheme::Chada2021, Xⁿ, Gⁿ, eki) n = eki.iteration initial_step_size = pseudo_scheme.initial_step_size - Δtₙ = ((n+1) ^ pseudo_scheme.β) * initial_step_size - Xₙ₊₁ = iglesias_2013_update(Xₙ, Gₙ, eki; Δtₙ) + Δtⁿ = ((n+1) ^ pseudo_scheme.β) * initial_step_size + Xⁿ⁺¹ = iglesias_2013_update(Xⁿ, Gⁿ, eki; Δtⁿ) - return Xₙ₊₁, Δtₙ + return Xⁿ⁺¹, Δtⁿ end """ - eki_update(pseudo_scheme::ThresholdedConvergenceRatio, Xₙ, Gₙ, eki; initial_guess=nothing, report=true) + eki_update(pseudo_scheme::ThresholdedConvergenceRatio, Xⁿ, Gⁿ, eki; initial_guess=nothing, report=true) Implement an EKI update with an adaptive time step estimated by finding the first step size -in the sequence `Δtₖ = Δtₙ₋₁ * (1/2)^k` with `k = {0, 1, 2, ...}` that satisfies -`|cov(Xₙ₊₁)| / |cov(Xₙ)| > pseudo_scheme.cov_threshold`, assuming the determinant ratio +in the sequence `Δtₖ = Δtⁿ⁻¹ * (1/2)^k` with `k = {0, 1, 2, ...}` that satisfies +`|cov(Xⁿ⁺¹)| / |cov(Xⁿ)| > pseudo_scheme.cov_threshold`, assuming the determinant ratio is a monotonically increasing function of `k`. If an `initial_guess` is provided, -`Δtₙ₋₁` in the above sequence is replaced with `initial_guess`. If an `initial_guess` +`Δtⁿ⁻¹` in the above sequence is replaced with `initial_guess`. If an `initial_guess` is not provided, the time step can only decrease or stay the same at future iterations with this time stepping scheme. """ -function eki_update(pseudo_scheme::ThresholdedConvergenceRatio, Xₙ, Gₙ, eki; initial_guess=nothing, report=true) +function eki_update(pseudo_scheme::ThresholdedConvergenceRatio, Xⁿ, Gⁿ, eki; initial_guess=nothing, report=true) - N_param, N_ensemble = size(Xₙ) + N_param, N_ensemble = size(Xⁿ) @assert N_ensemble > N_param "The number of parameters exceeds the ensemble size and so the ensemble covariance matrix will be singular. Please increase the ensemble size to at least $N_param or choose an AbstractSteppingScheme that does not rely on inverting the ensemble convariance matrix." - Δtₙ₋₁ = isnothing(initial_guess) ? eki.pseudo_Δt : initial_guess + Δtⁿ⁻¹ = isnothing(initial_guess) ? eki.pseudo_Δt : initial_guess accept_stepsize = false - Δtₙ = copy(Δtₙ₋₁) + Δtⁿ = copy(Δtⁿ⁻¹) - cov_init = cov(Xₙ, dims = 2) + cov_init = cov(Xⁿ, dims = 2) det_cov_init = det(cov_init) @assert det_cov_init != 0 "Ensemble covariance is singular!" while !accept_stepsize - - Xₙ₊₁ = iglesias_2013_update(Xₙ, Gₙ, eki; Δtₙ) - - cov_new = cov(Xₙ₊₁, dims = 2) + Xⁿ⁺¹ = iglesias_2013_update(Xⁿ, Gⁿ, eki; Δtⁿ) + cov_new = cov(Xⁿ⁺¹, dims = 2) if det(cov_new) > pseudo_scheme.cov_threshold * det_cov_init accept_stepsize = true else - Δtₙ = Δtₙ / 2 + Δtⁿ = Δtⁿ / 2 end end - Xₙ₊₁ = iglesias_2013_update(Xₙ, Gₙ, eki; Δtₙ) + Xⁿ⁺¹ = iglesias_2013_update(Xⁿ, Gⁿ, eki; Δtⁿ) - return Xₙ₊₁, Δtₙ + return Xⁿ⁺¹, Δtⁿ end """ @@ -435,15 +446,15 @@ end ensemble_array(eki, iter) = eki.iteration_summaries[iter].unconstrained_parameters """ - eki_update(pseudo_scheme::ConstantConvergence, Xₙ, Gₙ, eki) + eki_update(pseudo_scheme::ConstantConvergence, Xⁿ, Gⁿ, eki) Implement an EKI update with an adaptive time step estimated to encourage a prescribed rate of ensemble collapse as measured by the ratio of the ensemble covariance matrix determinants at consecutive iterations. """ -function eki_update(pseudo_scheme::ConstantConvergence, Xₙ, Gₙ, eki) +function eki_update(pseudo_scheme::ConstantConvergence, Xⁿ, Gⁿ, eki) - N_param, N_ensemble = size(Xₙ) + N_param, N_ensemble = size(Xⁿ) N_ensemble > N_param || throw(ArgumentError( "The number of parameters exceeds the ensemble size and so the ensemble covariance matrix will be singular. Please increase the ensemble size to at least $N_param or choose an @@ -451,66 +462,66 @@ function eki_update(pseudo_scheme::ConstantConvergence, Xₙ, Gₙ, eki) conv_rate = pseudo_scheme.convergence_ratio - # Start with Δtₙ = 1.0; `Δtₙ_first_guess` is the first time step in the sequence Δtₖ = (1/2)^k where k={0,1,2...} - # such that |cov(Xₙ₊₁)|/|cov(Xₙ)|^(1/N) > pseudo_scheme.convergence_ratio, where `N` is the number of parameters + # Start with Δtⁿ = 1.0; `Δtⁿ_first_guess` is the first time step in the sequence Δtₖ = (1/2)^k where k={0,1,2...} + # such that |cov(Xⁿ⁺¹)|/|cov(Xⁿ)|^(1/N) > pseudo_scheme.convergence_ratio, where `N` is the number of parameters # (assuming the determinant ratio is monotonically increasing as a function of k). - _, Δtₙ_first_guess = eki_update(ThresholdedConvergenceRatio(cov_threshold=pseudo_scheme.convergence_ratio), - Xₙ, Gₙ, eki; initial_guess=1.0, report=false) + _, Δtⁿ_first_guess = eki_update(ThresholdedConvergenceRatio(cov_threshold=pseudo_scheme.convergence_ratio), + Xⁿ, Gⁿ, eki; initial_guess=1.0, report=false) - # `Δtₙ_first_guess` provides a reasonable initial guess for the time step. If we were to + # `Δtⁿ_first_guess` provides a reasonable initial guess for the time step. If we were to # start the fixed point iteration algorithm below with an initial guess of 1.0, the initial volume - # volume ratio could be obscenely small, leading to an obscenely small initial Δtₙ, - # sending the subsequent `r` values to ≈1.0. In such a situation the subsequently calculated Δtₙ + # volume ratio could be obscenely small, leading to an obscenely small initial Δtⁿ, + # sending the subsequent `r` values to ≈1.0. In such a situation the subsequently calculated Δtⁿ # would remain tiny, never recovering the desired order of magnitude; `r` would remain ≈1.0. - # `Δtₙ_first_guess` starts us off in the right order of magnitude for the linear assumption - # on `r` vs `Δtₙ` to be fruitful. - Δtₙ = Δtₙ_first_guess + # `Δtⁿ_first_guess` starts us off in the right order of magnitude for the linear assumption + # on `r` vs `Δtⁿ` to be fruitful. + Δtⁿ = Δtⁿ_first_guess - det_cov_init = det(cov(Xₙ, dims = 2)) + det_cov_init = det(cov(Xⁿ, dims = 2)) # Test step forward - Xₙ₊₁ = iglesias_2013_update(Xₙ, Gₙ, eki; Δtₙ) - rᴺ = det(cov(Xₙ₊₁, dims=2)) / det_cov_init + Xⁿ⁺¹ = iglesias_2013_update(Xⁿ, Gⁿ, eki; Δtⁿ) + rᴺ = det(cov(Xⁿ⁺¹, dims=2)) / det_cov_init r = rᴺ^(1/N_param) # "Accelerated" fixed point iteration to adjust step_size p = 1.1 iter = 1 while !isapprox(r, conv_rate, atol=0.03, rtol=0.1) && iter < 20 - Δtₙ *= (r / conv_rate)^p - Xₙ₊₁ = iglesias_2013_update(Xₙ, Gₙ, eki; Δtₙ) - rᴺ = det(cov(Xₙ₊₁, dims=2)) / det_cov_init + Δtⁿ *= (r / conv_rate)^p + Xⁿ⁺¹ = iglesias_2013_update(Xⁿ, Gⁿ, eki; Δtⁿ) + rᴺ = det(cov(Xⁿ⁺¹, dims=2)) / det_cov_init r = rᴺ^(1/N_param) iter += 1 end @info @sprintf("ConstantConvergence pseudo stepping: convergence ratio: %.6f (target: %.2f)", r, conv_rate) - return Xₙ₊₁, Δtₙ + return Xⁿ⁺¹, Δtⁿ end """ - eki_update(pseudo_scheme::Iglesias2021, Xₙ, Gₙ, eki) + eki_update(pseudo_scheme::Iglesias2021, Xⁿ, Gⁿ, eki) Implement an EKI update with an adaptive time step based on Iglesias et al. "Adaptive Regularization for Ensemble Kalman Inversion," Inverse Problems, 2021. """ -function eki_update(pseudo_scheme::Iglesias2021, Xₙ, Gₙ, eki) +function eki_update(pseudo_scheme::Iglesias2021, Xⁿ, Gⁿ, eki) n = eki.iteration - M, J = size(Gₙ) + M, J = size(Gⁿ) - Φ = [sum(eki_objective(eki, Xₙ[:, j], Gₙ[:, j], augmented = eki.tikhonov)) for j=1:J] + Φ = [sum(eki_objective(eki, Xⁿ[:, j], Gⁿ[:, j], augmented = eki.tikhonov)) for j=1:J] Φ_mean = mean(Φ) Φ_var = var(Φ) qₙ = maximum( (M/(2Φ_mean), sqrt(M/(2Φ_var))) ) tₙ = n == 0 ? 0.0 : sum(getproperty.(eki.iteration_summaries, :pseudo_Δt)) - Δtₙ = minimum([qₙ, 1-tₙ]) - Xₙ₊₁ = iglesias_2013_update(Xₙ, Gₙ, eki; Δtₙ) + Δtⁿ = minimum([qₙ, 1-tₙ]) + Xⁿ⁺¹ = iglesias_2013_update(Xⁿ, Gⁿ, eki; Δtⁿ) - return Xₙ₊₁, Δtₙ + return Xⁿ⁺¹, Δtⁿ end end # module diff --git a/src/iteration_summary.jl b/src/iteration_summary.jl index 01c5ca58..f1ee79a5 100644 --- a/src/iteration_summary.jl +++ b/src/iteration_summary.jl @@ -35,7 +35,7 @@ inv(sqrt(Γ))`. When keyword argument `constrained` is provided with `true` then input `θ` is assumed to represent constrained parameters. """ -function eki_objective(eki, θ, G::AbstractVector; constrained = false, augmented = false) +function eki_objective(eki, θ, G::AbstractVector; constrained=false, augmented=false) y = eki.mapped_observations Γy = eki.noise_covariance inv_sqrt_Γy = eki.precomputed_arrays[:inv_sqrt_Γy] @@ -50,16 +50,23 @@ function eki_objective(eki, θ, G::AbstractVector; constrained = false, augmente if augmented y = eki.precomputed_arrays[:y_augmented] inv_sqrt_Σ = eki.precomputed_arrays[:inv_sqrt_Σ] - η_mean_augmented = eki.precomputed_arrays[:η_mean_augmented] - Φ₁ = (1/2) * norm(inv_sqrt_Σ * (y - G - η_mean_augmented))^2 + η̃ = eki.precomputed_arrays[:η_mean_augmented] + ϵ = inv_sqrt_Σ * (y - G - η̃) + Φ₁ = norm(ϵ)^2 / 2 return (Φ₁, 0) end - # Φ₁ = (1/2)*|| Γy^(-½) * (y - G) ||² - Φ₁ = (1/2) * norm(inv_sqrt_Γy * (y .- G))^2 + # Φ₁ = 1/2 * || Γy^(-½) * (y - G) ||² + ϵ = inv_sqrt_Γy * (y .- G) + Φ₁ = norm(ϵ)^2 / 2 - # Φ₂ = (1/2)*|| Γθ^(-½) * (θ - μθ) ||² - Φ₂ = eki.tikhonov ? (1/2) * norm(inv_sqrt_Γθ * (θ .- μθ))^2 : 0 + # Φ₂ = 1/2 * || Γθ^(-½) * (θ - μθ) ||² + if eki.tikhonov + χ = inv_sqrt_Γθ * (θ .- μθ) + Φ₂ = norm(χ)^2 / 2 + else + Φ₂ = 0 + end return (Φ₁, Φ₂) end diff --git a/test/runtests.jl b/test/runtests.jl index 067b449a..1bb2e9ab 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,6 +1,6 @@ using Documenter, Test -include("test_lesbrary_datadeps.jl") +# include("test_lesbrary_datadeps.jl") include("test_synthetic_observations.jl") include("test_transformations.jl") include("test_parameters.jl") @@ -12,6 +12,5 @@ include("test_utils.jl") @testset "Doctests" begin using ParameterEstimocean, Distributions - doctest(ParameterEstimocean) end diff --git a/test/test_synthetic_observations.jl b/test/test_synthetic_observations.jl index e9fa3935..9274257e 100644 --- a/test/test_synthetic_observations.jl +++ b/test/test_synthetic_observations.jl @@ -11,8 +11,8 @@ using Oceananigans.TurbulenceClosures: ConvectiveAdjustmentVerticalDiffusivity # Generate synthetic observations Nz = 16 Lz = 128 - Qᵇ = 1e-8 - Qᵘ = -1e-5 + Jᵇ = 1e-8 + Jᵘ = -1e-5 Δt = 20.0 f₀ = 1e-4 N² = 1e-5 @@ -34,17 +34,17 @@ using Oceananigans.TurbulenceClosures: ConvectiveAdjustmentVerticalDiffusivity closure = ConvectiveAdjustmentVerticalDiffusivity(; convective_κz, background_κz, convective_νz, background_νz) coriolis = FPlane(f=f₀) - u_bcs = FieldBoundaryConditions(top = FluxBoundaryCondition(Qᵘ)) - b_bcs = FieldBoundaryConditions(top = FluxBoundaryCondition(Qᵇ), bottom = GradientBoundaryCondition(N²)) + u_bcs = FieldBoundaryConditions(top = FluxBoundaryCondition(Jᵘ)) + b_bcs = FieldBoundaryConditions(top = FluxBoundaryCondition(Jᵇ), bottom = GradientBoundaryCondition(N²)) model = HydrostaticFreeSurfaceModel(; grid, coriolis, closure, tracers = :b, buoyancy = BuoyancyTracer(), boundary_conditions = (; u=u_bcs, b=b_bcs)) - set!(model, b = (x, y, z) -> N² * z) + set!(model, b = z -> N² * z) simulation = Simulation(model; Δt, stop_time) - init_with_parameters(file, model) = file["parameters"] = (; Qᵇ, Qᵘ, Δt, N², tracers=keys(model.tracers)) + init_with_parameters(file, model) = file["parameters"] = (; Jᵇ, Jᵘ, Δt, N², tracers=keys(model.tracers)) simulation.output_writers[:fields] = JLD2OutputWriter(model, merge(model.velocities, model.tracers), schedule = TimeInterval(save_interval), filename = experiment_name,