diff --git a/.buildkite/dss_scaling/pipeline.yml b/.buildkite/dss_scaling/pipeline.yml index 44f20f8d6b..7765d6c7fa 100644 --- a/.buildkite/dss_scaling/pipeline.yml +++ b/.buildkite/dss_scaling/pipeline.yml @@ -1,5 +1,5 @@ env: - JULIA_VERSION: "1.8.3" + JULIA_VERSION: "1.9.2" MPICH_VERSION: "4.0.0" OPENMPI_VERSION: "4.1.1" CUDA_VERSION: "11.2" diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 3bc000fb94..ad717e478b 100755 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -1,13 +1,15 @@ agents: queue: central slurm_mem: 8G - modules: julia/1.8.5 cuda/11.8 ucx/1.14.1_cuda-11.8 openmpi/4.1.5_cuda-11.8 hdf5/1.12.2-ompi415 nsight-systems/2023.2.1 + modules: julia/1.9.2 cuda/11.8 ucx/1.14.1_cuda-11.8 openmpi/4.1.5_cuda-11.8 hdf5/1.12.2-ompi415 nsight-systems/2023.2.1 env: JULIA_LOAD_PATH: "${JULIA_LOAD_PATH}:${BUILDKITE_BUILD_CHECKOUT_PATH}/.buildkite" OPENBLAS_NUM_THREADS: 1 JULIA_NVTX_CALLBACKS: gc OMPI_MCA_opal_warn_on_missing_libcuda: 0 + # JULIA_CPU_TARGET: broadwell # arch used by GPU nodes + JULIA_CPU_TARGET: 'broadwell;skylake' steps: - label: "initialize" @@ -20,6 +22,7 @@ steps: - echo "--- Instantiate test" - "julia --project=test -e 'using Pkg; Pkg.develop(path=\".\"); Pkg.instantiate(;verbose=true); Pkg.precompile(;strict=true)'" + - "julia --project=test --check-bounds=yes -e 'using Pkg; Pkg.instantiate(;verbose=true); Pkg.precompile(;strict=true)'" - echo "--- Instantiate lib/ClimaCoreTempestRemap" - "julia --project=lib/ClimaCoreTempestRemap -e 'using Pkg; Pkg.develop(path=\".\"); Pkg.instantiate(;verbose=true); Pkg.precompile(;strict=true)'" @@ -29,6 +32,7 @@ steps: - echo "--- Instantiate examples" - "julia --project=examples -e 'using Pkg; Pkg.instantiate(;verbose=true); Pkg.precompile(;strict=true)'" + - "julia --project=examples --check-bounds=yes -e 'using Pkg; Pkg.instantiate(;verbose=true); Pkg.precompile(;strict=true)'" - echo "--- Instantiate benchmarks" - "julia --project=benchmarks/bickleyjet -e 'using Pkg; Pkg.instantiate(;verbose=true); Pkg.precompile(;strict=true)'" @@ -37,7 +41,8 @@ steps: - "julia --project -e 'using Pkg; Pkg.status()'" agents: - slurm_mem: 32G + slurm_mem: 80G + slurm_gpus: 1 slurm_cpus_per_task: 8 env: JULIA_NUM_PRECOMPILE_TASKS: 8 @@ -330,10 +335,6 @@ steps: agents: slurm_gpus: 1 - - label: "Unit: fielddiffeq" - key: unit_fielddiffeq - command: "julia --color=yes --check-bounds=yes --project=test test/Fields/fielddiffeq.jl" - - label: "Unit: reduction cuda" key: unit_reduction_cuda command: @@ -517,6 +518,10 @@ steps: key: unit_field2arrays command: "julia --color=yes --check-bounds=yes --project=test test/MatrixFields/field2arrays.jl" + - label: "Unit: matrix multiplication at boundaries" + key: unit_matrix_multiplication_at_boundaries + command: "julia --color=yes --check-bounds=yes --project=test test/MatrixFields/matrix_multiplication_at_boundaries.jl" + - label: "Unit: matrix field broadcasting (CPU)" key: unit_matrix_field_broadcasting_cpu command: "julia --color=yes --check-bounds=yes --project=test test/MatrixFields/matrix_field_broadcasting.jl" @@ -526,7 +531,7 @@ steps: command: "julia --color=yes --project=test test/MatrixFields/matrix_field_broadcasting.jl" agents: slurm_gpus: 1 - slurm_mem: 20GB + slurm_mem: 40GB - group: "Unit: Hypsography" steps: @@ -1175,6 +1180,8 @@ steps: - "julia --color=yes --project=examples examples/hybrid/sphere/hadley_circulation.jl" artifact_paths: - "examples/hybrid/sphere/output/hadley_circulation/*" + agents: + slurm_mem: 20GB - label: ":computer: Float 64 3D sphere baroclinic wave (ρe)" key: "cpu_baroclinic_wave_rho_e_float64" @@ -1255,6 +1262,7 @@ steps: - "examples/hybrid/sphere/output/held_suarez_rhoe/Float32/*" env: TEST_NAME: "sphere/held_suarez_rhoe" + soft_fail: true - label: ":computer: Float64 3D sphere dry Held-Suarez (ρθ)" key: "cpu_held_suarez_rho_theta_float64" diff --git a/.buildkite/scaling/pipeline.yml b/.buildkite/scaling/pipeline.yml index 8699912840..b32d8a52f3 100644 --- a/.buildkite/scaling/pipeline.yml +++ b/.buildkite/scaling/pipeline.yml @@ -1,5 +1,5 @@ env: - JULIA_VERSION: "1.8.3" + JULIA_VERSION: "1.9.2" MPICH_VERSION: "4.0.0" OPENMPI_VERSION: "4.1.1" CUDA_VERSION: "11.2" diff --git a/.dev/Manifest.toml b/.dev/Manifest.toml index 06f106e493..a71521491f 100644 --- a/.dev/Manifest.toml +++ b/.dev/Manifest.toml @@ -1,6 +1,6 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.8.5" +julia_version = "1.9.2" manifest_format = "2.0" project_hash = "30b405be1c677184b7703a9bfb3d2100029ccad0" @@ -27,15 +27,19 @@ uuid = "a80b9123-70ca-4bc0-993e-6e3bcb318db6" version = "0.8.12" [[deps.Compat]] -deps = ["Dates", "LinearAlgebra", "UUIDs"] +deps = ["UUIDs"] git-tree-sha1 = "7a60c856b9fa189eb34f5f8a6f6b5529b7942957" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" version = "4.6.1" +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+0" [[deps.Crayons]] git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" @@ -104,7 +108,7 @@ version = "1.10.2+0" uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" [[deps.LinearAlgebra]] -deps = ["Libdl", "libblastrampoline_jll"] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" [[deps.Logging]] @@ -117,14 +121,14 @@ uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" [[deps.MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.0+0" +version = "2.28.2+0" [[deps.Mmap]] uuid = "a63ad114-7e13-5084-954f-fe012c677804" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2022.2.1" +version = "2022.10.11" [[deps.NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" @@ -133,7 +137,7 @@ version = "1.2.0" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.20+0" +version = "0.3.21+4" [[deps.OrderedCollections]] git-tree-sha1 = "d321bf2de576bf25ec4d3e4360faca399afca282" @@ -147,9 +151,9 @@ uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" version = "2.7.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.9.2" [[deps.PrecompileTools]] deps = ["Preferences"] @@ -188,12 +192,12 @@ uuid = "6462fe0b-24de-5631-8697-dd941f90decc" [[deps.TOML]] deps = ["Dates"] uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.0" +version = "1.0.3" [[deps.Tar]] deps = ["ArgTools", "SHA"] uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" -version = "1.10.1" +version = "1.10.0" [[deps.Tokenize]] git-tree-sha1 = "90538bf898832b6ebd900fa40f223e695970e3a5" @@ -215,12 +219,12 @@ uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.12+3" +version = "1.2.13+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+0" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] diff --git a/.github/workflows/ClimaCoreMakie.yml b/.github/workflows/ClimaCoreMakie.yml index 0178ccc04d..1d238be631 100644 --- a/.github/workflows/ClimaCoreMakie.yml +++ b/.github/workflows/ClimaCoreMakie.yml @@ -17,7 +17,7 @@ jobs: uses: actions/checkout@v2 - uses: julia-actions/setup-julia@latest with: - version: '1.8' + version: '1.9' - uses: actions/cache@v1 env: cache-name: cache-artifacts diff --git a/.github/workflows/ClimaCorePlots.yml b/.github/workflows/ClimaCorePlots.yml index 663a0c7c50..7d42391b5a 100644 --- a/.github/workflows/ClimaCorePlots.yml +++ b/.github/workflows/ClimaCorePlots.yml @@ -17,7 +17,7 @@ jobs: uses: actions/checkout@v2 - uses: julia-actions/setup-julia@latest with: - version: '1.8' + version: '1.9' - uses: actions/cache@v1 env: cache-name: cache-artifacts diff --git a/.github/workflows/ClimaCoreSpectra.yml b/.github/workflows/ClimaCoreSpectra.yml index 28ab95162f..96ca35f149 100644 --- a/.github/workflows/ClimaCoreSpectra.yml +++ b/.github/workflows/ClimaCoreSpectra.yml @@ -17,7 +17,7 @@ jobs: uses: actions/checkout@v2 - uses: julia-actions/setup-julia@latest with: - version: '1.8' + version: '1.9' - uses: actions/cache@v1 env: cache-name: cache-artifacts diff --git a/.github/workflows/ClimaCoreTempestRemap.yml b/.github/workflows/ClimaCoreTempestRemap.yml index b6b6f59f3c..952f03a736 100644 --- a/.github/workflows/ClimaCoreTempestRemap.yml +++ b/.github/workflows/ClimaCoreTempestRemap.yml @@ -17,7 +17,7 @@ jobs: uses: actions/checkout@v2 - uses: julia-actions/setup-julia@latest with: - version: '1.8' + version: '1.9' - uses: actions/cache@v1 env: cache-name: cache-artifacts diff --git a/.github/workflows/ClimaCoreVTK.yml b/.github/workflows/ClimaCoreVTK.yml index 85582ebdc2..fb80cfce3d 100644 --- a/.github/workflows/ClimaCoreVTK.yml +++ b/.github/workflows/ClimaCoreVTK.yml @@ -17,7 +17,7 @@ jobs: uses: actions/checkout@v2 - uses: julia-actions/setup-julia@latest with: - version: '1.8' + version: '1.9' - uses: actions/cache@v1 env: cache-name: cache-artifacts diff --git a/.github/workflows/CodeCov.yml b/.github/workflows/CodeCov.yml index 8774678f51..af3dc14339 100644 --- a/.github/workflows/CodeCov.yml +++ b/.github/workflows/CodeCov.yml @@ -19,7 +19,7 @@ jobs: - name: Set up Julia uses: julia-actions/setup-julia@latest with: - version: 1.8 + version: 1.9 - name: Test with coverage run: | diff --git a/.github/workflows/JuliaFormatter.yml b/.github/workflows/JuliaFormatter.yml index 09793bc9ea..0e69c344b9 100644 --- a/.github/workflows/JuliaFormatter.yml +++ b/.github/workflows/JuliaFormatter.yml @@ -36,7 +36,7 @@ jobs: - uses: julia-actions/setup-julia@latest if: steps.filter.outputs.julia_file_change == 'true' with: - version: 1.8 + version: 1.9 - name: Apply JuliaFormatter if: steps.filter.outputs.julia_file_change == 'true' diff --git a/.github/workflows/Linux-UnitTests.yml b/.github/workflows/Linux-UnitTests.yml index 441b7bbb31..fb8f741464 100644 --- a/.github/workflows/Linux-UnitTests.yml +++ b/.github/workflows/Linux-UnitTests.yml @@ -16,7 +16,7 @@ jobs: strategy: fail-fast: false matrix: - julia-version: ['1.8'] + julia-version: ['1.9'] env: CLIMATEMACHINE_SETTINGS_FIX_RNG_SEED: "true" diff --git a/.github/workflows/OS-UnitTests.yml b/.github/workflows/OS-UnitTests.yml index f39e6c41ca..d407b0fd4e 100644 --- a/.github/workflows/OS-UnitTests.yml +++ b/.github/workflows/OS-UnitTests.yml @@ -45,7 +45,7 @@ jobs: uses: julia-actions/setup-julia@v1 if: steps.filter.outputs.run_test == 'true' with: - version: 1.8 + version: 1.9 - name: Cache artifacts uses: julia-actions/cache@v1 diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index e256e73bc8..7a58cd2d93 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -16,7 +16,7 @@ jobs: - uses: actions/checkout@v2 - uses: julia-actions/setup-julia@latest with: - version: 1.8 + version: 1.9 - name: Install dependencies run: julia --project=docs -e 'using Pkg; Pkg.instantiate(;verbose=true)' - name: Build and deploy diff --git a/Project.toml b/Project.toml index 0ab8fe8524..b8ed02c582 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "ClimaCore" uuid = "d414da3d-4745-48bb-8d80-42e94e092884" authors = ["CliMA Contributors "] -version = "0.10.46" +version = "0.10.47" [deps] Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" @@ -11,7 +11,6 @@ CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" ClimaComms = "3a4d1b5c-c61d-41fd-a00a-5873ba7a1b0d" CubedSphere = "7445602f-e544-4518-8976-18f8e8ae6cdb" DataStructures = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e" DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" GaussQuadrature = "d54b0c1a-921d-58e0-8e36-89d8069c0969" @@ -34,11 +33,10 @@ UnPack = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" Adapt = "3" BandedMatrices = "0.17" BlockArrays = "0.16" -ClimaComms = "0.5" CUDA = "3, 4.2.0" +ClimaComms = "0.5" CubedSphere = "0.2" DataStructures = "0.18" -DiffEqBase = "6.75" DocStringExtensions = "0.8, 0.9" ForwardDiff = "0.10" GaussQuadrature = "0.5" diff --git a/benchmarks/bickleyjet/Manifest.toml b/benchmarks/bickleyjet/Manifest.toml index 513ef86bcc..7e660bebad 100644 --- a/benchmarks/bickleyjet/Manifest.toml +++ b/benchmarks/bickleyjet/Manifest.toml @@ -1,25 +1,32 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.8.5" +julia_version = "1.9.2" manifest_format = "2.0" project_hash = "08c83b032e138c0186ad354ce66e1930ea00b8ee" -[[deps.ADTypes]] -git-tree-sha1 = "f5c25e8a5b29b5e941b7408bc8cc79fea4d9ef9a" -uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" -version = "0.1.6" - [[deps.AbstractFFTs]] -deps = ["ChainRulesCore", "LinearAlgebra", "Test"] +deps = ["LinearAlgebra"] git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" version = "1.5.0" + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" + + [deps.AbstractFFTs.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + [[deps.Adapt]] deps = ["LinearAlgebra", "Requires"] git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" version = "3.6.2" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" [[deps.ArgTools]] uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" @@ -31,6 +38,22 @@ git-tree-sha1 = "f83ec24f76d4c8f525099b2ac475fc098138ec31" uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" version = "7.4.11" + [deps.ArrayInterface.extensions] + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + 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" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + [[deps.ArrayLayouts]] deps = ["FillArrays", "LinearAlgebra", "SparseArrays"] git-tree-sha1 = "6189f7819e6345bcc097331c7db571f2f211364f" @@ -53,10 +76,14 @@ uuid = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" version = "0.4.2" [[deps.BandedMatrices]] -deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "PrecompileTools", "SparseArrays"] -git-tree-sha1 = "3cddbe0fad23df52587e675b3d71eea66b850cb9" +deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "PrecompileTools"] +git-tree-sha1 = "6e9b384d5e21452bc81cae3552c74f430e320985" uuid = "aae01518-5342-5314-be14-df237901396f" -version = "0.17.34" +version = "0.17.35" +weakdeps = ["SparseArrays"] + + [deps.BandedMatrices.extensions] + BandedMatricesSparseArraysExt = "SparseArrays" [[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" @@ -72,12 +99,6 @@ git-tree-sha1 = "43b1a4a8f797c1cddadf60499a8a077d4af2cd2d" uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" version = "0.1.7" -[[deps.BitTwiddlingConvenienceFunctions]] -deps = ["Static"] -git-tree-sha1 = "0c5f81f47bbbcf4aea7b2959135713459170798b" -uuid = "62783981-4cbd-42fc-bca8-16325de8dc4b" -version = "0.1.5" - [[deps.BlockArrays]] deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra"] git-tree-sha1 = "174b4970af15a500a29e76151f5c53195784b9d4" @@ -95,12 +116,6 @@ git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" version = "0.4.2" -[[deps.CPUSummary]] -deps = ["CpuId", "IfElse", "PrecompileTools", "Static"] -git-tree-sha1 = "89e0654ed8c7aebad6d5ad235d6242c2d737a928" -uuid = "2a0fbf3d-bb9c-48f3-b0a9-814d99fd7ab9" -version = "0.2.3" - [[deps.CUDA]] deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CUDA_Driver_jll", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "ExprTools", "GPUArrays", "GPUCompiler", "KernelAbstractions", "LLVM", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "Preferences", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "Requires", "SparseArrays", "SpecialFunctions", "UnsafeAtomicsLLVM"] git-tree-sha1 = "35160ef0f03b14768abfd68b830f8e3940e8e0dc" @@ -131,24 +146,6 @@ git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" version = "1.16.1+1" -[[deps.Calculus]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" -uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" -version = "0.5.1" - -[[deps.ChainRulesCore]] -deps = ["Compat", "LinearAlgebra", "SparseArrays"] -git-tree-sha1 = "e30f2f4e20f7f186dc36529910beaedc60cfa644" -uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.16.0" - -[[deps.ChangesOfVariables]] -deps = ["InverseFunctions", "LinearAlgebra", "Test"] -git-tree-sha1 = "2fba81a302a7be671aefe194f0525ef231104e7f" -uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" -version = "0.1.8" - [[deps.ClimaComms]] deps = ["CUDA", "MPI"] git-tree-sha1 = "6cbe1b835f91033e6326a92ac1a1f6a8c9b2215f" @@ -156,16 +153,10 @@ uuid = "3a4d1b5c-c61d-41fd-a00a-5873ba7a1b0d" version = "0.5.3" [[deps.ClimaCore]] -deps = ["Adapt", "BandedMatrices", "BlockArrays", "CUDA", "ClimaComms", "CubedSphere", "DataStructures", "DiffEqBase", "DocStringExtensions", "ForwardDiff", "GaussQuadrature", "GilbertCurves", "HDF5", "InteractiveUtils", "IntervalSets", "LinearAlgebra", "PkgVersion", "RecursiveArrayTools", "Requires", "RootSolvers", "SparseArrays", "Static", "StaticArrays", "Statistics", "UnPack"] +deps = ["Adapt", "BandedMatrices", "BlockArrays", "CUDA", "ClimaComms", "CubedSphere", "DataStructures", "DocStringExtensions", "ForwardDiff", "GaussQuadrature", "GilbertCurves", "HDF5", "InteractiveUtils", "IntervalSets", "LinearAlgebra", "PkgVersion", "RecursiveArrayTools", "Requires", "RootSolvers", "SparseArrays", "Static", "StaticArrays", "Statistics", "UnPack"] path = "../.." uuid = "d414da3d-4745-48bb-8d80-42e94e092884" -version = "0.10.46" - -[[deps.CloseOpenIntervals]] -deps = ["Static", "StaticArrayInterface"] -git-tree-sha1 = "70232f82ffaab9dc52585e0dd043b5e0c6b714f1" -uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9" -version = "0.1.12" +version = "0.10.47" [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] @@ -190,6 +181,10 @@ deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statist git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249" uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" version = "0.10.0" +weakdeps = ["SpecialFunctions"] + + [deps.ColorVectorSpace.extensions] + SpecialFunctionsExt = "SpecialFunctions" [[deps.Colors]] deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] @@ -197,11 +192,6 @@ git-tree-sha1 = "fc08e5930ee9a4e03f84bfb5211cb54e7769758a" uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" version = "0.12.10" -[[deps.CommonSolve]] -git-tree-sha1 = "0eee5eb66b1cf62cd6ad1b460238e60e4b09400c" -uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" -version = "0.2.4" - [[deps.CommonSubexpressions]] deps = ["MacroTools", "Test"] git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" @@ -209,15 +199,19 @@ uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" version = "0.3.0" [[deps.Compat]] -deps = ["Dates", "LinearAlgebra", "UUIDs"] -git-tree-sha1 = "5ce999a19f4ca23ea484e92a1774a61b8ca4cf8e" +deps = ["UUIDs"] +git-tree-sha1 = "e460f044ca8b99be31d35fe54fc33a5c33dd8ed7" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.8.0" +version = "4.9.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+0" [[deps.ConcurrentUtilities]] deps = ["Serialization", "Sockets"] @@ -225,23 +219,11 @@ git-tree-sha1 = "5372dbbf8f0bdb8c700db5367132925c0771ef7e" uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" version = "2.2.1" -[[deps.ConstructionBase]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "fe2838a593b5f776e1597e086dcd47560d94e816" -uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" -version = "1.5.3" - [[deps.Contour]] git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781" uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" version = "0.6.2" -[[deps.CpuId]] -deps = ["Markdown"] -git-tree-sha1 = "fcbb72b032692610bfbdb15018ac16a36cf2e406" -uuid = "adafc99b-e345-5852-983c-f28acb93d879" -version = "0.3.1" - [[deps.CubedSphere]] deps = ["Elliptic", "FFTW", "Printf", "ProgressBars", "SpecialFunctions", "TaylorSeries", "Test"] git-tree-sha1 = "131498c78453d02b4821d8b93f6e44595399f19f" @@ -255,9 +237,9 @@ version = "1.15.0" [[deps.DataStructures]] deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "cf25ccb972fec4e4817764d01c82386ae94f77b4" +git-tree-sha1 = "3dbd312d370723b6bb43ba9d02fc36abade4518d" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.14" +version = "0.18.15" [[deps.DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -270,19 +252,9 @@ uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" [[deps.DelimitedFiles]] deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" - -[[deps.DensityInterface]] -deps = ["InverseFunctions", "Test"] -git-tree-sha1 = "80c3e8639e3353e5d2912fb3a1916b8455e2494b" -uuid = "b429d917-457f-4dbc-8f4c-0cc954292b1d" -version = "0.4.0" - -[[deps.DiffEqBase]] -deps = ["ArrayInterface", "ChainRulesCore", "DataStructures", "Distributions", "DocStringExtensions", "EnumX", "FastBroadcast", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "Printf", "RecursiveArrayTools", "Reexport", "Requires", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces", "ZygoteRules"] -git-tree-sha1 = "c5692436e7f8279503466db216c74165d1b301e4" -uuid = "2b5f629d-d688-5b77-993f-72d75c75574e" -version = "6.127.0" +version = "1.9.1" [[deps.DiffResults]] deps = ["StaticArraysCore"] @@ -300,12 +272,6 @@ version = "1.15.1" deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" -[[deps.Distributions]] -deps = ["ChainRulesCore", "DensityInterface", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SparseArrays", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns", "Test"] -git-tree-sha1 = "e76a3281de2719d7c81ed62c6ea7057380c87b1d" -uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.25.98" - [[deps.DocStringExtensions]] deps = ["LibGit2"] git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" @@ -317,22 +283,11 @@ deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" version = "1.6.0" -[[deps.DualNumbers]] -deps = ["Calculus", "NaNMath", "SpecialFunctions"] -git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" -uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" -version = "0.6.8" - [[deps.Elliptic]] git-tree-sha1 = "71c79e77221ab3a29918aaf6db4f217b89138608" uuid = "b305315f-e792-5b7a-8f41-49f472929428" version = "1.0.1" -[[deps.EnumX]] -git-tree-sha1 = "bdb1942cd4c45e3c678fd11569d5cccd80976237" -uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" -version = "1.0.4" - [[deps.ExceptionUnwrapping]] deps = ["Test"] git-tree-sha1 = "e90caa41f5a86296e014e148ee061bd6c3edec96" @@ -374,12 +329,6 @@ git-tree-sha1 = "c6033cc3892d0ef5bb9cd29b7f2f0331ea5184ea" uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" version = "3.3.10+0" -[[deps.FastBroadcast]] -deps = ["ArrayInterface", "LinearAlgebra", "Polyester", "Static", "StaticArrayInterface", "StrideArraysCore"] -git-tree-sha1 = "aa9925a229d45fe3018715238956766fa21804d1" -uuid = "7034ab61-46d4-4ed7-9d0f-46aef9175898" -version = "0.2.6" - [[deps.FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" @@ -408,10 +357,14 @@ uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" version = "0.4.2" [[deps.ForwardDiff]] -deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions", "StaticArrays"] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] git-tree-sha1 = "00e252f4d706b3d55a8863432e742bf5717b498d" uuid = "f6369f11-7733-5829-9624-2563aa707210" version = "0.10.35" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" [[deps.FreeType2_jll]] deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] @@ -425,21 +378,6 @@ git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" uuid = "559328eb-81f9-559d-9380-de523a88c83c" version = "1.0.10+0" -[[deps.FunctionWrappers]] -git-tree-sha1 = "d62485945ce5ae9c0c48f124a84998d755bae00e" -uuid = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e" -version = "1.1.3" - -[[deps.FunctionWrappersWrappers]] -deps = ["FunctionWrappers"] -git-tree-sha1 = "b104d487b34566608f8b4e1c39fb0b10aa279ff8" -uuid = "77dc65aa-8811-40c2-897b-53d922fa7daf" -version = "0.1.3" - -[[deps.Future]] -deps = ["Random"] -uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" - [[deps.GLFW_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"] git-tree-sha1 = "d972031d28c8c8d9d7b41a536ad7bb0c2579caca" @@ -471,10 +409,10 @@ uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" version = "0.72.9" [[deps.GR_jll]] -deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt6Base_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "f61f768bf090d97c532d24b64e07b237e9bb7b6b" +deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "FreeType2_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt6Base_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "1596bab77f4f073a14c62424283e7ebff3072eca" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" -version = "0.72.9+0" +version = "0.72.9+1" [[deps.GaussQuadrature]] deps = ["SpecialFunctions"] @@ -534,12 +472,6 @@ git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" version = "2.8.1+1" -[[deps.HypergeometricFunctions]] -deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] -git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685" -uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" -version = "0.3.23" - [[deps.IfElse]] git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" @@ -556,16 +488,14 @@ deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" [[deps.IntervalSets]] -deps = ["Dates", "Random", "Statistics"] +deps = ["Dates", "Random"] git-tree-sha1 = "8e59ea773deee525c99a8018409f64f19fb719e6" uuid = "8197267c-284f-5f27-9208-e0e47529a953" version = "0.7.7" +weakdeps = ["Statistics"] -[[deps.InverseFunctions]] -deps = ["Test"] -git-tree-sha1 = "68772f49f54b479fa88ace904f6127f0a3bb2e46" -uuid = "3587e190-3f89-42d0-90ee-14403ec27112" -version = "0.1.12" + [deps.IntervalSets.extensions] + IntervalSetsStatisticsExt = "Statistics" [[deps.IrrationalConstants]] git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" @@ -607,6 +537,12 @@ git-tree-sha1 = "4c5875e4c228247e1c2b087669846941fb6e0118" uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" version = "0.9.8" + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + + [deps.KernelAbstractions.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + [[deps.LAME_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" @@ -654,17 +590,13 @@ git-tree-sha1 = "f428ae552340899a935973270b8d98e5a31c49fe" uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" version = "0.16.1" -[[deps.LayoutPointers]] -deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] -git-tree-sha1 = "88b8f66b604da079a627b6fb2860d3704a6729a1" -uuid = "10f19ff3-798f-405d-979b-55457f8fc047" -version = "0.1.14" + [deps.Latexify.extensions] + DataFramesExt = "DataFrames" + SymEngineExt = "SymEngine" -[[deps.Lazy]] -deps = ["MacroTools"] -git-tree-sha1 = "1370f8202dac30758f3c345f9909b97f53d87d3f" -uuid = "50d2b5c4-7a5e-59d5-8109-a42b560f39c0" -version = "0.15.1" + [deps.Latexify.weakdeps] + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" [[deps.LazyArtifacts]] deps = ["Artifacts", "Pkg"] @@ -741,15 +673,25 @@ uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" version = "2.36.0+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"] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] git-tree-sha1 = "c3ce8e7420b3a6e071e0fe4745f5d4300e37b13f" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" version = "0.3.24" + [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" @@ -771,6 +713,14 @@ git-tree-sha1 = "49579593ac2c5f9213c61eead3e39606d22a2a04" uuid = "da04e1cc-30fd-572f-bb4f-1f8673147195" version = "0.20.13" + [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 = "8a5b4d2220377d1ece13f49438d71ad20cf1ba83" @@ -795,11 +745,6 @@ git-tree-sha1 = "42324d08725e200c23d4dfb549e0d5d89dede2d2" uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" version = "0.5.10" -[[deps.ManualMemory]] -git-tree-sha1 = "bcaef4fc7a0cfe2cba636d84cda54b5e4e4ca3cd" -uuid = "d125e4d3-2237-4719-b19c-fa641b8a4667" -version = "0.1.8" - [[deps.Markdown]] deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" @@ -813,7 +758,7 @@ version = "1.1.7" [[deps.MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.0+0" +version = "2.28.2+0" [[deps.Measures]] git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" @@ -837,12 +782,7 @@ uuid = "a63ad114-7e13-5084-954f-fe012c677804" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2022.2.1" - -[[deps.MuladdMacro]] -git-tree-sha1 = "cac9cc5499c25554cba55cd3c30543cff5ca4fab" -uuid = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221" -version = "0.2.4" +version = "2022.10.11" [[deps.NaNMath]] deps = ["OpenLibm_jll"] @@ -863,7 +803,7 @@ version = "1.3.5+1" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.20+0" +version = "0.3.21+4" [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] @@ -884,9 +824,9 @@ version = "1.4.1" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1aa4b74f80b01c6bc2b89992b861b5f210e665b5" +git-tree-sha1 = "bbb5c2115d63c2f1451cb70e5ef75e8fe4707019" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "1.1.21+0" +version = "1.1.22+0" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] @@ -908,19 +848,7 @@ version = "1.6.2" [[deps.PCRE2_jll]] deps = ["Artifacts", "Libdl"] uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" -version = "10.40.0+0" - -[[deps.PDMats]] -deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "67eae2738d63117a196f497d7db789821bce61d1" -uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" -version = "0.11.17" - -[[deps.Parameters]] -deps = ["OrderedCollections", "UnPack"] -git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" -uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" -version = "0.12.3" +version = "10.42.0+0" [[deps.Parsers]] deps = ["Dates", "PrecompileTools", "UUIDs"] @@ -940,9 +868,9 @@ uuid = "30392449-352a-5448-841d-b1acce4e97dc" version = "0.42.2+0" [[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.9.2" [[deps.PkgVersion]] deps = ["Pkg"] @@ -968,23 +896,19 @@ git-tree-sha1 = "9f8675a55b37a70aa23177ec110f6e3f4dd68466" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" version = "1.38.17" -[[deps.Polyester]] -deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Requires", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] -git-tree-sha1 = "3d811babe092a6e7b130beee84998fe7663348b6" -uuid = "f517fe37-dbe3-4b94-8317-1923a5111588" -version = "0.7.5" - -[[deps.PolyesterWeave]] -deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] -git-tree-sha1 = "240d7170f5ffdb285f9427b92333c3463bf65bf6" -uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad" -version = "0.2.1" + [deps.Plots.extensions] + FileIOExt = "FileIO" + GeometryBasicsExt = "GeometryBasics" + IJuliaExt = "IJulia" + ImageInTerminalExt = "ImageInTerminal" + UnitfulExt = "Unitful" -[[deps.PreallocationTools]] -deps = ["Adapt", "ArrayInterface", "ForwardDiff", "Requires"] -git-tree-sha1 = "f739b1b3cc7b9949af3b35089931f2b58c289163" -uuid = "d236fae5-4411-538c-8e31-a6e3d9e00b46" -version = "0.4.12" + [deps.Plots.weakdeps] + FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" + GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" + IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" + ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" [[deps.PrecompileTools]] deps = ["Preferences"] @@ -1018,12 +942,6 @@ git-tree-sha1 = "364898e8f13f7eaaceec55fd3d08680498c0aa6e" uuid = "c0090381-4147-56d7-9ebc-da0b1113ec56" version = "6.4.2+3" -[[deps.QuadGK]] -deps = ["DataStructures", "LinearAlgebra"] -git-tree-sha1 = "6ec7ac8412e83d57e313393220879ede1740f9ee" -uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" -version = "2.8.2" - [[deps.REPL]] deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" @@ -1062,6 +980,16 @@ git-tree-sha1 = "7ed35fb5f831aaf09c2d7c8736d44667a1afdcb0" uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" version = "2.38.7" + [deps.RecursiveArrayTools.extensions] + RecursiveArrayToolsMeasurementsExt = "Measurements" + RecursiveArrayToolsTrackerExt = "Tracker" + RecursiveArrayToolsZygoteExt = "Zygote" + + [deps.RecursiveArrayTools.weakdeps] + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + [[deps.Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" uuid = "189a3867-3050-52da-a836-e630ba90ab69" @@ -1079,51 +1007,16 @@ git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.3.0" -[[deps.Rmath]] -deps = ["Random", "Rmath_jll"] -git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b" -uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" -version = "0.7.1" - -[[deps.Rmath_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "6ed52fdd3382cf21947b15e8870ac0ddbff736da" -uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" -version = "0.4.0+0" - [[deps.RootSolvers]] deps = ["DocStringExtensions", "ForwardDiff"] git-tree-sha1 = "9fb3462240d2898be5d4acf8925e47f70ec64d07" uuid = "7181ea78-2dcb-4de3-ab41-2b8ab5a31e74" version = "0.3.5" -[[deps.RuntimeGeneratedFunctions]] -deps = ["ExprTools", "SHA", "Serialization"] -git-tree-sha1 = "237edc1563bbf078629b4f8d194bd334e97907cf" -uuid = "7e49a35a-f44a-4d26-94aa-eba1b4ca6b47" -version = "0.5.11" - [[deps.SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" version = "0.7.0" -[[deps.SIMDTypes]] -git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" -uuid = "94e857df-77ce-4151-89e5-788b33177be4" -version = "0.1.0" - -[[deps.SciMLBase]] -deps = ["ADTypes", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "PrecompileTools", "Preferences", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLOperators", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables", "TruncatedStacktraces"] -git-tree-sha1 = "04370090604cd399db5bebddb636d80ab9d338e9" -uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462" -version = "1.94.0" - -[[deps.SciMLOperators]] -deps = ["ArrayInterface", "DocStringExtensions", "Lazy", "LinearAlgebra", "Setfield", "SparseArrays", "StaticArraysCore", "Tricks"] -git-tree-sha1 = "65c2e6ced6f62ea796af251eb292a0e131a3613b" -uuid = "c0aeaf25-5076-4817-a8d5-81caf7dfa961" -version = "0.3.6" - [[deps.Scratch]] deps = ["Dates"] git-tree-sha1 = "30449ee12237627992a99d5e30ae63e4d78cd24a" @@ -1133,12 +1026,6 @@ version = "1.2.0" [[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" -[[deps.Setfield]] -deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] -git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" -uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" -version = "1.1.1" - [[deps.Showoff]] deps = ["Dates", "Grisu"] git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" @@ -1150,12 +1037,6 @@ 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" @@ -1166,32 +1047,36 @@ uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" version = "1.1.1" [[deps.SparseArrays]] -deps = ["LinearAlgebra", "Random"] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [[deps.SpecialFunctions]] -deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] git-tree-sha1 = "7beb031cf8145577fbccacd94b8a8f4ce78428d3" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" version = "2.3.0" + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + + [deps.SpecialFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + [[deps.Static]] deps = ["IfElse"] git-tree-sha1 = "f295e0a1da4ca425659c57441bcb59abb035a4bc" uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" version = "0.8.8" -[[deps.StaticArrayInterface]] -deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "Requires", "SnoopPrecompile", "SparseArrays", "Static", "SuiteSparse"] -git-tree-sha1 = "33040351d2403b84afce74dae2e22d3f5b18edcb" -uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" -version = "1.4.0" - [[deps.StaticArrays]] -deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"] +deps = ["LinearAlgebra", "Random", "StaticArraysCore"] git-tree-sha1 = "9cabadf6e7cd2349b6cf49f1915ad2028d65e881" uuid = "90137ffa-7385-5640-81b9-e52037218182" version = "1.6.2" +weakdeps = ["Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysStatisticsExt = "Statistics" [[deps.StaticArraysCore]] git-tree-sha1 = "36b3d696ce6366023a0ea192b4cd442268995a0d" @@ -1201,6 +1086,7 @@ version = "1.4.2" [[deps.Statistics]] deps = ["LinearAlgebra", "SparseArrays"] uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.9.0" [[deps.StatsAPI]] deps = ["LinearAlgebra"] @@ -1214,22 +1100,15 @@ git-tree-sha1 = "75ebe04c5bed70b91614d684259b661c9e6274a4" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" version = "0.34.0" -[[deps.StatsFuns]] -deps = ["ChainRulesCore", "HypergeometricFunctions", "InverseFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] -git-tree-sha1 = "f625d686d5a88bcd2b15cd81f18f98186fdc0c9a" -uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" -version = "1.3.0" - -[[deps.StrideArraysCore]] -deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] -git-tree-sha1 = "f02eb61eb5c97b48c153861c72fbbfdddc607e06" -uuid = "7792a7ef-975c-4747-a70f-980b88e8d1da" -version = "0.4.17" - [[deps.SuiteSparse]] deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "5.10.1+6" + [[deps.SymbolicIndexingInterface]] deps = ["DocStringExtensions"] git-tree-sha1 = "f8ab052bfcbdb9b48fad2c80c873aa0d0344dfe5" @@ -1239,7 +1118,7 @@ version = "0.2.2" [[deps.TOML]] deps = ["Dates"] uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.0" +version = "1.0.3" [[deps.TableTraits]] deps = ["IteratorInterfaceExtensions"] @@ -1256,7 +1135,7 @@ version = "1.10.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"] @@ -1264,6 +1143,12 @@ git-tree-sha1 = "50718b4fc1ce20cecf28d85215028c78b4d875c2" uuid = "6aa5eb33-94cf-58f4-a9d0-e4b2c4fc25ea" version = "0.15.2" + [deps.TaylorSeries.extensions] + TaylorSeriesIAExt = "IntervalArithmetic" + + [deps.TaylorSeries.weakdeps] + IntervalArithmetic = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" + [[deps.TensorCore]] deps = ["LinearAlgebra"] git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" @@ -1274,12 +1159,6 @@ version = "0.1.1" deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" -[[deps.ThreadingUtilities]] -deps = ["ManualMemory"] -git-tree-sha1 = "eda08f7e9818eb53661b3deb74e3159460dfbc27" -uuid = "8290d209-cae3-49c0-8002-c8c24d57dab5" -version = "0.5.2" - [[deps.TimerOutputs]] deps = ["ExprTools", "Printf"] git-tree-sha1 = "f548a9e9c490030e545f72074a41edfd0e5bcdd7" @@ -1292,21 +1171,10 @@ git-tree-sha1 = "9a6ae7ed916312b41236fcef7e0af564ef934769" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" version = "0.9.13" -[[deps.Tricks]] -git-tree-sha1 = "aadb748be58b492045b4f56166b5188aa63ce549" -uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775" -version = "0.1.7" - -[[deps.TruncatedStacktraces]] -deps = ["InteractiveUtils", "MacroTools", "Preferences"] -git-tree-sha1 = "ea3e54c2bdde39062abf5a9758a23735558705e1" -uuid = "781d530d-4396-4725-bb49-402e4bee1e77" -version = "1.4.0" - [[deps.URIs]] -git-tree-sha1 = "074f993b0ca030848b897beff716d93aca60f06a" +git-tree-sha1 = "b7a5e99f24892b6824a954199a45e9ffcc1c70f0" uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" -version = "1.4.2" +version = "1.5.0" [[deps.UUIDs]] deps = ["Random", "SHA"] @@ -1327,10 +1195,18 @@ uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" version = "0.4.1" [[deps.Unitful]] -deps = ["ConstructionBase", "Dates", "InverseFunctions", "LinearAlgebra", "Random"] -git-tree-sha1 = "786e80c8ae3ed0c69b2e9799dac321d2cdbccd89" +deps = ["Dates", "LinearAlgebra", "Random"] +git-tree-sha1 = "64eb17acef1d9734cf09967539818f38093d9b35" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.16.0" +version = "1.16.2" + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + InverseFunctionsUnitfulExt = "InverseFunctions" + + [deps.Unitful.weakdeps] + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" [[deps.UnitfulLatexify]] deps = ["LaTeXStrings", "Latexify", "Unitful"] @@ -1380,9 +1256,9 @@ version = "1.1.34+0" [[deps.XZ_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "2222b751598bd9f4885c9ce9cd23e83404baa8ce" +git-tree-sha1 = "cf2c7de82431ca6f39250d2fc4aacd0daa1675c0" uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" -version = "5.4.3+1" +version = "5.4.4+0" [[deps.Xorg_libX11_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] @@ -1513,7 +1389,7 @@ version = "1.5.0+0" [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.12+3" +version = "1.2.13+0" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1521,12 +1397,6 @@ git-tree-sha1 = "49ce682769cd5de6c72dcf1b94ed7790cd08974c" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" version = "1.5.5+0" -[[deps.ZygoteRules]] -deps = ["ChainRulesCore", "MacroTools"] -git-tree-sha1 = "977aed5d006b840e2e40c0b48984f7463109046d" -uuid = "700de1a5-db45-46bc-99cf-38207098b444" -version = "0.2.3" - [[deps.fzf_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "868e669ccb12ba16eaf50cb2957ee2ff61261c56" @@ -1546,9 +1416,9 @@ uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" version = "0.15.1+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+0" [[deps.libfdk_aac_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] diff --git a/docs/Manifest.toml b/docs/Manifest.toml index c07a9e4513..534065bd7f 100644 --- a/docs/Manifest.toml +++ b/docs/Manifest.toml @@ -1,6 +1,6 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.8.5" +julia_version = "1.9.2" manifest_format = "2.0" project_hash = "742ff6c117e7a92658df5c1173a0238a5924d0d7" @@ -15,10 +15,15 @@ uuid = "a4c015fc-c6ff-483c-b24f-f7ea428134e9" version = "0.0.1" [[deps.AbstractFFTs]] -deps = ["ChainRulesCore", "LinearAlgebra", "Test"] +deps = ["LinearAlgebra"] git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" [[deps.AbstractLattices]] git-tree-sha1 = "f35684b7349da49fcc8a9e520e30e45dbb077166" @@ -35,6 +40,10 @@ deps = ["LinearAlgebra", "Requires"] git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" version = "3.6.2" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" [[deps.Animations]] deps = ["Colors"] @@ -58,6 +67,22 @@ git-tree-sha1 = "f83ec24f76d4c8f525099b2ac475fc098138ec31" uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" version = "7.4.11" + [deps.ArrayInterface.extensions] + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + 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" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + [[deps.ArrayInterfaceCore]] deps = ["LinearAlgebra", "SnoopPrecompile", "SparseArrays", "SuiteSparse"] git-tree-sha1 = "e5f08b5689b1aad068e01751889f2f615c7db36d" @@ -104,10 +129,14 @@ uuid = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" version = "0.4.2" [[deps.BandedMatrices]] -deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "PrecompileTools", "SparseArrays"] -git-tree-sha1 = "3cddbe0fad23df52587e675b3d71eea66b850cb9" +deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "PrecompileTools"] +git-tree-sha1 = "6e9b384d5e21452bc81cae3552c74f430e320985" uuid = "aae01518-5342-5314-be14-df237901396f" -version = "0.17.34" +version = "0.17.35" +weakdeps = ["SparseArrays"] + + [deps.BandedMatrices.extensions] + BandedMatricesSparseArraysExt = "SparseArrays" [[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" @@ -226,12 +255,6 @@ git-tree-sha1 = "e30f2f4e20f7f186dc36529910beaedc60cfa644" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" version = "1.16.0" -[[deps.ChangesOfVariables]] -deps = ["InverseFunctions", "LinearAlgebra", "Test"] -git-tree-sha1 = "2fba81a302a7be671aefe194f0525ef231104e7f" -uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" -version = "0.1.8" - [[deps.ClimaComms]] deps = ["CUDA", "MPI"] git-tree-sha1 = "6cbe1b835f91033e6326a92ac1a1f6a8c9b2215f" @@ -239,10 +262,10 @@ uuid = "3a4d1b5c-c61d-41fd-a00a-5873ba7a1b0d" version = "0.5.3" [[deps.ClimaCore]] -deps = ["Adapt", "BandedMatrices", "BlockArrays", "CUDA", "ClimaComms", "CubedSphere", "DataStructures", "DiffEqBase", "DocStringExtensions", "ForwardDiff", "GaussQuadrature", "GilbertCurves", "HDF5", "InteractiveUtils", "IntervalSets", "LinearAlgebra", "PkgVersion", "RecursiveArrayTools", "Requires", "RootSolvers", "SparseArrays", "Static", "StaticArrays", "Statistics", "UnPack"] +deps = ["Adapt", "BandedMatrices", "BlockArrays", "CUDA", "ClimaComms", "CubedSphere", "DataStructures", "DocStringExtensions", "ForwardDiff", "GaussQuadrature", "GilbertCurves", "HDF5", "InteractiveUtils", "IntervalSets", "LinearAlgebra", "PkgVersion", "RecursiveArrayTools", "Requires", "RootSolvers", "SparseArrays", "Static", "StaticArrays", "Statistics", "UnPack"] path = ".." uuid = "d414da3d-4745-48bb-8d80-42e94e092884" -version = "0.10.46" +version = "0.10.47" [[deps.ClimaCoreMakie]] deps = ["ClimaCore", "Makie"] @@ -339,15 +362,19 @@ uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" version = "0.3.0" [[deps.Compat]] -deps = ["Dates", "LinearAlgebra", "UUIDs"] -git-tree-sha1 = "5ce999a19f4ca23ea484e92a1774a61b8ca4cf8e" +deps = ["UUIDs"] +git-tree-sha1 = "e460f044ca8b99be31d35fe54fc33a5c33dd8ed7" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.8.0" +version = "4.9.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+0" [[deps.ConcurrentUtilities]] deps = ["Serialization", "Sockets"] @@ -360,6 +387,11 @@ deps = ["LinearAlgebra"] git-tree-sha1 = "fe2838a593b5f776e1597e086dcd47560d94e816" uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" version = "1.5.3" +weakdeps = ["IntervalSets", "StaticArrays"] + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" [[deps.Contour]] git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781" @@ -385,9 +417,9 @@ version = "1.15.0" [[deps.DataStructures]] deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "cf25ccb972fec4e4817764d01c82386ae94f77b4" +git-tree-sha1 = "3dbd312d370723b6bb43ba9d02fc36abade4518d" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.14" +version = "0.18.15" [[deps.DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -399,26 +431,48 @@ deps = ["Printf"] uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" [[deps.DelaunayTriangulation]] -deps = ["DataStructures", "EnumX", "ExactPredicates", "MakieCore", "Random", "SimpleGraphs"] +deps = ["DataStructures", "EnumX", "ExactPredicates", "Random", "SimpleGraphs"] git-tree-sha1 = "a1d8532de83f8ce964235eff1edeff9581144d02" uuid = "927a84f5-c5f4-47a5-9785-b46e178433df" version = "0.7.2" +weakdeps = ["MakieCore"] + + [deps.DelaunayTriangulation.extensions] + DelaunayTriangulationMakieCoreExt = "MakieCore" [[deps.DelimitedFiles]] deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" - -[[deps.DensityInterface]] -deps = ["InverseFunctions", "Test"] -git-tree-sha1 = "80c3e8639e3353e5d2912fb3a1916b8455e2494b" -uuid = "b429d917-457f-4dbc-8f4c-0cc954292b1d" -version = "0.4.0" +version = "1.9.1" [[deps.DiffEqBase]] -deps = ["ArrayInterface", "ChainRulesCore", "DataStructures", "Distributions", "DocStringExtensions", "EnumX", "FastBroadcast", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "Printf", "RecursiveArrayTools", "Reexport", "Requires", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces", "ZygoteRules"] -git-tree-sha1 = "c5692436e7f8279503466db216c74165d1b301e4" +deps = ["ArrayInterface", "ChainRulesCore", "DataStructures", "DocStringExtensions", "EnumX", "FastBroadcast", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "Printf", "RecursiveArrayTools", "Reexport", "Requires", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces", "ZygoteRules"] +git-tree-sha1 = "ed586656058844e48660c6d6fdb384e83afc50db" uuid = "2b5f629d-d688-5b77-993f-72d75c75574e" -version = "6.127.0" +version = "6.128.0" + + [deps.DiffEqBase.extensions] + DiffEqBaseDistributionsExt = "Distributions" + DiffEqBaseGeneralizedGeneratedExt = "GeneralizedGenerated" + DiffEqBaseMPIExt = "MPI" + DiffEqBaseMeasurementsExt = "Measurements" + DiffEqBaseMonteCarloMeasurementsExt = "MonteCarloMeasurements" + DiffEqBaseReverseDiffExt = "ReverseDiff" + DiffEqBaseTrackerExt = "Tracker" + DiffEqBaseUnitfulExt = "Unitful" + DiffEqBaseZygoteExt = "Zygote" + + [deps.DiffEqBase.weakdeps] + Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" + GeneralizedGenerated = "6b9d7cbe-bcb9-11e9-073f-15a7a543e2eb" + MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" [[deps.DiffResults]] deps = ["StaticArraysCore"] @@ -433,20 +487,32 @@ uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" version = "1.15.1" [[deps.Distances]] -deps = ["LinearAlgebra", "SparseArrays", "Statistics", "StatsAPI"] +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] git-tree-sha1 = "b6def76ffad15143924a2199f72a5cd883a2e8a9" uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" version = "0.10.9" +weakdeps = ["SparseArrays"] + + [deps.Distances.extensions] + 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", "StatsAPI", "StatsBase", "StatsFuns", "Test"] -git-tree-sha1 = "e76a3281de2719d7c81ed62c6ea7057380c87b1d" +deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns", "Test"] +git-tree-sha1 = "27a18994a5991b1d2e2af7833c4f8ecf9af6b9ea" uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.25.98" +version = "0.25.99" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" [[deps.DocStringExtensions]] deps = ["LibGit2"] @@ -595,11 +661,21 @@ uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" version = "1.5.0" [[deps.FiniteDiff]] -deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays", "StaticArrays"] +deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays"] git-tree-sha1 = "c6e4a1fbe73b31a3dea94b1da449503b8830c306" uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" version = "2.21.1" + [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.FixedPointNumbers]] deps = ["Statistics"] git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" @@ -619,10 +695,14 @@ uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" version = "0.4.2" [[deps.ForwardDiff]] -deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions", "StaticArrays"] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] git-tree-sha1 = "00e252f4d706b3d55a8863432e742bf5717b498d" uuid = "f6369f11-7733-5829-9624-2563aa707210" version = "0.10.35" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" [[deps.FreeType]] deps = ["CEnum", "FreeType2_jll"] @@ -694,10 +774,10 @@ uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" version = "0.72.9" [[deps.GR_jll]] -deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt6Base_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "f61f768bf090d97c532d24b64e07b237e9bb7b6b" +deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "FreeType2_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt6Base_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "1596bab77f4f073a14c62424283e7ebff3072eca" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" -version = "0.72.9+0" +version = "0.72.9+1" [[deps.GaussQuadrature]] deps = ["SpecialFunctions"] @@ -890,16 +970,14 @@ uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" version = "0.20.9" [[deps.IntervalSets]] -deps = ["Dates", "Random", "Statistics"] +deps = ["Dates", "Random"] git-tree-sha1 = "8e59ea773deee525c99a8018409f64f19fb719e6" uuid = "8197267c-284f-5f27-9208-e0e47529a953" version = "0.7.7" +weakdeps = ["Statistics"] -[[deps.InverseFunctions]] -deps = ["Test"] -git-tree-sha1 = "68772f49f54b479fa88ace904f6127f0a3bb2e46" -uuid = "3587e190-3f89-42d0-90ee-14403ec27112" -version = "0.1.12" + [deps.IntervalSets.extensions] + IntervalSetsStatisticsExt = "Statistics" [[deps.IrrationalConstants]] git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" @@ -970,6 +1048,12 @@ git-tree-sha1 = "4c5875e4c228247e1c2b087669846941fb6e0118" uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" version = "0.9.8" + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + + [deps.KernelAbstractions.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + [[deps.KernelDensity]] deps = ["Distributions", "DocStringExtensions", "FFTW", "Interpolations", "StatsBase"] git-tree-sha1 = "90442c50e202a5cdf21a7899c66b240fdef14035" @@ -1029,6 +1113,14 @@ git-tree-sha1 = "f428ae552340899a935973270b8d98e5a31c49fe" uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" version = "0.16.1" + [deps.Latexify.extensions] + DataFramesExt = "DataFrames" + SymEngineExt = "SymEngine" + + [deps.Latexify.weakdeps] + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" + [[deps.LayoutPointers]] deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] git-tree-sha1 = "88b8f66b604da079a627b6fb2860d3704a6729a1" @@ -1133,7 +1225,7 @@ 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.LinearAlgebraX]] @@ -1148,18 +1240,42 @@ git-tree-sha1 = "d2605a42d5453f510ca0fe37eff8aa0bfc5a3c80" uuid = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae" version = "2.4.2" + [deps.LinearSolve.extensions] + LinearSolveCUDAExt = "CUDA" + LinearSolveHYPREExt = "HYPRE" + LinearSolveIterativeSolversExt = "IterativeSolvers" + LinearSolveKrylovKitExt = "KrylovKit" + LinearSolvePardisoExt = "Pardiso" + + [deps.LinearSolve.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + HYPRE = "b5ffcf37-a2bd-41ab-a3da-4bd9bc8ad771" + IterativeSolvers = "42fd0dbc-a981-5370-80f2-aaf504508153" + KrylovKit = "0b1a1467-8014-51b9-945f-bf0ae24f4b77" + Pardiso = "46dd5b70-b6fb-5a00-ae2d-e8fea33afaf2" + [[deps.Literate]] deps = ["Base64", "IOCapture", "JSON", "REPL"] -git-tree-sha1 = "1c4418beaa6664041e0f9b48f0710f57bff2fcbe" +git-tree-sha1 = "a1a0d4ff9f785a2184baca7a5c89e664f144143d" uuid = "98b081ad-f1c9-55d3-8b20-4c87d4299306" -version = "2.14.0" +version = "2.14.1" [[deps.LogExpFunctions]] -deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] git-tree-sha1 = "c3ce8e7420b3a6e071e0fe4745f5d4300e37b13f" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" version = "0.3.24" + [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" @@ -1170,10 +1286,15 @@ uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" version = "1.0.0" [[deps.LoopVectorization]] -deps = ["ArrayInterface", "ArrayInterfaceCore", "CPUSummary", "ChainRulesCore", "CloseOpenIntervals", "DocStringExtensions", "ForwardDiff", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "SpecialFunctions", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] +deps = ["ArrayInterface", "ArrayInterfaceCore", "CPUSummary", "CloseOpenIntervals", "DocStringExtensions", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] git-tree-sha1 = "c88a4afe1703d731b1c4fdf4e3c7e77e3b176ea2" uuid = "bdcacae8-1622-11e9-2a5c-532679323890" version = "0.12.165" +weakdeps = ["ChainRulesCore", "ForwardDiff", "SpecialFunctions"] + + [deps.LoopVectorization.extensions] + ForwardDiffExt = ["ChainRulesCore", "ForwardDiff"] + SpecialFunctionsExt = "SpecialFunctions" [[deps.MKL_jll]] deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] @@ -1187,6 +1308,14 @@ git-tree-sha1 = "1ccbd6980b4ff1e1e411086d01696048e6013653" uuid = "da04e1cc-30fd-572f-bb4f-1f8673147195" version = "0.20.10" + [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 = "8a5b4d2220377d1ece13f49438d71ad20cf1ba83" @@ -1257,7 +1386,7 @@ version = "1.1.7" [[deps.MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.0+0" +version = "2.28.2+0" [[deps.Measures]] git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" @@ -1292,7 +1421,7 @@ version = "0.3.4" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2022.2.1" +version = "2022.10.11" [[deps.MuladdMacro]] git-tree-sha1 = "cac9cc5499c25554cba55cd3c30543cff5ca4fab" @@ -1304,12 +1433,6 @@ git-tree-sha1 = "8d852646862c96e226367ad10c8af56099b4047e" uuid = "3b2b4ff1-bcff-5658-a3ee-dbcf1ce5ac09" version = "0.4.4" -[[deps.MutableArithmetics]] -deps = ["LinearAlgebra", "SparseArrays", "Test"] -git-tree-sha1 = "964cb1a7069723727025ae295408747a0b36a854" -uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" -version = "1.3.0" - [[deps.NCDatasets]] deps = ["CFTime", "CommonDataModel", "DataStructures", "Dates", "NetCDF_jll", "NetworkOptions", "Printf"] git-tree-sha1 = "4263c4220f22e20729329838bf7e94a49d1ac32f" @@ -1375,14 +1498,14 @@ version = "1.3.5+1" [[deps.OpenBLAS32_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "9c6c2ed4b7acd2137b878eb96c68e63b76199d0f" +git-tree-sha1 = "2fb9ee2dc14d555a6df2a714b86b7125178344c2" uuid = "656ef2d0-ae68-5445-9ca0-591084a874a2" -version = "0.3.17+0" +version = "0.3.21+0" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.20+0" +version = "0.3.21+4" [[deps.OpenEXR]] deps = ["Colors", "FileIO", "OpenEXR_jll"] @@ -1415,9 +1538,9 @@ version = "1.4.1" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1aa4b74f80b01c6bc2b89992b861b5f210e665b5" +git-tree-sha1 = "bbb5c2115d63c2f1451cb70e5ef75e8fe4707019" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "1.1.21+0" +version = "1.1.22+0" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] @@ -1451,7 +1574,7 @@ version = "6.53.4" [[deps.PCRE2_jll]] deps = ["Artifacts", "Libdl"] uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" -version = "10.40.0+0" +version = "10.42.0+0" [[deps.PDMats]] deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] @@ -1466,10 +1589,10 @@ uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883" version = "0.4.0" [[deps.PackageExtensionCompat]] -deps = ["Requires", "TOML"] -git-tree-sha1 = "32f3d52212a8d1c5d589a58851b1f04c97339110" +git-tree-sha1 = "f9b1e033c2b1205cf30fd119f4e50881316c1923" uuid = "65ce6f38-6b18-4e1d-a461-8949797d7930" -version = "1.0.0" +version = "1.0.1" +weakdeps = ["Requires", "TOML"] [[deps.Packing]] deps = ["GeometryBasics"] @@ -1513,9 +1636,9 @@ uuid = "30392449-352a-5448-841d-b1acce4e97dc" version = "0.42.2+0" [[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.9.2" [[deps.PkgVersion]] deps = ["Pkg"] @@ -1541,6 +1664,20 @@ git-tree-sha1 = "9f8675a55b37a70aa23177ec110f6e3f4dd68466" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" version = "1.38.17" + [deps.Plots.extensions] + FileIOExt = "FileIO" + GeometryBasicsExt = "GeometryBasics" + IJuliaExt = "IJulia" + ImageInTerminalExt = "ImageInTerminal" + UnitfulExt = "Unitful" + + [deps.Plots.weakdeps] + FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" + GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" + IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" + ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + [[deps.Polyester]] deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Requires", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] git-tree-sha1 = "3d811babe092a6e7b130beee84998fe7663348b6" @@ -1559,11 +1696,21 @@ uuid = "647866c9-e3ac-4575-94e7-e3d426903924" version = "0.1.2" [[deps.Polynomials]] -deps = ["ChainRulesCore", "LinearAlgebra", "MakieCore", "MutableArithmetics", "RecipesBase"] +deps = ["LinearAlgebra", "RecipesBase"] git-tree-sha1 = "3aa2bb4982e575acd7583f01531f241af077b163" uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" version = "3.2.13" + [deps.Polynomials.extensions] + PolynomialsChainRulesCoreExt = "ChainRulesCore" + PolynomialsMakieCoreExt = "MakieCore" + PolynomialsMutableArithmeticsExt = "MutableArithmetics" + + [deps.Polynomials.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b" + MutableArithmetics = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" + [[deps.PositiveFactorizations]] deps = ["LinearAlgebra"] git-tree-sha1 = "17275485f373e6673f7e7f97051f703ed5b15b20" @@ -1576,6 +1723,12 @@ git-tree-sha1 = "f739b1b3cc7b9949af3b35089931f2b58c289163" uuid = "d236fae5-4411-538c-8e31-a6e3d9e00b46" version = "0.4.12" + [deps.PreallocationTools.extensions] + PreallocationToolsReverseDiffExt = "ReverseDiff" + + [deps.PreallocationTools.weakdeps] + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + [[deps.PrecompileTools]] deps = ["Preferences"] git-tree-sha1 = "9673d39decc5feece56ef3940e5dafba15ba0f81" @@ -1658,6 +1811,10 @@ deps = ["Requires"] git-tree-sha1 = "1342a47bf3260ee108163042310d26f2be5ec90b" uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439" version = "0.4.5" +weakdeps = ["FixedPointNumbers"] + + [deps.Ratios.extensions] + RatiosFixedPointNumbersExt = "FixedPointNumbers" [[deps.RecipesBase]] deps = ["PrecompileTools"] @@ -1677,11 +1834,21 @@ git-tree-sha1 = "7ed35fb5f831aaf09c2d7c8736d44667a1afdcb0" uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" version = "2.38.7" + [deps.RecursiveArrayTools.extensions] + RecursiveArrayToolsMeasurementsExt = "Measurements" + RecursiveArrayToolsTrackerExt = "Tracker" + RecursiveArrayToolsZygoteExt = "Zygote" + + [deps.RecursiveArrayTools.weakdeps] + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + [[deps.RecursiveFactorization]] -deps = ["LinearAlgebra", "LoopVectorization", "Polyester", "SnoopPrecompile", "StrideArraysCore", "TriangularSolve"] -git-tree-sha1 = "9088515ad915c99026beb5436d0a09cd8c18163e" +deps = ["LinearAlgebra", "LoopVectorization", "Polyester", "PrecompileTools", "StrideArraysCore", "TriangularSolve"] +git-tree-sha1 = "34fd98298dc3fcfc657d65559491b18ab3f7f28c" uuid = "f2c3362d-daeb-58d1-803e-2bc74f2840b4" -version = "0.2.18" +version = "0.2.19" [[deps.Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" @@ -1835,9 +2002,15 @@ version = "0.8.4" [[deps.SimpleNonlinearSolve]] deps = ["ArrayInterface", "DiffEqBase", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "PackageExtensionCompat", "PrecompileTools", "Reexport", "SciMLBase", "StaticArraysCore"] -git-tree-sha1 = "91fcc402c4ab978ad5759489db9a9c5a71732f2d" +git-tree-sha1 = "20aa9831d654bab67ed561e78917047143ecb9bf" uuid = "727e6d20-b764-4bd8-a329-72de5adea6c7" -version = "0.1.18" +version = "0.1.19" + + [deps.SimpleNonlinearSolve.extensions] + SimpleNonlinearSolveNNlibExt = "NNlib" + + [deps.SimpleNonlinearSolve.weakdeps] + NNlib = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" [[deps.SimplePartitions]] deps = ["AbstractLattices", "DataStructures", "Permutations"] @@ -1890,7 +2063,7 @@ uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" version = "1.1.1" [[deps.SparseArrays]] -deps = ["LinearAlgebra", "Random"] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [[deps.SparseDiffTools]] @@ -1899,6 +2072,12 @@ git-tree-sha1 = "4c1a57bcbc0b795fbfdc2009e70f9c2fd2815bfe" uuid = "47a9eef4-7e08-11e9-0b38-333d64bd3804" version = "2.4.1" + [deps.SparseDiffTools.extensions] + SparseDiffToolsZygoteExt = "Zygote" + + [deps.SparseDiffTools.weakdeps] + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + [[deps.Sparspak]] deps = ["Libdl", "LinearAlgebra", "Logging", "OffsetArrays", "Printf", "SparseArrays", "Test"] git-tree-sha1 = "342cf4b449c299d8d1ceaf00b7a49f4fbc7940e7" @@ -1906,10 +2085,14 @@ uuid = "e56a9233-b9d6-4f03-8d0f-1825330902ac" version = "0.3.9" [[deps.SpecialFunctions]] -deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] git-tree-sha1 = "7beb031cf8145577fbccacd94b8a8f4ce78428d3" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" version = "2.3.0" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" [[deps.StableHashTraits]] deps = ["CRC32c", "Compat", "Dates", "SHA", "Tables", "TupleTools", "UUIDs"] @@ -1934,12 +2117,21 @@ deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "Requires", "Snoo git-tree-sha1 = "33040351d2403b84afce74dae2e22d3f5b18edcb" uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" version = "1.4.0" +weakdeps = ["OffsetArrays", "StaticArrays"] + + [deps.StaticArrayInterface.extensions] + StaticArrayInterfaceOffsetArraysExt = "OffsetArrays" + StaticArrayInterfaceStaticArraysExt = "StaticArrays" [[deps.StaticArrays]] -deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"] +deps = ["LinearAlgebra", "Random", "StaticArraysCore"] git-tree-sha1 = "9cabadf6e7cd2349b6cf49f1915ad2028d65e881" uuid = "90137ffa-7385-5640-81b9-e52037218182" version = "1.6.2" +weakdeps = ["Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysStatisticsExt = "Statistics" [[deps.StaticArraysCore]] git-tree-sha1 = "36b3d696ce6366023a0ea192b4cd442268995a0d" @@ -1949,6 +2141,7 @@ version = "1.4.2" [[deps.Statistics]] deps = ["LinearAlgebra", "SparseArrays"] uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.9.0" [[deps.StatsAPI]] deps = ["LinearAlgebra"] @@ -1963,11 +2156,19 @@ uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" version = "0.34.0" [[deps.StatsFuns]] -deps = ["ChainRulesCore", "HypergeometricFunctions", "InverseFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] git-tree-sha1 = "f625d686d5a88bcd2b15cd81f18f98186fdc0c9a" uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" version = "1.3.0" + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + + [deps.StatsFuns.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + [[deps.StrideArraysCore]] deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] git-tree-sha1 = "f02eb61eb5c97b48c153861c72fbbfdddc607e06" @@ -1993,7 +2194,7 @@ uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" [[deps.SuiteSparse_jll]] deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"] uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "5.10.1+0" +version = "5.10.1+6" [[deps.SymbolicIndexingInterface]] deps = ["DocStringExtensions"] @@ -2004,7 +2205,7 @@ version = "0.2.2" [[deps.TOML]] deps = ["Dates"] uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.0" +version = "1.0.3" [[deps.TableTraits]] deps = ["IteratorInterfaceExtensions"] @@ -2021,13 +2222,17 @@ version = "1.10.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 = "50718b4fc1ce20cecf28d85215028c78b4d875c2" uuid = "6aa5eb33-94cf-58f4-a9d0-e4b2c4fc25ea" version = "0.15.2" +weakdeps = ["IntervalArithmetic"] + + [deps.TaylorSeries.extensions] + TaylorSeriesIAExt = "IntervalArithmetic" [[deps.TempestRemap_jll]] deps = ["Artifacts", "HDF5_jll", "JLLWrappers", "Libdl", "NetCDF_jll", "OpenBLAS32_jll", "Pkg"] @@ -2097,9 +2302,9 @@ uuid = "9d95972d-f1c8-5527-a6e0-b4b365fa01f6" version = "1.3.0" [[deps.URIs]] -git-tree-sha1 = "074f993b0ca030848b897beff716d93aca60f06a" +git-tree-sha1 = "b7a5e99f24892b6824a954199a45e9ffcc1c70f0" uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" -version = "1.4.2" +version = "1.5.0" [[deps.UUIDs]] deps = ["Random", "SHA"] @@ -2120,10 +2325,18 @@ uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" version = "0.4.1" [[deps.Unitful]] -deps = ["ConstructionBase", "Dates", "InverseFunctions", "LinearAlgebra", "Random"] -git-tree-sha1 = "786e80c8ae3ed0c69b2e9799dac321d2cdbccd89" +deps = ["Dates", "LinearAlgebra", "Random"] +git-tree-sha1 = "64eb17acef1d9734cf09967539818f38093d9b35" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.16.0" +version = "1.16.2" + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + InverseFunctionsUnitfulExt = "InverseFunctions" + + [deps.Unitful.weakdeps] + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" [[deps.UnitfulLatexify]] deps = ["LaTeXStrings", "Latexify", "Unitful"] @@ -2202,9 +2415,9 @@ version = "1.1.34+0" [[deps.XZ_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "2222b751598bd9f4885c9ce9cd23e83404baa8ce" +git-tree-sha1 = "cf2c7de82431ca6f39250d2fc4aacd0daa1675c0" uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" -version = "5.4.3+1" +version = "5.4.4+0" [[deps.Xorg_libX11_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] @@ -2341,7 +2554,7 @@ version = "0.4.9" [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.12+3" +version = "1.2.13+0" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -2380,9 +2593,9 @@ uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" version = "0.15.1+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+0" [[deps.libfdk_aac_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] diff --git a/docs/make.jl b/docs/make.jl index b44c413a98..d2fa1da7a6 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -56,7 +56,7 @@ withenv("GKSwstype" => "nul") do Documenter.makedocs( bib, sitename = "ClimaCore.jl", - strict = [:example_block], + strict = true, format = format, checkdocs = :exports, clean = true, diff --git a/docs/src/api.md b/docs/src/api.md index 51555c17d3..6eec4aeba4 100644 --- a/docs/src/api.md +++ b/docs/src/api.md @@ -122,6 +122,17 @@ Topologies.AbstractTopology Topologies.IntervalTopology Topologies.Topology2D Topologies.spacefillingcurve +Topologies.nelems +Topologies.nneighbors +Topologies.nsendelems +Topologies.nghostelems +Topologies.localelemindex +Topologies.face_node_index +Topologies.ghost_faces +Topologies.vertex_node_index +Topologies.local_vertices +Topologies.ghost_vertices +Topologies.neighbors ``` ### Interfaces @@ -198,16 +209,18 @@ Spaces.Quadratures.orthonormal_poly ```@docs Spaces.dss_transform +Spaces.dss_transform! +Spaces.dss_untransform! Spaces.dss_untransform -Spaces.dss_interior_faces! Spaces.dss_local_vertices! -Spaces.dss_ghost_faces! -Spaces.dss_ghost_vertices! Spaces.dss_local! Spaces.dss_local_ghost! Spaces.dss_ghost! Spaces.create_dss_buffer +Spaces.fill_send_buffer! Spaces.DSSBuffer +Spaces.create_ghost_buffer +Spaces.load_from_recv_buffer! Spaces.weighted_dss_start! Spaces.weighted_dss_internal! Spaces.weighted_dss_ghost! @@ -296,6 +309,7 @@ InputOutput.read_mesh InputOutput.read_topology InputOutput.read_space InputOutput.read_field +InputOutput.defaultname ``` ## Remapping @@ -303,3 +317,15 @@ InputOutput.read_field ```@docs Remapping.interpolate_array ``` + +## ClimaCoreMakie + +```@meta +CurrentModule = ClimaCoreMakie +``` + +```@docs +ClimaCoreMakie.fieldheatmap +ClimaCoreMakie.fieldcontourf +``` + diff --git a/docs/src/examples.md b/docs/src/examples.md index 973df1e5cf..5d96d434ee 100644 --- a/docs/src/examples.md +++ b/docs/src/examples.md @@ -6,7 +6,7 @@ ### Flux Limiters advection -The 2D Cartesian advection/transport example in [`examples/plane/limiters_advection.jl`](https://github.com/CliMA/ClimaCore.jl/tree/main/examples/plane/limiters_advection.jl) demonstrates the application of flux limiters in the horizontal direction, namely [`QuasiMonotoneLimiter`](https://clima.github.io/ClimaCore.jl/previews/PR729/api/#ClimaCore.Limiters.QuasiMonotoneLimiter), in a 2D Cartesian domain. +The 2D Cartesian advection/transport example in [`examples/plane/limiters_advection.jl`](https://github.com/CliMA/ClimaCore.jl/tree/main/examples/plane/limiters_advection.jl) demonstrates the application of flux limiters in the horizontal direction, namely [`QuasiMonotoneLimiter`](https://clima.github.io/ClimaCore.jl/stable/api/#ClimaCore.Limiters.QuasiMonotoneLimiter), in a 2D Cartesian domain. #### Equations and discretizations @@ -64,7 +64,7 @@ Because this is a purely 2D problem, there is no staggered vertical discretizati - ``wD`` is the [discrete horizontal weak spectral divergence](https://clima.github.io/ClimaCore.jl/stable/operators/#ClimaCore.Operators.WeakDivergence), called `wdiv` in the example code. - ``G`` is the [discrete horizontal strong spectral gradient](https://clima.github.io/ClimaCore.jl/stable/operators/#ClimaCore.Operators.Gradient), called `grad` in the example code. -To discretize the hyperdiffusion operator, ``g(\rho, q) = - \nu_4 [\nabla^4 (\rho q)]``, in the horizontal direction, we compose the horizontal weak divergence, ``wD``, and the horizontal gradient operator, ``G_h``, twice, with an intermediate call to [`weighted_dss!`](@ref) between the two compositions, as in ``[g_2(\rho, g) \circ DSS(\rho, q) \circ g_1(\rho, q)]``, with: +To discretize the hyperdiffusion operator, ``g(\rho, q) = - \nu_4 [\nabla^4 (\rho q)]``, in the horizontal direction, we compose the horizontal weak divergence, ``wD``, and the horizontal gradient operator, ``G_h``, twice, with an intermediate call to [`weighted_dss!`](https://clima.github.io/ClimaCore.jl/stable/api/#ClimaCore.Spaces.weighted_dss!) between the two compositions, as in ``[g_2(\rho, g) \circ DSS(\rho, q) \circ g_1(\rho, q)]``, with: - ``g_1(\rho, q) = wD(G_h(q))`` - ``DSS(\rho, q) = DSS(g_1(\rho q))`` - ``g_2(\rho, q) = -\nu_4 wD(\rho G_h(\rho q))`` @@ -101,7 +101,7 @@ Because this is a fully 2D problem, the application of limiters does not affect ### Flux Limiters advection -The 3D Cartesian advection/transport example in [`examples/hybrid/box/limiters_advection.jl`](https://github.com/CliMA/ClimaCore.jl/tree/main/examples/hybrid/box/limiters_advection.jl) demonstrates the application of flux limiters in the horizontal direction, namely [`QuasiMonotoneLimiter`](https://clima.github.io/ClimaCore.jl/previews/PR729/api/#ClimaCore.Limiters.QuasiMonotoneLimiter), in a hybrid Cartesian domain. It also demonstrates the usage of the high-order upwinding scheme in the vertical direction, called [`Upwind3rdOrderBiasedProductC2F`](@ref). +The 3D Cartesian advection/transport example in [`examples/hybrid/box/limiters_advection.jl`](https://github.com/CliMA/ClimaCore.jl/tree/main/examples/hybrid/box/limiters_advection.jl) demonstrates the application of flux limiters in the horizontal direction, namely [`QuasiMonotoneLimiter`](https://clima.github.io/ClimaCore.jl/stable/api/#ClimaCore.Limiters.QuasiMonotoneLimiter), in a hybrid Cartesian domain. It also demonstrates the usage of the high-order upwinding scheme in the vertical direction, called [`Upwind3rdOrderBiasedProductC2F`](https://clima.github.io/ClimaCore.jl/stable/operators/#ClimaCore.Operators.Upwind3rdOrderBiasedProductC2F). #### Equations and discretizations @@ -177,7 +177,7 @@ We make use of the following operators - This example uses advective fluxes equal to zero at the top and bottom boundaries. - ``G_h`` is the [discrete horizontal spectral gradient](https://clima.github.io/ClimaCore.jl/stable/operators/#ClimaCore.Operators.Gradient), called `hgrad` in the example code. -To discretize the hyperdiffusion operator, ``g(\rho, q) = - \nu_4 [\nabla^4 (\rho q)]``, in the horizontal direction, we compose the horizontal weak divergence, ``wD_h``, and the horizontal gradient operator, ``G_h``, twice, with an intermediate call to [`weighted_dss!`](@ref) between the two compositions, as in ``[g_2(\rho, g) \circ DSS(\rho, q) \circ g_1(\rho, q)]``, with: +To discretize the hyperdiffusion operator, ``g(\rho, q) = - \nu_4 [\nabla^4 (\rho q)]``, in the horizontal direction, we compose the horizontal weak divergence, ``wD_h``, and the horizontal gradient operator, ``G_h``, twice, with an intermediate call to [`weighted_dss!`](https://clima.github.io/ClimaCore.jl/stable/api/#ClimaCore.Spaces.weighted_dss!) between the two compositions, as in ``[g_2(\rho, g) \circ DSS(\rho, q) \circ g_1(\rho, q)]``, with: - ``g_1(\rho, q) = wD_h(G_h(q))`` - ``DSS(\rho, q) = DSS(g_1(\rho q))`` - ``g_2(\rho, q) = -\nu_4 wD_h(\rho G_h(\rho q))`` @@ -230,7 +230,7 @@ Because this is a Cartesian 3D problem, the application of limiters does not aff ### Flux Limiters advection -The 2D sphere advection/transport example in [`examples/sphere/limiters_advection.jl`](https://github.com/CliMA/ClimaCore.jl/tree/main/examples/sphere/limiters_advection.jl) demonstrates the application of flux limiters in the horizontal direction, namely [`QuasiMonotoneLimiter`](https://clima.github.io/ClimaCore.jl/previews/PR729/api/#ClimaCore.Limiters.QuasiMonotoneLimiter), in a 2D spherical domain. +The 2D sphere advection/transport example in [`examples/sphere/limiters_advection.jl`](https://github.com/CliMA/ClimaCore.jl/tree/main/examples/sphere/limiters_advection.jl) demonstrates the application of flux limiters in the horizontal direction, namely [`QuasiMonotoneLimiter`](https://clima.github.io/ClimaCore.jl/stable/api/#ClimaCore.Limiters.QuasiMonotoneLimiter), in a 2D spherical domain. #### Equations and discretizations @@ -288,7 +288,7 @@ Because this is a purely 2D problem, there is no staggered vertical discretizati - ``wD`` is the [discrete horizontal weak spectral divergence](https://clima.github.io/ClimaCore.jl/stable/operators/#ClimaCore.Operators.WeakDivergence), called `wdiv` in the example code. - ``G`` is the [discrete horizontal strong spectral gradient](https://clima.github.io/ClimaCore.jl/stable/operators/#ClimaCore.Operators.Gradient), called `grad` in the example code. -To discretize the hyperdiffusion operator, ``g(\rho, q) = - \nu_4 [\nabla^4 (\rho q)]``, in the horizontal direction, we compose the horizontal weak divergence, ``wD``, and the horizontal gradient operator, ``G_h``, twice, with an intermediate call to [`weighted_dss!`](@ref) between the two compositions, as in ``[g_2(\rho, g) \circ DSS(\rho, q) \circ g_1(\rho, q)]``, with: +To discretize the hyperdiffusion operator, ``g(\rho, q) = - \nu_4 [\nabla^4 (\rho q)]``, in the horizontal direction, we compose the horizontal weak divergence, ``wD``, and the horizontal gradient operator, ``G_h``, twice, with an intermediate call to [`weighted_dss!`](https://clima.github.io/ClimaCore.jl/stable/api/#ClimaCore.Spaces.weighted_dss!) between the two compositions, as in ``[g_2(\rho, g) \circ DSS(\rho, q) \circ g_1(\rho, q)]``, with: - ``g_1(\rho, q) = wD(G_h(q))`` - ``DSS(\rho, q) = DSS(g_1(\rho q))`` - ``g_2(\rho, q) = -\nu_4 wD(\rho G_h(\rho q))`` @@ -401,7 +401,7 @@ Because this is a purely 2D problem, there is no staggered vertical discretizati - ``wCurl`` is the [discrete weak curl](https://clima.github.io/ClimaCore.jl/stable/operators/#ClimaCore.Operators.WeakCurl), called `wcurl` in the example code. -To discretize the hyperdiffusion operator, ``g(h, \boldsymbol{u}) = - \nu_4 [\nabla^4 (h, \boldsymbol{u})]``, in the horizontal direction, we compose the weak divergence, ``wD``, and the gradient operator, ``G``, twice, with an intermediate call to [`weighted_dss!`](@ref) between the two compositions, as in ``[g_2(h, \boldsymbol{u}) \circ DSS(h, \boldsymbol{u}) \circ g_1(h, \boldsymbol{u})]``. Moreover, when ``g(h, \boldsymbol{u}) = - \nu_4 [\nabla^4 (h)]``, i.e., the operator is applied to a scalar field only, it is discretized composing the following operations: +To discretize the hyperdiffusion operator, ``g(h, \boldsymbol{u}) = - \nu_4 [\nabla^4 (h, \boldsymbol{u})]``, in the horizontal direction, we compose the weak divergence, ``wD``, and the gradient operator, ``G``, twice, with an intermediate call to [`weighted_dss!`](https://clima.github.io/ClimaCore.jl/stable/api/#ClimaCore.Spaces.weighted_dss!) between the two compositions, as in ``[g_2(h, \boldsymbol{u}) \circ DSS(h, \boldsymbol{u}) \circ g_1(h, \boldsymbol{u})]``. Moreover, when ``g(h, \boldsymbol{u}) = - \nu_4 [\nabla^4 (h)]``, i.e., the operator is applied to a scalar field only, it is discretized composing the following operations: - ``g_1(h) = wD(G(h))`` - ``DSS(g_1(h))`` - ``g_2(h) = -\nu_4 wD(G(h))`` @@ -428,7 +428,7 @@ This suite of examples contains five different test cases: ### Deformation Flow with Flux Limiters -The 3D sphere advection/transport example in [`examples/hybrid/sphere/deformation_flow.jl`](https://github.com/CliMA/ClimaCore.jl/tree/main/examples/hybrid/sphere/deformation_flow.jl) demonstrates the application of flux limiters in the horziontal direction, namely [`QuasiMonotoneLimiter`](https://clima.github.io/ClimaCore.jl/previews/PR729/api/#ClimaCore.Limiters.QuasiMonotoneLimiter), in a hybrid 3D spherical domain. It also demonstrates the usage of the flux-corrected transport in the vertical direction; by default, it uses `FCTZalesak`. +The 3D sphere advection/transport example in [`examples/hybrid/sphere/deformation_flow.jl`](https://github.com/CliMA/ClimaCore.jl/tree/main/examples/hybrid/sphere/deformation_flow.jl) demonstrates the application of flux limiters in the horziontal direction, namely [`QuasiMonotoneLimiter`](https://clima.github.io/ClimaCore.jl/stable/api/#ClimaCore.Limiters.QuasiMonotoneLimiter), in a hybrid 3D spherical domain. It also demonstrates the usage of the flux-corrected transport in the vertical direction; by default, it uses `FCTZalesak`. #### Equations and discretizations @@ -505,7 +505,7 @@ We make use of the following operators - This example uses advective fluxes equal to zero at the top and bottom boundaries. - ``G_h`` is the [discrete horizontal spectral gradient](https://clima.github.io/ClimaCore.jl/stable/operators/#ClimaCore.Operators.Gradient), called `hgrad` in the example code. -To discretize the hyperdiffusion operator for each tracer concentration, ``g(\rho, q_i) = - \nu_4 [\nabla^4 (\rho q_i)]``, in the horizontal direction, we compose the horizontal weak divergence, ``wD_h``, and the horizontal gradient operator, ``G_h``, twice, with an intermediate call to [`weighted_dss!`](@ref) between the two compositions, as in ``[g_2(\rho, g) \circ DSS(\rho, q) \circ g_1(\rho, q_i)]``, with: +To discretize the hyperdiffusion operator for each tracer concentration, ``g(\rho, q_i) = - \nu_4 [\nabla^4 (\rho q_i)]``, in the horizontal direction, we compose the horizontal weak divergence, ``wD_h``, and the horizontal gradient operator, ``G_h``, twice, with an intermediate call to [`weighted_dss!`](https://clima.github.io/ClimaCore.jl/stable/api/#ClimaCore.Spaces.weighted_dss!) between the two compositions, as in ``[g_2(\rho, g) \circ DSS(\rho, q) \circ g_1(\rho, q_i)]``, with: - ``g_1(\rho, q_i) = wD_h(G_h(q_i))`` - ``DSS(\rho, q_i) = DSS(g_1(\rho q_i))`` - ``g_2(\rho, q_i) = -\nu_4 wD_h(\rho G_h(\rho q_i))`` diff --git a/docs/src/installation_instructions.md b/docs/src/installation_instructions.md index 4371f31b22..495364db5b 100644 --- a/docs/src/installation_instructions.md +++ b/docs/src/installation_instructions.md @@ -6,8 +6,8 @@ command prompt and ```julia julia> ] -(v1.8) pkg> add ClimaCore -(v1.8) pkg> instantiate +(v1.9) pkg> add ClimaCore +(v1.9) pkg> instantiate ``` This will install the latest tagged release of the package. @@ -17,15 +17,15 @@ This will install the latest tagged release of the package. ```julia julia> ] - (v1.8) pkg> add ClimaCore#main - (v1.8) pkg> instantiate + (v1.9) pkg> add ClimaCore#main + (v1.9) pkg> instantiate ``` You can run the tests via the package manager by: ```julia julia> ] -(v1.8) pkg> test ClimaCore +(v1.9) pkg> test ClimaCore ``` # Running examples diff --git a/docs/src/lib/ClimaCoreTempestRemap.md b/docs/src/lib/ClimaCoreTempestRemap.md index f32021fe41..5e84672013 100644 --- a/docs/src/lib/ClimaCoreTempestRemap.md +++ b/docs/src/lib/ClimaCoreTempestRemap.md @@ -31,7 +31,7 @@ write_exodus ```@docs def_time_coord def_space_coord -NCDatasets.defVar(::NCDatasets.NCDataset, ::Any, field::Fields.Field) +NCDatasets.defVar(::NCDatasets.NCDataset, ::NCDatasets.SymbolOrString, field::Fields.Field) Base.setindex!(::NCDatasets.CFVariable, ::Fields.Field, ::Colon) ``` diff --git a/docs/src/matrix_fields.md b/docs/src/matrix_fields.md index 93bea655e9..3592aa5f4e 100644 --- a/docs/src/matrix_fields.md +++ b/docs/src/matrix_fields.md @@ -30,6 +30,7 @@ rmul_with_projection mul_return_type rmul_return_type matrix_shape +column_axes ``` ## Utilities diff --git a/docs/src/operators.md b/docs/src/operators.md index 217a46e460..3632391a3d 100644 --- a/docs/src/operators.md +++ b/docs/src/operators.md @@ -33,15 +33,6 @@ Interpolate Restrict ``` -### DSS -```@docs -Spaces.weighted_dss! -Spaces.create_ghost_buffer -Spaces.weighted_dss_start! -Spaces.weighted_dss_internal! -Spaces.weighted_dss_ghost! -``` - ## Finite difference operators Finite difference operators are similar with some subtle differences: @@ -99,6 +90,7 @@ ThirdOrderOneSided ```@docs AbstractBoundaryCondition +SetCurl SetValue SetGradient SetDivergence @@ -115,4 +107,6 @@ stencil_interior boundary_width stencil_left_boundary stencil_right_boundary +left_interior_idx +right_interior_idx ``` diff --git a/examples/Manifest.toml b/examples/Manifest.toml index b2493bf065..5f9726cb75 100644 --- a/examples/Manifest.toml +++ b/examples/Manifest.toml @@ -1,8 +1,8 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.8.5" +julia_version = "1.9.2" manifest_format = "2.0" -project_hash = "141c5cdc20468482f0f3af072451891b55147e8a" +project_hash = "037057f753be71d701aa4d6f94452110f8465205" [[deps.ADTypes]] git-tree-sha1 = "f5c25e8a5b29b5e941b7408bc8cc79fea4d9ef9a" @@ -11,15 +11,20 @@ version = "0.1.6" [[deps.AMD]] deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse_jll"] -git-tree-sha1 = "7e075388abb011075d994e735474ebeed0f24c4f" +git-tree-sha1 = "d4b99dd70d7136fe75ec74d072191d688448d39c" uuid = "14f7f29c-3bd6-536c-9a0b-7339e30b5a3e" -version = "0.5.1" +version = "0.5.2" [[deps.AbstractFFTs]] -deps = ["ChainRulesCore", "LinearAlgebra", "Test"] +deps = ["LinearAlgebra"] git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" [[deps.AbstractTrees]] git-tree-sha1 = "faa260e4cb5aba097a73fab382dd4b5819d8ec8c" @@ -31,6 +36,10 @@ deps = ["LinearAlgebra", "Requires"] git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" version = "3.6.2" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" [[deps.ArgCheck]] git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4" @@ -53,6 +62,22 @@ git-tree-sha1 = "f83ec24f76d4c8f525099b2ac475fc098138ec31" uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" version = "7.4.11" + [deps.ArrayInterface.extensions] + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + 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" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + [[deps.ArrayInterfaceCore]] deps = ["LinearAlgebra", "SnoopPrecompile", "SparseArrays", "SuiteSparse"] git-tree-sha1 = "e5f08b5689b1aad068e01751889f2f615c7db36d" @@ -61,9 +86,9 @@ version = "0.1.29" [[deps.ArrayLayouts]] deps = ["FillArrays", "LinearAlgebra", "SparseArrays"] -git-tree-sha1 = "4aff5fa660eb95c2e0deb6bcdabe4d9a96bc4667" +git-tree-sha1 = "6189f7819e6345bcc097331c7db571f2f211364f" uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" -version = "0.8.18" +version = "1.1.1" [[deps.Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" @@ -81,10 +106,14 @@ uuid = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" version = "0.4.2" [[deps.BandedMatrices]] -deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "SnoopPrecompile", "SparseArrays"] -git-tree-sha1 = "6ef8fc1d77b60f41041d59ce61ef9eb41ed97a83" +deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "PrecompileTools"] +git-tree-sha1 = "6e9b384d5e21452bc81cae3552c74f430e320985" uuid = "aae01518-5342-5314-be14-df237901396f" -version = "0.17.18" +version = "0.17.35" +weakdeps = ["SparseArrays"] + + [deps.BandedMatrices.extensions] + BandedMatricesSparseArraysExt = "SparseArrays" [[deps.BangBang]] deps = ["Compat", "ConstructionBase", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "Tables"] @@ -92,6 +121,20 @@ git-tree-sha1 = "e28912ce94077686443433c2800104b061a827ed" uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" version = "0.3.39" + [deps.BangBang.extensions] + BangBangChainRulesCoreExt = "ChainRulesCore" + BangBangDataFramesExt = "DataFrames" + BangBangStaticArraysExt = "StaticArrays" + BangBangStructArraysExt = "StructArrays" + BangBangTypedTablesExt = "TypedTables" + + [deps.BangBang.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" + [[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" @@ -113,15 +156,9 @@ version = "0.1.5" [[deps.BlockArrays]] deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra"] -git-tree-sha1 = "3b15c61bcece7c426ea641d143c808ace3661973" +git-tree-sha1 = "174b4970af15a500a29e76151f5c53195784b9d4" uuid = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" -version = "0.16.25" - -[[deps.BlockBandedMatrices]] -deps = ["ArrayLayouts", "BandedMatrices", "BlockArrays", "FillArrays", "LinearAlgebra", "MatrixFactorizations", "SparseArrays", "Statistics"] -git-tree-sha1 = "f389a2752664c4103f9c481b4766d7eed78ad85b" -uuid = "ffab5731-97b5-5995-9138-79e8c1846df0" -version = "0.11.10" +version = "0.16.36" [[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -176,24 +213,12 @@ git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" version = "1.16.1+1" -[[deps.Calculus]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" -uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" -version = "0.5.1" - [[deps.ChainRulesCore]] deps = ["Compat", "LinearAlgebra", "SparseArrays"] git-tree-sha1 = "e30f2f4e20f7f186dc36529910beaedc60cfa644" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" version = "1.16.0" -[[deps.ChangesOfVariables]] -deps = ["InverseFunctions", "LinearAlgebra", "Test"] -git-tree-sha1 = "2fba81a302a7be671aefe194f0525ef231104e7f" -uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" -version = "0.1.8" - [[deps.ClimaComms]] deps = ["CUDA", "MPI"] git-tree-sha1 = "6cbe1b835f91033e6326a92ac1a1f6a8c9b2215f" @@ -201,10 +226,10 @@ uuid = "3a4d1b5c-c61d-41fd-a00a-5873ba7a1b0d" version = "0.5.3" [[deps.ClimaCore]] -deps = ["Adapt", "BandedMatrices", "BlockArrays", "CUDA", "ClimaComms", "CubedSphere", "DataStructures", "DiffEqBase", "DocStringExtensions", "ForwardDiff", "GaussQuadrature", "GilbertCurves", "HDF5", "InteractiveUtils", "IntervalSets", "LinearAlgebra", "PkgVersion", "RecursiveArrayTools", "Requires", "RootSolvers", "SparseArrays", "Static", "StaticArrays", "Statistics", "UnPack"] +deps = ["Adapt", "BandedMatrices", "BlockArrays", "CUDA", "ClimaComms", "CubedSphere", "DataStructures", "DocStringExtensions", "ForwardDiff", "GaussQuadrature", "GilbertCurves", "HDF5", "InteractiveUtils", "IntervalSets", "LinearAlgebra", "PkgVersion", "RecursiveArrayTools", "Requires", "RootSolvers", "SparseArrays", "Static", "StaticArrays", "Statistics", "UnPack"] path = ".." uuid = "d414da3d-4745-48bb-8d80-42e94e092884" -version = "0.10.46" +version = "0.10.47" [[deps.ClimaCorePlots]] deps = ["ClimaCore", "RecipesBase", "StaticArrays", "TriplotBase"] @@ -259,6 +284,10 @@ deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statist git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249" uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" version = "0.10.0" +weakdeps = ["SpecialFunctions"] + + [deps.ColorVectorSpace.extensions] + SpecialFunctionsExt = "SpecialFunctions" [[deps.Colors]] deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] @@ -284,26 +313,31 @@ uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" version = "0.3.0" [[deps.Compat]] -deps = ["Dates", "LinearAlgebra", "UUIDs"] -git-tree-sha1 = "5ce999a19f4ca23ea484e92a1774a61b8ca4cf8e" +deps = ["UUIDs"] +git-tree-sha1 = "e460f044ca8b99be31d35fe54fc33a5c33dd8ed7" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.8.0" +version = "4.9.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" - -[[deps.CompositeTypes]] -git-tree-sha1 = "02d2316b7ffceff992f3096ae48c7829a8aa0638" -uuid = "b152e2b5-7a66-4b01-a709-34e65c35f657" -version = "0.1.3" +version = "1.0.5+0" [[deps.CompositionsBase]] git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" version = "0.1.2" + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + + [deps.CompositionsBase.weakdeps] + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + [[deps.ConcurrentUtilities]] deps = ["Serialization", "Sockets"] git-tree-sha1 = "5372dbbf8f0bdb8c700db5367132925c0771ef7e" @@ -315,6 +349,11 @@ deps = ["LinearAlgebra"] git-tree-sha1 = "fe2838a593b5f776e1597e086dcd47560d94e816" uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" version = "1.5.3" +weakdeps = ["IntervalSets", "StaticArrays"] + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" [[deps.Contour]] git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781" @@ -340,9 +379,9 @@ version = "1.15.0" [[deps.DataStructures]] deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "cf25ccb972fec4e4817764d01c82386ae94f77b4" +git-tree-sha1 = "3dbd312d370723b6bb43ba9d02fc36abade4518d" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.14" +version = "0.18.15" [[deps.DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -360,19 +399,37 @@ version = "0.1.2" [[deps.DelimitedFiles]] deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" - -[[deps.DensityInterface]] -deps = ["InverseFunctions", "Test"] -git-tree-sha1 = "80c3e8639e3353e5d2912fb3a1916b8455e2494b" -uuid = "b429d917-457f-4dbc-8f4c-0cc954292b1d" -version = "0.4.0" +version = "1.9.1" [[deps.DiffEqBase]] -deps = ["ArrayInterface", "ChainRulesCore", "DataStructures", "Distributions", "DocStringExtensions", "EnumX", "FastBroadcast", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "Printf", "RecursiveArrayTools", "Reexport", "Requires", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces", "ZygoteRules"] -git-tree-sha1 = "c5692436e7f8279503466db216c74165d1b301e4" +deps = ["ArrayInterface", "ChainRulesCore", "DataStructures", "DocStringExtensions", "EnumX", "FastBroadcast", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "Printf", "RecursiveArrayTools", "Reexport", "Requires", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces", "ZygoteRules"] +git-tree-sha1 = "ed586656058844e48660c6d6fdb384e83afc50db" uuid = "2b5f629d-d688-5b77-993f-72d75c75574e" -version = "6.127.0" +version = "6.128.0" + + [deps.DiffEqBase.extensions] + DiffEqBaseDistributionsExt = "Distributions" + DiffEqBaseGeneralizedGeneratedExt = "GeneralizedGenerated" + DiffEqBaseMPIExt = "MPI" + DiffEqBaseMeasurementsExt = "Measurements" + DiffEqBaseMonteCarloMeasurementsExt = "MonteCarloMeasurements" + DiffEqBaseReverseDiffExt = "ReverseDiff" + DiffEqBaseTrackerExt = "Tracker" + DiffEqBaseUnitfulExt = "Unitful" + DiffEqBaseZygoteExt = "Zygote" + + [deps.DiffEqBase.weakdeps] + Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" + GeneralizedGenerated = "6b9d7cbe-bcb9-11e9-073f-15a7a543e2eb" + MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" [[deps.DiffEqCallbacks]] deps = ["DataStructures", "DiffEqBase", "ForwardDiff", "LinearAlgebra", "Markdown", "NLsolve", "Parameters", "RecipesBase", "RecursiveArrayTools", "SciMLBase", "StaticArraysCore"] @@ -380,11 +437,9 @@ git-tree-sha1 = "303ab70e4524843653e55e16a3dc7b75e677a3dd" uuid = "459566f4-90b8-5000-8ac3-15dfb0a30def" version = "2.27.0" -[[deps.DiffEqOperators]] -deps = ["BandedMatrices", "BlockBandedMatrices", "DiffEqBase", "DomainSets", "ForwardDiff", "LazyArrays", "LazyBandedMatrices", "LinearAlgebra", "LoopVectorization", "NNlib", "Requires", "RuntimeGeneratedFunctions", "SciMLBase", "SparseArrays", "SparseDiffTools", "StaticArrays", "SuiteSparse"] -git-tree-sha1 = "ef0f24d69406bf85092c843691ab2ae3b2e34b77" -uuid = "9fdde737-9c7f-55bf-ade8-46b3f136cc48" -version = "4.45.0" + [deps.DiffEqCallbacks.weakdeps] + OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" + Sundials = "c3572dad-4567-51f8-b174-8c6c989267f4" [[deps.DiffResults]] deps = ["StaticArraysCore"] @@ -399,44 +454,30 @@ uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" version = "1.15.1" [[deps.Distances]] -deps = ["LinearAlgebra", "SparseArrays", "Statistics", "StatsAPI"] +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] git-tree-sha1 = "b6def76ffad15143924a2199f72a5cd883a2e8a9" uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" version = "0.10.9" +weakdeps = ["SparseArrays"] + + [deps.Distances.extensions] + 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", "StatsAPI", "StatsBase", "StatsFuns", "Test"] -git-tree-sha1 = "e76a3281de2719d7c81ed62c6ea7057380c87b1d" -uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.25.98" - [[deps.DocStringExtensions]] deps = ["LibGit2"] git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" version = "0.9.3" -[[deps.DomainSets]] -deps = ["CompositeTypes", "IntervalSets", "LinearAlgebra", "Random", "StaticArrays", "Statistics"] -git-tree-sha1 = "85cf537e38b7f34a84eaac22b534aa1b5bf01949" -uuid = "5b8099bc-c8ec-5219-889f-1d9e522a28bf" -version = "0.5.14" - [[deps.Downloads]] deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" version = "1.6.0" -[[deps.DualNumbers]] -deps = ["Calculus", "NaNMath", "SpecialFunctions"] -git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" -uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" -version = "0.6.8" - [[deps.Elliptic]] git-tree-sha1 = "71c79e77221ab3a29918aaf6db4f217b89138608" uuid = "b305315f-e792-5b7a-8f41-49f472929428" @@ -507,9 +548,9 @@ version = "0.3.2" [[deps.FastLapackInterface]] deps = ["LinearAlgebra"] -git-tree-sha1 = "c1293a93193f0ae94be7cf338d33e162c39d8788" +git-tree-sha1 = "b12f05108e405dadcc2aff0008db7f831374e051" uuid = "29a986be-02c6-4525-aec4-84b980013641" -version = "1.2.9" +version = "2.0.0" [[deps.FileIO]] deps = ["Pkg", "Requires", "UUIDs"] @@ -522,16 +563,26 @@ uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" [[deps.FillArrays]] deps = ["LinearAlgebra", "Random", "SparseArrays", "Statistics"] -git-tree-sha1 = "7072f1e3e5a8be51d525d64f63d3ec1287ff2790" +git-tree-sha1 = "f372472e8672b1d993e93dada09e23139b509f9e" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "0.13.11" +version = "1.5.0" [[deps.FiniteDiff]] -deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays", "StaticArrays"] +deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays"] git-tree-sha1 = "c6e4a1fbe73b31a3dea94b1da449503b8830c306" uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" version = "2.21.1" + [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.FixedPointNumbers]] deps = ["Statistics"] git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" @@ -551,10 +602,14 @@ uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" version = "0.4.2" [[deps.ForwardDiff]] -deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions", "StaticArrays"] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] git-tree-sha1 = "00e252f4d706b3d55a8863432e742bf5717b498d" uuid = "f6369f11-7733-5829-9624-2563aa707210" version = "0.10.35" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" [[deps.FreeType2_jll]] deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] @@ -614,10 +669,10 @@ uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" version = "0.72.9" [[deps.GR_jll]] -deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt6Base_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "f61f768bf090d97c532d24b64e07b237e9bb7b6b" +deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "FreeType2_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt6Base_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "1596bab77f4f073a14c62424283e7ebff3072eca" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" -version = "0.72.9+0" +version = "0.72.9+1" [[deps.GaussQuadrature]] deps = ["SpecialFunctions"] @@ -695,12 +750,6 @@ git-tree-sha1 = "d38bd0d9759e3c6cfa19bdccc314eccf8ce596cc" uuid = "3e5b6fbb-0976-4d2c-9146-d79de83f2fb0" version = "0.1.15" -[[deps.HypergeometricFunctions]] -deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] -git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685" -uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" -version = "0.3.23" - [[deps.IfElse]] git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" @@ -727,28 +776,20 @@ deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" [[deps.IntervalSets]] -deps = ["Dates", "Random", "Statistics"] +deps = ["Dates", "Random"] git-tree-sha1 = "8e59ea773deee525c99a8018409f64f19fb719e6" uuid = "8197267c-284f-5f27-9208-e0e47529a953" version = "0.7.7" +weakdeps = ["Statistics"] -[[deps.InverseFunctions]] -deps = ["Test"] -git-tree-sha1 = "68772f49f54b479fa88ace904f6127f0a3bb2e46" -uuid = "3587e190-3f89-42d0-90ee-14403ec27112" -version = "0.1.12" + [deps.IntervalSets.extensions] + IntervalSetsStatisticsExt = "Statistics" [[deps.IrrationalConstants]] git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" version = "0.2.2" -[[deps.IterativeSolvers]] -deps = ["LinearAlgebra", "Printf", "Random", "RecipesBase", "SparseArrays"] -git-tree-sha1 = "1169632f425f79429f245113b775a0e3d121457c" -uuid = "42fd0dbc-a981-5370-80f2-aaf504508153" -version = "0.9.2" - [[deps.IteratorInterfaceExtensions]] git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" uuid = "82899510-4779-5014-852e-03e436cf321d" @@ -802,18 +843,18 @@ git-tree-sha1 = "4c5875e4c228247e1c2b087669846941fb6e0118" uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" version = "0.9.8" + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + + [deps.KernelAbstractions.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + [[deps.Krylov]] deps = ["LinearAlgebra", "Printf", "SparseArrays"] git-tree-sha1 = "6dc4ad9cd74ad4ca0a8e219e945dbd22039f2125" uuid = "ba0b0d4f-ebba-5204-a429-3ac8c609bfb7" version = "0.9.2" -[[deps.KrylovKit]] -deps = ["ChainRulesCore", "GPUArraysCore", "LinearAlgebra", "Printf"] -git-tree-sha1 = "1a5e1d9941c783b0119897d29f2eb665d876ecf3" -uuid = "0b1a1467-8014-51b9-945f-bf0ae24f4b77" -version = "0.6.0" - [[deps.LAME_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" @@ -867,6 +908,14 @@ git-tree-sha1 = "f428ae552340899a935973270b8d98e5a31c49fe" uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" version = "0.16.1" + [deps.Latexify.extensions] + DataFramesExt = "DataFrames" + SymEngineExt = "SymEngine" + + [deps.Latexify.weakdeps] + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" + [[deps.LayoutPointers]] deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] git-tree-sha1 = "88b8f66b604da079a627b6fb2860d3704a6729a1" @@ -879,22 +928,10 @@ git-tree-sha1 = "1370f8202dac30758f3c345f9909b97f53d87d3f" uuid = "50d2b5c4-7a5e-59d5-8109-a42b560f39c0" version = "0.15.1" -[[deps.LazyArrays]] -deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "MacroTools", "MatrixFactorizations", "SparseArrays", "StaticArrays"] -git-tree-sha1 = "7402f6be1a28a05516c6881596879e6d18d28039" -uuid = "5078a376-72f3-5289-bfd5-ec5146d43c02" -version = "0.22.18" - [[deps.LazyArtifacts]] deps = ["Artifacts", "Pkg"] uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" -[[deps.LazyBandedMatrices]] -deps = ["ArrayLayouts", "BandedMatrices", "BlockArrays", "BlockBandedMatrices", "FillArrays", "LazyArrays", "LinearAlgebra", "MatrixFactorizations", "SparseArrays", "StaticArrays"] -git-tree-sha1 = "034d371419140f14a986ab7325d11f90f30b0c6d" -uuid = "d7e5e226-e90b-4449-9968-0f923699bf6f" -version = "0.7.17" - [[deps.LeftChildRightSiblingTrees]] deps = ["AbstractTrees"] git-tree-sha1 = "fb6803dafae4a5d62ea5cab204b1e657d9737e7f" @@ -984,7 +1021,7 @@ 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.LinearOperators]] @@ -994,17 +1031,41 @@ uuid = "5c8ed15e-5a4c-59e4-a42b-c7e8811fb125" version = "2.5.2" [[deps.LinearSolve]] -deps = ["ArrayInterface", "DocStringExtensions", "EnumX", "FastLapackInterface", "GPUArraysCore", "IterativeSolvers", "KLU", "Krylov", "KrylovKit", "LinearAlgebra", "Preferences", "RecursiveFactorization", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "SnoopPrecompile", "SparseArrays", "Sparspak", "SuiteSparse", "UnPack"] -git-tree-sha1 = "4a4f8cc7a59fadbb02d1852d1e0cef5dca3a9460" +deps = ["ArrayInterface", "DocStringExtensions", "EnumX", "FastLapackInterface", "GPUArraysCore", "InteractiveUtils", "KLU", "Krylov", "LinearAlgebra", "PrecompileTools", "Preferences", "RecursiveFactorization", "Reexport", "Requires", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Sparspak", "SuiteSparse", "UnPack"] +git-tree-sha1 = "d2605a42d5453f510ca0fe37eff8aa0bfc5a3c80" uuid = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae" -version = "1.42.0" +version = "2.4.2" + + [deps.LinearSolve.extensions] + LinearSolveCUDAExt = "CUDA" + LinearSolveHYPREExt = "HYPRE" + LinearSolveIterativeSolversExt = "IterativeSolvers" + LinearSolveKrylovKitExt = "KrylovKit" + LinearSolvePardisoExt = "Pardiso" + + [deps.LinearSolve.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + HYPRE = "b5ffcf37-a2bd-41ab-a3da-4bd9bc8ad771" + IterativeSolvers = "42fd0dbc-a981-5370-80f2-aaf504508153" + KrylovKit = "0b1a1467-8014-51b9-945f-bf0ae24f4b77" + Pardiso = "46dd5b70-b6fb-5a00-ae2d-e8fea33afaf2" [[deps.LogExpFunctions]] -deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] git-tree-sha1 = "c3ce8e7420b3a6e071e0fe4745f5d4300e37b13f" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" version = "0.3.24" + [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" @@ -1015,10 +1076,15 @@ uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" version = "1.0.0" [[deps.LoopVectorization]] -deps = ["ArrayInterface", "ArrayInterfaceCore", "CPUSummary", "ChainRulesCore", "CloseOpenIntervals", "DocStringExtensions", "ForwardDiff", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "SpecialFunctions", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] +deps = ["ArrayInterface", "ArrayInterfaceCore", "CPUSummary", "CloseOpenIntervals", "DocStringExtensions", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] git-tree-sha1 = "c88a4afe1703d731b1c4fdf4e3c7e77e3b176ea2" uuid = "bdcacae8-1622-11e9-2a5c-532679323890" version = "0.12.165" +weakdeps = ["ChainRulesCore", "ForwardDiff", "SpecialFunctions"] + + [deps.LoopVectorization.extensions] + ForwardDiffExt = ["ChainRulesCore", "ForwardDiff"] + SpecialFunctionsExt = "SpecialFunctions" [[deps.MKL_jll]] deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] @@ -1032,6 +1098,14 @@ git-tree-sha1 = "1ccbd6980b4ff1e1e411086d01696048e6013653" uuid = "da04e1cc-30fd-572f-bb4f-1f8673147195" version = "0.20.10" + [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 = "8a5b4d2220377d1ece13f49438d71ad20cf1ba83" @@ -1065,12 +1139,6 @@ version = "0.1.8" deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" -[[deps.MatrixFactorizations]] -deps = ["ArrayLayouts", "LinearAlgebra", "Printf", "Random"] -git-tree-sha1 = "0ff59b4b9024ab9a736db1ad902d2b1b48441c19" -uuid = "a3b82374-2e81-5b9e-98ce-41277c0e4c87" -version = "0.9.6" - [[deps.MbedTLS]] deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "Random", "Sockets"] git-tree-sha1 = "03a9b9718f5682ecb107ac9f7308991db4ce395b" @@ -1080,7 +1148,7 @@ version = "1.1.7" [[deps.MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.0+0" +version = "2.28.2+0" [[deps.Measures]] git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" @@ -1110,7 +1178,7 @@ uuid = "a63ad114-7e13-5084-954f-fe012c677804" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2022.2.1" +version = "2022.10.11" [[deps.MuladdMacro]] git-tree-sha1 = "cac9cc5499c25554cba55cd3c30543cff5ca4fab" @@ -1135,12 +1203,6 @@ git-tree-sha1 = "019f12e9a1a7880459d0173c182e6a99365d7ac1" uuid = "2774e3e8-f4cf-5e23-947b-6d7e65073b56" version = "4.5.1" -[[deps.NNlib]] -deps = ["Adapt", "Atomix", "ChainRulesCore", "GPUArraysCore", "KernelAbstractions", "LinearAlgebra", "Pkg", "Random", "Requires", "Statistics"] -git-tree-sha1 = "72240e3f5ca031937bd536182cb2c031da5f46dd" -uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" -version = "0.8.21" - [[deps.NVTX]] deps = ["Colors", "JuliaNVTXCallbacks_jll", "Libdl", "NVTX_jll"] git-tree-sha1 = "c1bfdab07fa259baa4604a05862c43004dd3cd45" @@ -1170,10 +1232,10 @@ uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" version = "1.2.0" [[deps.NonlinearSolve]] -deps = ["ArrayInterface", "DiffEqBase", "EnumX", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "LinearSolve", "RecursiveArrayTools", "Reexport", "SciMLBase", "SimpleNonlinearSolve", "SnoopPrecompile", "SparseArrays", "SparseDiffTools", "StaticArraysCore", "UnPack"] -git-tree-sha1 = "a6000c813371cd3cd9cbbdf8a356fc3a97138d92" +deps = ["ArrayInterface", "DiffEqBase", "EnumX", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "LinearSolve", "PrecompileTools", "RecursiveArrayTools", "Reexport", "SciMLBase", "SimpleNonlinearSolve", "SparseArrays", "SparseDiffTools", "StaticArraysCore", "UnPack"] +git-tree-sha1 = "23dabe80f8ebec9a68b0db4cd02f2d2cdbc4f653" uuid = "8913a72c-1f9b-4ce2-8d82-65094dcecaec" -version = "1.6.0" +version = "1.9.0" [[deps.OffsetArrays]] deps = ["Adapt"] @@ -1189,14 +1251,14 @@ version = "1.3.5+1" [[deps.OpenBLAS32_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "9c6c2ed4b7acd2137b878eb96c68e63b76199d0f" +git-tree-sha1 = "2fb9ee2dc14d555a6df2a714b86b7125178344c2" uuid = "656ef2d0-ae68-5445-9ca0-591084a874a2" -version = "0.3.17+0" +version = "0.3.21+0" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.20+0" +version = "0.3.21+4" [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] @@ -1217,9 +1279,9 @@ version = "1.4.1" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1aa4b74f80b01c6bc2b89992b861b5f210e665b5" +git-tree-sha1 = "bbb5c2115d63c2f1451cb70e5ef75e8fe4707019" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "1.1.21+0" +version = "1.1.22+0" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] @@ -1239,27 +1301,21 @@ uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" version = "1.6.2" [[deps.OrdinaryDiffEq]] -deps = ["Adapt", "ArrayInterface", "DataStructures", "DiffEqBase", "DocStringExtensions", "ExponentialUtilities", "FastBroadcast", "FastClosures", "FiniteDiff", "ForwardDiff", "FunctionWrappersWrappers", "IfElse", "LineSearches", "LinearAlgebra", "LinearSolve", "Logging", "LoopVectorization", "MacroTools", "MuladdMacro", "NLsolve", "NonlinearSolve", "Polyester", "PreallocationTools", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLNLSolve", "SimpleNonlinearSolve", "SimpleUnPack", "SparseArrays", "SparseDiffTools", "StaticArrayInterface", "StaticArrays", "TruncatedStacktraces"] -git-tree-sha1 = "6ffebfa8971546bace3fc312f9a703795f79f5b9" +deps = ["ADTypes", "Adapt", "ArrayInterface", "DataStructures", "DiffEqBase", "DocStringExtensions", "ExponentialUtilities", "FastBroadcast", "FastClosures", "FiniteDiff", "ForwardDiff", "FunctionWrappersWrappers", "IfElse", "InteractiveUtils", "LineSearches", "LinearAlgebra", "LinearSolve", "Logging", "LoopVectorization", "MacroTools", "MuladdMacro", "NLsolve", "NonlinearSolve", "Polyester", "PreallocationTools", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLNLSolve", "SciMLOperators", "SimpleNonlinearSolve", "SimpleUnPack", "SparseArrays", "SparseDiffTools", "StaticArrayInterface", "StaticArrays", "TruncatedStacktraces"] +git-tree-sha1 = "47c560dcb059570bdbd9f887a6b8958190e498a4" uuid = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" -version = "6.51.2" +version = "6.53.4" [[deps.PCRE2_jll]] deps = ["Artifacts", "Libdl"] uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" -version = "10.40.0+0" - -[[deps.PDMats]] -deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "67eae2738d63117a196f497d7db789821bce61d1" -uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" -version = "0.11.17" +version = "10.42.0+0" [[deps.PackageExtensionCompat]] -deps = ["Requires", "TOML"] -git-tree-sha1 = "32f3d52212a8d1c5d589a58851b1f04c97339110" +git-tree-sha1 = "f9b1e033c2b1205cf30fd119f4e50881316c1923" uuid = "65ce6f38-6b18-4e1d-a461-8949797d7930" -version = "1.0.0" +version = "1.0.1" +weakdeps = ["Requires", "TOML"] [[deps.Parameters]] deps = ["OrderedCollections", "UnPack"] @@ -1285,9 +1341,9 @@ uuid = "30392449-352a-5448-841d-b1acce4e97dc" version = "0.42.2+0" [[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.9.2" [[deps.PkgVersion]] deps = ["Pkg"] @@ -1313,6 +1369,20 @@ git-tree-sha1 = "9f8675a55b37a70aa23177ec110f6e3f4dd68466" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" version = "1.38.17" + [deps.Plots.extensions] + FileIOExt = "FileIO" + GeometryBasicsExt = "GeometryBasics" + IJuliaExt = "IJulia" + ImageInTerminalExt = "ImageInTerminal" + UnitfulExt = "Unitful" + + [deps.Plots.weakdeps] + FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" + GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" + IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" + ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + [[deps.Polyester]] deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Requires", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] git-tree-sha1 = "3d811babe092a6e7b130beee84998fe7663348b6" @@ -1331,6 +1401,12 @@ git-tree-sha1 = "f739b1b3cc7b9949af3b35089931f2b58c289163" uuid = "d236fae5-4411-538c-8e31-a6e3d9e00b46" version = "0.4.12" + [deps.PreallocationTools.extensions] + PreallocationToolsReverseDiffExt = "ReverseDiff" + + [deps.PreallocationTools.weakdeps] + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + [[deps.PrecompileTools]] deps = ["Preferences"] git-tree-sha1 = "9673d39decc5feece56ef3940e5dafba15ba0f81" @@ -1409,11 +1485,21 @@ git-tree-sha1 = "7ed35fb5f831aaf09c2d7c8736d44667a1afdcb0" uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" version = "2.38.7" + [deps.RecursiveArrayTools.extensions] + RecursiveArrayToolsMeasurementsExt = "Measurements" + RecursiveArrayToolsTrackerExt = "Tracker" + RecursiveArrayToolsZygoteExt = "Zygote" + + [deps.RecursiveArrayTools.weakdeps] + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + [[deps.RecursiveFactorization]] -deps = ["LinearAlgebra", "LoopVectorization", "Polyester", "SnoopPrecompile", "StrideArraysCore", "TriangularSolve"] -git-tree-sha1 = "9088515ad915c99026beb5436d0a09cd8c18163e" +deps = ["LinearAlgebra", "LoopVectorization", "Polyester", "PrecompileTools", "StrideArraysCore", "TriangularSolve"] +git-tree-sha1 = "34fd98298dc3fcfc657d65559491b18ab3f7f28c" uuid = "f2c3362d-daeb-58d1-803e-2bc74f2840b4" -version = "0.2.18" +version = "0.2.19" [[deps.Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" @@ -1438,18 +1524,6 @@ git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" uuid = "ae029012-a4dd-5104-9daa-d747884805df" version = "1.3.0" -[[deps.Rmath]] -deps = ["Random", "Rmath_jll"] -git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b" -uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" -version = "0.7.1" - -[[deps.Rmath_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "6ed52fdd3382cf21947b15e8870ac0ddbff736da" -uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" -version = "0.4.0+0" - [[deps.RootSolvers]] deps = ["DocStringExtensions", "ForwardDiff"] git-tree-sha1 = "9fb3462240d2898be5d4acf8925e47f70ec64d07" @@ -1491,9 +1565,9 @@ version = "0.1.8" [[deps.SciMLOperators]] deps = ["ArrayInterface", "DocStringExtensions", "Lazy", "LinearAlgebra", "Setfield", "SparseArrays", "StaticArraysCore", "Tricks"] -git-tree-sha1 = "6a657a73322170eec86fb427661dbee079b85bff" +git-tree-sha1 = "65c2e6ced6f62ea796af251eb292a0e131a3613b" uuid = "c0aeaf25-5076-4817-a8d5-81caf7dfa961" -version = "0.2.12" +version = "0.3.6" [[deps.Scratch]] deps = ["Dates"] @@ -1527,9 +1601,15 @@ version = "1.1.0" [[deps.SimpleNonlinearSolve]] deps = ["ArrayInterface", "DiffEqBase", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "PackageExtensionCompat", "PrecompileTools", "Reexport", "SciMLBase", "StaticArraysCore"] -git-tree-sha1 = "91fcc402c4ab978ad5759489db9a9c5a71732f2d" +git-tree-sha1 = "20aa9831d654bab67ed561e78917047143ecb9bf" uuid = "727e6d20-b764-4bd8-a329-72de5adea6c7" -version = "0.1.18" +version = "0.1.19" + + [deps.SimpleNonlinearSolve.extensions] + SimpleNonlinearSolveNNlibExt = "NNlib" + + [deps.SimpleNonlinearSolve.weakdeps] + NNlib = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" [[deps.SimpleTraits]] deps = ["InteractiveUtils", "MacroTools"] @@ -1558,14 +1638,20 @@ uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" version = "1.1.1" [[deps.SparseArrays]] -deps = ["LinearAlgebra", "Random"] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [[deps.SparseDiffTools]] -deps = ["Adapt", "ArrayInterface", "Compat", "DataStructures", "FiniteDiff", "ForwardDiff", "Graphs", "LinearAlgebra", "Requires", "SparseArrays", "StaticArrays", "VertexSafeGraphs"] -git-tree-sha1 = "e19ac47477c9a8fcca06dab5e5471417d5d9d723" +deps = ["ADTypes", "Adapt", "ArrayInterface", "Compat", "DataStructures", "FiniteDiff", "ForwardDiff", "Graphs", "LinearAlgebra", "Reexport", "Requires", "SciMLOperators", "Setfield", "SparseArrays", "StaticArrayInterface", "StaticArrays", "Tricks", "VertexSafeGraphs"] +git-tree-sha1 = "4c1a57bcbc0b795fbfdc2009e70f9c2fd2815bfe" uuid = "47a9eef4-7e08-11e9-0b38-333d64bd3804" -version = "1.31.0" +version = "2.4.1" + + [deps.SparseDiffTools.extensions] + SparseDiffToolsZygoteExt = "Zygote" + + [deps.SparseDiffTools.weakdeps] + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" [[deps.Sparspak]] deps = ["Libdl", "LinearAlgebra", "Logging", "OffsetArrays", "Printf", "SparseArrays", "Test"] @@ -1574,10 +1660,14 @@ uuid = "e56a9233-b9d6-4f03-8d0f-1825330902ac" version = "0.3.9" [[deps.SpecialFunctions]] -deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] git-tree-sha1 = "7beb031cf8145577fbccacd94b8a8f4ce78428d3" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" version = "2.3.0" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" [[deps.SplittablesBase]] deps = ["Setfield", "Test"] @@ -1596,12 +1686,21 @@ deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "Requires", "Snoo git-tree-sha1 = "33040351d2403b84afce74dae2e22d3f5b18edcb" uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" version = "1.4.0" +weakdeps = ["OffsetArrays", "StaticArrays"] + + [deps.StaticArrayInterface.extensions] + StaticArrayInterfaceOffsetArraysExt = "OffsetArrays" + StaticArrayInterfaceStaticArraysExt = "StaticArrays" [[deps.StaticArrays]] -deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"] +deps = ["LinearAlgebra", "Random", "StaticArraysCore"] git-tree-sha1 = "9cabadf6e7cd2349b6cf49f1915ad2028d65e881" uuid = "90137ffa-7385-5640-81b9-e52037218182" version = "1.6.2" +weakdeps = ["Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysStatisticsExt = "Statistics" [[deps.StaticArraysCore]] git-tree-sha1 = "36b3d696ce6366023a0ea192b4cd442268995a0d" @@ -1611,6 +1710,7 @@ version = "1.4.2" [[deps.Statistics]] deps = ["LinearAlgebra", "SparseArrays"] uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.9.0" [[deps.StatsAPI]] deps = ["LinearAlgebra"] @@ -1624,12 +1724,6 @@ git-tree-sha1 = "75ebe04c5bed70b91614d684259b661c9e6274a4" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" version = "0.34.0" -[[deps.StatsFuns]] -deps = ["ChainRulesCore", "HypergeometricFunctions", "InverseFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] -git-tree-sha1 = "f625d686d5a88bcd2b15cd81f18f98186fdc0c9a" -uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" -version = "1.3.0" - [[deps.StrideArraysCore]] deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] git-tree-sha1 = "f02eb61eb5c97b48c153861c72fbbfdddc607e06" @@ -1643,7 +1737,7 @@ uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" [[deps.SuiteSparse_jll]] deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"] uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "5.10.1+0" +version = "5.10.1+6" [[deps.SymbolicIndexingInterface]] deps = ["DocStringExtensions"] @@ -1654,7 +1748,7 @@ version = "0.2.2" [[deps.TOML]] deps = ["Dates"] uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.0" +version = "1.0.3" [[deps.TableTraits]] deps = ["IteratorInterfaceExtensions"] @@ -1671,7 +1765,7 @@ version = "1.10.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"] @@ -1679,6 +1773,12 @@ git-tree-sha1 = "50718b4fc1ce20cecf28d85215028c78b4d875c2" uuid = "6aa5eb33-94cf-58f4-a9d0-e4b2c4fc25ea" version = "0.15.2" + [deps.TaylorSeries.extensions] + TaylorSeriesIAExt = "IntervalArithmetic" + + [deps.TaylorSeries.weakdeps] + IntervalArithmetic = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" + [[deps.TempestRemap_jll]] deps = ["Artifacts", "HDF5_jll", "JLLWrappers", "Libdl", "NetCDF_jll", "OpenBLAS32_jll", "Pkg"] git-tree-sha1 = "88c3818a492ad1a94b1aa440b01eab5d133209ff" @@ -1731,6 +1831,20 @@ git-tree-sha1 = "53bd5978b182fa7c57577bdb452c35e5b4fb73a5" uuid = "28d57a85-8fef-5791-bfe6-a80928e7c999" version = "0.4.78" + [deps.Transducers.extensions] + TransducersBlockArraysExt = "BlockArrays" + TransducersDataFramesExt = "DataFrames" + TransducersLazyArraysExt = "LazyArrays" + TransducersOnlineStatsBaseExt = "OnlineStatsBase" + TransducersReferenceablesExt = "Referenceables" + + [deps.Transducers.weakdeps] + BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02" + OnlineStatsBase = "925886fa-5bf2-5e8e-b522-a9147a512338" + Referenceables = "42d2dcc6-99eb-4e98-b66c-637b7d73030e" + [[deps.TriangularSolve]] deps = ["CloseOpenIntervals", "IfElse", "LayoutPointers", "LinearAlgebra", "LoopVectorization", "Polyester", "Static", "VectorizationBase"] git-tree-sha1 = "31eedbc0b6d07c08a700e26d31298ac27ef330eb" @@ -1754,9 +1868,9 @@ uuid = "781d530d-4396-4725-bb49-402e4bee1e77" version = "1.4.0" [[deps.URIs]] -git-tree-sha1 = "074f993b0ca030848b897beff716d93aca60f06a" +git-tree-sha1 = "b7a5e99f24892b6824a954199a45e9ffcc1c70f0" uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" -version = "1.4.2" +version = "1.5.0" [[deps.UUIDs]] deps = ["Random", "SHA"] @@ -1777,10 +1891,18 @@ uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" version = "0.4.1" [[deps.Unitful]] -deps = ["ConstructionBase", "Dates", "InverseFunctions", "LinearAlgebra", "Random"] -git-tree-sha1 = "786e80c8ae3ed0c69b2e9799dac321d2cdbccd89" +deps = ["Dates", "LinearAlgebra", "Random"] +git-tree-sha1 = "64eb17acef1d9734cf09967539818f38093d9b35" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.16.0" +version = "1.16.2" + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + InverseFunctionsUnitfulExt = "InverseFunctions" + + [deps.Unitful.weakdeps] + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" [[deps.UnitfulLatexify]] deps = ["LaTeXStrings", "Latexify", "Unitful"] @@ -1853,9 +1975,9 @@ version = "1.1.34+0" [[deps.XZ_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "2222b751598bd9f4885c9ce9cd23e83404baa8ce" +git-tree-sha1 = "cf2c7de82431ca6f39250d2fc4aacd0daa1675c0" uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" -version = "5.4.3+1" +version = "5.4.4+0" [[deps.Xorg_libX11_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] @@ -1986,7 +2108,7 @@ version = "1.5.0+0" [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.12+3" +version = "1.2.13+0" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -2019,9 +2141,9 @@ uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" version = "0.15.1+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+0" [[deps.libfdk_aac_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] diff --git a/examples/Project.toml b/examples/Project.toml index 864a1d97d6..40b412d190 100644 --- a/examples/Project.toml +++ b/examples/Project.toml @@ -9,9 +9,7 @@ ClimaCoreTempestRemap = "d934ef94-cdd4-4710-83d6-720549644b70" ClimaCoreVTK = "c8b6d40d-e815-466f-95ae-c48aefa668fa" ClimaTimeSteppers = "595c0a79-7f3d-439a-bc5a-b232dc3bde79" Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" -DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e" DiffEqCallbacks = "459566f4-90b8-5000-8ac3-15dfb0a30def" -DiffEqOperators = "9fdde737-9c7f-55bf-ade8-46b3f136cc48" DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" GilbertCurves = "88fa7841-ef32-4516-bb70-c6ec135699d9" @@ -34,7 +32,7 @@ UnPack = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" [compat] OrdinaryDiffEq = "6" -Plots = "1.30.1" +Plots = "1" SciMLBase = "1" [extras] diff --git a/examples/column/bb_fct_advection.jl b/examples/column/bb_fct_advection.jl index 746ed3792e..fd3de087e9 100644 --- a/examples/column/bb_fct_advection.jl +++ b/examples/column/bb_fct_advection.jl @@ -1,7 +1,6 @@ using Test using LinearAlgebra using OrdinaryDiffEq: ODEProblem, solve -using DiffEqBase using ClimaTimeSteppers import ClimaCore: diff --git a/examples/column/zalesak_fct_advection.jl b/examples/column/zalesak_fct_advection.jl index efc20fbf44..f88749fed0 100644 --- a/examples/column/zalesak_fct_advection.jl +++ b/examples/column/zalesak_fct_advection.jl @@ -1,7 +1,6 @@ using Test using LinearAlgebra using OrdinaryDiffEq: ODEProblem, solve -using DiffEqBase using ClimaTimeSteppers import ClimaCore: diff --git a/examples/hybrid/box/limiters_advection.jl b/examples/hybrid/box/limiters_advection.jl index daaa8155a7..10ea8db729 100644 --- a/examples/hybrid/box/limiters_advection.jl +++ b/examples/hybrid/box/limiters_advection.jl @@ -13,7 +13,6 @@ import ClimaCore: slab import ClimaCore.Geometry: ⊗ using OrdinaryDiffEq: ODEProblem, solve -using DiffEqBase using ClimaTimeSteppers import Logging diff --git a/examples/hybrid/driver.jl b/examples/hybrid/driver.jl index 6da22f75b4..a6a62ab39f 100644 --- a/examples/hybrid/driver.jl +++ b/examples/hybrid/driver.jl @@ -26,6 +26,7 @@ postprocessing(sol, output_dir) = nothing import ClimaTimeSteppers as CTS using ClimaComms +import SciMLBase const comms_ctx = ClimaComms.context() is_distributed = comms_ctx isa ClimaComms.MPICommsContext @@ -143,8 +144,11 @@ else initial_affect = true, ) end -callback = - CallbackSet(dss_callback, save_to_disk_callback, additional_callbacks...) +callback = SciMLBase.CallbackSet( + dss_callback, + save_to_disk_callback, + additional_callbacks..., +) problem = ODE.ODEProblem( CTS.ClimaODEFunction(; @@ -178,6 +182,7 @@ end @info "on a vertical $z_stretch_string grid" walltime = @elapsed sol = OrdinaryDiffEq.solve!(integrator) +any(isnan, sol.u[end]) && error("NaNs found in result.") if is_distributed # replace sol.u on the root processor with the global sol.u if ClimaComms.iamroot(comms_ctx) @@ -215,7 +220,7 @@ if is_distributed # replace sol.u on the root processor with the global sol.u end end if ClimaComms.iamroot(comms_ctx) - sol = DiffEqBase.sensitivity_solution(sol, global_sol_u, sol.t) + sol = SciMLBase.sensitivity_solution(sol, global_sol_u, sol.t) output_file = joinpath(output_dir, "scaling_data_$(nprocs)_processes.jld2") println("writing performance data to $output_file") diff --git a/examples/hybrid/ode_config.jl b/examples/hybrid/ode_config.jl index 20b6ac9e4b..c82b2264b8 100644 --- a/examples/hybrid/ode_config.jl +++ b/examples/hybrid/ode_config.jl @@ -1,4 +1,4 @@ -import DiffEqBase +import SciMLBase import OrdinaryDiffEq as ODE import ClimaTimeSteppers as CTS @@ -23,7 +23,7 @@ is_ordinary_diffeq_newton(alg_or_tableau) = } is_imex_CTS_algo(::CTS.IMEXAlgorithm) = true -is_imex_CTS_algo(::DiffEqBase.AbstractODEAlgorithm) = false +is_imex_CTS_algo(::SciMLBase.AbstractODEAlgorithm) = false is_implicit(::ODE.OrdinaryDiffEqImplicitAlgorithm) = true is_implicit(::ODE.OrdinaryDiffEqAdaptiveImplicitAlgorithm) = true @@ -31,7 +31,7 @@ is_implicit(ode_algo) = is_imex_CTS_algo(ode_algo) is_rosenbrock(::ODE.Rosenbrock23) = true is_rosenbrock(::ODE.Rosenbrock32) = true -is_rosenbrock(::DiffEqBase.AbstractODEAlgorithm) = false +is_rosenbrock(::SciMLBase.AbstractODEAlgorithm) = false use_transform(ode_algo) = !(is_imex_CTS_algo(ode_algo) || is_rosenbrock(ode_algo)) diff --git a/examples/hybrid/sphere/README.md b/examples/hybrid/sphere/README.md index be0bf5b0d9..d0e3d084d7 100644 --- a/examples/hybrid/sphere/README.md +++ b/examples/hybrid/sphere/README.md @@ -13,7 +13,7 @@ Here is a sbatch script template for setting up simulations on caltech central h #SBATCH --output=$YOUR_SIMULATION_LOG_DIR/simulation.log module purge -module load julia/1.8.3 openmpi/4.1.1 +module load julia/1.9.2 openmpi/4.1.1 export JULIA_MPI_BINARY=system export JULIA_CUDA_USE_BINARYBUILDER=false diff --git a/examples/hybrid/sphere/hadley_circulation.jl b/examples/hybrid/sphere/hadley_circulation.jl index 949b2bf9c5..441bcb326c 100644 --- a/examples/hybrid/sphere/hadley_circulation.jl +++ b/examples/hybrid/sphere/hadley_circulation.jl @@ -16,7 +16,6 @@ import ClimaCore: import ClimaCore.Utilities: half using OrdinaryDiffEq: ODEProblem, solve -using DiffEqBase using ClimaTimeSteppers using NCDatasets, ClimaCoreTempestRemap diff --git a/examples/plane/limiters_advection.jl b/examples/plane/limiters_advection.jl index 1b8c61d9fb..0bf3a490f0 100644 --- a/examples/plane/limiters_advection.jl +++ b/examples/plane/limiters_advection.jl @@ -5,7 +5,6 @@ import ClimaCore: Domains, Fields, Geometry, Meshes, Operators, Spaces, Topologies, Limiters using OrdinaryDiffEq: ODEProblem, solve -using DiffEqBase using ClimaTimeSteppers import Logging diff --git a/examples/sphere/shallow_water_cuda.jl b/examples/sphere/shallow_water_cuda.jl index 20d2dcd8fd..329e1782cb 100644 --- a/examples/sphere/shallow_water_cuda.jl +++ b/examples/sphere/shallow_water_cuda.jl @@ -2,7 +2,8 @@ using CUDA using ClimaComms using DocStringExtensions using LinearAlgebra -using ClimaTimeSteppers, DiffEqBase +using ClimaTimeSteppers +import SciMLBase import OrdinaryDiffEq as ODE import ClimaTimeSteppers as CTS using DiffEqCallbacks @@ -581,7 +582,7 @@ function shallow_water_driver_cuda(ARGS, ::Type{FT}) where {FT} adaptive = false, progress_message = (dt, u, p, t) -> t, internalnorm = (u, t) -> norm(parent(Y)), - callback = CallbackSet(save_callback), + callback = SciMLBase.CallbackSet(save_callback), ) return integrator @@ -590,5 +591,5 @@ end integrator = shallow_water_driver_cuda(ARGS, Float64) if !isinteractive() - solve!(integrator) + SciMLBase.solve!(integrator) end diff --git a/lib/ClimaCoreMakie/examples/Manifest.toml b/lib/ClimaCoreMakie/examples/Manifest.toml index 2e27ca4c84..cc6e668a26 100644 --- a/lib/ClimaCoreMakie/examples/Manifest.toml +++ b/lib/ClimaCoreMakie/examples/Manifest.toml @@ -1,19 +1,19 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.8.5" +julia_version = "1.9.2" manifest_format = "2.0" project_hash = "d088a1372f5f159971622e9e73fad4fdf04746c7" -[[deps.ADTypes]] -git-tree-sha1 = "f5c25e8a5b29b5e941b7408bc8cc79fea4d9ef9a" -uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" -version = "0.1.6" - [[deps.AbstractFFTs]] -deps = ["ChainRulesCore", "LinearAlgebra", "Test"] +deps = ["LinearAlgebra"] git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" [[deps.AbstractLattices]] git-tree-sha1 = "f35684b7349da49fcc8a9e520e30e45dbb077166" @@ -30,6 +30,10 @@ deps = ["LinearAlgebra", "Requires"] git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" version = "3.6.2" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" [[deps.Animations]] deps = ["Colors"] @@ -47,6 +51,22 @@ git-tree-sha1 = "f83ec24f76d4c8f525099b2ac475fc098138ec31" uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" version = "7.4.11" + [deps.ArrayInterface.extensions] + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + 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" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + [[deps.ArrayLayouts]] deps = ["FillArrays", "LinearAlgebra", "SparseArrays"] git-tree-sha1 = "6189f7819e6345bcc097331c7db571f2f211364f" @@ -87,10 +107,14 @@ uuid = "ab4f0b2a-ad5b-11e8-123f-65d77653426b" version = "0.4.2" [[deps.BandedMatrices]] -deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "PrecompileTools", "SparseArrays"] -git-tree-sha1 = "3cddbe0fad23df52587e675b3d71eea66b850cb9" +deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "PrecompileTools"] +git-tree-sha1 = "6e9b384d5e21452bc81cae3552c74f430e320985" uuid = "aae01518-5342-5314-be14-df237901396f" -version = "0.17.34" +version = "0.17.35" +weakdeps = ["SparseArrays"] + + [deps.BandedMatrices.extensions] + BandedMatricesSparseArraysExt = "SparseArrays" [[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" @@ -100,12 +124,6 @@ git-tree-sha1 = "43b1a4a8f797c1cddadf60499a8a077d4af2cd2d" uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" version = "0.1.7" -[[deps.BitTwiddlingConvenienceFunctions]] -deps = ["Static"] -git-tree-sha1 = "0c5f81f47bbbcf4aea7b2959135713459170798b" -uuid = "62783981-4cbd-42fc-bca8-16325de8dc4b" -version = "0.1.5" - [[deps.BlockArrays]] deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra"] git-tree-sha1 = "174b4970af15a500a29e76151f5c53195784b9d4" @@ -123,12 +141,6 @@ git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" version = "0.4.2" -[[deps.CPUSummary]] -deps = ["CpuId", "IfElse", "PrecompileTools", "Static"] -git-tree-sha1 = "89e0654ed8c7aebad6d5ad235d6242c2d737a928" -uuid = "2a0fbf3d-bb9c-48f3-b0a9-814d99fd7ab9" -version = "0.2.3" - [[deps.CRC32c]] uuid = "8bf52ea8-c179-5cab-976a-9e18b702a9bc" @@ -186,12 +198,6 @@ git-tree-sha1 = "e30f2f4e20f7f186dc36529910beaedc60cfa644" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" version = "1.16.0" -[[deps.ChangesOfVariables]] -deps = ["InverseFunctions", "LinearAlgebra", "Test"] -git-tree-sha1 = "2fba81a302a7be671aefe194f0525ef231104e7f" -uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" -version = "0.1.8" - [[deps.ClimaComms]] deps = ["CUDA", "MPI"] git-tree-sha1 = "6cbe1b835f91033e6326a92ac1a1f6a8c9b2215f" @@ -199,10 +205,10 @@ uuid = "3a4d1b5c-c61d-41fd-a00a-5873ba7a1b0d" version = "0.5.3" [[deps.ClimaCore]] -deps = ["Adapt", "BandedMatrices", "BlockArrays", "CUDA", "ClimaComms", "CubedSphere", "DataStructures", "DiffEqBase", "DocStringExtensions", "ForwardDiff", "GaussQuadrature", "GilbertCurves", "HDF5", "InteractiveUtils", "IntervalSets", "LinearAlgebra", "PkgVersion", "RecursiveArrayTools", "Requires", "RootSolvers", "SparseArrays", "Static", "StaticArrays", "Statistics", "UnPack"] +deps = ["Adapt", "BandedMatrices", "BlockArrays", "CUDA", "ClimaComms", "CubedSphere", "DataStructures", "DocStringExtensions", "ForwardDiff", "GaussQuadrature", "GilbertCurves", "HDF5", "InteractiveUtils", "IntervalSets", "LinearAlgebra", "PkgVersion", "RecursiveArrayTools", "Requires", "RootSolvers", "SparseArrays", "Static", "StaticArrays", "Statistics", "UnPack"] path = "../../.." uuid = "d414da3d-4745-48bb-8d80-42e94e092884" -version = "0.10.46" +version = "0.10.47" [[deps.ClimaCoreMakie]] deps = ["ClimaCore", "Makie"] @@ -210,12 +216,6 @@ path = ".." uuid = "908f55d8-4145-4867-9c14-5dad1a479e4d" version = "0.4.0" -[[deps.CloseOpenIntervals]] -deps = ["Static", "StaticArrayInterface"] -git-tree-sha1 = "70232f82ffaab9dc52585e0dd043b5e0c6b714f1" -uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9" -version = "0.1.12" - [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] git-tree-sha1 = "02aa26a4cf76381be7f66e020a3eddeb27b0a092" @@ -257,11 +257,6 @@ git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" version = "1.0.2" -[[deps.CommonSolve]] -git-tree-sha1 = "0eee5eb66b1cf62cd6ad1b460238e60e4b09400c" -uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" -version = "0.2.4" - [[deps.CommonSubexpressions]] deps = ["MacroTools", "Test"] git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" @@ -269,15 +264,19 @@ uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" version = "0.3.0" [[deps.Compat]] -deps = ["Dates", "LinearAlgebra", "UUIDs"] -git-tree-sha1 = "5ce999a19f4ca23ea484e92a1774a61b8ca4cf8e" +deps = ["UUIDs"] +git-tree-sha1 = "e460f044ca8b99be31d35fe54fc33a5c33dd8ed7" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.8.0" +version = "4.9.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+0" [[deps.ConcurrentUtilities]] deps = ["Serialization", "Sockets"] @@ -296,6 +295,11 @@ deps = ["LinearAlgebra"] git-tree-sha1 = "fe2838a593b5f776e1597e086dcd47560d94e816" uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" version = "1.5.3" +weakdeps = ["IntervalSets", "StaticArrays"] + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" [[deps.Contour]] git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781" @@ -308,12 +312,6 @@ git-tree-sha1 = "f9d7112bfff8a19a3a4ea4e03a8e6a91fe8456bf" uuid = "150eb455-5306-5404-9cee-2592286d6298" version = "0.6.3" -[[deps.CpuId]] -deps = ["Markdown"] -git-tree-sha1 = "fcbb72b032692610bfbdb15018ac16a36cf2e406" -uuid = "adafc99b-e345-5852-983c-f28acb93d879" -version = "0.3.1" - [[deps.CubedSphere]] deps = ["Elliptic", "FFTW", "Printf", "ProgressBars", "SpecialFunctions", "TaylorSeries", "Test"] git-tree-sha1 = "131498c78453d02b4821d8b93f6e44595399f19f" @@ -327,9 +325,9 @@ version = "1.15.0" [[deps.DataStructures]] deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "cf25ccb972fec4e4817764d01c82386ae94f77b4" +git-tree-sha1 = "3dbd312d370723b6bb43ba9d02fc36abade4518d" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.14" +version = "0.18.15" [[deps.DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -341,10 +339,14 @@ deps = ["Printf"] uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" [[deps.DelaunayTriangulation]] -deps = ["DataStructures", "EnumX", "ExactPredicates", "MakieCore", "Random", "SimpleGraphs"] +deps = ["DataStructures", "EnumX", "ExactPredicates", "Random", "SimpleGraphs"] git-tree-sha1 = "a1d8532de83f8ce964235eff1edeff9581144d02" uuid = "927a84f5-c5f4-47a5-9785-b46e178433df" version = "0.7.2" +weakdeps = ["MakieCore"] + + [deps.DelaunayTriangulation.extensions] + DelaunayTriangulationMakieCoreExt = "MakieCore" [[deps.Deno_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -352,18 +354,6 @@ git-tree-sha1 = "cd6756e833c377e0ce9cd63fb97689a255f12323" uuid = "04572ae6-984a-583e-9378-9577a1c2574d" version = "1.33.4+0" -[[deps.DensityInterface]] -deps = ["InverseFunctions", "Test"] -git-tree-sha1 = "80c3e8639e3353e5d2912fb3a1916b8455e2494b" -uuid = "b429d917-457f-4dbc-8f4c-0cc954292b1d" -version = "0.4.0" - -[[deps.DiffEqBase]] -deps = ["ArrayInterface", "ChainRulesCore", "DataStructures", "Distributions", "DocStringExtensions", "EnumX", "FastBroadcast", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "Printf", "RecursiveArrayTools", "Reexport", "Requires", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces", "ZygoteRules"] -git-tree-sha1 = "c5692436e7f8279503466db216c74165d1b301e4" -uuid = "2b5f629d-d688-5b77-993f-72d75c75574e" -version = "6.127.0" - [[deps.DiffResults]] deps = ["StaticArraysCore"] git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" @@ -381,10 +371,18 @@ deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" [[deps.Distributions]] -deps = ["ChainRulesCore", "DensityInterface", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SparseArrays", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns", "Test"] -git-tree-sha1 = "e76a3281de2719d7c81ed62c6ea7057380c87b1d" +deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns", "Test"] +git-tree-sha1 = "27a18994a5991b1d2e2af7833c4f8ecf9af6b9ea" uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.25.98" +version = "0.25.99" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" [[deps.DocStringExtensions]] deps = ["LibGit2"] @@ -460,9 +458,9 @@ version = "0.4.1" [[deps.FFMPEG_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] -git-tree-sha1 = "b8660105ccaff705c70894c5f1e24f5c18974220" +git-tree-sha1 = "466d45dc38e15794ec7d5d63ec03d776a9aff36e" uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" -version = "4.4.4+0" +version = "4.4.4+1" [[deps.FFTW]] deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] @@ -476,12 +474,6 @@ git-tree-sha1 = "c6033cc3892d0ef5bb9cd29b7f2f0331ea5184ea" uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" version = "3.3.10+0" -[[deps.FastBroadcast]] -deps = ["ArrayInterface", "LinearAlgebra", "Polyester", "Static", "StaticArrayInterface", "StrideArraysCore"] -git-tree-sha1 = "aa9925a229d45fe3018715238956766fa21804d1" -uuid = "7034ab61-46d4-4ed7-9d0f-46aef9175898" -version = "0.2.6" - [[deps.FastRounding]] deps = ["ErrorfreeArithmetic", "LinearAlgebra"] git-tree-sha1 = "6344aa18f654196be82e62816935225b3b9abe44" @@ -504,11 +496,21 @@ uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" version = "1.5.0" [[deps.FiniteDiff]] -deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays", "StaticArrays"] +deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays"] git-tree-sha1 = "c6e4a1fbe73b31a3dea94b1da449503b8830c306" uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" version = "2.21.1" + [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.FixedPointNumbers]] deps = ["Statistics"] git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" @@ -528,10 +530,14 @@ uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" version = "0.4.2" [[deps.ForwardDiff]] -deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions", "StaticArrays"] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] git-tree-sha1 = "00e252f4d706b3d55a8863432e742bf5717b498d" uuid = "f6369f11-7733-5829-9624-2563aa707210" version = "0.10.35" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" [[deps.FreeType]] deps = ["CEnum", "FreeType2_jll"] @@ -557,17 +563,6 @@ git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" uuid = "559328eb-81f9-559d-9380-de523a88c83c" version = "1.0.10+0" -[[deps.FunctionWrappers]] -git-tree-sha1 = "d62485945ce5ae9c0c48f124a84998d755bae00e" -uuid = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e" -version = "1.1.3" - -[[deps.FunctionWrappersWrappers]] -deps = ["FunctionWrappers"] -git-tree-sha1 = "b104d487b34566608f8b4e1c39fb0b10aa279ff8" -uuid = "77dc65aa-8811-40c2-897b-53d922fa7daf" -version = "0.1.3" - [[deps.Future]] deps = ["Random"] uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" @@ -810,16 +805,14 @@ uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" version = "0.20.9" [[deps.IntervalSets]] -deps = ["Dates", "Random", "Statistics"] +deps = ["Dates", "Random"] git-tree-sha1 = "8e59ea773deee525c99a8018409f64f19fb719e6" uuid = "8197267c-284f-5f27-9208-e0e47529a953" version = "0.7.7" +weakdeps = ["Statistics"] -[[deps.InverseFunctions]] -deps = ["Test"] -git-tree-sha1 = "68772f49f54b479fa88ace904f6127f0a3bb2e46" -uuid = "3587e190-3f89-42d0-90ee-14403ec27112" -version = "0.1.12" + [deps.IntervalSets.extensions] + IntervalSetsStatisticsExt = "Statistics" [[deps.IrrationalConstants]] git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" @@ -856,9 +849,9 @@ version = "0.21.4" [[deps.JSON3]] deps = ["Dates", "Mmap", "Parsers", "PrecompileTools", "StructTypes", "UUIDs"] -git-tree-sha1 = "5b62d93f2582b09e469b3099d839c2d2ebf5066d" +git-tree-sha1 = "95220473901735a0f4df9d1ca5b171b568b2daa3" uuid = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" -version = "1.13.1" +version = "1.13.2" [[deps.JSServe]] deps = ["Base64", "CodecZlib", "Colors", "Dates", "Deno_jll", "HTTP", "Hyperscript", "LinearAlgebra", "Markdown", "MsgPack", "Observables", "RelocatableFolders", "SHA", "Sockets", "Tables", "Test", "ThreadPools", "URIs", "UUIDs", "WidgetsBase"] @@ -884,6 +877,12 @@ git-tree-sha1 = "4c5875e4c228247e1c2b087669846941fb6e0118" uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" version = "0.9.8" + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + + [deps.KernelAbstractions.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + [[deps.KernelDensity]] deps = ["Distributions", "DocStringExtensions", "FFTW", "Interpolations", "StatsBase"] git-tree-sha1 = "90442c50e202a5cdf21a7899c66b240fdef14035" @@ -931,18 +930,6 @@ git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996" uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" version = "1.3.0" -[[deps.LayoutPointers]] -deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] -git-tree-sha1 = "88b8f66b604da079a627b6fb2860d3704a6729a1" -uuid = "10f19ff3-798f-405d-979b-55457f8fc047" -version = "0.1.14" - -[[deps.Lazy]] -deps = ["MacroTools"] -git-tree-sha1 = "1370f8202dac30758f3c345f9909b97f53d87d3f" -uuid = "50d2b5c4-7a5e-59d5-8109-a42b560f39c0" -version = "0.15.1" - [[deps.LazyArtifacts]] deps = ["Artifacts", "Pkg"] uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" @@ -1035,7 +1022,7 @@ 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.LinearAlgebraX]] @@ -1045,11 +1032,21 @@ uuid = "9b3f67b0-2d00-526e-9884-9e4938f8fb88" version = "0.1.12" [[deps.LogExpFunctions]] -deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] git-tree-sha1 = "c3ce8e7420b3a6e071e0fe4745f5d4300e37b13f" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" version = "0.3.24" + [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" @@ -1071,6 +1068,14 @@ git-tree-sha1 = "49579593ac2c5f9213c61eead3e39606d22a2a04" uuid = "da04e1cc-30fd-572f-bb4f-1f8673147195" version = "0.20.13" + [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 = "8a5b4d2220377d1ece13f49438d71ad20cf1ba83" @@ -1107,11 +1112,6 @@ git-tree-sha1 = "87a85ff81583bd392642869557cb633532989517" uuid = "20f20a25-4f0e-4fdf-b5d1-57303727442b" version = "0.6.4" -[[deps.ManualMemory]] -git-tree-sha1 = "bcaef4fc7a0cfe2cba636d84cda54b5e4e4ca3cd" -uuid = "d125e4d3-2237-4719-b19c-fa641b8a4667" -version = "0.1.8" - [[deps.MappedArrays]] git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e" uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" @@ -1141,7 +1141,7 @@ version = "1.1.7" [[deps.MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.0+0" +version = "2.28.2+0" [[deps.MeshIO]] deps = ["ColorTypes", "FileIO", "GeometryBasics", "Printf"] @@ -1183,7 +1183,7 @@ version = "0.3.4" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2022.2.1" +version = "2022.10.11" [[deps.MsgPack]] deps = ["Serialization"] @@ -1191,22 +1191,11 @@ git-tree-sha1 = "fc8c15ca848b902015bd4a745d350f02cf791c2a" uuid = "99f44e22-a591-53d1-9472-aa23ef4bd671" version = "1.2.0" -[[deps.MuladdMacro]] -git-tree-sha1 = "cac9cc5499c25554cba55cd3c30543cff5ca4fab" -uuid = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221" -version = "0.2.4" - [[deps.Multisets]] git-tree-sha1 = "8d852646862c96e226367ad10c8af56099b4047e" uuid = "3b2b4ff1-bcff-5658-a3ee-dbcf1ce5ac09" version = "0.4.4" -[[deps.MutableArithmetics]] -deps = ["LinearAlgebra", "SparseArrays", "Test"] -git-tree-sha1 = "964cb1a7069723727025ae295408747a0b36a854" -uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" -version = "1.3.0" - [[deps.NLSolversBase]] deps = ["DiffResults", "Distributed", "FiniteDiff", "ForwardDiff"] git-tree-sha1 = "a0b464d183da839699f4c79e7606d9d186ec172c" @@ -1249,7 +1238,7 @@ version = "1.3.5+1" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.20+0" +version = "0.3.21+4" [[deps.OpenEXR]] deps = ["Colors", "FileIO", "OpenEXR_jll"] @@ -1282,9 +1271,9 @@ version = "1.4.1" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "cae3153c7f6cf3f069a853883fd1919a6e5bab5b" +git-tree-sha1 = "e78db7bd5c26fc5a6911b50a47ee302219157ea8" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.0.9+0" +version = "3.0.10+0" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] @@ -1312,7 +1301,7 @@ version = "1.6.2" [[deps.PCRE2_jll]] deps = ["Artifacts", "Libdl"] uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" -version = "10.40.0+0" +version = "10.42.0+0" [[deps.PDMats]] deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] @@ -1369,9 +1358,9 @@ uuid = "30392449-352a-5448-841d-b1acce4e97dc" version = "0.42.2+0" [[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.9.2" [[deps.PkgVersion]] deps = ["Pkg"] @@ -1385,41 +1374,33 @@ git-tree-sha1 = "f92e1315dadf8c46561fb9396e525f7200cdc227" uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" version = "1.3.5" -[[deps.Polyester]] -deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Requires", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] -git-tree-sha1 = "3d811babe092a6e7b130beee84998fe7663348b6" -uuid = "f517fe37-dbe3-4b94-8317-1923a5111588" -version = "0.7.5" - -[[deps.PolyesterWeave]] -deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] -git-tree-sha1 = "240d7170f5ffdb285f9427b92333c3463bf65bf6" -uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad" -version = "0.2.1" - [[deps.PolygonOps]] git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6" uuid = "647866c9-e3ac-4575-94e7-e3d426903924" version = "0.1.2" [[deps.Polynomials]] -deps = ["ChainRulesCore", "LinearAlgebra", "MakieCore", "MutableArithmetics", "RecipesBase"] +deps = ["LinearAlgebra", "RecipesBase"] git-tree-sha1 = "3aa2bb4982e575acd7583f01531f241af077b163" uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" version = "3.2.13" + [deps.Polynomials.extensions] + PolynomialsChainRulesCoreExt = "ChainRulesCore" + PolynomialsMakieCoreExt = "MakieCore" + PolynomialsMutableArithmeticsExt = "MutableArithmetics" + + [deps.Polynomials.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b" + MutableArithmetics = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" + [[deps.PositiveFactorizations]] deps = ["LinearAlgebra"] git-tree-sha1 = "17275485f373e6673f7e7f97051f703ed5b15b20" uuid = "85a6dd25-e78a-55b7-8502-1745935b8125" version = "0.2.4" -[[deps.PreallocationTools]] -deps = ["Adapt", "ArrayInterface", "ForwardDiff", "Requires"] -git-tree-sha1 = "f739b1b3cc7b9949af3b35089931f2b58c289163" -uuid = "d236fae5-4411-538c-8e31-a6e3d9e00b46" -version = "0.4.12" - [[deps.PrecompileTools]] deps = ["Preferences"] git-tree-sha1 = "9673d39decc5feece56ef3940e5dafba15ba0f81" @@ -1502,6 +1483,10 @@ deps = ["Requires"] git-tree-sha1 = "1342a47bf3260ee108163042310d26f2be5ec90b" uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439" version = "0.4.5" +weakdeps = ["FixedPointNumbers"] + + [deps.Ratios.extensions] + RatiosFixedPointNumbersExt = "FixedPointNumbers" [[deps.RecipesBase]] deps = ["PrecompileTools"] @@ -1515,6 +1500,16 @@ git-tree-sha1 = "7ed35fb5f831aaf09c2d7c8736d44667a1afdcb0" uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" version = "2.38.7" + [deps.RecursiveArrayTools.extensions] + RecursiveArrayToolsMeasurementsExt = "Measurements" + RecursiveArrayToolsTrackerExt = "Tracker" + RecursiveArrayToolsZygoteExt = "Zygote" + + [deps.RecursiveArrayTools.weakdeps] + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + [[deps.Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" uuid = "189a3867-3050-52da-a836-e630ba90ab69" @@ -1561,12 +1556,6 @@ git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b" uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705" version = "0.2.1" -[[deps.RuntimeGeneratedFunctions]] -deps = ["ExprTools", "SHA", "Serialization"] -git-tree-sha1 = "237edc1563bbf078629b4f8d194bd334e97907cf" -uuid = "7e49a35a-f44a-4d26-94aa-eba1b4ca6b47" -version = "0.5.11" - [[deps.SHA]] uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" version = "0.7.0" @@ -1577,11 +1566,6 @@ git-tree-sha1 = "0e270732477b9e551d884e6b07e23bb2ec947790" uuid = "fdea26ae-647d-5447-a871-4b548cad5224" version = "3.4.5" -[[deps.SIMDTypes]] -git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" -uuid = "94e857df-77ce-4151-89e5-788b33177be4" -version = "0.1.0" - [[deps.SQLite_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] git-tree-sha1 = "4619dd3363610d94fb42a95a6dc35b526a26d0ef" @@ -1594,18 +1578,6 @@ git-tree-sha1 = "d49e35f413186528f1d7cc675e67d0ed16fd7800" uuid = "7b38b023-a4d7-4c5e-8d43-3f3097f304eb" version = "0.4.0" -[[deps.SciMLBase]] -deps = ["ADTypes", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "PrecompileTools", "Preferences", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLOperators", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables", "TruncatedStacktraces"] -git-tree-sha1 = "04370090604cd399db5bebddb636d80ab9d338e9" -uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462" -version = "1.94.0" - -[[deps.SciMLOperators]] -deps = ["ArrayInterface", "DocStringExtensions", "Lazy", "LinearAlgebra", "Setfield", "SparseArrays", "StaticArraysCore", "Tricks"] -git-tree-sha1 = "65c2e6ced6f62ea796af251eb292a0e131a3613b" -uuid = "c0aeaf25-5076-4817-a8d5-81caf7dfa961" -version = "0.3.6" - [[deps.Scratch]] deps = ["Dates"] git-tree-sha1 = "30449ee12237627992a99d5e30ae63e4d78cd24a" @@ -1689,12 +1661,6 @@ git-tree-sha1 = "2da10356e31327c7096832eb9cd86307a50b1eb6" uuid = "45858cf5-a6b0-47a3-bbea-62219f50df47" version = "0.1.3" -[[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" @@ -1711,14 +1677,18 @@ uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" version = "1.1.1" [[deps.SparseArrays]] -deps = ["LinearAlgebra", "Random"] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [[deps.SpecialFunctions]] -deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] git-tree-sha1 = "7beb031cf8145577fbccacd94b8a8f4ce78428d3" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" version = "2.3.0" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" [[deps.StableHashTraits]] deps = ["CRC32c", "Compat", "Dates", "SHA", "Tables", "TupleTools", "UUIDs"] @@ -1738,17 +1708,15 @@ git-tree-sha1 = "f295e0a1da4ca425659c57441bcb59abb035a4bc" uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" version = "0.8.8" -[[deps.StaticArrayInterface]] -deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "Requires", "SnoopPrecompile", "SparseArrays", "Static", "SuiteSparse"] -git-tree-sha1 = "33040351d2403b84afce74dae2e22d3f5b18edcb" -uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" -version = "1.4.0" - [[deps.StaticArrays]] -deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"] +deps = ["LinearAlgebra", "Random", "StaticArraysCore"] git-tree-sha1 = "9cabadf6e7cd2349b6cf49f1915ad2028d65e881" uuid = "90137ffa-7385-5640-81b9-e52037218182" version = "1.6.2" +weakdeps = ["Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysStatisticsExt = "Statistics" [[deps.StaticArraysCore]] git-tree-sha1 = "36b3d696ce6366023a0ea192b4cd442268995a0d" @@ -1758,6 +1726,7 @@ version = "1.4.2" [[deps.Statistics]] deps = ["LinearAlgebra", "SparseArrays"] uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.9.0" [[deps.StatsAPI]] deps = ["LinearAlgebra"] @@ -1772,16 +1741,18 @@ uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" version = "0.34.0" [[deps.StatsFuns]] -deps = ["ChainRulesCore", "HypergeometricFunctions", "InverseFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] git-tree-sha1 = "f625d686d5a88bcd2b15cd81f18f98186fdc0c9a" uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" version = "1.3.0" -[[deps.StrideArraysCore]] -deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] -git-tree-sha1 = "f02eb61eb5c97b48c153861c72fbbfdddc607e06" -uuid = "7792a7ef-975c-4747-a70f-980b88e8d1da" -version = "0.4.17" + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + + [deps.StatsFuns.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" [[deps.StructArrays]] deps = ["Adapt", "DataAPI", "GPUArraysCore", "StaticArraysCore", "Tables"] @@ -1799,6 +1770,11 @@ version = "1.10.0" deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "5.10.1+6" + [[deps.SymbolicIndexingInterface]] deps = ["DocStringExtensions"] git-tree-sha1 = "f8ab052bfcbdb9b48fad2c80c873aa0d0344dfe5" @@ -1808,7 +1784,7 @@ version = "0.2.2" [[deps.TOML]] deps = ["Dates"] uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.0" +version = "1.0.3" [[deps.TableTraits]] deps = ["IteratorInterfaceExtensions"] @@ -1825,13 +1801,17 @@ version = "1.10.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 = "50718b4fc1ce20cecf28d85215028c78b4d875c2" uuid = "6aa5eb33-94cf-58f4-a9d0-e4b2c4fc25ea" version = "0.15.2" +weakdeps = ["IntervalArithmetic"] + + [deps.TaylorSeries.extensions] + TaylorSeriesIAExt = "IntervalArithmetic" [[deps.TensorCore]] deps = ["LinearAlgebra"] @@ -1849,12 +1829,6 @@ git-tree-sha1 = "50cb5f85d5646bc1422aa0238aa5bfca99ca9ae7" uuid = "b189fb0b-2eb5-4ed4-bc0c-d34c51242431" version = "2.1.1" -[[deps.ThreadingUtilities]] -deps = ["ManualMemory"] -git-tree-sha1 = "eda08f7e9818eb53661b3deb74e3159460dfbc27" -uuid = "8290d209-cae3-49c0-8002-c8c24d57dab5" -version = "0.5.2" - [[deps.TiffImages]] deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "ProgressMeter", "UUIDs"] git-tree-sha1 = "8621f5c499a8aa4aa970b1ae381aae0ef1576966" @@ -1873,31 +1847,20 @@ git-tree-sha1 = "9a6ae7ed916312b41236fcef7e0af564ef934769" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" version = "0.9.13" -[[deps.Tricks]] -git-tree-sha1 = "aadb748be58b492045b4f56166b5188aa63ce549" -uuid = "410a4b4d-49e4-4fbc-ab6d-cb71b17b3775" -version = "0.1.7" - [[deps.TriplotBase]] git-tree-sha1 = "4d4ed7f294cda19382ff7de4c137d24d16adc89b" uuid = "981d1d27-644d-49a2-9326-4793e63143c3" version = "0.1.0" -[[deps.TruncatedStacktraces]] -deps = ["InteractiveUtils", "MacroTools", "Preferences"] -git-tree-sha1 = "ea3e54c2bdde39062abf5a9758a23735558705e1" -uuid = "781d530d-4396-4725-bb49-402e4bee1e77" -version = "1.4.0" - [[deps.TupleTools]] git-tree-sha1 = "3c712976c47707ff893cf6ba4354aa14db1d8938" uuid = "9d95972d-f1c8-5527-a6e0-b4b365fa01f6" version = "1.3.0" [[deps.URIs]] -git-tree-sha1 = "074f993b0ca030848b897beff716d93aca60f06a" +git-tree-sha1 = "b7a5e99f24892b6824a954199a45e9ffcc1c70f0" uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" -version = "1.4.2" +version = "1.5.0" [[deps.UUIDs]] deps = ["Random", "SHA"] @@ -1965,9 +1928,9 @@ version = "1.1.34+0" [[deps.XZ_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "2222b751598bd9f4885c9ce9cd23e83404baa8ce" +git-tree-sha1 = "cf2c7de82431ca6f39250d2fc4aacd0daa1675c0" uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" -version = "5.4.3+1" +version = "5.4.4+0" [[deps.Xorg_libX11_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] @@ -2062,7 +2025,7 @@ version = "4.3.4+0" [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.12+3" +version = "1.2.13+0" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -2070,12 +2033,6 @@ git-tree-sha1 = "49ce682769cd5de6c72dcf1b94ed7790cd08974c" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" version = "1.5.5+0" -[[deps.ZygoteRules]] -deps = ["ChainRulesCore", "MacroTools"] -git-tree-sha1 = "977aed5d006b840e2e40c0b48984f7463109046d" -uuid = "700de1a5-db45-46bc-99cf-38207098b444" -version = "0.2.3" - [[deps.isoband_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] git-tree-sha1 = "51b5eeb3f98367157a7a12a1fb0aa5328946c03c" @@ -2101,9 +2058,9 @@ uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" version = "0.15.1+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+0" [[deps.libfdk_aac_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] diff --git a/lib/ClimaCorePlots/README.md b/lib/ClimaCorePlots/README.md index 110a40ae1b..c00f638bc3 100644 --- a/lib/ClimaCorePlots/README.md +++ b/lib/ClimaCorePlots/README.md @@ -17,8 +17,8 @@ You can now use ClimaCorePlots in your ClimaCore pkg environment: To visualize a ClimaCore object, you fist need to install a [Plots.jl backend](http://docs.juliaplots.org/latest/backends/#backends): - (@v1.8) pkg> add Plots # (default GR backend) - (@v1.8) pkg> add Plots, PlotlyJS + (@v1.9) pkg> add Plots # (default GR backend) + (@v1.9) pkg> add Plots, PlotlyJS Then load in the backend: diff --git a/lib/ClimaCorePlots/test/Project.toml b/lib/ClimaCorePlots/test/Project.toml index 6294b1f342..283697902e 100644 --- a/lib/ClimaCorePlots/test/Project.toml +++ b/lib/ClimaCorePlots/test/Project.toml @@ -7,4 +7,4 @@ Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [compat] -Plots = "1.30.1" +Plots = "1" diff --git a/lib/ClimaCoreTempestRemap/src/onlineremap.jl b/lib/ClimaCoreTempestRemap/src/onlineremap.jl index eb77907325..a2aad8748d 100644 --- a/lib/ClimaCoreTempestRemap/src/onlineremap.jl +++ b/lib/ClimaCoreTempestRemap/src/onlineremap.jl @@ -26,6 +26,16 @@ struct LinearMap{S, T, W, I, V} # make consistent with / move to regridding.jl out_type::String end + +""" + remap!(target::IJFH{S, Nqt}, R::LinearMap, source::IJFH{S, Nqs}) + remap!(target::Fields.Field, R::LinearMap, source::Fields.Field) + +Applies the remapping `R` to a `source` +Field and stores the result in `target`. +""" +function remap! end + # This version of this function is used for serial remapping function remap!( target::IJFH{S, Nqt}, diff --git a/lib/ClimaCoreTempestRemap/src/wrappers.jl b/lib/ClimaCoreTempestRemap/src/wrappers.jl index 6c0e717f3d..7782307024 100644 --- a/lib/ClimaCoreTempestRemap/src/wrappers.jl +++ b/lib/ClimaCoreTempestRemap/src/wrappers.jl @@ -37,8 +37,8 @@ end """ overlap_mesh(outfile::AbstractString, meshfile_a::AbstractString, meshfile_b::AbstractString; verbose=false) -Create the overlap mesh of `meshfile_a` and `meshfile_b` and write it to `outfile`. All -files should be in Exodus format. +Create the overlap mesh of `meshfile_a` and `meshfile_b` and +write it to `outfile`. All files should be in Exodus format. Set `verbose=true` to print information. @@ -82,8 +82,8 @@ end ) Create a file `weightfile` in SCRIP format containing the remapping weights from -`meshfile_in` to `meshfile_out`, where `overlap_meshfile` is constructed via -[`overlap_meshfile(meshfile_overlap, meshfile_in, meshfile_out)`](@ref). +`meshfile_in` to `meshfile_out`, where `meshfile_overlap` is constructed via +[`overlap_mesh`](@ref). Keyword arguments are passed as command-line options. These include: - `in_type` / `out_type`: the type of the input and output mesh: diff --git a/perf/Manifest.toml b/perf/Manifest.toml index 6ff30edaeb..7141751eda 100644 --- a/perf/Manifest.toml +++ b/perf/Manifest.toml @@ -1,8 +1,8 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.8.5" +julia_version = "1.9.2" manifest_format = "2.0" -project_hash = "b150d4b1fb060f278cb0f609945b72ecb736cb1d" +project_hash = "a0e6654ac8ff86eaa046a2da8cf5fbd3959ce466" [[deps.ADTypes]] git-tree-sha1 = "f5c25e8a5b29b5e941b7408bc8cc79fea4d9ef9a" @@ -11,15 +11,20 @@ version = "0.1.6" [[deps.AMD]] deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse_jll"] -git-tree-sha1 = "7e075388abb011075d994e735474ebeed0f24c4f" +git-tree-sha1 = "d4b99dd70d7136fe75ec74d072191d688448d39c" uuid = "14f7f29c-3bd6-536c-9a0b-7339e30b5a3e" -version = "0.5.1" +version = "0.5.2" [[deps.AbstractFFTs]] -deps = ["ChainRulesCore", "LinearAlgebra", "Test"] +deps = ["LinearAlgebra"] git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" [[deps.AbstractTrees]] git-tree-sha1 = "faa260e4cb5aba097a73fab382dd4b5819d8ec8c" @@ -31,6 +36,10 @@ deps = ["LinearAlgebra", "Requires"] git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24" uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" version = "3.6.2" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" [[deps.ArgTools]] uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" @@ -48,6 +57,22 @@ git-tree-sha1 = "f83ec24f76d4c8f525099b2ac475fc098138ec31" uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" version = "7.4.11" + [deps.ArrayInterface.extensions] + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + 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" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + [[deps.ArrayInterfaceCore]] deps = ["LinearAlgebra", "SnoopPrecompile", "SparseArrays", "SuiteSparse"] git-tree-sha1 = "e5f08b5689b1aad068e01751889f2f615c7db36d" @@ -171,24 +196,12 @@ git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" version = "1.16.1+1" -[[deps.Calculus]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" -uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" -version = "0.5.1" - [[deps.ChainRulesCore]] deps = ["Compat", "LinearAlgebra", "SparseArrays"] git-tree-sha1 = "e30f2f4e20f7f186dc36529910beaedc60cfa644" uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" version = "1.16.0" -[[deps.ChangesOfVariables]] -deps = ["InverseFunctions", "LinearAlgebra", "Test"] -git-tree-sha1 = "2fba81a302a7be671aefe194f0525ef231104e7f" -uuid = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" -version = "0.1.8" - [[deps.ClimaComms]] deps = ["CUDA", "MPI"] git-tree-sha1 = "6cbe1b835f91033e6326a92ac1a1f6a8c9b2215f" @@ -196,10 +209,10 @@ uuid = "3a4d1b5c-c61d-41fd-a00a-5873ba7a1b0d" version = "0.5.3" [[deps.ClimaCore]] -deps = ["Adapt", "BandedMatrices", "BlockArrays", "CUDA", "ClimaComms", "CubedSphere", "DataStructures", "DiffEqBase", "DocStringExtensions", "ForwardDiff", "GaussQuadrature", "GilbertCurves", "HDF5", "InteractiveUtils", "IntervalSets", "LinearAlgebra", "PkgVersion", "RecursiveArrayTools", "Requires", "RootSolvers", "SparseArrays", "Static", "StaticArrays", "Statistics", "UnPack"] +deps = ["Adapt", "BandedMatrices", "BlockArrays", "CUDA", "ClimaComms", "CubedSphere", "DataStructures", "DocStringExtensions", "ForwardDiff", "GaussQuadrature", "GilbertCurves", "HDF5", "InteractiveUtils", "IntervalSets", "LinearAlgebra", "PkgVersion", "RecursiveArrayTools", "Requires", "RootSolvers", "SparseArrays", "Static", "StaticArrays", "Statistics", "UnPack"] path = ".." uuid = "d414da3d-4745-48bb-8d80-42e94e092884" -version = "0.10.46" +version = "0.10.47" [[deps.ClimaCorePlots]] deps = ["ClimaCore", "RecipesBase", "StaticArrays", "TriplotBase"] @@ -233,9 +246,9 @@ version = "0.1.12" [[deps.CodeTracking]] deps = ["InteractiveUtils", "UUIDs"] -git-tree-sha1 = "d730914ef30a06732bdd9f763f6cc32e92ffbff1" +git-tree-sha1 = "8dd599a2fdbf3132d4c0be3a016f8f1518e28fa8" uuid = "da1fd8a2-8d9e-5ec2-8556-3022fb5608a2" -version = "1.3.1" +version = "1.3.2" [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] @@ -260,6 +273,10 @@ deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statist git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249" uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" version = "0.10.0" +weakdeps = ["SpecialFunctions"] + + [deps.ColorVectorSpace.extensions] + SpecialFunctionsExt = "SpecialFunctions" [[deps.Colors]] deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] @@ -285,15 +302,19 @@ uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" version = "0.3.0" [[deps.Compat]] -deps = ["Dates", "LinearAlgebra", "UUIDs"] -git-tree-sha1 = "5ce999a19f4ca23ea484e92a1774a61b8ca4cf8e" +deps = ["UUIDs"] +git-tree-sha1 = "e460f044ca8b99be31d35fe54fc33a5c33dd8ed7" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.8.0" +version = "4.9.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+0" [[deps.CompositeTypes]] git-tree-sha1 = "02d2316b7ffceff992f3096ae48c7829a8aa0638" @@ -311,6 +332,11 @@ deps = ["LinearAlgebra"] git-tree-sha1 = "fe2838a593b5f776e1597e086dcd47560d94e816" uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" version = "1.5.3" +weakdeps = ["IntervalSets", "StaticArrays"] + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" [[deps.Contour]] git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781" @@ -358,9 +384,9 @@ version = "1.15.0" [[deps.DataStructures]] deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "cf25ccb972fec4e4817764d01c82386ae94f77b4" +git-tree-sha1 = "3dbd312d370723b6bb43ba9d02fc36abade4518d" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.14" +version = "0.18.15" [[deps.DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -373,19 +399,37 @@ uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" [[deps.DelimitedFiles]] deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" - -[[deps.DensityInterface]] -deps = ["InverseFunctions", "Test"] -git-tree-sha1 = "80c3e8639e3353e5d2912fb3a1916b8455e2494b" -uuid = "b429d917-457f-4dbc-8f4c-0cc954292b1d" -version = "0.4.0" +version = "1.9.1" [[deps.DiffEqBase]] -deps = ["ArrayInterface", "ChainRulesCore", "DataStructures", "Distributions", "DocStringExtensions", "EnumX", "FastBroadcast", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "Printf", "RecursiveArrayTools", "Reexport", "Requires", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces", "ZygoteRules"] -git-tree-sha1 = "c5692436e7f8279503466db216c74165d1b301e4" +deps = ["ArrayInterface", "ChainRulesCore", "DataStructures", "DocStringExtensions", "EnumX", "FastBroadcast", "ForwardDiff", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "Parameters", "PreallocationTools", "Printf", "RecursiveArrayTools", "Reexport", "Requires", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Static", "StaticArraysCore", "Statistics", "Tricks", "TruncatedStacktraces", "ZygoteRules"] +git-tree-sha1 = "ed586656058844e48660c6d6fdb384e83afc50db" uuid = "2b5f629d-d688-5b77-993f-72d75c75574e" -version = "6.127.0" +version = "6.128.0" + + [deps.DiffEqBase.extensions] + DiffEqBaseDistributionsExt = "Distributions" + DiffEqBaseGeneralizedGeneratedExt = "GeneralizedGenerated" + DiffEqBaseMPIExt = "MPI" + DiffEqBaseMeasurementsExt = "Measurements" + DiffEqBaseMonteCarloMeasurementsExt = "MonteCarloMeasurements" + DiffEqBaseReverseDiffExt = "ReverseDiff" + DiffEqBaseTrackerExt = "Tracker" + DiffEqBaseUnitfulExt = "Unitful" + DiffEqBaseZygoteExt = "Zygote" + + [deps.DiffEqBase.weakdeps] + Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" + GeneralizedGenerated = "6b9d7cbe-bcb9-11e9-073f-15a7a543e2eb" + MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" [[deps.DiffEqCallbacks]] deps = ["DataStructures", "DiffEqBase", "ForwardDiff", "LinearAlgebra", "Markdown", "NLsolve", "Parameters", "RecipesBase", "RecursiveArrayTools", "SciMLBase", "StaticArraysCore"] @@ -393,6 +437,10 @@ git-tree-sha1 = "303ab70e4524843653e55e16a3dc7b75e677a3dd" uuid = "459566f4-90b8-5000-8ac3-15dfb0a30def" version = "2.27.0" + [deps.DiffEqCallbacks.weakdeps] + OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" + Sundials = "c3572dad-4567-51f8-b174-8c6c989267f4" + [[deps.DiffEqOperators]] deps = ["BandedMatrices", "BlockBandedMatrices", "DiffEqBase", "DomainSets", "ForwardDiff", "LazyArrays", "LazyBandedMatrices", "LinearAlgebra", "LoopVectorization", "NNlib", "Requires", "RuntimeGeneratedFunctions", "SciMLBase", "SparseArrays", "SparseDiffTools", "StaticArrays", "SuiteSparse"] git-tree-sha1 = "ef0f24d69406bf85092c843691ab2ae3b2e34b77" @@ -412,21 +460,19 @@ uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" version = "1.15.1" [[deps.Distances]] -deps = ["LinearAlgebra", "SparseArrays", "Statistics", "StatsAPI"] +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] git-tree-sha1 = "b6def76ffad15143924a2199f72a5cd883a2e8a9" uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" version = "0.10.9" +weakdeps = ["SparseArrays"] + + [deps.Distances.extensions] + 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", "StatsAPI", "StatsBase", "StatsFuns", "Test"] -git-tree-sha1 = "e76a3281de2719d7c81ed62c6ea7057380c87b1d" -uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.25.98" - [[deps.DocStringExtensions]] deps = ["LibGit2"] git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" @@ -444,12 +490,6 @@ deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" version = "1.6.0" -[[deps.DualNumbers]] -deps = ["Calculus", "NaNMath", "SpecialFunctions"] -git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" -uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" -version = "0.6.8" - [[deps.Elliptic]] git-tree-sha1 = "71c79e77221ab3a29918aaf6db4f217b89138608" uuid = "b305315f-e792-5b7a-8f41-49f472929428" @@ -540,10 +580,16 @@ uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" version = "0.13.11" [[deps.FiniteDiff]] -deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays", "StaticArrays"] +deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays"] git-tree-sha1 = "c6e4a1fbe73b31a3dea94b1da449503b8830c306" uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" version = "2.21.1" +weakdeps = ["BandedMatrices", "BlockBandedMatrices", "StaticArrays"] + + [deps.FiniteDiff.extensions] + FiniteDiffBandedMatricesExt = "BandedMatrices" + FiniteDiffBlockBandedMatricesExt = "BlockBandedMatrices" + FiniteDiffStaticArraysExt = "StaticArrays" [[deps.FixedPointNumbers]] deps = ["Statistics"] @@ -576,10 +622,14 @@ uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" version = "0.4.2" [[deps.ForwardDiff]] -deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions", "StaticArrays"] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] git-tree-sha1 = "00e252f4d706b3d55a8863432e742bf5717b498d" uuid = "f6369f11-7733-5829-9624-2563aa707210" version = "0.10.35" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" [[deps.FreeType2_jll]] deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] @@ -639,10 +689,10 @@ uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" version = "0.72.9" [[deps.GR_jll]] -deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt6Base_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "f61f768bf090d97c532d24b64e07b237e9bb7b6b" +deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "FreeType2_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt6Base_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "1596bab77f4f073a14c62424283e7ebff3072eca" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" -version = "0.72.9+0" +version = "0.72.9+1" [[deps.GaussQuadrature]] deps = ["SpecialFunctions"] @@ -726,12 +776,6 @@ git-tree-sha1 = "d38bd0d9759e3c6cfa19bdccc314eccf8ce596cc" uuid = "3e5b6fbb-0976-4d2c-9146-d79de83f2fb0" version = "0.1.15" -[[deps.HypergeometricFunctions]] -deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] -git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685" -uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" -version = "0.3.23" - [[deps.IfElse]] git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" @@ -758,16 +802,14 @@ deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" [[deps.IntervalSets]] -deps = ["Dates", "Random", "Statistics"] +deps = ["Dates", "Random"] git-tree-sha1 = "8e59ea773deee525c99a8018409f64f19fb719e6" uuid = "8197267c-284f-5f27-9208-e0e47529a953" version = "0.7.7" +weakdeps = ["Statistics"] -[[deps.InverseFunctions]] -deps = ["Test"] -git-tree-sha1 = "68772f49f54b479fa88ace904f6127f0a3bb2e46" -uuid = "3587e190-3f89-42d0-90ee-14403ec27112" -version = "0.1.12" + [deps.IntervalSets.extensions] + IntervalSetsStatisticsExt = "Statistics" [[deps.IrrationalConstants]] git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" @@ -787,9 +829,9 @@ version = "1.0.0" [[deps.JET]] deps = ["InteractiveUtils", "JuliaInterpreter", "LoweredCodeUtils", "MacroTools", "Pkg", "PrecompileTools", "Preferences", "Revise", "Test"] -git-tree-sha1 = "37fa60fb1e2571f4038df7933b354f8cd63b9609" +git-tree-sha1 = "a7b9e0e3f61590a90a30fb7f28ffa19d065b4634" uuid = "c3a54625-cd67-489e-a8e7-0a5a0ff4e31b" -version = "0.7.14" +version = "0.8.9" [[deps.JLD2]] deps = ["FileIO", "MacroTools", "Mmap", "OrderedCollections", "Pkg", "Printf", "Reexport", "Requires", "TranscodingStreams", "UUIDs"] @@ -850,6 +892,12 @@ git-tree-sha1 = "4c5875e4c228247e1c2b087669846941fb6e0118" uuid = "63c18a36-062a-441e-b654-da1e3ab1ce7c" version = "0.9.8" + [deps.KernelAbstractions.extensions] + EnzymeExt = "EnzymeCore" + + [deps.KernelAbstractions.weakdeps] + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + [[deps.Krylov]] deps = ["LinearAlgebra", "Printf", "SparseArrays"] git-tree-sha1 = "6dc4ad9cd74ad4ca0a8e219e945dbd22039f2125" @@ -915,6 +963,14 @@ git-tree-sha1 = "f428ae552340899a935973270b8d98e5a31c49fe" uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" version = "0.16.1" + [deps.Latexify.extensions] + DataFramesExt = "DataFrames" + SymEngineExt = "SymEngine" + + [deps.Latexify.weakdeps] + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" + [[deps.LayoutPointers]] deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] git-tree-sha1 = "88b8f66b604da079a627b6fb2860d3704a6729a1" @@ -1032,7 +1088,7 @@ 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.LinearOperators]] @@ -1047,12 +1103,28 @@ git-tree-sha1 = "4a4f8cc7a59fadbb02d1852d1e0cef5dca3a9460" uuid = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae" version = "1.42.0" + [deps.LinearSolve.extensions] + LinearSolveHYPRE = "HYPRE" + + [deps.LinearSolve.weakdeps] + HYPRE = "b5ffcf37-a2bd-41ab-a3da-4bd9bc8ad771" + [[deps.LogExpFunctions]] -deps = ["ChainRulesCore", "ChangesOfVariables", "DocStringExtensions", "InverseFunctions", "IrrationalConstants", "LinearAlgebra"] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] git-tree-sha1 = "c3ce8e7420b3a6e071e0fe4745f5d4300e37b13f" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" version = "0.3.24" + [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" @@ -1063,10 +1135,15 @@ uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" version = "1.0.0" [[deps.LoopVectorization]] -deps = ["ArrayInterface", "ArrayInterfaceCore", "CPUSummary", "ChainRulesCore", "CloseOpenIntervals", "DocStringExtensions", "ForwardDiff", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "SpecialFunctions", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] +deps = ["ArrayInterface", "ArrayInterfaceCore", "CPUSummary", "CloseOpenIntervals", "DocStringExtensions", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] git-tree-sha1 = "c88a4afe1703d731b1c4fdf4e3c7e77e3b176ea2" uuid = "bdcacae8-1622-11e9-2a5c-532679323890" version = "0.12.165" +weakdeps = ["ChainRulesCore", "ForwardDiff", "SpecialFunctions"] + + [deps.LoopVectorization.extensions] + ForwardDiffExt = ["ChainRulesCore", "ForwardDiff"] + SpecialFunctionsExt = "SpecialFunctions" [[deps.LoweredCodeUtils]] deps = ["JuliaInterpreter"] @@ -1086,6 +1163,14 @@ git-tree-sha1 = "1ccbd6980b4ff1e1e411086d01696048e6013653" uuid = "da04e1cc-30fd-572f-bb4f-1f8673147195" version = "0.20.10" + [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 = "8a5b4d2220377d1ece13f49438d71ad20cf1ba83" @@ -1134,7 +1219,7 @@ version = "1.1.7" [[deps.MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.0+0" +version = "2.28.2+0" [[deps.Measures]] git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" @@ -1158,7 +1243,7 @@ uuid = "a63ad114-7e13-5084-954f-fe012c677804" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2022.2.1" +version = "2022.10.11" [[deps.MuladdMacro]] git-tree-sha1 = "cac9cc5499c25554cba55cd3c30543cff5ca4fab" @@ -1189,6 +1274,12 @@ git-tree-sha1 = "72240e3f5ca031937bd536182cb2c031da5f46dd" uuid = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" version = "0.8.21" + [deps.NNlib.extensions] + NNlibAMDGPUExt = "AMDGPU" + + [deps.NNlib.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + [[deps.NVTX]] deps = ["Colors", "JuliaNVTXCallbacks_jll", "Libdl", "NVTX_jll"] git-tree-sha1 = "c1bfdab07fa259baa4604a05862c43004dd3cd45" @@ -1237,14 +1328,14 @@ version = "1.3.5+1" [[deps.OpenBLAS32_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "9c6c2ed4b7acd2137b878eb96c68e63b76199d0f" +git-tree-sha1 = "2fb9ee2dc14d555a6df2a714b86b7125178344c2" uuid = "656ef2d0-ae68-5445-9ca0-591084a874a2" -version = "0.3.17+0" +version = "0.3.21+0" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.20+0" +version = "0.3.21+4" [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] @@ -1265,9 +1356,9 @@ version = "1.4.1" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1aa4b74f80b01c6bc2b89992b861b5f210e665b5" +git-tree-sha1 = "bbb5c2115d63c2f1451cb70e5ef75e8fe4707019" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "1.1.21+0" +version = "1.1.22+0" [[deps.OpenSpecFun_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] @@ -1295,13 +1386,7 @@ version = "6.51.2" [[deps.PCRE2_jll]] deps = ["Artifacts", "Libdl"] uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" -version = "10.40.0+0" - -[[deps.PDMats]] -deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "67eae2738d63117a196f497d7db789821bce61d1" -uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" -version = "0.11.17" +version = "10.42.0+0" [[deps.PProf]] deps = ["AbstractTrees", "EnumX", "FlameGraphs", "Libdl", "OrderedCollections", "Profile", "ProgressMeter", "ProtoBuf", "pprof_jll"] @@ -1310,10 +1395,10 @@ uuid = "e4faabce-9ead-11e9-39d9-4379958e3056" version = "2.3.0" [[deps.PackageExtensionCompat]] -deps = ["Requires", "TOML"] -git-tree-sha1 = "32f3d52212a8d1c5d589a58851b1f04c97339110" +git-tree-sha1 = "f9b1e033c2b1205cf30fd119f4e50881316c1923" uuid = "65ce6f38-6b18-4e1d-a461-8949797d7930" -version = "1.0.0" +version = "1.0.1" +weakdeps = ["Requires", "TOML"] [[deps.Pango_jll]] deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg"] @@ -1345,9 +1430,9 @@ uuid = "30392449-352a-5448-841d-b1acce4e97dc" version = "0.42.2+0" [[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.9.2" [[deps.PkgVersion]] deps = ["Pkg"] @@ -1373,6 +1458,20 @@ git-tree-sha1 = "9f8675a55b37a70aa23177ec110f6e3f4dd68466" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" version = "1.38.17" + [deps.Plots.extensions] + FileIOExt = "FileIO" + GeometryBasicsExt = "GeometryBasics" + IJuliaExt = "IJulia" + ImageInTerminalExt = "ImageInTerminal" + UnitfulExt = "Unitful" + + [deps.Plots.weakdeps] + FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" + GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" + IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" + ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + [[deps.Polyester]] deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Requires", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] git-tree-sha1 = "3d811babe092a6e7b130beee84998fe7663348b6" @@ -1391,6 +1490,12 @@ git-tree-sha1 = "f739b1b3cc7b9949af3b35089931f2b58c289163" uuid = "d236fae5-4411-538c-8e31-a6e3d9e00b46" version = "0.4.12" + [deps.PreallocationTools.extensions] + PreallocationToolsReverseDiffExt = "ReverseDiff" + + [deps.PreallocationTools.weakdeps] + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + [[deps.PrecompileTools]] deps = ["Preferences"] git-tree-sha1 = "9673d39decc5feece56ef3940e5dafba15ba0f81" @@ -1497,11 +1602,21 @@ git-tree-sha1 = "7ed35fb5f831aaf09c2d7c8736d44667a1afdcb0" uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" version = "2.38.7" + [deps.RecursiveArrayTools.extensions] + RecursiveArrayToolsMeasurementsExt = "Measurements" + RecursiveArrayToolsTrackerExt = "Tracker" + RecursiveArrayToolsZygoteExt = "Zygote" + + [deps.RecursiveArrayTools.weakdeps] + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + [[deps.RecursiveFactorization]] -deps = ["LinearAlgebra", "LoopVectorization", "Polyester", "SnoopPrecompile", "StrideArraysCore", "TriangularSolve"] -git-tree-sha1 = "9088515ad915c99026beb5436d0a09cd8c18163e" +deps = ["LinearAlgebra", "LoopVectorization", "Polyester", "PrecompileTools", "StrideArraysCore", "TriangularSolve"] +git-tree-sha1 = "34fd98298dc3fcfc657d65559491b18ab3f7f28c" uuid = "f2c3362d-daeb-58d1-803e-2bc74f2840b4" -version = "0.2.18" +version = "0.2.19" [[deps.Reexport]] git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" @@ -1532,18 +1647,6 @@ git-tree-sha1 = "1e597b93700fa4045d7189afa7c004e0584ea548" uuid = "295af30f-e4ad-537b-8983-00126c2a3abe" version = "3.5.3" -[[deps.Rmath]] -deps = ["Random", "Rmath_jll"] -git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b" -uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" -version = "0.7.1" - -[[deps.Rmath_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "6ed52fdd3382cf21947b15e8870ac0ddbff736da" -uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" -version = "0.4.0+0" - [[deps.RootSolvers]] deps = ["DocStringExtensions", "ForwardDiff"] git-tree-sha1 = "9fb3462240d2898be5d4acf8925e47f70ec64d07" @@ -1621,9 +1724,13 @@ version = "1.1.0" [[deps.SimpleNonlinearSolve]] deps = ["ArrayInterface", "DiffEqBase", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "PackageExtensionCompat", "PrecompileTools", "Reexport", "SciMLBase", "StaticArraysCore"] -git-tree-sha1 = "91fcc402c4ab978ad5759489db9a9c5a71732f2d" +git-tree-sha1 = "20aa9831d654bab67ed561e78917047143ecb9bf" uuid = "727e6d20-b764-4bd8-a329-72de5adea6c7" -version = "0.1.18" +version = "0.1.19" +weakdeps = ["NNlib"] + + [deps.SimpleNonlinearSolve.extensions] + SimpleNonlinearSolveNNlibExt = "NNlib" [[deps.SimpleTraits]] deps = ["InteractiveUtils", "MacroTools"] @@ -1664,7 +1771,7 @@ uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" version = "1.1.1" [[deps.SparseArrays]] -deps = ["LinearAlgebra", "Random"] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" [[deps.SparseDiffTools]] @@ -1680,10 +1787,14 @@ uuid = "e56a9233-b9d6-4f03-8d0f-1825330902ac" version = "0.3.9" [[deps.SpecialFunctions]] -deps = ["ChainRulesCore", "IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] git-tree-sha1 = "7beb031cf8145577fbccacd94b8a8f4ce78428d3" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" version = "2.3.0" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" [[deps.Static]] deps = ["IfElse"] @@ -1696,12 +1807,21 @@ deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "Requires", "Snoo git-tree-sha1 = "33040351d2403b84afce74dae2e22d3f5b18edcb" uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" version = "1.4.0" +weakdeps = ["OffsetArrays", "StaticArrays"] + + [deps.StaticArrayInterface.extensions] + StaticArrayInterfaceOffsetArraysExt = "OffsetArrays" + StaticArrayInterfaceStaticArraysExt = "StaticArrays" [[deps.StaticArrays]] -deps = ["LinearAlgebra", "Random", "StaticArraysCore", "Statistics"] +deps = ["LinearAlgebra", "Random", "StaticArraysCore"] git-tree-sha1 = "9cabadf6e7cd2349b6cf49f1915ad2028d65e881" uuid = "90137ffa-7385-5640-81b9-e52037218182" version = "1.6.2" +weakdeps = ["Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysStatisticsExt = "Statistics" [[deps.StaticArraysCore]] git-tree-sha1 = "36b3d696ce6366023a0ea192b4cd442268995a0d" @@ -1711,6 +1831,7 @@ version = "1.4.2" [[deps.Statistics]] deps = ["LinearAlgebra", "SparseArrays"] uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.9.0" [[deps.StatsAPI]] deps = ["LinearAlgebra"] @@ -1724,12 +1845,6 @@ git-tree-sha1 = "75ebe04c5bed70b91614d684259b661c9e6274a4" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" version = "0.34.0" -[[deps.StatsFuns]] -deps = ["ChainRulesCore", "HypergeometricFunctions", "InverseFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] -git-tree-sha1 = "f625d686d5a88bcd2b15cd81f18f98186fdc0c9a" -uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" -version = "1.3.0" - [[deps.StrideArraysCore]] deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] git-tree-sha1 = "f02eb61eb5c97b48c153861c72fbbfdddc607e06" @@ -1754,7 +1869,7 @@ uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" [[deps.SuiteSparse_jll]] deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"] uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "5.10.1+0" +version = "5.10.1+6" [[deps.SymbolicIndexingInterface]] deps = ["DocStringExtensions"] @@ -1765,7 +1880,7 @@ version = "0.2.2" [[deps.TOML]] deps = ["Dates"] uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.0" +version = "1.0.3" [[deps.TableTraits]] deps = ["IteratorInterfaceExtensions"] @@ -1782,7 +1897,7 @@ version = "1.10.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"] @@ -1790,6 +1905,12 @@ git-tree-sha1 = "50718b4fc1ce20cecf28d85215028c78b4d875c2" uuid = "6aa5eb33-94cf-58f4-a9d0-e4b2c4fc25ea" version = "0.15.2" + [deps.TaylorSeries.extensions] + TaylorSeriesIAExt = "IntervalArithmetic" + + [deps.TaylorSeries.weakdeps] + IntervalArithmetic = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" + [[deps.TempestRemap_jll]] deps = ["Artifacts", "HDF5_jll", "JLLWrappers", "Libdl", "NetCDF_jll", "OpenBLAS32_jll", "Pkg"] git-tree-sha1 = "88c3818a492ad1a94b1aa440b01eab5d133209ff" @@ -1859,9 +1980,9 @@ uuid = "d265eb64-f81a-44ad-a842-4247ee1503de" version = "1.2.1" [[deps.URIs]] -git-tree-sha1 = "074f993b0ca030848b897beff716d93aca60f06a" +git-tree-sha1 = "b7a5e99f24892b6824a954199a45e9ffcc1c70f0" uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" -version = "1.4.2" +version = "1.5.0" [[deps.UUIDs]] deps = ["Random", "SHA"] @@ -1882,10 +2003,18 @@ uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" version = "0.4.1" [[deps.Unitful]] -deps = ["ConstructionBase", "Dates", "InverseFunctions", "LinearAlgebra", "Random"] -git-tree-sha1 = "786e80c8ae3ed0c69b2e9799dac321d2cdbccd89" +deps = ["Dates", "LinearAlgebra", "Random"] +git-tree-sha1 = "64eb17acef1d9734cf09967539818f38093d9b35" uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" -version = "1.16.0" +version = "1.16.2" + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + InverseFunctionsUnitfulExt = "InverseFunctions" + + [deps.Unitful.weakdeps] + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" [[deps.UnitfulLatexify]] deps = ["LaTeXStrings", "Latexify", "Unitful"] @@ -1964,9 +2093,9 @@ version = "1.1.34+0" [[deps.XZ_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "2222b751598bd9f4885c9ce9cd23e83404baa8ce" +git-tree-sha1 = "cf2c7de82431ca6f39250d2fc4aacd0daa1675c0" uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" -version = "5.4.3+1" +version = "5.4.4+0" [[deps.Xorg_libX11_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] @@ -2103,7 +2232,7 @@ version = "0.4.9" [[deps.Zlib_jll]] deps = ["Libdl"] uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.12+3" +version = "1.2.13+0" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -2136,9 +2265,9 @@ uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" version = "0.15.1+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+0" [[deps.libfdk_aac_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] diff --git a/perf/Project.toml b/perf/Project.toml index 22f9a3f1ed..411516a089 100644 --- a/perf/Project.toml +++ b/perf/Project.toml @@ -8,7 +8,6 @@ ClimaCoreTempestRemap = "d934ef94-cdd4-4710-83d6-720549644b70" ClimaCoreVTK = "c8b6d40d-e815-466f-95ae-c48aefa668fa" ClimaTimeSteppers = "595c0a79-7f3d-439a-bc5a-b232dc3bde79" Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" -DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e" DiffEqCallbacks = "459566f4-90b8-5000-8ac3-15dfb0a30def" DiffEqOperators = "9fdde737-9c7f-55bf-ade8-46b3f136cc48" DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" @@ -41,5 +40,5 @@ UnPack = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" [compat] OrdinaryDiffEq = "6" -Plots = "1.30.1" +Plots = "1" SciMLBase = "1" diff --git a/src/DataLayouts/DataLayouts.jl b/src/DataLayouts/DataLayouts.jl index 0071b708ec..ebda6430e6 100644 --- a/src/DataLayouts/DataLayouts.jl +++ b/src/DataLayouts/DataLayouts.jl @@ -207,7 +207,7 @@ end ) where {S, Nij, Nk, A, Idx} SS = fieldtype(S, Idx) T = eltype(A) - offset = fieldtypeoffset(T, S, Idx) + offset = fieldtypeoffset(T, S, Val(Idx)) nbytes = typesize(T, SS) field_byterange = (offset + 1):(offset + nbytes) return :(IJKFVH{$SS, $Nij, $Nk}( @@ -337,7 +337,7 @@ Base.length(data::IJFH) = size(parent(data), 4) ) where {S, Nij, A, Idx} SS = fieldtype(S, Idx) T = eltype(A) - offset = fieldtypeoffset(T, S, Idx) + offset = fieldtypeoffset(T, S, Val(Idx)) nbytes = typesize(T, SS) field_byterange = (offset + 1):(offset + nbytes) return :(IJFH{$SS, $Nij}( @@ -473,7 +473,7 @@ Base.@propagate_inbounds column(data::IFH{S, Ni}, i, j, h) where {S, Ni} = ) where {S, Ni, A, Idx} SS = fieldtype(S, Idx) T = eltype(A) - offset = fieldtypeoffset(T, S, Idx) + offset = fieldtypeoffset(T, S, Val(Idx)) nbytes = typesize(T, SS) field_byterange = (offset + 1):(offset + nbytes) return :(IFH{$SS, $Ni}( @@ -581,7 +581,7 @@ end ) where {S, A, Idx} SS = fieldtype(S, Idx) T = eltype(A) - offset = fieldtypeoffset(T, S, Idx) + offset = fieldtypeoffset(T, S, Val(Idx)) nbytes = typesize(T, SS) field_byterange = (offset + 1):(offset + nbytes) return :(DataF{$SS}(@inbounds view(parent(data), $field_byterange))) @@ -699,7 +699,7 @@ end ) where {S, Nij, A, Idx} SS = fieldtype(S, Idx) T = eltype(A) - offset = fieldtypeoffset(T, S, Idx) + offset = fieldtypeoffset(T, S, Val(Idx)) nbytes = typesize(T, SS) field_byterange = (offset + 1):(offset + nbytes) return :(IJF{$SS, $Nij}( @@ -832,7 +832,7 @@ end ) where {S, Ni, A, Idx} SS = fieldtype(S, Idx) T = eltype(A) - offset = fieldtypeoffset(T, S, Idx) + offset = fieldtypeoffset(T, S, Val(Idx)) nbytes = typesize(T, SS) field_byterange = (offset + 1):(offset + nbytes) return :(IF{$SS, $Ni}(@inbounds view(parent(data), :, $field_byterange))) @@ -934,21 +934,14 @@ end @generated function _property_view(data::VF{S, A}, ::Val{Idx}) where {S, A, Idx} SS = fieldtype(S, Idx) T = eltype(A) - offset = fieldtypeoffset(T, S, Idx) + offset = fieldtypeoffset(T, S, Val(Idx)) nbytes = typesize(T, SS) field_byterange = (offset + 1):(offset + nbytes) return :(VF{$SS}(@inbounds view(parent(data), :, $field_byterange))) end -@inline function Base.getproperty(data::VF{S}, i::Integer) where {S} - array = parent(data) - T = eltype(array) - SS = fieldtype(S, i) - offset = fieldtypeoffset(T, S, i) - nbytes = typesize(T, SS) - dataview = @inbounds view(array, :, (offset + 1):(offset + nbytes)) - VF{SS}(dataview) -end +Base.@propagate_inbounds Base.getproperty(data::VF, i::Integer) = + _property_view(data, Val(i)) @inline function Base.getindex(data::VF{S}, v::Integer) where {S} @boundscheck 1 <= v <= size(parent(data), 1) || @@ -1059,7 +1052,7 @@ end ) where {S, Nij, A, Idx} SS = fieldtype(S, Idx) T = eltype(A) - offset = fieldtypeoffset(T, S, Idx) + offset = fieldtypeoffset(T, S, Val(Idx)) nbytes = typesize(T, SS) field_byterange = (offset + 1):(offset + nbytes) return :(VIJFH{$SS, $Nij}( @@ -1233,7 +1226,7 @@ end ) where {S, Ni, A, Idx} SS = fieldtype(S, Idx) T = eltype(A) - offset = fieldtypeoffset(T, S, Idx) + offset = fieldtypeoffset(T, S, Val(Idx)) nbytes = typesize(T, SS) field_byterange = (offset + 1):(offset + nbytes) return :(VIFH{$SS, $Ni}( diff --git a/src/DataLayouts/struct.jl b/src/DataLayouts/struct.jl index 6ced43b11f..c20b580734 100644 --- a/src/DataLayouts/struct.jl +++ b/src/DataLayouts/struct.jl @@ -144,6 +144,14 @@ Similar to `fieldoffset(S,i)`, but gives result in multiples of `sizeof(T)` inst fieldtypeoffset(::Type{T}, ::Type{S}, i) where {T, S} = Int(div(fieldoffset(S, i), sizeof(T))) +@generated function fieldtypeoffset( + ::Type{T}, + ::Type{S}, + ::Val{i}, +) where {T, S, i} + return :(Int(div(fieldoffset(S, i), sizeof(T)))) +end + """ typesize(T,S) @@ -179,7 +187,11 @@ Base.@propagate_inbounds @generated function get_struct( array, fieldtype(S, $i), Val($D), - offset_index(start_index, Val($D), fieldtypeoffset(T, S, $i)), + offset_index( + start_index, + Val($D), + $(fieldtypeoffset(T, S, Val(i))), + ), )), ) end @@ -228,7 +240,7 @@ Base.@propagate_inbounds @generated function set_struct!( array, getfield(val, $i), Val($D), - offset_index(start_index, Val($D), fieldtypeoffset(T, S, $i)), + offset_index(start_index, Val($D), $(fieldtypeoffset(T, S, i))), )), ) end diff --git a/src/Domains/Domains.jl b/src/Domains/Domains.jl index 8ccb5c4a05..bf07ec1db2 100644 --- a/src/Domains/Domains.jl +++ b/src/Domains/Domains.jl @@ -11,6 +11,10 @@ A domain represents a region of space. """ abstract type AbstractDomain end +function Base.summary(io::IO, domain::AbstractDomain) + print(io, nameof(typeof(domain))) +end + const BCTagType = Union{Nothing, Tuple{Symbol, Symbol}} float_type(domain::AbstractDomain) = float_type(coordinate_type(domain)) @@ -65,18 +69,26 @@ IntervalDomain(coords::ClosedInterval; kwargs...) = coordinate_type(::IntervalDomain{CT}) where {CT} = CT Base.eltype(domain::IntervalDomain) = coordinate_type(domain) -function Base.show(io::IO, domain::IntervalDomain) +function print_interval(io::IO, domain::IntervalDomain{CT}) where {CT} print( io, - nameof(typeof(domain)), - "($(domain.coord_min), $(domain.coord_max); ", + fieldname(CT, 1), + " ∈ [", + Geometry.component(domain.coord_min, 1), + ",", + Geometry.component(domain.coord_max, 1), + "] ", ) if isperiodic(domain) - print(io, "periodic=true)") + print(io, "(periodic)") else - print(io, "boundary_names = $(domain.boundary_names))") + print(io, domain.boundary_names) end end +function Base.show(io::IO, domain::IntervalDomain) + print(io, nameof(typeof(domain)), ": ") + print_interval(io, domain) +end struct RectangleDomain{I1 <: IntervalDomain, I2 <: IntervalDomain} <: AbstractDomain @@ -119,12 +131,12 @@ end function Base.show(io::IO, domain::RectangleDomain) - indent = get(io, :indent, 0) - println(io, nameof(typeof(domain)), "(") - println(io, " "^(indent + 2), domain.interval1) - println(io, " "^(indent + 2), domain.interval2) - print(io, " "^indent, ")") + print(io, nameof(typeof(domain)), ": ") + print_interval(io, domain.interval1) + print(io, " × ") + print_interval(io, domain.interval2) end + coordinate_type(domain::RectangleDomain) = typeof( Geometry.product_coordinates( domain.interval1.coord_min, @@ -141,7 +153,7 @@ struct SphereDomain{FT} <: AbstractDomain where {FT <: AbstractFloat} radius::FT end Base.show(io::IO, domain::SphereDomain) = - print(io, nameof(typeof(domain)), "($(domain.radius))") + print(io, nameof(typeof(domain)), ": radius = ", domain.radius) boundary_names(::SphereDomain) = () coordinate_type(::SphereDomain{FT}) where {FT} = Geometry.Cartesian123Point{FT} diff --git a/src/Fields/compat_diffeq.jl b/src/Fields/compat_diffeq.jl index 1fa3b83a82..7ebfb47482 100644 --- a/src/Fields/compat_diffeq.jl +++ b/src/Fields/compat_diffeq.jl @@ -1,4 +1,4 @@ -import DiffEqBase, RecursiveArrayTools, Static +import RecursiveArrayTools, Static # for compatibility with OrdinaryDiffEq # Based on ApproxFun definitions @@ -50,50 +50,3 @@ function RecursiveArrayTools.recursivefill!(field::Field, value) RecursiveArrayTools.recursivefill!(parent(field), value) return field end - - -function DiffEqBase.calculate_residuals!( - out::Fields.Field, - ũ::Fields.Field, - u₀::Fields.Field, - u₁::Fields.Field, - α, - ρ, - internalnorm, - t, - thread::Union{Static.False, Static.True}, -) - DiffEqBase.calculate_residuals!( - parent(out), - parent(ũ), - parent(u₀), - parent(u₁), - α, - ρ, - internalnorm, - t, - thread, - ) -end - -@inline function calculate_residuals!( - out, - ũ, - u₀, - u₁, - α, - ρ, - internalnorm, - t, - thread::Union{Static.False, Static.True}, -) - @. out = calculate_residuals(ũ, u₀, u₁, α, ρ, internalnorm, t, thread) - nothing -end - - -# Play nice with DiffEq ArrayPartition -DiffEqBase.UNITLESS_ABS2(field::Field) = - sum(DiffEqBase.UNITLESS_ABS2, parent(field)) -DiffEqBase.recursive_length(field::Field) = 1 -DiffEqBase.NAN_CHECK(field::Field) = DiffEqBase.NAN_CHECK(parent(field)) diff --git a/src/Fields/mapreduce.jl b/src/Fields/mapreduce.jl index 27e15d7b46..4571cde60c 100644 --- a/src/Fields/mapreduce.jl +++ b/src/Fields/mapreduce.jl @@ -22,7 +22,7 @@ local_sum( local_sum(field::Union{Field, Base.Broadcast.Broadcasted{<:FieldStyle}}) = local_sum(field, ClimaComms.device(axes(field))) """ - sum([f=identity,]v::Field) + sum([f=identity,] v::Field) Approximate integration of `v` or `f.(v)` over the domain. In an `AbstractSpectralElementSpace`, an integral over the entire space is computed by summation over the elements of the integrand @@ -39,6 +39,7 @@ where ``v_i`` is the value at each node, and ``f`` is the identity function if n If `v` is a distributed field, this uses a `ClimaComms.allreduce` operation. """ +Base.sum(field::Field) = Base.sum(identity, field) function Base.sum( field::Union{Field, Base.Broadcast.Broadcasted{<:FieldStyle}}, ::ClimaComms.AbstractCPUDevice, @@ -104,6 +105,7 @@ where ``v_i`` is the Field value at each node, and ``f`` is the identity functio If `v` is a distributed field, this uses a `ClimaComms.allreduce` operation. """ +Statistics.mean(field::Field) = Statistics.mean(identity, field) function Statistics.mean( field::Union{Field, Base.Broadcast.Broadcasted{<:FieldStyle}}, ::ClimaComms.AbstractCPUDevice, @@ -155,6 +157,14 @@ If `normalize=false`, then the denominator term is omitted, and so the result wi the norm as described above multiplied by the length/area/volume of ``\\Omega`` to the power of ``1/p``. """ +LinearAlgebra.norm(field::Field, p::Real = 2; normalize = true) = + LinearAlgebra.norm( + field, + ClimaComms.device(axes(field)), + p, + normalize = normalize, + ) + function LinearAlgebra.norm( field::Field, ::ClimaComms.AbstractCPUDevice, @@ -184,13 +194,6 @@ function LinearAlgebra.norm( end end end -LinearAlgebra.norm(field::Field, p::Real = 2; normalize = true) = - LinearAlgebra.norm( - field, - ClimaComms.device(axes(field)), - p, - normalize = normalize, - ) function Base.isapprox( x::T, diff --git a/src/InputOutput/writers.jl b/src/InputOutput/writers.jl index e6c1567454..102106b56e 100644 --- a/src/InputOutput/writers.jl +++ b/src/InputOutput/writers.jl @@ -94,6 +94,12 @@ function write!(writer::HDF5Writer, obj, name = defaultname(obj)) end # Domains +""" + defaultname(obj) + +Default name of object for InputOutput writers. +""" +function defaultname end defaultname(::Domains.SphereDomain) = "sphere" function defaultname(domain::Domains.IntervalDomain) Domains.coordinate_type(domain) <: Geometry.XPoint && return "x-interval" diff --git a/src/Limiters/Limiters.jl b/src/Limiters/Limiters.jl index f9fe86b05a..55b8deb36c 100644 --- a/src/Limiters/Limiters.jl +++ b/src/Limiters/Limiters.jl @@ -13,7 +13,7 @@ Supertype for all limiters. # Interfaces -- [`quasimonotone_limiter!`](@ref) +- [`apply_limiter!`](@ref) """ abstract type AbstractLimiter end diff --git a/src/MatrixFields/MatrixFields.jl b/src/MatrixFields/MatrixFields.jl index 2ca9ec15e0..69a0dee2d4 100644 --- a/src/MatrixFields/MatrixFields.jl +++ b/src/MatrixFields/MatrixFields.jl @@ -68,10 +68,11 @@ const ColumnwiseBandMatrixField{V, S} = Fields.Field{ function Base.show(io::IO, field::ColumnwiseBandMatrixField) print(io, eltype(field), "-valued Field") if eltype(eltype(field)) <: Number + shape = typeof(matrix_shape(field)).name.name if field isa Fields.FiniteDifferenceField - println(io, " that corresponds to the matrix") + println(io, " that corresponds to the $shape matrix") else - println(io, " whose first column corresponds to the matrix") + println(io, " whose first column corresponds to the $shape matrix") end column_field = Fields.column(field, 1, 1, 1) io = IOContext(io, :compact => true, :limit => true) diff --git a/src/MatrixFields/field2arrays.jl b/src/MatrixFields/field2arrays.jl index 612072eb02..4108d24c75 100644 --- a/src/MatrixFields/field2arrays.jl +++ b/src/MatrixFields/field2arrays.jl @@ -94,7 +94,9 @@ all_columns(space::Spaces.ExtrudedFiniteDifferenceSpace) = # Spaces.all_nodes(Spaces.horizontal_space(axes(field))) column_map(f::F, field) where {F} = - map((((i, j), h),) -> f(Spaces.column(field, i, j, h)), all_columns(field)) + Iterators.map(all_columns(field)) do ((i, j), h) + f(Spaces.column(field, i, j, h)) + end """ field2arrays(field) @@ -104,7 +106,7 @@ Converts a field defined on a `FiniteDifferenceSpace` or on an corresponds to a column of the field. This is done by calling `column_field2array` on each of the field's columns. """ -field2arrays(field) = column_map(column_field2array, field) +field2arrays(field) = collect(column_map(column_field2array, field)) """ field2arrays_view(field) diff --git a/src/MatrixFields/matrix_multiplication.jl b/src/MatrixFields/matrix_multiplication.jl index 5ad6a5393c..4e0ef5b547 100644 --- a/src/MatrixFields/matrix_multiplication.jl +++ b/src/MatrixFields/matrix_multiplication.jl @@ -10,10 +10,12 @@ single-column `Field`s. For `Field`s on multiple columns, the same computation is done for each column. In this derivation, we will use ``M_1`` and ``M_2`` to denote two -`ColumnwiseBandMatrixField`s, and we will use ``V`` to denote a regular (vector) -`Field`. For both ``M_1`` and ``M_2``, we will use the array-like index notation -``M[row, col]`` to denote ``M[row][col-row]``, i.e., the the entry in the -`BandMatrixRow` ``M[row]`` located on the diagonal with index ``col - row``. +`ColumnwiseBandMatrixField`s, and we will use ``V`` to denote a regular +(vector-like) `Field`. For both ``M_1`` and ``M_2``, we will use the array-like +index notation ``M[row, col]`` to denote ``M[row][col-row]``, i.e., the entry in +the `BandMatrixRow` ``M[row]`` located on the diagonal with index ``col - row``. +We will also use `outer_indices```(```space```)`` to denote the tuple +``(```left_idx```(```space```), ```right_idx```(```space```))``. # 1. Matrix-Vector Multiplication @@ -22,41 +24,44 @@ From the definition of matrix-vector multiplication, (M_1 ⋅ V)[i] = \\sum_k M_1[i, k] * V[k]. ``` To establish bounds on the values of ``k``, let us define the following values: -- ``li ={}```left_idx```(```axes```(V))`` -- ``ri ={}```right_idx```(```axes```(V))`` +- ``li_1, ri_1 ={}```outer_indices```(```column_axes```(M_1))`` - ``ld_1, ud_1 ={}```outer_diagonals```(```eltype```(M_1))`` -Note that, if `axes```(V))`` is unavailable, we can obtain ``li`` and ``ri`` -from `axes```(M_1))`` by getting `left_idx```(```axes```(M_1))`` and -`right_idx```(```axes```(M_1))``, and then shifting them by either `0`, `half`, -or `-half`, depending on whether ``M_1`` is a square matrix, a face-to-center -matrix, or a center-to-face matrix. - -The values ``M_1[i, k]`` and ``V[k]`` are only well-defined if ``k`` is a valid -row index for ``V`` and ``k - i`` is a valid diagonal index for ``M_1``, which -means that + +Since ``M_1[i, k]`` is only well-defined if ``k`` is a valid column index and +``k - i`` is a valid diagonal index, we know that ```math -li \\leq k \\leq ri \\quad \\text{and} \\quad ld_1 \\leq k - i \\leq ud_1. +li_1 \\leq k \\leq ri_1 \\quad \\text{and} \\quad ld_1 \\leq k - i \\leq ud_1. ``` Combining these into a single inequality gives us ```math -\\text{max}(li, i + ld_1) \\leq k \\leq \\text{min}(ri, i + ud_1). +\\text{max}(li_1, i + ld_1) \\leq k \\leq \\text{min}(ri_1, i + ud_1). ``` So, we can rewrite the expression for ``(M_1 ⋅ V)[i]`` as ```math (M_1 ⋅ V)[i] = - \\sum_{k\\ =\\ \\text{max}(li, i + ld_1)}^{\\text{min}(ri, i + ud_1)} + \\sum_{k\\ =\\ \\text{max}(li_1, i + ld_1)}^{\\text{min}(ri_1, i + ud_1)} M_1[i, k] * V[k]. ``` If we replace the variable ``k`` with ``d = k - i`` and switch from array-like indexing to `Field` indexing, we find that ```math (M_1 ⋅ V)[i] = - \\sum_{d\\ =\\ \\text{max}(li - i, ld_1)}^{\\text{min}(ri - i, ud_1)} + \\sum_{d\\ =\\ \\text{max}(li_1 - i, ld_1)}^{\\text{min}(ri_1 - i, ud_1)} M_1[i][d] * V[i + d]. ``` -If ``li - ld_1 \\leq i \\leq ri - ud_1``, then -``\\text{max}(li - i, ld_1) = ld_1`` and ``\\text{min}(ri - i, ud_1) = ud_1``, -so we can simplify this to + +## 1.1 Interior vs. Boundary Indices + +Now, suppose that the row index ``i`` is such that +```math +li_1 - ld_1 \\leq i \\leq ri_1 - ud_1. +``` +If this is the case, then the bounds on ``d`` can be simplified to +```math +\\text{max}(li_1 - i, ld_1) = ld_1 \\quad \\text{and} \\quad +\\text{min}(ri_1 - i, ud_1) = ud_1. +``` +The expression for ``(M_1 ⋅ V)[i]`` then becomes ```math (M_1 ⋅ V)[i] = \\sum_{d = ld_1}^{ud_1} M_1[i][d] * V[i + d]. ``` @@ -70,67 +75,108 @@ From the definition of matrix-matrix multiplication, ```math (M_1 ⋅ M_2)[i, j] = \\sum_k M_1[i, k] * M_2[k, j]. ``` -To establish bounds on the values of ``k``, let us define the following values: -- ``li ={}```left_idx```(```axes```(M_2))`` -- ``ri ={}```right_idx```(```axes```(M_2))`` +To establish bounds on the values of ``j`` and ``k``, let us define the +following values: +- ``li_1, ri_1 ={}```outer_indices```(```column_axes```(M_1))`` - ``ld_1, ud_1 ={}```outer_diagonals```(```eltype```(M_1))`` +- ``li_2, ri_2 ={}```outer_indices```(```column_axes```(M_2))`` - ``ld_2, ud_2 ={}```outer_diagonals```(```eltype```(M_2))`` -Note that, if `axes```(M_2))`` is unavailable, we can obtain ``li`` and ``ri`` -from `axes```(M_1))`` by getting `left_idx```(```axes```(M_1))`` and -`right_idx```(```axes```(M_1))``, and then shifting them by either `0`, `half`, -or `-half`, depending on whether ``M_1`` is a square matrix, a face-to-center -matrix, or a center-to-face matrix. - -The values ``M_1[i, k]`` and ``M_2[k, j]`` are only well-defined if ``k`` is a -valid row index for ``M_2``, ``k - i`` is a valid diagonal index for ``M_1``, -and ``j - k`` is a valid diagonal index for ``M_2``, which means that + +In addition, let ``ld_{prod}`` and ``ud_{prod}`` denote the outer diagonal +indices of the product matrix ``M_1 ⋅ M_2``. We will derive the values of +``ld_{prod}`` and ``ud_{prod}`` in the last section. + +Since ``M_1[i, k]`` is only well-defined if ``k`` is a valid column index and +``k - i`` is a valid diagonal index, we know that ```math -li \\leq k \\leq ri, \\qquad ld_1 \\leq k - i \\leq ud_1, -\\quad \\text{and} \\quad ld_2 \\leq j - k \\leq ud_2. +li_1 \\leq k \\leq ri_1 \\quad \\text{and} \\quad ld_1 \\leq k - i \\leq ud_1. ``` -Combining these into a single inequality gives us +Since ``M_2[k, j]`` is only well-defined if ``j`` is a valid column index and +``j - k`` is a valid diagonal index, we also know that ```math -\\text{max}(li, i + ld_1, j - ud_2) \\leq k \\leq -\\text{min}(ri, i + ud_1, j - ld_2). +li_2 \\leq j \\leq ri_2 \\quad \\text{and} \\quad ld_2 \\leq j - k \\leq ud_2. +``` +Finally, ``(M_1 ⋅ M_2)[i, j]`` is only well-defined if ``j - i`` is a valid +diagonal index, so +```math +ld_{prod} \\leq j - i \\leq ud_{prod}. +``` +These inequalities can be combined to obtain +```math +\\begin{gather*} +\\text{max}(li_2, i + ld_{prod}) \\leq j \\leq +\\text{min}(ri_2, i + ud_{prod}) \\\\ +\\text{and} \\\\ +\\text{max}(li_1, i + ld_1, j - ud_2) \\leq k \\leq +\\text{min}(ri_1, i + ud_1, j - ld_2). +\\end{gather*} ``` So, we can rewrite the expression for ``(M_1 ⋅ M_2)[i, j]`` as ```math +\\begin{gather*} (M_1 ⋅ M_2)[i, j] = \\sum_{ - k\\ =\\ \\text{max}(li, i + ld_1, j - ud_2) - }^{\\text{min}(ri, i + ud_1, j - ld_2)} - M_1[i, k] * M_2[k, j]. + k\\ =\\ \\text{max}(li_1, i + ld_1, j - ud_2) + }^{\\text{min}(ri_1, i + ud_1, j - ld_2)} + M_1[i, k] * M_2[k, j], \\text{ where} \\\\[0.5em] +\\text{max}(li_2, i + ld_{prod}) \\leq j \\leq \\text{min}(ri_2, i + ud_{prod}). +\\end{gather*} ``` If we replace the variable ``k`` with ``d = k - i``, replace the variable ``j`` with ``d_{prod} = j - i``, and switch from array-like indexing to `Field` indexing, we find that ```math +\\begin{gather*} (M_1 ⋅ M_2)[i][d_{prod}] = \\sum_{ - d\\ =\\ \\text{max}(li - i, ld_1, d_{prod} - ud_2) - }^{\\text{min}(ri - i, ud_1, d_{prod} - ld_2)} - M_1[i][d] * M_2[i + d][d_{prod} - d]. + d\\ =\\ \\text{max}(li_1 - i, ld_1, d_{prod} - ud_2) + }^{\\text{min}(ri_1 - i, ud_1, d_{prod} - ld_2)} + M_1[i][d] * M_2[i + d][d_{prod} - d], \\text{ where} \\\\[0.5em] +\\text{max}(li_2 - i, ld_{prod}) \\leq d_{prod} \\leq + \\text{min}(ri_2 - i, ud_{prod}). +\\end{gather*} +``` + +## 2.1 Interior vs. Boundary Indices + +Now, suppose that the row index ``i`` is such that +```math +\\text{max}(li_1 - ld_1, li_2 - ld_{prod}) \\leq i \\leq + \\text{min}(ri_1 - ud_1, ri_2 - ud_{prod}). +``` +If this is the case, then the bounds on ``d_{prod}`` can be simplified to +```math +\\text{max}(li_2 - i, ld_{prod}) = ld_{prod} \\quad \\text{and} \\quad +\\text{min}(ri_2 - i, ud_{prod}) = ud_{prod}. +``` +Similarly, the bounds on ``d`` can be simplified using the fact that +```math +\\text{max}(li_1 - i, ld_1) = ld_1 \\quad \\text{and} \\quad +\\text{min}(ri_1 - i, ud_1) = ud_1. ``` -If ``li - ld_1 \\leq i \\leq ri - ud_1``, then -``\\text{max}(li - i, ld_1) = ld_1`` and ``\\text{min}(ri - i, ud_1) = ud_1``, -so we can simplify this to +The expression for ``(M_1 ⋅ M_2)[i][d_{prod}]`` then becomes ```math +\\begin{gather*} (M_1 ⋅ M_2)[i][d_{prod}] = \\sum_{ d\\ =\\ \\text{max}(ld_1, d_{prod} - ud_2) }^{\\text{min}(ud_1, d_{prod} - ld_2)} - M_1[i][d] * M_2[i + d][d_{prod} - d]. + M_1[i][d] * M_2[i + d][d_{prod} - d], \\text{ where} \\\\[0.5em] +ld_{prod} \\leq d_{prod} \\leq ud_{prod}. +\\end{gather*} ``` The values of ``i`` in this range are considered to be in the "interior" of the -operator, while those not in this range (for which we cannot make the above -simplification) are considered to be on the "boundary". +operator, while those not in this range (for which we cannot make these +simplifications) are considered to be on the "boundary". + +## 2.2 ``ld_{prod}`` and ``ud_{prod}`` We only need to compute ``(M_1 ⋅ M_2)[i][d_{prod}]`` for values of ``d_{prod}`` that correspond to a nonempty sum in the interior, i.e, those for which ```math \\text{max}(ld_1, d_{prod} - ud_2) \\leq \\text{min}(ud_1, d_{prod} - ld_2). ``` -This corresponds to the four inequalities +This can be broken down into the four inequalities ```math ld_1 \\leq ud_1, \\qquad ld_1 \\leq d_{prod} - ld_2, \\qquad d_{prod} - ud_2 \\leq ud_1, \\quad \\text{and} \\quad @@ -142,8 +188,15 @@ tells us that ```math ld_1 + ld_2 \\leq d_{prod} \\leq ud_1 + ud_2. ``` -In other words, the outer diagonal indices of ``M_1 ⋅ M_2`` are ``ld_1 + ld_2`` -and ``ud_1 + ud_2``. +In other words, the outer diagonal indices of ``M_1 ⋅ M_2`` are +```math +ld_{prod} = ld_1 + ld_2 \\quad \\text{and} \\quad ud_{prod} = ud_1 + ud_2. +``` +This means that we can express the bounds on the interior values of ``i`` as +```math +\\text{max}(li_1, li_2 - ld_2) - ld_1 \\leq i \\leq + \\text{min}(ri_1, ri_2 - ud_2) - ud_1. +``` """ struct MultiplyColumnwiseBandMatrixField <: Operators.FiniteDifferenceOperator end const ⋅ = MultiplyColumnwiseBandMatrixField() @@ -175,38 +228,47 @@ Operators.stencil_interior_width( arg, ) = ((0, 0), outer_diagonals(eltype(matrix1))) -# Obtain left_idx(arg_space) from matrix1_space. -arg_left_idx(matrix1_space, matrix1) = arg_left_idx( - Operators.left_idx(matrix1_space), - matrix_shape(matrix1, matrix1_space), -) -arg_left_idx(matrix1_left_idx, ::Square) = matrix1_left_idx -arg_left_idx(matrix1_left_idx, ::FaceToCenter) = matrix1_left_idx - half -arg_left_idx(matrix1_left_idx, ::CenterToFace) = matrix1_left_idx + half - -# Obtain right_idx(arg_space) from matrix1_space. -arg_right_idx(matrix1_space, matrix1) = arg_right_idx( - Operators.right_idx(matrix1_space), - matrix_shape(matrix1, matrix1_space), -) -arg_right_idx(matrix1_right_idx, ::Square) = matrix1_right_idx -arg_right_idx(matrix1_right_idx, ::FaceToCenter) = matrix1_right_idx + half -arg_right_idx(matrix1_right_idx, ::CenterToFace) = matrix1_right_idx - half - -Operators.left_interior_idx( +function Operators.left_interior_idx( space::Spaces.AbstractSpace, ::MultiplyColumnwiseBandMatrixField, ::TopLeftMatrixCorner, matrix1, arg, -) = arg_left_idx(space, matrix1) - outer_diagonals(eltype(matrix1))[1] -Operators.right_interior_idx( +) + column_space1 = column_axes(matrix1, space) + li1 = Operators.left_idx(column_space1) + ld1 = outer_diagonals(eltype(matrix1))[1] + if eltype(arg) <: BandMatrixRow # matrix-matrix multiplication + matrix2 = arg + column_space2 = column_axes(matrix2, column_space1) + li2 = Operators.left_idx(column_space2) + ld2 = outer_diagonals(eltype(matrix2))[1] + return max(li1, li2 - ld2) - ld1 + else # matrix-vector multiplication + return li1 - ld1 + end +end + +function Operators.right_interior_idx( space::Spaces.AbstractSpace, ::MultiplyColumnwiseBandMatrixField, ::BottomRightMatrixCorner, matrix1, arg, -) = arg_right_idx(space, matrix1) - outer_diagonals(eltype(matrix1))[2] +) + column_space1 = column_axes(matrix1, space) + ri1 = Operators.right_idx(column_space1) + ud1 = outer_diagonals(eltype(matrix1))[2] + if eltype(arg) <: BandMatrixRow # matrix-matrix multiplication + matrix2 = arg + column_space2 = column_axes(matrix2, column_space1) + ri2 = Operators.right_idx(column_space2) + ud2 = outer_diagonals(eltype(matrix2))[2] + return min(ri1, ri2 - ud2) - ud1 + else # matrix-vector multiplication + return ri1 - ud1 + end +end function Operators.return_eltype( ::MultiplyColumnwiseBandMatrixField, @@ -234,6 +296,16 @@ end Operators.return_space(::MultiplyColumnwiseBandMatrixField, space1, space2) = space1 +# Compute max(li - i, ld). +boundary_modified_ld(_, ld, column_space, i) = ld +boundary_modified_ld(::TopLeftMatrixCorner, ld, column_space, i) = + max(Operators.left_idx(column_space) - i, ld) + +# Compute min(ri - i, ud). +boundary_modified_ud(_, ud, column_space, i) = ud +boundary_modified_ud(::BottomRightMatrixCorner, ud, column_space, i) = + min(Operators.right_idx(column_space) - i, ud) + # TODO: Use @propagate_inbounds here, and remove @inbounds from this function. # As of Julia 1.8, doing this increases compilation time by more than an order # of magnitude, and it also makes type inference fail for some complicated @@ -241,67 +313,83 @@ Operators.return_space(::MultiplyColumnwiseBandMatrixField, space1, space2) = # of linear combinations of matrix fields). Not using @propagate_inbounds causes # matrix field broadcast expressions to take roughly 3 or 4 times longer to # evaluate, but this is less significant than the decrease in compilation time. -function multiply_matrix_at_index( - loc, - space, - idx, - hidx, - matrix1, - arg, - ::Val{is_interior}, -) where {is_interior} - ld1, ud1 = outer_diagonals(eltype(matrix1)) - arg_space = Operators.reconstruct_placeholder_space(axes(arg), space) - ld1_or_boundary_ld1 = - is_interior ? ld1 : max(Operators.left_idx(arg_space) - idx, ld1) - ud1_or_boundary_ud1 = - is_interior ? ud1 : min(Operators.right_idx(arg_space) - idx, ud1) +function multiply_matrix_at_index(loc, space, idx, hidx, matrix1, arg, bc) prod_type = Operators.return_eltype(⋅, matrix1, arg) + + column_space1 = column_axes(matrix1, space) + ld1, ud1 = outer_diagonals(eltype(matrix1)) + boundary_modified_ld1 = boundary_modified_ld(bc, ld1, column_space1, idx) + boundary_modified_ud1 = boundary_modified_ud(bc, ud1, column_space1, idx) + + # Precompute the row that is needed from matrix1 so that it does not get + # recomputed multiple times. matrix1_row = @inbounds Operators.getidx(space, matrix1, loc, idx, hidx) + if eltype(arg) <: BandMatrixRow # matrix-matrix multiplication matrix2 = arg + column_space2 = column_axes(matrix2, column_space1) + ld2, ud2 = outer_diagonals(eltype(matrix2)) + prod_ld, prod_ud = outer_diagonals(prod_type) + boundary_modified_prod_ld = + boundary_modified_ld(bc, prod_ld, column_space2, idx) + boundary_modified_prod_ud = + boundary_modified_ud(bc, prod_ud, column_space2, idx) + + # Precompute the rows that are needed from matrix2 so that they do not + # get recomputed multiple times. To avoid inference issues at boundary + # points, this is implemented as a padded map from ld1 to ud1, instead + # of as a map from boundary_modified_ld1 to boundary_modified_ud1. For + # simplicity, use zero padding for rows that are outside the matrix. + # Wrap the rows in a BandMatrixRow so that they can be easily indexed. matrix2_rows = map((ld1:ud1...,)) do d # TODO: Use @propagate_inbounds_meta instead of @inline_meta. Base.@_inline_meta - if is_interior || ld1_or_boundary_ld1 <= d <= ud1_or_boundary_ud1 + if isnothing(bc) || + boundary_modified_ld1 <= d <= boundary_modified_ud1 @inbounds Operators.getidx(space, matrix2, loc, idx + d, hidx) else - rzero(eltype(matrix2)) # This value is never used. + zero(eltype(matrix2)) # This row is outside the matrix. end - end # The rows are precomputed to avoid recomputing them multiple times. + end matrix2_rows_wrapper = BandMatrixRow{ld1}(matrix2_rows...) - ld2, ud2 = outer_diagonals(eltype(matrix2)) - prod_ld, prod_ud = outer_diagonals(prod_type) + + # Precompute the zero value to avoid inference issues caused by passing + # prod_type into the function closure below. zero_value = rzero(eltype(prod_type)) + + # Compute the entries of the product matrix row. To avoid inference + # issues at boundary points, this is implemented as a padded map from + # prod_ld to prod_ud, instead of as a map from boundary_modified_prod_ld + # to boundary_modified_prod_ud. For simplicity, use zero padding for + # entries that are outside the matrix. Wrap the entries in a + # BandMatrixRow before returning them. prod_entries = map((prod_ld:prod_ud...,)) do prod_d # TODO: Use @propagate_inbounds_meta instead of @inline_meta. Base.@_inline_meta - min_d = max(ld1_or_boundary_ld1, prod_d - ud2) - max_d = min(ud1_or_boundary_ud1, prod_d - ld2) - # Note: If min_d:max_d is an empty range, then the current entry - # lies outside of the product matrix, so it should never be used in - # any computations. By initializing prod_entry to zero_value, we are - # implicitly setting all such entries to 0. We could alternatively - # set all such entries to NaN (in order to more easily catch user - # errors that involve accidentally using these entires), but that - # would not generalize to non-floating-point types like Int or Bool. - prod_entry = zero_value - @inbounds for d in min_d:max_d - value1 = matrix1_row[d] - value2 = matrix2_rows_wrapper[d][prod_d - d] - value2_lg = Geometry.LocalGeometry(space, idx + d, hidx) - prod_entry = radd( - prod_entry, - rmul_with_projection(value1, value2, value2_lg), - ) - end # Using this for-loop is currently faster than using mapreduce. - prod_entry + if isnothing(bc) || + boundary_modified_prod_ld <= prod_d <= boundary_modified_prod_ud + prod_entry = zero_value + min_d = max(boundary_modified_ld1, prod_d - ud2) + max_d = min(boundary_modified_ud1, prod_d - ld2) + @inbounds for d in min_d:max_d + value1 = matrix1_row[d] + value2 = matrix2_rows_wrapper[d][prod_d - d] + value2_lg = Geometry.LocalGeometry(space, idx + d, hidx) + prod_entry = radd( + prod_entry, + rmul_with_projection(value1, value2, value2_lg), + ) + end # Using a for-loop is currently faster than using mapreduce. + prod_entry + else + zero_value # This entry is outside the matrix. + end end return BandMatrixRow{prod_ld}(prod_entries...) else # matrix-vector multiplication vector = arg prod_value = rzero(prod_type) - @inbounds for d in ld1_or_boundary_ld1:ud1_or_boundary_ud1 + @inbounds for d in boundary_modified_ld1:boundary_modified_ud1 value1 = matrix1_row[d] value2 = Operators.getidx(space, vector, loc, idx + d, hidx) value2_lg = Geometry.LocalGeometry(space, idx + d, hidx) @@ -309,7 +397,7 @@ function multiply_matrix_at_index( prod_value, rmul_with_projection(value1, value2, value2_lg), ) - end # Using this for-loop is currently faster than using mapreduce. + end # Using a for-loop is currently faster than using mapreduce. return prod_value end end @@ -322,29 +410,29 @@ Base.@propagate_inbounds Operators.stencil_interior( hidx, matrix1, arg, -) = multiply_matrix_at_index(loc, space, idx, hidx, matrix1, arg, Val(true)) +) = multiply_matrix_at_index(loc, space, idx, hidx, matrix1, arg, nothing) Base.@propagate_inbounds Operators.stencil_left_boundary( ::MultiplyColumnwiseBandMatrixField, - ::TopLeftMatrixCorner, + bc::TopLeftMatrixCorner, loc, space, idx, hidx, matrix1, arg, -) = multiply_matrix_at_index(loc, space, idx, hidx, matrix1, arg, Val(false)) +) = multiply_matrix_at_index(loc, space, idx, hidx, matrix1, arg, bc) Base.@propagate_inbounds Operators.stencil_right_boundary( ::MultiplyColumnwiseBandMatrixField, - ::BottomRightMatrixCorner, + bc::BottomRightMatrixCorner, loc, space, idx, hidx, matrix1, arg, -) = multiply_matrix_at_index(loc, space, idx, hidx, matrix1, arg, Val(false)) +) = multiply_matrix_at_index(loc, space, idx, hidx, matrix1, arg, bc) # For matrix field broadcast expressions involving 4 or more matrices, we # sometimes hit a recursion limit and de-optimize. diff --git a/src/MatrixFields/matrix_shape.jl b/src/MatrixFields/matrix_shape.jl index 9ef96e5f37..6ebe32a1c8 100644 --- a/src/MatrixFields/matrix_shape.jl +++ b/src/MatrixFields/matrix_shape.jl @@ -19,3 +19,24 @@ matrix_shape(matrix_field, matrix_space = axes(matrix_field)) = _matrix_shape( _matrix_shape(::Type{Int}, _) = Square() _matrix_shape(::Type{PlusHalf{Int}}, ::Spaces.CellCenter) = FaceToCenter() _matrix_shape(::Type{PlusHalf{Int}}, ::Spaces.CellFace) = CenterToFace() + +""" + column_axes(matrix_field, [matrix_space]) + +Returns the space that corresponds to the columns of `matrix_field`, i.e., the +`axes` of the `Field`s by which `matrix_field` can be multiplied. The +`matrix_space`, on the other hand, is the space that corresponds to the rows of +`matrix_field`. By default, `matrix_space` is set to `axes(matrix_field)`. +""" +column_axes(matrix_field, matrix_space = axes(matrix_field)) = + _column_axes(matrix_shape(matrix_field, matrix_space), matrix_space) + +_column_axes(::Square, space) = space +_column_axes(::FaceToCenter, space) = Operators.reconstruct_placeholder_space( + Operators.FacePlaceholderSpace(), + space, +) +_column_axes(::CenterToFace, space) = Operators.reconstruct_placeholder_space( + Operators.CenterPlaceholderSpace(), + space, +) diff --git a/src/Meshes/cubedsphere.jl b/src/Meshes/cubedsphere.jl index 018bd560b0..efe93f17b9 100644 --- a/src/Meshes/cubedsphere.jl +++ b/src/Meshes/cubedsphere.jl @@ -77,18 +77,15 @@ sphere. struct NormalizedBilinearMap <: LocalElementMap end -Base.show(io::IO, mesh::AbstractCubedSphere) = print( - io, - mesh.ne, - "×", - mesh.ne, - "×", - 6, - "-element ", - nameof(typeof(mesh)), - " of ", - mesh.domain, -) +function Base.summary(io::IO, mesh::AbstractCubedSphere) + ne = mesh.ne + print(io, ne, "×", ne, "×", 6, "-element ", nameof(typeof(mesh))) +end +function Base.show(io::IO, mesh::AbstractCubedSphere) + summary(io, mesh) + print(io, " of ", mesh.domain) +end + domain(mesh::AbstractCubedSphere) = mesh.domain elements(mesh::AbstractCubedSphere) = CartesianIndices((mesh.ne, mesh.ne, 6)) diff --git a/src/Meshes/interval.jl b/src/Meshes/interval.jl index 7b237b36f5..4858bc881f 100644 --- a/src/Meshes/interval.jl +++ b/src/Meshes/interval.jl @@ -26,8 +26,12 @@ domain(mesh::IntervalMesh) = mesh.domain nelements(mesh::IntervalMesh) = length(mesh.faces) - 1 elements(mesh::IntervalMesh) = Base.OneTo(nelements(mesh)) +function Base.summary(io::IO, mesh::IntervalMesh) + print(io, nelements(mesh), "-element IntervalMesh") +end function Base.show(io::IO, mesh::IntervalMesh) - print(io, nelements(mesh), "-element IntervalMesh of ") + summary(io, mesh) + print(io, " of ") print(io, mesh.domain) end diff --git a/src/Meshes/rectangle.jl b/src/Meshes/rectangle.jl index 2f78abcb8e..c7b99107a0 100644 --- a/src/Meshes/rectangle.jl +++ b/src/Meshes/rectangle.jl @@ -20,11 +20,17 @@ RectilinearMesh(domain::RectangleDomain, n1::Int, n2::Int) = RectilinearMesh( IntervalMesh(domain.interval2; nelems = n2), ) -function Base.show(io::IO, mesh::RectilinearMesh) +function Base.summary(io::IO, mesh::RectilinearMesh) n1 = nelements(mesh.intervalmesh1) n2 = nelements(mesh.intervalmesh2) - print(io, n1, "×", n2, "-element RectilinearMesh of ", domain(mesh)) + print(io, n1, "×", n2, "-element RectilinearMesh") +end +function Base.show(io::IO, mesh::RectilinearMesh) + summary(io, mesh) + print(io, " of ", domain(mesh)) end + + domain(mesh::RectilinearMesh) = RectangleDomain(domain(mesh.intervalmesh1), domain(mesh.intervalmesh2)) nelements(mesh::RectilinearMesh) = diff --git a/src/Spaces/dss.jl b/src/Spaces/dss.jl index 2bda64b5c8..a114db8a1c 100644 --- a/src/Spaces/dss.jl +++ b/src/Spaces/dss.jl @@ -823,6 +823,15 @@ function dss_local!( return nothing end +""" + dss_local_vertices!( + perimeter_data::DataLayouts.VIFH, + perimeter::Perimeter2D, + topology::Topologies.Topology2D, + ) + +Apply dss to local vertices. +""" function dss_local_vertices!( perimeter_data::DataLayouts.VIFH, perimeter::Perimeter2D, diff --git a/src/Spaces/extruded.jl b/src/Spaces/extruded.jl index b66bbbfc35..5aacf75358 100644 --- a/src/Spaces/extruded.jl +++ b/src/Spaces/extruded.jl @@ -102,8 +102,24 @@ function Base.show(io::IO, space::ExtrudedFiniteDifferenceSpace) "FaceExtrudedFiniteDifferenceSpace", ":", ) - println(iio, " "^(indent + 2), space.horizontal_space) - print(iio, " "^(indent + 2), space.vertical_topology) + print(iio, " "^(indent + 2), "context: ") + Topologies.print_context(iio, space.horizontal_space.topology.context) + println(iio) + println(iio, " "^(indent + 2), "horizontal:") + println( + iio, + " "^(indent + 4), + "mesh: ", + space.horizontal_space.topology.mesh, + ) + println( + iio, + " "^(indent + 4), + "quadrature: ", + space.horizontal_space.quadrature_style, + ) + println(iio, " "^(indent + 2), "vertical:") + print(iio, " "^(indent + 4), "mesh: ", space.vertical_topology.mesh) end local_geometry_data(space::CenterExtrudedFiniteDifferenceSpace) = space.center_local_geometry diff --git a/src/Spaces/finitedifference.jl b/src/Spaces/finitedifference.jl index 26844fdeb5..38302bcba6 100644 --- a/src/Spaces/finitedifference.jl +++ b/src/Spaces/finitedifference.jl @@ -30,7 +30,10 @@ function Base.show(io::IO, space::FiniteDifferenceSpace) "FaceFiniteDifferenceSpace", ":", ) - print(iio, " "^(indent + 2), Spaces.topology(space)) + print(iio, " "^(indent + 2), "context: ") + Topologies.print_context(iio, space.topology.context) + println(iio) + print(iio, " "^(indent + 2), "mesh: ", space.topology.mesh) end function FiniteDifferenceSpace{S}( diff --git a/src/Spaces/quadrature.jl b/src/Spaces/quadrature.jl index 68aa07304f..5e9b892904 100644 --- a/src/Spaces/quadrature.jl +++ b/src/Spaces/quadrature.jl @@ -48,6 +48,9 @@ Gauss-Legendre-Lobatto quadrature using `Nq` quadrature points. """ struct GLL{Nq} <: QuadratureStyle end +Base.show(io::IO, ::GLL{Nq}) where {Nq} = + print(io, Nq, "-point Gauss-Legendre-Lobatto quadrature") + @inline polynomial_degree(::GLL{Nq}) where {Nq} = Int(Nq - 1) @inline degrees_of_freedom(::GLL{Nq}) where {Nq} = Int(Nq) @@ -62,6 +65,8 @@ end Gauss-Legendre quadrature using `Nq` quadrature points. """ struct GL{Nq} <: QuadratureStyle end +Base.show(io::IO, ::GL{Nq}) where {Nq} = + print(io, Nq, "-point Gauss-Legendre quadrature") @inline polynomial_degree(::GL{Nq}) where {Nq} = Int(Nq - 1) @inline degrees_of_freedom(::GL{Nq}) where {Nq} = Int(Nq) diff --git a/src/Spaces/spectralelement.jl b/src/Spaces/spectralelement.jl index 81e45ca5ff..2d7212befb 100644 --- a/src/Spaces/spectralelement.jl +++ b/src/Spaces/spectralelement.jl @@ -15,9 +15,12 @@ function Base.show(io::IO, space::AbstractSpectralElementSpace) println(io, nameof(typeof(space)), ":") if hasfield(typeof(space), :topology) # some reduced spaces (like slab space) do not have topology - println(iio, " "^(indent + 2), space.topology) + print(iio, " "^(indent + 2), "context: ") + Topologies.print_context(iio, space.topology.context) + println(iio) + println(iio, " "^(indent + 2), "mesh: ", space.topology.mesh) end - print(iio, " "^(indent + 2), space.quadrature_style) + print(iio, " "^(indent + 2), "quadrature: ", space.quadrature_style) end ClimaComms.device(space::AbstractSpectralElementSpace) = diff --git a/src/Topologies/Topologies.jl b/src/Topologies/Topologies.jl index 6588df653b..958470637f 100644 --- a/src/Topologies/Topologies.jl +++ b/src/Topologies/Topologies.jl @@ -42,6 +42,37 @@ mesh in the horizontal domain. """ abstract type AbstractTopology end + +function Base.summary(io::IO, topology::AbstractTopology) + print(io, nameof(typeof(topology))) +end + +# TODO: move this to ClimaComms +function print_device(io::IO, device::ClimaComms.AbstractDevice) + print(io, nameof(typeof(device))) +end + +function print_context(io::IO, context::ClimaComms.SingletonCommsContext) + print(io, "SingletonCommsContext using ") + print_device(io, context.device) +end + +function print_context(io::IO, context::ClimaComms.MPICommsContext) + if ClimaComms.MPI.Initialized() + print( + io, + "MPICommsContext with ", + ClimaComms.nprocs(context), + " processes", + ) + else + print(io, "MPICommsContext (uninitialized)") + end + print(io, " using ") + print_device(io, context.device) +end + + abstract type AbstractDistributedTopology <: AbstractTopology end coordinate_type(topology::AbstractTopology) = coordinate_type(domain(topology)) diff --git a/src/Topologies/interval.jl b/src/Topologies/interval.jl index 0575ed6f34..bd571e8236 100644 --- a/src/Topologies/interval.jl +++ b/src/Topologies/interval.jl @@ -49,8 +49,12 @@ IntervalTopology(mesh::Meshes.IntervalMesh) = IntervalTopology( isperiodic(topology::AbstractIntervalTopology) = isempty(topology.boundaries) -function Base.show(io::IO, topology::AbstractIntervalTopology) - print(io, "IntervalTopology on ", Topologies.mesh(topology)) +function Base.show(io::IO, topology::IntervalTopology) + println(io, nameof(typeof(topology))) + print(io, " context: ") + print_context(io, topology.context) + println(io) + print(io, " mesh: ", topology.mesh) end function mesh(topology::AbstractIntervalTopology) diff --git a/src/Topologies/topology2d.jl b/src/Topologies/topology2d.jl index 85143c9f1f..3f858abce6 100644 --- a/src/Topologies/topology2d.jl +++ b/src/Topologies/topology2d.jl @@ -127,6 +127,21 @@ ClimaComms.device(topology::Topology2D) = topology.context.device ClimaComms.array_type(topology::Topology2D) = ClimaComms.array_type(topology.context.device) +function Base.show(io::IO, topology::Topology2D) + indent = get(io, :indent, 0) + println(io, nameof(typeof(topology))) + print(io, " "^(indent + 2), "context: ") + print_context(io, topology.context) + println(io) + println(io, " "^(indent + 2), "mesh: ", topology.mesh) + print(io, " "^(indent + 2), "elemorder: ") + if topology.elemorder isa CartesianIndices + print(io, topology.elemorder) + else + summary(io, topology.elemorder) + end +end + """ spacefillingcurve(mesh::Meshes.AbstractCubedSphere) diff --git a/test/Fields/field.jl b/test/Fields/field.jl index 06e8b62c82..760cfef3bc 100644 --- a/test/Fields/field.jl +++ b/test/Fields/field.jl @@ -36,7 +36,7 @@ function spectral_space_2D(; n1 = 1, n2 = 1, Nij = 4) space = Spaces.SpectralElementSpace2D(grid_topology, quad) return space end -#= + @testset "1×1 2D domain space" begin Nij = 4 n1 = n2 = 1 @@ -422,7 +422,7 @@ end coord = Geometry.XPoint(FT(π)) space = Spaces.PointSpace(context, coord) @test parent(Spaces.local_geometry_data(space)) == - FT[Geometry.component(coord, 1), 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] + FT[Geometry.component(coord, 1), 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] field = Fields.coordinate_field(space) @test field isa Fields.PointField @test Fields.field_values(field)[] == coord @@ -668,7 +668,7 @@ end C .= Ref(zero(eltype(C))) @test all(==(0.0), parent(C)) end -=# + function integrate_bycolumn!(∫y, Y) Fields.bycolumn(axes(Y.y)) do colidx Operators.column_integral_definite!(∫y[colidx], Y.y[colidx]) @@ -701,12 +701,19 @@ convergence_rate(err, Δh) = end device = ClimaComms.device() context = ClimaComms.SingletonCommsContext(device) - for zelem in (2^2, 2^3, 2^4, 2^5) - for space in TU.all_spaces(FT; zelem, context) - # Filter out spaces without z coordinates: - TU.has_z_coordinates(space) || continue - # Skip spaces incompatible with Fields.bycolumn: - TU.bycolumnable(space) || continue + for space_constructor in [ + TU.ColumnCenterFiniteDifferenceSpace, + TU.ColumnFaceFiniteDifferenceSpace, + TU.CenterExtrudedFiniteDifferenceSpace, + TU.FaceExtrudedFiniteDifferenceSpace, + ] + device isa ClimaComms.CUDADevice && continue # broken on gpu + for zelem in (2^2, 2^3, 2^4, 2^5) + space = space_constructor(FT; zelem, context) + # # Filter out spaces without z coordinates: + # TU.has_z_coordinates(space) || continue + # # Skip spaces incompatible with Fields.bycolumn: + # TU.bycolumnable(space) || continue Y = fill((; y = FT(1)), space) zcf = Fields.coordinate_field(Y.y).z @@ -715,7 +722,7 @@ convergence_rate(err, Δh) = Δz_1 = CUDA.allowscalar() do parent(Δz_col)[1] end - key = (space, zelem) + key = zelem if !haskey(results, key) results[key] = Dict(:maxerr => 0, :Δz_1 => FT(0), :∫y => [], :y => []) @@ -725,14 +732,19 @@ convergence_rate(err, Δh) = y = Y.y @. y .= 1 + sin(zcf) # Compute max error against analytic solution - maxerr = 0 - Fields.bycolumn(axes(Y.y)) do colidx - Operators.column_integral_definite!(∫y[colidx], y[colidx]) - maxerr = max( - maxerr, - maximum(abs.(parent(∫y[colidx]) .- ∫y_analytic)), - ) - nothing + maxerr = FT(0) + if space isa Spaces.ExtrudedFiniteDifferenceSpace + Fields.bycolumn(axes(Y.y)) do colidx + Operators.column_integral_definite!(∫y[colidx], y[colidx]) + maxerr = max( + maxerr, + maximum(abs.(parent(∫y[colidx]) .- ∫y_analytic)), + ) + nothing + end + else + Operators.column_integral_definite!(∫y, y) + maxerr = max(maxerr, maximum(abs.(parent(∫y) .- ∫y_analytic))) end results[key][:Δz_1] = Δz_1 results[key][:maxerr] = maxerr @@ -740,11 +752,21 @@ convergence_rate(err, Δh) = push!(results[key][:y], y) nothing end + maxerrs = map(key -> results[key][:maxerr], collect(keys(results))) + Δzs_1 = map(key -> results[key][:Δz_1], collect(keys(results))) + cr = convergence_rate(maxerrs, Δzs_1) + if nameof(space_constructor) == :ColumnCenterFiniteDifferenceSpace + @test 2 < sum(abs.(cr)) / length(cr) < 2.01 + elseif nameof(space_constructor) == :ColumnFaceFiniteDifferenceSpace + @test_broken 2 < sum(abs.(cr)) / length(cr) < 2.01 + elseif nameof(space_constructor) == :CenterExtrudedFiniteDifferenceSpace + @test 2 < sum(abs.(cr)) / length(cr) < 2.01 + elseif nameof(space_constructor) == :FaceExtrudedFiniteDifferenceSpace + @test_broken 2 < sum(abs.(cr)) / length(cr) < 2.01 + else + error("Uncaught case") + end end - maxerrs = map(key -> results[key][:maxerr], collect(keys(results))) - Δzs_1 = map(key -> results[key][:Δz_1], collect(keys(results))) - cr = convergence_rate(maxerrs, Δzs_1) - @test 2 < sum(abs.(cr)) / length(cr) < 2.01 end @testset "Allocation tests for integrals" begin diff --git a/test/Fields/fielddiffeq.jl b/test/Fields/fielddiffeq.jl deleted file mode 100644 index d016e4ebc0..0000000000 --- a/test/Fields/fielddiffeq.jl +++ /dev/null @@ -1,86 +0,0 @@ -using Test -using ClimaComms -using OrdinaryDiffEq - -import ClimaCore: - ClimaCore, Domains, Topologies, Meshes, Geometry, Fields, Spaces -using LinearAlgebra, IntervalSets - - -@testset "DiffEq Solvers" begin - domain = Domains.RectangleDomain( - Geometry.XPoint(-2π) .. Geometry.XPoint(2π), - Geometry.YPoint(-2π) .. Geometry.YPoint(2π), - x1periodic = true, - x2periodic = true, - ) - - n1, n2 = 3, 4 - Nq = 4 - mesh = Meshes.RectilinearMesh(domain, n1, n2) - grid_topology = Topologies.Topology2D( - ClimaComms.SingletonCommsContext(ClimaComms.CPUSingleThreaded()), - mesh, - ) - quad = Spaces.Quadratures.GLL{Nq}() - space = Spaces.SpectralElementSpace2D(grid_topology, quad) - - # y = [cos(x1+x2+t), sin(x1+x2+t)] - # dy/dt = [-y[2], y[1]] - - f(x, t) = (c = cos(x.x + x.y + t), s = sin(x.x + x.y + t)) - function dfdt(y, _, t) - broadcast(y -> (c = -y.s, s = y.c), y) - end - function dfdt!(dydt, y, _, t) - broadcast!(y -> (c = -y.s, s = y.c), dydt, y) - end - - y0 = f.(Fields.coordinate_field(space), 0.0) - y1 = f.(Fields.coordinate_field(space), 1.0) - - # Solve the ODE operator - prob = ODEProblem(dfdt!, y0, (0.0, 1.0)) - sol = solve(prob, Tsit5(), reltol = 1e-6) - - @test norm(sol(1.0) .- y1) <= 1e-6 * norm(y1) -end - -# implicit solvers -# require use of FieldVector -@testset "DiffEq Implicit Solvers" begin - domain = Domains.IntervalDomain( - Geometry.ZPoint(0.0), - Geometry.ZPoint(pi); - boundary_tags = (:left, :right), - ) - mesh = Meshes.IntervalMesh(domain; nelems = 16) - - center_space = Spaces.CenterFiniteDifferenceSpace(mesh) - # y(z, t) = z*exp(α*t) - # dydt(z, t) = α*y(t) - zcenters = Fields.coordinate_field(center_space).z - y = Fields.FieldVector(z = zcenters) - - function f!(dydt, y, α, t) - dydt.z .= α .* y.z - end - - function f_jac!(J, y, α, t) - copyto!(J, α * LinearAlgebra.I) - end - - prob = ODEProblem( - ODEFunction(f!; jac_prototype = zeros(length(y), length(y))), - copy(y), - (0.0, 1.0), - 0.1, - ) - sol = solve(prob, SSPRK22(), dt = 0.01) - - sol = solve(prob, ImplicitEuler(), reltol = 1e-6) - y1 = similar(y) - y1 .= y .* exp(0.1) - - @test norm(sol[end] .- y1) <= 1e-4 * norm(y1) -end diff --git a/test/MatrixFields/band_matrix_row.jl b/test/MatrixFields/band_matrix_row.jl index 0077948b4a..b48bec969f 100644 --- a/test/MatrixFields/band_matrix_row.jl +++ b/test/MatrixFields/band_matrix_row.jl @@ -1,18 +1,6 @@ -using Test -using JET using LinearAlgebra: I -using ClimaCore.MatrixFields -import ClimaCore: Geometry - -macro test_all(expression) - return quote - local test_func() = $(esc(expression)) - @test test_func() # correctness - @test (@allocated test_func()) == 0 # allocations - @test_opt test_func() # type instabilities - end -end +include("matrix_field_test_utils.jl") @testset "BandMatrixRow Unit Tests" begin @test_all DiagonalMatrixRow(1) == @@ -41,14 +29,14 @@ end TridiagonalMatrixRow(1, 0, 1) / 2 - I == zero(PentadiagonalMatrixRow{Int}) - T(value) = (; a = (), b = value, c = (value, (; d = (value,)), (;))) - @test_all QuaddiagonalMatrixRow(T(0.5), T(1), T(1), T(1 // 2)) + - BidiagonalMatrixRow(T(-0.5), T(-1 // 2)) == - QuaddiagonalMatrixRow(T(1), T(1), T(1), T(1)) / 2 - @test_all PentadiagonalMatrixRow(T(0), T(0.5), T(1), T(1 // 2), T(0)) - - TridiagonalMatrixRow(T(1), T(0), T(1)) / 2 - - 0.5 * DiagonalMatrixRow(T(2)) == - PentadiagonalMatrixRow(T(0), T(0), T(0), T(0), T(0)) + NT = nested_type + @test_all QuaddiagonalMatrixRow(NT(0.5), NT(1), NT(1), NT(1 // 2)) + + BidiagonalMatrixRow(NT(-0.5), NT(-1 // 2)) == + QuaddiagonalMatrixRow(NT(1), NT(1), NT(1), NT(1)) / 2 + @test_all PentadiagonalMatrixRow(NT(0), NT(0.5), NT(1), NT(1 // 2), NT(0)) - + TridiagonalMatrixRow(NT(1), NT(0), NT(1)) / 2 - + 0.5 * DiagonalMatrixRow(NT(2)) == + PentadiagonalMatrixRow(NT(0), NT(0), NT(0), NT(0), NT(0)) @test_throws "Cannot promote" BidiagonalMatrixRow(1, 1) + I @test_throws "Cannot promote" BidiagonalMatrixRow(1, 1) + diff --git a/test/MatrixFields/field2arrays.jl b/test/MatrixFields/field2arrays.jl index c47595f08a..3123b591e2 100644 --- a/test/MatrixFields/field2arrays.jl +++ b/test/MatrixFields/field2arrays.jl @@ -70,12 +70,12 @@ import ClimaCore: Geometry, Domains, Meshes, Spaces, Fields, MatrixFields @test ᶜᶜmat_array_view == MatrixFields.column_field2array(ᶜᶜmat) @test MatrixFields.field2arrays(ᶜᶜmat) == - (MatrixFields.column_field2array(ᶜᶜmat),) + [MatrixFields.column_field2array(ᶜᶜmat)] # Check for type instabilities. - @test_opt MatrixFields.column_field2array(ᶜᶜmat) + @test_opt broken = true MatrixFields.column_field2array(ᶜᶜmat) @test_opt MatrixFields.column_field2array_view(ᶜᶜmat) - @test_opt MatrixFields.field2arrays(ᶜᶜmat) + @test_opt broken = true MatrixFields.field2arrays(ᶜᶜmat) # Because this test is broken, printing matrix fields allocates some memory. @test_broken (@allocated MatrixFields.column_field2array_view(ᶜᶜmat)) == 0 diff --git a/test/MatrixFields/matrix_field_broadcasting.jl b/test/MatrixFields/matrix_field_broadcasting.jl index d60f96fcb1..72e4944432 100644 --- a/test/MatrixFields/matrix_field_broadcasting.jl +++ b/test/MatrixFields/matrix_field_broadcasting.jl @@ -1,292 +1,80 @@ -using Test -using JET -import CUDA import BandedMatrices: band import LinearAlgebra: I, mul! -import Random: seed! -using ClimaCore.MatrixFields -import ClimaCore: - Geometry, Domains, Meshes, Topologies, Hypsography, Spaces, Fields -import ClimaComms - -# Using @benchmark from BenchmarkTools is extremely slow; it appears to keep -# triggering recompilations and allocating a lot of memory in the process. -# This macro returns the minimum time (in seconds) required to run the -# expression after it has been compiled. -macro benchmark(expression) - return quote - $(esc(expression)) # Compile the expression first. Use esc for hygiene. - best_time = Inf - start_time = time_ns() - while time_ns() - start_time < 1e8 # Benchmark for 0.1 s (1e8 ns). - best_time = min(best_time, @elapsed $(esc(expression))) - end - best_time - end -end - -# This function is used for benchmarking ref_set_result!. -function call_array_func( - ref_set_result!::F, - ref_result_arrays, - inputs_arrays, - temp_values_arrays, -) where {F} - for arrays in - zip(ref_result_arrays, inputs_arrays..., temp_values_arrays...) - ref_set_result!(arrays...) - end -end - -function test_matrix_broadcast_against_array_reference(; - test_name, - inputs, - get_result::F1, - set_result!::F2, - get_temp_values::F3 = (_...) -> (), - ref_set_result!::F4, - time_ratio_limit = 10, - max_eps_error_limit = 7, - test_broken_with_cuda = false, -) where {F1, F2, F3, F4} - @testset "$test_name" begin - is_using_cuda = ClimaComms.device(inputs[1]) isa ClimaComms.CUDADevice - ignore_cuda = (AnyFrameModule(CUDA),) - - if test_broken_with_cuda && is_using_cuda - @test_throws CUDA.InvalidIRError get_result(inputs...) - @warn "$test_name:\n\tCUDA.InvalidIRError" - return - end - - result = get_result(inputs...) - temp_values = get_temp_values(inputs...) - - # Fill all output fields with NaNs for testing correctness. - result .*= NaN - for temp_value in temp_values - temp_value .*= NaN - end - - ref_result_arrays = MatrixFields.field2arrays(result) - inputs_arrays = map(MatrixFields.field2arrays, inputs) - temp_values_arrays = map(MatrixFields.field2arrays, temp_values) - - best_time = @benchmark set_result!(result, inputs...) - best_ref_time = @benchmark call_array_func( - ref_set_result!, - ref_result_arrays, - inputs_arrays, - temp_values_arrays, - ) - - # Compute the maximum error as an integer multiple of machine epsilon. - result_arrays = MatrixFields.field2arrays(result) - max_error = - maximum(zip(result_arrays, ref_result_arrays)) do (array, ref_array) - maximum(abs.(array .- ref_array)) - end - max_eps_error = ceil(Int, max_error / eps(typeof(max_error))) - - @info "$test_name:\n\tBest Time = $best_time s\n\tBest Reference Time \ - = $best_ref_time s\n\tMaximum Error = $max_eps_error eps" - - # Test that set_result! is performant compared to ref_set_result!. - @test best_time / best_ref_time < time_ratio_limit - - # Test set_result! for correctness, allocations, and type instabilities. - # Ignore the type instabilities in CUDA and the allocations they incur. - @test max_eps_error < max_eps_error_limit - @test is_using_cuda || (@allocated set_result!(result, inputs...)) == 0 - @test_opt ignored_modules = ignore_cuda set_result!(result, inputs...) - - # Test ref_set_result! for allocations and type instabilities. This is - # helpful for ensuring that the performance comparison is fair. - @test (@allocated call_array_func( - ref_set_result!, - ref_result_arrays, - inputs_arrays, - temp_values_arrays, - )) == 0 - @test_opt call_array_func( - ref_set_result!, - ref_result_arrays, - inputs_arrays, - temp_values_arrays, - ) - - # Test get_result (the allocating version of set_result!) for type - # instabilities. Ignore the type instabilities in CUDA. - @test_opt ignored_modules = ignore_cuda get_result(inputs...) - end -end - -function test_matrix_broadcast_against_reference(; - test_name, - inputs, - get_result::F1, - set_result!::F2, - ref_inputs, - ref_set_result!::F3, -) where {F1, F2, F3} - @testset "$test_name" begin - is_using_cuda = ClimaComms.device(inputs[1]) isa ClimaComms.CUDADevice - ignore_cuda = (AnyFrameModule(CUDA),) - - result = get_result(inputs...) - - # Fill the output field with NaNs for testing correctness. - result .*= NaN - - ref_result = copy(result) - - best_time = @benchmark set_result!(result, inputs...) - best_ref_time = @benchmark ref_set_result!(ref_result, ref_inputs...) - - @info "$test_name:\n\tBest Time = $best_time s\n\tBest Reference Time \ - = $best_ref_time s" - - # Test that set_result! is performant compared to ref_set_result!. - @test best_time < best_ref_time - - # Test set_result! for correctness, allocations, and type instabilities. - # Ignore the type instabilities in CUDA and the allocations they incur. - # Account for the roundoff errors that CUDA introduces. - @test if is_using_cuda - max_error = maximum(abs.(parent(result) .- parent(ref_result))) - max_error < eps(typeof(max_error)) - else - result == ref_result - end - @test is_using_cuda || (@allocated set_result!(result, inputs...)) == 0 - @test_opt ignored_modules = ignore_cuda set_result!(result, inputs...) - - # Test ref_set_result! for allocations and type instabilities. This is - # helpful for ensuring that the performance comparison is fair. Ignore - # the type instabilities in CUDA and the allocations they incur. - @test is_using_cuda || - (@allocated ref_set_result!(ref_result, ref_inputs...)) == 0 - @test_opt ignored_modules = ignore_cuda ref_set_result!( - ref_result, - ref_inputs..., - ) - - # Test get_result (the allocating version of set_result!) for type - # instabilities. Ignore the type instabilities in CUDA. - @test_opt ignored_modules = ignore_cuda get_result(inputs...) - end -end - -function random_test_fields(::Type{FT}) where {FT} - velem = 20 # This should be big enough to test high-bandwidth matrices. - helem = npoly = 1 # These should be small enough for the tests to be fast. - - comms_ctx = ClimaComms.SingletonCommsContext() - hdomain = Domains.SphereDomain(FT(10)) - hmesh = Meshes.EquiangularCubedSphere(hdomain, helem) - htopology = Topologies.Topology2D(comms_ctx, hmesh) - quad = Spaces.Quadratures.GLL{npoly + 1}() - hspace = Spaces.SpectralElementSpace2D(htopology, quad) - vdomain = Domains.IntervalDomain( - Geometry.ZPoint(FT(0)), - Geometry.ZPoint(FT(10)); - boundary_tags = (:bottom, :top), - ) - vmesh = Meshes.IntervalMesh(vdomain, nelems = velem) - vtopology = Topologies.IntervalTopology(comms_ctx, vmesh) - vspace = Spaces.CenterFiniteDifferenceSpace(vtopology) - sfc_coord = Fields.coordinate_field(hspace) - hypsography = - comms_ctx.device isa ClimaComms.CUDADevice ? Hypsography.Flat() : - Hypsography.LinearAdaption( - @. cosd(sfc_coord.lat) + cosd(sfc_coord.long) + 1 - ) # TODO: FD operators don't currently work with hypsography on GPUs. - center_space = - Spaces.ExtrudedFiniteDifferenceSpace(hspace, vspace, hypsography) - face_space = Spaces.FaceExtrudedFiniteDifferenceSpace(center_space) - ᶜcoord = Fields.coordinate_field(center_space) - ᶠcoord = Fields.coordinate_field(face_space) - - seed!(1) # ensures reproducibility - ᶜᶜmat = map(c -> DiagonalMatrixRow(ntuple(_ -> rand(FT), 1)...), ᶜcoord) - ᶜᶠmat = map(c -> BidiagonalMatrixRow(ntuple(_ -> rand(FT), 2)...), ᶜcoord) - ᶠᶠmat = map(c -> TridiagonalMatrixRow(ntuple(_ -> rand(FT), 3)...), ᶠcoord) - ᶠᶜmat = map(c -> QuaddiagonalMatrixRow(ntuple(_ -> rand(FT), 4)...), ᶠcoord) - ᶜvec = map(c -> rand(FT), ᶜcoord) - ᶠvec = map(c -> rand(FT), ᶠcoord) - - return ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec, ᶠvec -end +include("matrix_field_test_utils.jl") @testset "Scalar Matrix Field Broadcasting" begin - ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec, ᶠvec = random_test_fields(Float64) + FT = Float64 + center_space, face_space = test_spaces(FT) - test_matrix_broadcast_against_array_reference(; + seed!(1) # ensures reproducibility + ᶜvec = random_field(FT, center_space) + ᶠvec = random_field(FT, face_space) + ᶜᶜmat = random_field(DiagonalMatrixRow{FT}, center_space) + ᶜᶠmat = random_field(BidiagonalMatrixRow{FT}, center_space) + ᶠᶠmat = random_field(TridiagonalMatrixRow{FT}, face_space) + ᶠᶜmat = random_field(QuaddiagonalMatrixRow{FT}, face_space) + + test_field_broadcast_against_array_reference(; test_name = "diagonal matrix times vector", - inputs = (ᶜᶜmat, ᶜvec), - get_result = (ᶜᶜmat, ᶜvec) -> (@. ᶜᶜmat ⋅ ᶜvec), - set_result! = (result, ᶜᶜmat, ᶜvec) -> (@. result = ᶜᶜmat ⋅ ᶜvec), + get_result = () -> (@. ᶜᶜmat ⋅ ᶜvec), + set_result! = result -> (@. result = ᶜᶜmat ⋅ ᶜvec), + input_fields = (ᶜᶜmat, ᶜvec), ref_set_result! = (_result, _ᶜᶜmat, _ᶜvec) -> mul!(_result, _ᶜᶜmat, _ᶜvec), - time_ratio_limit = 10, # This case's ref function is fast on Buildkite. ) - test_matrix_broadcast_against_array_reference(; + test_field_broadcast_against_array_reference(; test_name = "tri-diagonal matrix times vector", - inputs = (ᶠᶠmat, ᶠvec), - get_result = (ᶠᶠmat, ᶠvec) -> (@. ᶠᶠmat ⋅ ᶠvec), - set_result! = (result, ᶠᶠmat, ᶠvec) -> (@. result = ᶠᶠmat ⋅ ᶠvec), + get_result = () -> (@. ᶠᶠmat ⋅ ᶠvec), + set_result! = result -> (@. result = ᶠᶠmat ⋅ ᶠvec), + input_fields = (ᶠᶠmat, ᶠvec), ref_set_result! = (_result, _ᶠᶠmat, _ᶠvec) -> mul!(_result, _ᶠᶠmat, _ᶠvec), - time_ratio_limit = 10, # This case's ref function is fast on Buildkite. ) - test_matrix_broadcast_against_array_reference(; + test_field_broadcast_against_array_reference(; test_name = "quad-diagonal matrix times vector", - inputs = (ᶠᶜmat, ᶜvec), - get_result = (ᶠᶜmat, ᶜvec) -> (@. ᶠᶜmat ⋅ ᶜvec), - set_result! = (result, ᶠᶜmat, ᶜvec) -> (@. result = ᶠᶜmat ⋅ ᶜvec), + get_result = () -> (@. ᶠᶜmat ⋅ ᶜvec), + set_result! = result -> (@. result = ᶠᶜmat ⋅ ᶜvec), + input_fields = (ᶠᶜmat, ᶜvec), ref_set_result! = (_result, _ᶠᶜmat, _ᶜvec) -> mul!(_result, _ᶠᶜmat, _ᶜvec), - time_ratio_limit = 10, # This case's ref function is fast on Buildkite. ) - test_matrix_broadcast_against_array_reference(; + test_field_broadcast_against_array_reference(; test_name = "diagonal matrix times bi-diagonal matrix", - inputs = (ᶜᶜmat, ᶜᶠmat), - get_result = (ᶜᶜmat, ᶜᶠmat) -> (@. ᶜᶜmat ⋅ ᶜᶠmat), - set_result! = (result, ᶜᶜmat, ᶜᶠmat) -> (@. result = ᶜᶜmat ⋅ ᶜᶠmat), + get_result = () -> (@. ᶜᶜmat ⋅ ᶜᶠmat), + set_result! = result -> (@. result = ᶜᶜmat ⋅ ᶜᶠmat), + input_fields = (ᶜᶜmat, ᶜᶠmat), ref_set_result! = (_result, _ᶜᶜmat, _ᶜᶠmat) -> mul!(_result, _ᶜᶜmat, _ᶜᶠmat), ) - test_matrix_broadcast_against_array_reference(; + test_field_broadcast_against_array_reference(; test_name = "tri-diagonal matrix times tri-diagonal matrix", - inputs = (ᶠᶠmat,), - get_result = (ᶠᶠmat,) -> (@. ᶠᶠmat ⋅ ᶠᶠmat), - set_result! = (result, ᶠᶠmat) -> (@. result = ᶠᶠmat ⋅ ᶠᶠmat), + get_result = () -> (@. ᶠᶠmat ⋅ ᶠᶠmat), + set_result! = result -> (@. result = ᶠᶠmat ⋅ ᶠᶠmat), + input_fields = (ᶠᶠmat,), ref_set_result! = (_result, _ᶠᶠmat) -> mul!(_result, _ᶠᶠmat, _ᶠᶠmat), ) - test_matrix_broadcast_against_array_reference(; + test_field_broadcast_against_array_reference(; test_name = "quad-diagonal matrix times diagonal matrix", - inputs = (ᶠᶜmat, ᶜᶜmat), - get_result = (ᶠᶜmat, ᶜᶜmat) -> (@. ᶠᶜmat ⋅ ᶜᶜmat), - set_result! = (result, ᶠᶜmat, ᶜᶜmat) -> (@. result = ᶠᶜmat ⋅ ᶜᶜmat), + get_result = () -> (@. ᶠᶜmat ⋅ ᶜᶜmat), + set_result! = result -> (@. result = ᶠᶜmat ⋅ ᶜᶜmat), + input_fields = (ᶠᶜmat, ᶜᶜmat), ref_set_result! = (_result, _ᶠᶜmat, _ᶜᶜmat) -> mul!(_result, _ᶠᶜmat, _ᶜᶜmat), ) - test_matrix_broadcast_against_array_reference(; + test_field_broadcast_against_array_reference(; test_name = "diagonal matrix times bi-diagonal matrix times \ tri-diagonal matrix times quad-diagonal matrix", - inputs = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat), - get_result = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> - (@. ᶜᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶠmat ⋅ ᶠᶜmat), - set_result! = (result, ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> - (@. result = ᶜᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶠmat ⋅ ᶠᶜmat), - get_temp_values = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> + get_result = () -> (@. ᶜᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶠmat ⋅ ᶠᶜmat), + set_result! = result -> (@. result = ᶜᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶠmat ⋅ ᶠᶜmat), + input_fields = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat), + get_temp_value_fields = () -> ((@. ᶜᶜmat ⋅ ᶜᶠmat), (@. ᶜᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶠmat)), ref_set_result! = ( _result, @@ -303,16 +91,14 @@ end end, ) - test_matrix_broadcast_against_array_reference(; + test_field_broadcast_against_array_reference(; test_name = "diagonal matrix times bi-diagonal matrix times \ tri-diagonal matrix times quad-diagonal matrix, but with \ forced right-associativity", - inputs = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat), - get_result = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> - (@. ᶜᶜmat ⋅ (ᶜᶠmat ⋅ (ᶠᶠmat ⋅ ᶠᶜmat))), - set_result! = (result, ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> - (@. result = ᶜᶜmat ⋅ (ᶜᶠmat ⋅ (ᶠᶠmat ⋅ ᶠᶜmat))), - get_temp_values = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> + get_result = () -> (@. ᶜᶜmat ⋅ (ᶜᶠmat ⋅ (ᶠᶠmat ⋅ ᶠᶜmat))), + set_result! = result -> (@. result = ᶜᶜmat ⋅ (ᶜᶠmat ⋅ (ᶠᶠmat ⋅ ᶠᶜmat))), + input_fields = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat), + get_temp_value_fields = () -> ((@. ᶠᶠmat ⋅ ᶠᶜmat), (@. ᶜᶠmat ⋅ (ᶠᶠmat ⋅ ᶠᶜmat))), ref_set_result! = ( _result, @@ -330,16 +116,15 @@ end test_broken_with_cuda = true, # TODO: Fix this. ) - test_matrix_broadcast_against_array_reference(; + test_field_broadcast_against_array_reference(; test_name = "diagonal matrix times bi-diagonal matrix times \ tri-diagonal matrix times quad-diagonal matrix times \ vector", - inputs = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec), - get_result = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec) -> - (@. ᶜᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶠmat ⋅ ᶠᶜmat ⋅ ᶜvec), - set_result! = (result, ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec) -> + get_result = () -> (@. ᶜᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶠmat ⋅ ᶠᶜmat ⋅ ᶜvec), + set_result! = result -> (@. result = ᶜᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶠmat ⋅ ᶠᶜmat ⋅ ᶜvec), - get_temp_values = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec) -> ( + input_fields = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec), + get_temp_value_fields = () -> ( (@. ᶜᶜmat ⋅ ᶜᶠmat), (@. ᶜᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶠmat), (@. ᶜᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶠmat ⋅ ᶠᶜmat), @@ -362,16 +147,15 @@ end end, ) - test_matrix_broadcast_against_array_reference(; + test_field_broadcast_against_array_reference(; test_name = "diagonal matrix times bi-diagonal matrix times \ tri-diagonal matrix times quad-diagonal matrix times \ vector, but with forced right-associativity", - inputs = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec), - get_result = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec) -> - (@. ᶜᶜmat ⋅ (ᶜᶠmat ⋅ (ᶠᶠmat ⋅ (ᶠᶜmat ⋅ ᶜvec)))), - set_result! = (result, ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec) -> + get_result = () -> (@. ᶜᶜmat ⋅ (ᶜᶠmat ⋅ (ᶠᶠmat ⋅ (ᶠᶜmat ⋅ ᶜvec)))), + set_result! = result -> (@. result = ᶜᶜmat ⋅ (ᶜᶠmat ⋅ (ᶠᶠmat ⋅ (ᶠᶜmat ⋅ ᶜvec)))), - get_temp_values = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec) -> ( + input_fields = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec), + get_temp_value_fields = () -> ( (@. ᶠᶜmat ⋅ ᶜvec), (@. ᶠᶠmat ⋅ (ᶠᶜmat ⋅ ᶜvec)), (@. ᶜᶠmat ⋅ (ᶠᶠmat ⋅ (ᶠᶜmat ⋅ ᶜvec))), @@ -396,14 +180,14 @@ end test_broken_with_cuda = true, # TODO: Fix this. ) - test_matrix_broadcast_against_array_reference(; + test_field_broadcast_against_array_reference(; test_name = "linear combination of matrix products and LinearAlgebra.I", - inputs = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat), - get_result = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> + get_result = () -> (@. 2 * ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat + ᶠᶠmat ⋅ ᶠᶠmat / 3 - (4I,)), - set_result! = (result, ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> + set_result! = result -> (@. result = 2 * ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat + ᶠᶠmat ⋅ ᶠᶠmat / 3 - (4I,)), - get_temp_values = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> ( + input_fields = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat), + get_temp_value_fields = () -> ( (@. 2 * ᶠᶜmat), (@. 2 * ᶠᶜmat ⋅ ᶜᶜmat), (@. 2 * ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat), @@ -429,15 +213,15 @@ end end, ) - test_matrix_broadcast_against_array_reference(; + test_field_broadcast_against_array_reference(; test_name = "another linear combination of matrix products and \ LinearAlgebra.I", - inputs = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat), - get_result = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> + get_result = () -> (@. ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat * 2 - (ᶠᶠmat / 3) ⋅ ᶠᶠmat + (4I,)), - set_result! = (result, ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> (@. result = + set_result! = result -> (@. result = ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat * 2 - (ᶠᶠmat / 3) ⋅ ᶠᶠmat + (4I,)), - get_temp_values = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> ( + input_fields = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat), + get_temp_value_fields = () -> ( (@. ᶠᶜmat ⋅ ᶜᶜmat), (@. ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat), (@. ᶠᶠmat / 3), @@ -463,14 +247,14 @@ end end, ) - test_matrix_broadcast_against_array_reference(; + test_field_broadcast_against_array_reference(; test_name = "matrix times linear combination", - inputs = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat), - get_result = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> (@. ᶜᶠmat ⋅ + get_result = () -> (@. ᶜᶠmat ⋅ (2 * ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat + ᶠᶠmat ⋅ ᶠᶠmat / 3 - (4I,))), - set_result! = (result, ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> (@. result = + set_result! = result -> (@. result = ᶜᶠmat ⋅ (2 * ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat + ᶠᶠmat ⋅ ᶠᶠmat / 3 - (4I,))), - get_temp_values = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> ( + input_fields = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat), + get_temp_value_fields = () -> ( (@. 2 * ᶠᶜmat), (@. 2 * ᶠᶜmat ⋅ ᶜᶜmat), (@. 2 * ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat), @@ -499,16 +283,16 @@ end end, ) - test_matrix_broadcast_against_array_reference(; + test_field_broadcast_against_array_reference(; test_name = "linear combination times another linear combination", - inputs = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat), - get_result = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> + get_result = () -> (@. (2 * ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat + ᶠᶠmat ⋅ ᶠᶠmat / 3 - (4I,)) ⋅ (ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat * 2 - (ᶠᶠmat / 3) ⋅ ᶠᶠmat + (4I,))), - set_result! = (result, ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> (@. result = + set_result! = result -> (@. result = (2 * ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat + ᶠᶠmat ⋅ ᶠᶠmat / 3 - (4I,)) ⋅ (ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat * 2 - (ᶠᶠmat / 3) ⋅ ᶠᶠmat + (4I,))), - get_temp_values = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> ( + input_fields = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat), + get_temp_value_fields = () -> ( (@. 2 * ᶠᶜmat), (@. 2 * ᶠᶜmat ⋅ ᶜᶜmat), (@. 2 * ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat), @@ -554,22 +338,22 @@ end max_eps_error_limit = 30, # This case's roundoff error is large on GPUs. ) - test_matrix_broadcast_against_array_reference(; + test_field_broadcast_against_array_reference(; test_name = "matrix times matrix times linear combination times matrix \ times another linear combination times matrix", - inputs = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat), - get_result = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> (@. ᶠᶜmat ⋅ ᶜᶠmat ⋅ + get_result = () -> (@. ᶠᶜmat ⋅ ᶜᶠmat ⋅ (2 * ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat + ᶠᶠmat ⋅ ᶠᶠmat / 3 - (4I,)) ⋅ ᶠᶠmat ⋅ (ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat * 2 - (ᶠᶠmat / 3) ⋅ ᶠᶠmat + (4I,)) ⋅ ᶠᶠmat), - set_result! = (result, ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> (@. result = + set_result! = result -> (@. result = ᶠᶜmat ⋅ ᶜᶠmat ⋅ (2 * ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat + ᶠᶠmat ⋅ ᶠᶠmat / 3 - (4I,)) ⋅ ᶠᶠmat ⋅ (ᶠᶜmat ⋅ ᶜᶜmat ⋅ ᶜᶠmat * 2 - (ᶠᶠmat / 3) ⋅ ᶠᶠmat + (4I,)) ⋅ ᶠᶠmat), - get_temp_values = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat) -> ( + input_fields = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat), + get_temp_value_fields = () -> ( (@. ᶠᶜmat ⋅ ᶜᶠmat), (@. 2 * ᶠᶜmat), (@. 2 * ᶠᶜmat ⋅ ᶜᶜmat), @@ -630,23 +414,21 @@ end mul!(_temp14, _temp8, _temp13) mul!(_result, _temp14, _ᶠᶠmat) end, - time_ratio_limit = 10, # This case's ref function is fast on Buildkite. max_eps_error_limit = 70, # This case's roundoff error is large on GPUs. ) - test_matrix_broadcast_against_array_reference(; + test_field_broadcast_against_array_reference(; test_name = "matrix constructions and multiplications", - inputs = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec, ᶠvec), - get_result = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec, ᶠvec) -> + get_result = () -> (@. BidiagonalMatrixRow(ᶜᶠmat ⋅ ᶠvec, ᶜᶜmat ⋅ ᶜvec) ⋅ TridiagonalMatrixRow(ᶠvec, ᶠᶜmat ⋅ ᶜvec, 1) ⋅ ᶠᶠmat ⋅ DiagonalMatrixRow(DiagonalMatrixRow(ᶠvec) ⋅ ᶠvec)), - set_result! = (result, ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec, ᶠvec) -> - (@. result = - BidiagonalMatrixRow(ᶜᶠmat ⋅ ᶠvec, ᶜᶜmat ⋅ ᶜvec) ⋅ - TridiagonalMatrixRow(ᶠvec, ᶠᶜmat ⋅ ᶜvec, 1) ⋅ ᶠᶠmat ⋅ - DiagonalMatrixRow(DiagonalMatrixRow(ᶠvec) ⋅ ᶠvec)), - get_temp_values = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec, ᶠvec) -> ( + set_result! = result -> (@. result = + BidiagonalMatrixRow(ᶜᶠmat ⋅ ᶠvec, ᶜᶜmat ⋅ ᶜvec) ⋅ + TridiagonalMatrixRow(ᶠvec, ᶠᶜmat ⋅ ᶜvec, 1) ⋅ ᶠᶠmat ⋅ + DiagonalMatrixRow(DiagonalMatrixRow(ᶠvec) ⋅ ᶠvec)), + input_fields = (ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec, ᶠvec), + get_temp_value_fields = () -> ( (@. BidiagonalMatrixRow(ᶜᶠmat ⋅ ᶠvec, ᶜᶜmat ⋅ ᶜvec)), (@. TridiagonalMatrixRow(ᶠvec, ᶠᶜmat ⋅ ᶜvec, 1)), (@. BidiagonalMatrixRow(ᶜᶠmat ⋅ ᶠvec, ᶜᶜmat ⋅ ᶜvec) ⋅ @@ -686,15 +468,21 @@ end end @testset "Non-scalar Matrix Field Broadcasting" begin - ᶜᶜmat, ᶜᶠmat, ᶠᶠmat, ᶠᶜmat, ᶜvec, ᶠvec = random_test_fields(Float64) + FT = Float64 + center_space, face_space = test_spaces(FT) - ᶜlg = Fields.local_geometry_field(ᶜvec) - ᶠlg = Fields.local_geometry_field(ᶠvec) + ᶜlg = Fields.local_geometry_field(center_space) + ᶠlg = Fields.local_geometry_field(face_space) - ᶜᶠmat2 = map(row -> map(sin, row), ᶜᶠmat) - ᶜᶠmat3 = map(row -> map(cos, row), ᶜᶠmat) - ᶠᶜmat2 = map(row -> map(sin, row), ᶠᶜmat) - ᶠᶜmat3 = map(row -> map(cos, row), ᶠᶜmat) + seed!(1) # ensures reproducibility + ᶜvec = random_field(FT, center_space) + ᶠvec = random_field(FT, face_space) + ᶜᶠmat = random_field(BidiagonalMatrixRow{FT}, center_space) + ᶜᶠmat2 = random_field(BidiagonalMatrixRow{FT}, center_space) + ᶜᶠmat3 = random_field(BidiagonalMatrixRow{FT}, center_space) + ᶠᶜmat = random_field(QuaddiagonalMatrixRow{FT}, face_space) + ᶠᶜmat2 = random_field(QuaddiagonalMatrixRow{FT}, face_space) + ᶠᶜmat3 = random_field(QuaddiagonalMatrixRow{FT}, face_space) ᶜᶠmat_AC1 = map(row -> map(adjoint ∘ Geometry.Covariant1Vector, row), ᶜᶠmat) ᶜᶠmat_C12 = map( @@ -709,48 +497,26 @@ end ᶠᶜmat3, ) - test_matrix_broadcast_against_reference(; + test_field_broadcast(; test_name = "matrix of covectors times matrix of vectors", - inputs = (ᶜᶠmat_AC1, ᶠᶜmat_C12), - get_result = (ᶜᶠmat_AC1, ᶠᶜmat_C12) -> (@. ᶜᶠmat_AC1 ⋅ ᶠᶜmat_C12), - set_result! = (result, ᶜᶠmat_AC1, ᶠᶜmat_C12) -> - (@. result = ᶜᶠmat_AC1 ⋅ ᶠᶜmat_C12), - ref_inputs = (ᶜᶠmat, ᶠᶜmat2, ᶠᶜmat3, ᶠlg), - ref_set_result! = (result, ᶜᶠmat, ᶠᶜmat2, ᶠᶜmat3, ᶠlg) -> (@. result = + get_result = () -> (@. ᶜᶠmat_AC1 ⋅ ᶠᶜmat_C12), + set_result! = result -> (@. result = ᶜᶠmat_AC1 ⋅ ᶠᶜmat_C12), + ref_set_result! = result -> (@. result = ᶜᶠmat ⋅ ( DiagonalMatrixRow(ᶠlg.gⁱʲ.components.data.:1) ⋅ ᶠᶜmat2 + DiagonalMatrixRow(ᶠlg.gⁱʲ.components.data.:2) ⋅ ᶠᶜmat3 )), ) - test_matrix_broadcast_against_reference(; + test_field_broadcast(; test_name = "matrix of covectors times matrix of vectors times matrix \ of numbers times matrix of covectors times matrix of \ vectors", - inputs = (ᶜᶠmat_AC1, ᶠᶜmat_C12, ᶜᶠmat, ᶠᶜmat_AC1, ᶜᶠmat_C12), - get_result = (ᶜᶠmat_AC1, ᶠᶜmat_C12, ᶜᶠmat, ᶠᶜmat_AC1, ᶜᶠmat_C12) -> + get_result = () -> (@. ᶜᶠmat_AC1 ⋅ ᶠᶜmat_C12 ⋅ ᶜᶠmat ⋅ ᶠᶜmat_AC1 ⋅ ᶜᶠmat_C12), - set_result! = ( - result, - ᶜᶠmat_AC1, - ᶠᶜmat_C12, - ᶜᶠmat, - ᶠᶜmat_AC1, - ᶜᶠmat_C12, - ) -> + set_result! = result -> (@. result = ᶜᶠmat_AC1 ⋅ ᶠᶜmat_C12 ⋅ ᶜᶠmat ⋅ ᶠᶜmat_AC1 ⋅ ᶜᶠmat_C12), - ref_inputs = (ᶜᶠmat, ᶜᶠmat2, ᶜᶠmat3, ᶠᶜmat, ᶠᶜmat2, ᶠᶜmat3, ᶜlg, ᶠlg), - ref_set_result! = ( - result, - ᶜᶠmat, - ᶜᶠmat2, - ᶜᶠmat3, - ᶠᶜmat, - ᶠᶜmat2, - ᶠᶜmat3, - ᶜlg, - ᶠlg, - ) -> (@. result = + ref_set_result! = result -> (@. result = ᶜᶠmat ⋅ ( DiagonalMatrixRow(ᶠlg.gⁱʲ.components.data.:1) ⋅ ᶠᶜmat2 + DiagonalMatrixRow(ᶠlg.gⁱʲ.components.data.:2) ⋅ ᶠᶜmat3 @@ -767,43 +533,15 @@ end ᶠᶜmat_C12_AC1 = map((row1, row2) -> map(tuple, row1, row2), ᶠᶜmat_C12, ᶠᶜmat_AC1) - test_matrix_broadcast_against_reference(; + test_field_broadcast(; test_name = "matrix of covectors and numbers times matrix of vectors \ and covectors times matrix of numbers and vectors times \ vector of numbers", - inputs = (ᶜᶠmat_AC1_num, ᶠᶜmat_C12_AC1, ᶜᶠmat_num_C12, ᶠvec), - get_result = (ᶜᶠmat_AC1_num, ᶠᶜmat_C12_AC1, ᶜᶠmat_num_C12, ᶠvec) -> + get_result = () -> (@. ᶜᶠmat_AC1_num ⋅ ᶠᶜmat_C12_AC1 ⋅ ᶜᶠmat_num_C12 ⋅ ᶠvec), - set_result! = ( - result, - ᶜᶠmat_AC1_num, - ᶠᶜmat_C12_AC1, - ᶜᶠmat_num_C12, - ᶠvec, - ) -> (@. result = ᶜᶠmat_AC1_num ⋅ ᶠᶜmat_C12_AC1 ⋅ ᶜᶠmat_num_C12 ⋅ ᶠvec), - ref_inputs = ( - ᶜᶠmat, - ᶜᶠmat2, - ᶜᶠmat3, - ᶠᶜmat, - ᶠᶜmat2, - ᶠᶜmat3, - ᶠvec, - ᶜlg, - ᶠlg, - ), - ref_set_result! = ( - result, - ᶜᶠmat, - ᶜᶠmat2, - ᶜᶠmat3, - ᶠᶜmat, - ᶠᶜmat2, - ᶠᶜmat3, - ᶠvec, - ᶜlg, - ᶠlg, - ) -> (@. result = tuple( + set_result! = result -> + (@. result = ᶜᶠmat_AC1_num ⋅ ᶠᶜmat_C12_AC1 ⋅ ᶜᶠmat_num_C12 ⋅ ᶠvec), + ref_set_result! = result -> (@. result = tuple( ᶜᶠmat ⋅ ( DiagonalMatrixRow(ᶠlg.gⁱʲ.components.data.:1) ⋅ ᶠᶜmat2 + DiagonalMatrixRow(ᶠlg.gⁱʲ.components.data.:2) ⋅ ᶠᶜmat3 @@ -815,32 +553,20 @@ end )), ) - T(value1, value2, value3) = - (; a = (), b = value1, c = (value2, (; d = (value3,)), (;))) - ᶜᶠmat_T = map((rows...) -> map(T, rows...), ᶜᶠmat, ᶜᶠmat2, ᶜᶠmat3) - ᶠᶜmat_T = map((rows...) -> map(T, rows...), ᶠᶜmat, ᶠᶜmat2, ᶠᶜmat3) - ᶜvec_T = @. T(ᶜvec, ᶜvec, ᶜvec) + ᶜvec_NT = @. nested_type(ᶜvec, ᶜvec, ᶜvec) + ᶜᶠmat_NT = + map((rows...) -> map(nested_type, rows...), ᶜᶠmat, ᶜᶠmat2, ᶜᶠmat3) + ᶠᶜmat_NT = + map((rows...) -> map(nested_type, rows...), ᶠᶜmat, ᶠᶜmat2, ᶠᶜmat3) - test_matrix_broadcast_against_reference(; + test_field_broadcast(; test_name = "matrix of nested values times matrix of nested values \ times matrix of numbers times matrix of numbers times \ - times vector of nested values", - inputs = (ᶜᶠmat_T, ᶠᶜmat, ᶜᶠmat, ᶠᶜmat_T, ᶜvec_T), - get_result = (ᶜᶠmat_T, ᶠᶜmat, ᶜᶠmat, ᶠᶜmat_T, ᶜvec_T) -> - (@. ᶜᶠmat_T ⋅ ᶠᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶜmat_T ⋅ ᶜvec_T), - set_result! = (result, ᶜᶠmat_T, ᶠᶜmat, ᶜᶠmat, ᶠᶜmat_T, ᶜvec_T) -> - (@. result = ᶜᶠmat_T ⋅ ᶠᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶜmat_T ⋅ ᶜvec_T), - ref_inputs = (ᶜᶠmat, ᶜᶠmat2, ᶜᶠmat3, ᶠᶜmat, ᶠᶜmat2, ᶠᶜmat3, ᶜvec), - ref_set_result! = ( - result, - ᶜᶠmat, - ᶜᶠmat2, - ᶜᶠmat3, - ᶠᶜmat, - ᶠᶜmat2, - ᶠᶜmat3, - ᶜvec, - ) -> (@. result = T( + vector of nested values", + get_result = () -> (@. ᶜᶠmat_NT ⋅ ᶠᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶜmat_NT ⋅ ᶜvec_NT), + set_result! = result -> + (@. result = ᶜᶠmat_NT ⋅ ᶠᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶜmat_NT ⋅ ᶜvec_NT), + ref_set_result! = result -> (@. result = nested_type( ᶜᶠmat ⋅ ᶠᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶜmat ⋅ ᶜvec, ᶜᶠmat2 ⋅ ᶠᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶜmat2 ⋅ ᶜvec, ᶜᶠmat3 ⋅ ᶠᶜmat ⋅ ᶜᶠmat ⋅ ᶠᶜmat3 ⋅ ᶜvec, diff --git a/test/MatrixFields/matrix_field_test_utils.jl b/test/MatrixFields/matrix_field_test_utils.jl new file mode 100644 index 0000000000..555b9fc3a2 --- /dev/null +++ b/test/MatrixFields/matrix_field_test_utils.jl @@ -0,0 +1,235 @@ +using Test +using JET +import CUDA +import Random: seed! + +import ClimaComms +import ClimaCore: + Geometry, Domains, Meshes, Topologies, Hypsography, Spaces, Fields +using ClimaCore.MatrixFields + +# Test that an expression is true and that it is also type-stable. +macro test_all(expression) + return quote + local test_func() = $(esc(expression)) + @test test_func() # correctness + @test (@allocated test_func()) == 0 # allocations + @test_opt test_func() # type instabilities + end +end + +# Compute the minimum time (in seconds) required to run an expression after it +# has been compiled. This macro is used instead of @benchmark from +# BenchmarkTools.jl because the latter is extremely slow (it appears to keep +# triggering recompilations and allocating a lot of memory in the process). +macro benchmark(expression) + return quote + $(esc(expression)) # Compile the expression first. Use esc for hygiene. + best_time = Inf + start_time = time_ns() + while time_ns() - start_time < 1e8 # Benchmark for 0.1 s (1e8 ns). + best_time = min(best_time, @elapsed $(esc(expression))) + end + best_time + end +end + +const ignore_cuda = (AnyFrameModule(CUDA),) + +is_using_cuda() = ClimaComms.device() isa ClimaComms.CUDADevice + +# Test the allocating and non-allocating versions of a field broadcast against +# a reference non-allocating implementation. Ensure that they are performant, +# correct, and type-stable, and print some useful information. If a reference +# implementation is not available, the performance and correctness checks are +# skipped. +function test_field_broadcast(; + test_name, + get_result::F1, + set_result!::F2, + ref_set_result!::F3 = nothing, + time_ratio_limit = 10, + max_eps_error_limit = 10, + test_broken_with_cuda = false, +) where {F1, F2, F3} + @testset "$test_name" begin + if test_broken_with_cuda && is_using_cuda() + @test_throws CUDA.InvalidIRError get_result() + @warn "$test_name:\n\tCUDA.InvalidIRError" + return + end + + result = get_result() + time = @benchmark set_result!(result) + time_rounded = round(time; sigdigits = 2) + + if isnothing(ref_set_result!) + @info "$test_name:\n\tTime = $time_rounded s (reference \ + implementation unavailable)" + else + ref_result = similar(result) + ref_time = @benchmark ref_set_result!(ref_result) + ref_time_rounded = round(ref_time; sigdigits = 2) + time_ratio = time / ref_time + time_ratio_rounded = round(time_ratio; sigdigits = 2) + max_error = maximum(abs.(parent(result) .- parent(ref_result))) + max_eps_error = ceil(Int, max_error / eps(typeof(max_error))) + + @info "$test_name:\n\tTime Ratio = $time_ratio_rounded \ + ($time_rounded s vs. $ref_time_rounded s for reference) \ + \n\tMaximum Error = $max_eps_error eps" + + # Test that set_result! is performant and correct when compared + # against ref_set_result!. + @test time / ref_time <= time_ratio_limit + @test max_eps_error <= max_eps_error_limit + end + + # Test get_result and set_result! for type instabilities, and test + # set_result! for allocations. Ignore the type instabilities in CUDA and + # the allocations they incur. + @test_opt ignored_modules = ignore_cuda get_result() + @test_opt ignored_modules = ignore_cuda set_result!(result) + @test is_using_cuda() || (@allocated set_result!(result)) == 0 + + if !isnothing(ref_set_result!) + # Test ref_set_result! for type instabilities and allocations to + # ensure that the performance comparison is fair. + @test_opt ignored_modules = ignore_cuda ref_set_result!(ref_result) + @test is_using_cuda() || + (@allocated ref_set_result!(ref_result)) == 0 + end + end +end + +# Test the allocating and non-allocating versions of a field broadcast against +# a reference array-based non-allocating implementation. Ensure that they are +# performant, correct, and type-stable, and print some useful information. In +# order for the input arrays and temporary scratch arrays used by the reference +# implementation to be generated automatically, the corresponding fields must be +# passed to this function. +function test_field_broadcast_against_array_reference(; + test_name, + get_result::F1, + set_result!::F2, + input_fields, + get_temp_value_fields = () -> (), + ref_set_result!::F3, + time_ratio_limit = 10, + max_eps_error_limit = 10, + test_broken_with_cuda = false, +) where {F1, F2, F3} + @testset "$test_name" begin + if test_broken_with_cuda && is_using_cuda() + @test_throws CUDA.InvalidIRError get_result() + @warn "$test_name:\n\tCUDA.InvalidIRError" + return + end + + result = get_result() + time = @benchmark set_result!(result) + time_rounded = round(time; sigdigits = 2) + + ref_result = similar(result) + temp_value_fields = map(similar, get_temp_value_fields()) + + result_arrays = MatrixFields.field2arrays(result) + ref_result_arrays = MatrixFields.field2arrays(ref_result) + inputs_arrays = map(MatrixFields.field2arrays, input_fields) + temp_values_arrays = map(MatrixFields.field2arrays, temp_value_fields) + + function call_ref_set_result!() + for arrays in + zip(ref_result_arrays, inputs_arrays..., temp_values_arrays...) + ref_set_result!(arrays...) + end + end + + ref_time = @benchmark call_ref_set_result!() + ref_time_rounded = round(ref_time; sigdigits = 2) + time_ratio = time / ref_time + time_ratio_rounded = round(time_ratio; sigdigits = 2) + max_error = + maximum(zip(result_arrays, ref_result_arrays)) do (array, ref_array) + maximum(abs.(array .- ref_array)) + end + max_eps_error = ceil(Int, max_error / eps(typeof(max_error))) + + @info "$test_name:\n\tTime Ratio = $time_ratio_rounded ($time_rounded \ + s vs. $ref_time_rounded s for reference)\n\tMaximum Error = \ + $max_eps_error eps" + + # Test that set_result! is performant and correct when compared against + # ref_set_result!. + @test time / ref_time <= time_ratio_limit + @test max_eps_error <= max_eps_error_limit + + # Test get_result and set_result! for type instabilities, and test + # set_result! for allocations. Ignore the type instabilities in CUDA and + # the allocations they incur. + @test_opt ignored_modules = ignore_cuda get_result() + @test_opt ignored_modules = ignore_cuda set_result!(result) + @test is_using_cuda() || (@allocated set_result!(result)) == 0 + + # Test ref_set_result! for type instabilities and allocations to ensure + # that the performance comparison is fair. + @test_opt ignored_modules = ignore_cuda call_ref_set_result!() + @test is_using_cuda() || (@allocated call_ref_set_result!()) == 0 + end +end + +# Generate extruded finite difference spaces for testing. Include topography +# when possible. +function test_spaces(::Type{FT}) where {FT} + velem = 20 # This should be big enough to test high-bandwidth matrices. + helem = npoly = 1 # These should be small enough for the tests to be fast. + + comms_ctx = ClimaComms.SingletonCommsContext() + hdomain = Domains.SphereDomain(FT(10)) + hmesh = Meshes.EquiangularCubedSphere(hdomain, helem) + htopology = Topologies.Topology2D(comms_ctx, hmesh) + quad = Spaces.Quadratures.GLL{npoly + 1}() + hspace = Spaces.SpectralElementSpace2D(htopology, quad) + vdomain = Domains.IntervalDomain( + Geometry.ZPoint(FT(0)), + Geometry.ZPoint(FT(10)); + boundary_tags = (:bottom, :top), + ) + vmesh = Meshes.IntervalMesh(vdomain, nelems = velem) + vtopology = Topologies.IntervalTopology(comms_ctx, vmesh) + vspace = Spaces.CenterFiniteDifferenceSpace(vtopology) + sfc_coord = Fields.coordinate_field(hspace) + hypsography = + is_using_cuda() ? Hypsography.Flat() : + Hypsography.LinearAdaption( + @. cosd(sfc_coord.lat) + cosd(sfc_coord.long) + 1 + ) # TODO: FD operators don't currently work with hypsography on GPUs. + center_space = + Spaces.ExtrudedFiniteDifferenceSpace(hspace, vspace, hypsography) + face_space = Spaces.FaceExtrudedFiniteDifferenceSpace(center_space) + + return center_space, face_space +end + +# Generate a random field with elements of type T. +function random_field(::Type{T}, space) where {T} + FT = Spaces.undertype(space) + field = Fields.Field(T, space) + parent(field) .= rand.(FT) + return field +end + +# Construct a highly nested type for testing integration with RecursiveApply. +nested_type(value) = nested_type(value, value, value) +nested_type(value1, value2, value3) = + (; a = (), b = value1, c = (value2, (; d = (value3,)), (;))) + +# A shorthand for typeof(nested_type(::FT)). +const NestedType{FT} = NamedTuple{ + (:a, :b, :c), + Tuple{ + Tuple{}, + FT, + Tuple{FT, NamedTuple{(:d,), Tuple{Tuple{FT}}}, NamedTuple{(), Tuple{}}}, + }, +} diff --git a/test/MatrixFields/matrix_multiplication_at_boundaries.jl b/test/MatrixFields/matrix_multiplication_at_boundaries.jl new file mode 100644 index 0000000000..0f54ffdaf1 --- /dev/null +++ b/test/MatrixFields/matrix_multiplication_at_boundaries.jl @@ -0,0 +1,70 @@ +include("matrix_field_test_utils.jl") + +# Replace all entries in matrix_field that are outside the matrix with NaNs. +function nan_outside_entries!(matrix_field) + @assert !any(isnan, parent(matrix_field)) # Check that there are no NaNs. + nan_mask_field = copy(matrix_field) + for nan_mask_array_view in MatrixFields.field2arrays_view(nan_mask_field) + nan_mask_array_view .*= NaN + end + flip_nan_mask(nan_mask_entry, matrix_entry) = + isnan(nan_mask_entry) ? matrix_entry : NaN + @. matrix_field = map(flip_nan_mask, nan_mask_field, matrix_field) + @assert any(isnan, parent(matrix_field)) # Check that there are now NaNs. + return matrix_field +end + +@testset "Matrix Multiplication At Boundaries" begin + FT = Float64 + center_space, face_space = test_spaces(FT) + + seed!(1) # ensures reproducibility + ᶜᶜmatrix_with_outside_entries = + random_field(TridiagonalMatrixRow{FT}, center_space) + ᶜᶠmatrix_with_outside_entries = + random_field(QuaddiagonalMatrixRow{FT}, center_space) + ᶠᶠmatrix_with_outside_entries = + random_field(TridiagonalMatrixRow{FT}, face_space) + ᶠᶜmatrix_with_outside_entries = + random_field(QuaddiagonalMatrixRow{FT}, face_space) + ᶜᶜmatrix_without_outside_entries = + random_field(DiagonalMatrixRow{FT}, center_space) + ᶜᶠmatrix_without_outside_entries = + random_field(BidiagonalMatrixRow{FT}, center_space) + ᶠᶠmatrix_without_outside_entries = + random_field(DiagonalMatrixRow{FT}, face_space) + # We can't have ᶠᶜmatrix_without_outside_entries because a CenterToFace + # matrix field will always store entries that are outside the matrix. + + nan_outside_entries!(ᶜᶜmatrix_with_outside_entries) + nan_outside_entries!(ᶜᶠmatrix_with_outside_entries) + nan_outside_entries!(ᶠᶠmatrix_with_outside_entries) + nan_outside_entries!(ᶠᶜmatrix_with_outside_entries) + + # Test all possible products of matrix fields that include outside entries. + # Ensure that ⋅ never makes use of the outside entries. + for (matrix_field1, matrix_field2) in ( + (ᶜᶜmatrix_with_outside_entries, ᶜᶜmatrix_with_outside_entries), + (ᶜᶜmatrix_with_outside_entries, ᶜᶠmatrix_with_outside_entries), + (ᶜᶠmatrix_with_outside_entries, ᶠᶠmatrix_with_outside_entries), + (ᶜᶠmatrix_with_outside_entries, ᶠᶜmatrix_with_outside_entries), + (ᶠᶠmatrix_with_outside_entries, ᶠᶠmatrix_with_outside_entries), + (ᶠᶠmatrix_with_outside_entries, ᶠᶜmatrix_with_outside_entries), + (ᶠᶜmatrix_with_outside_entries, ᶜᶜmatrix_with_outside_entries), + (ᶠᶜmatrix_with_outside_entries, ᶜᶠmatrix_with_outside_entries), + (ᶜᶜmatrix_with_outside_entries, ᶜᶜmatrix_without_outside_entries), + (ᶜᶜmatrix_with_outside_entries, ᶜᶠmatrix_without_outside_entries), + (ᶜᶠmatrix_with_outside_entries, ᶠᶠmatrix_without_outside_entries), + (ᶠᶠmatrix_with_outside_entries, ᶠᶠmatrix_without_outside_entries), + (ᶠᶜmatrix_with_outside_entries, ᶜᶜmatrix_without_outside_entries), + (ᶠᶜmatrix_with_outside_entries, ᶜᶠmatrix_without_outside_entries), + (ᶜᶜmatrix_without_outside_entries, ᶜᶜmatrix_with_outside_entries), + (ᶜᶜmatrix_without_outside_entries, ᶜᶠmatrix_with_outside_entries), + (ᶜᶠmatrix_without_outside_entries, ᶠᶠmatrix_with_outside_entries), + (ᶜᶠmatrix_without_outside_entries, ᶠᶜmatrix_with_outside_entries), + (ᶠᶠmatrix_without_outside_entries, ᶠᶠmatrix_with_outside_entries), + (ᶠᶠmatrix_without_outside_entries, ᶠᶜmatrix_with_outside_entries), + ) + @test !any(isnan, parent(@. matrix_field1 ⋅ matrix_field2)) + end +end diff --git a/test/MatrixFields/rmul_with_projection.jl b/test/MatrixFields/rmul_with_projection.jl index acc701649f..6bcb95c2a9 100644 --- a/test/MatrixFields/rmul_with_projection.jl +++ b/test/MatrixFields/rmul_with_projection.jl @@ -1,11 +1,9 @@ -using Test -using JET -using Random: seed! using StaticArrays: @SMatrix -import ClimaCore: Geometry import ClimaCore.MatrixFields: rmul_with_projection, rmul_return_type +include("matrix_field_test_utils.jl") + function test_rmul_with_projection(x::X, y::Y, lg, expected_result) where {X, Y} result = rmul_with_projection(x, y, lg) result_type = rmul_return_type(X, Y) @@ -73,8 +71,7 @@ end test_rmul_with_projection(cotensor, cotensor, lg, cotensor * cotensor) # Test some combinations of complicated nested values. - T(value1, value2, value3) = - (; a = (), b = value1, c = (value2, (; d = (value3,)), (;))) + T = nested_type test_rmul_with_projection( number, T(covector, vector, tensor), diff --git a/test/Operators/finitedifference/column.jl b/test/Operators/finitedifference/column.jl index 98d0ef6a24..53ff7fef0c 100644 --- a/test/Operators/finitedifference/column.jl +++ b/test/Operators/finitedifference/column.jl @@ -1054,15 +1054,10 @@ end zc = getproperty(Fields.coordinate_field(cs), :z) zf = getproperty(Fields.coordinate_field(fs), :z) - function field_wrapper(space, nt::NamedTuple) - cmv(z) = nt - return cmv.(Fields.coordinate_field(space)) - end - field_vars() = (; y = FT(0)) - cfield = field_wrapper(cs, field_vars()) - ffield = field_wrapper(fs, field_vars()) + cfield = fill(field_vars(), cs) + ffield = fill(field_vars(), fs) cy = cfield.y fy = ffield.y diff --git a/test/Operators/finitedifference/column_benchmark_profile.jl b/test/Operators/finitedifference/column_benchmark_profile.jl index 1641ab574d..ef83d67774 100644 --- a/test/Operators/finitedifference/column_benchmark_profile.jl +++ b/test/Operators/finitedifference/column_benchmark_profile.jl @@ -13,24 +13,25 @@ function apply_kernel!(cfield, ffield) end function apply_kernel_loop!(cfield, ffield) - for _ in 1:100000 + for _ in 1:10 apply_kernel!(cfield, ffield) # compile end end -import Profile -import PProf - -# (; cfield, ffield) = get_fields(1000, Float64, :no_h_space) -(; cfield, ffield) = get_fields(1000, Float64, :has_h_space) +cspace = TU.ColumnCenterFiniteDifferenceSpace(Float64; zelem = 1000) +fspace = Spaces.FaceFiniteDifferenceSpace(cspace) +cfield = fill(field_vars(Float64), cspace) +ffield = fill(field_vars(Float64), fspace) apply_kernel_loop!(cfield, ffield) # compile -Profile.clear_malloc_data() -prof = Profile.@profile begin - apply_kernel_loop!(cfield, ffield) -end -PProf.pprof() +import Profile +@info "collect profile" +Profile.clear() +prof = Profile.@profile apply_kernel_loop!(cfield, ffield) +results = Profile.fetch() +Profile.clear() -# http://localhost:57599/ui/flamegraph?tf +import ProfileCanvas +ProfileCanvas.html_file(joinpath("flame.html"), results) nothing diff --git a/test/Operators/finitedifference/column_benchmark_utils.jl b/test/Operators/finitedifference/column_benchmark_utils.jl index b9467127f3..623b8e68d2 100644 --- a/test/Operators/finitedifference/column_benchmark_utils.jl +++ b/test/Operators/finitedifference/column_benchmark_utils.jl @@ -8,6 +8,10 @@ import OrderedCollections using ClimaCore.Geometry: ⊗ import ClimaCore +include( + joinpath(pkgdir(ClimaCore), "test", "TestUtilities", "TestUtilities.jl"), +) +import .TestUtilities as TU import ClimaCore: Domains, Meshes, Spaces, Fields, Operators, Topologies import ClimaCore.Domains: Geometry @@ -28,76 +32,6 @@ field_vars(::Type{FT}) where {FT} = (; ᶠw = Geometry.Covariant3Vector(FT(0)), ) -function get_spaces(z_elems, ::Type{FT}) where {FT} - quad = Spaces.Quadratures.GL{1}() - x_domain = Domains.IntervalDomain( - Geometry.XPoint(FT(0)), - Geometry.XPoint(FT(1)); - periodic = true, - ) - y_domain = Domains.IntervalDomain( - Geometry.YPoint(FT(0)), - Geometry.YPoint(FT(1)); - periodic = true, - ) - h_domain = Domains.RectangleDomain(x_domain, y_domain) - h_mesh = Meshes.RectilinearMesh(h_domain, #=x_elem=# 1, #=y_elem=# 1) - topology = Topologies.Topology2D(ClimaComms.SingletonCommsContext(), h_mesh) - h_space = Spaces.SpectralElementSpace2D(topology, quad) - - z_domain = Domains.IntervalDomain( - Geometry.ZPoint{FT}(0.0), - Geometry.ZPoint{FT}(pi); - boundary_tags = (:bottom, :top), - ) - z_mesh = Meshes.IntervalMesh(z_domain; nelems = z_elems) - z_topology = Topologies.IntervalTopology(z_mesh) - z_space = Spaces.CenterFiniteDifferenceSpace(z_topology) - cs = Spaces.ExtrudedFiniteDifferenceSpace(h_space, z_space) - fs = Spaces.FaceExtrudedFiniteDifferenceSpace(cs) - return (;cs, fs) -end - -function get_column_spaces(z_elems, ::Type{FT}) where {FT} - domain = Domains.IntervalDomain( - Geometry.ZPoint{FT}(0.0), - Geometry.ZPoint{FT}(pi); - boundary_tags = (:bottom, :top), - ) - mesh = Meshes.IntervalMesh(domain; nelems = z_elems) - cs = Spaces.CenterFiniteDifferenceSpace(mesh) - fs = Spaces.FaceFiniteDifferenceSpace(cs) - zc = getproperty(Fields.coordinate_field(cs), :z) - zf = getproperty(Fields.coordinate_field(fs), :z) - cfield = field_wrapper(cs, field_vars(FT)) - ffield = field_wrapper(fs, field_vars(FT)) - - return (;cs, fs) -end - -function get_fields(z_elems, ::Type{FT}, h_space) where {FT} - - if !(h_space == :has_h_space || h_space == :no_h_space) - @show h_space - error("Bad `h_space` option given") - end - (; cs, fs) = if h_space == :has_h_space - get_spaces(z_elems, FT) - else - get_column_spaces(z_elems, FT) - end - zc = getproperty(Fields.coordinate_field(cs), :z) - zf = getproperty(Fields.coordinate_field(fs), :z) - cfield = field_wrapper(cs, field_vars(FT)) - ffield = field_wrapper(fs, field_vars(FT)) - return (; cfield, ffield) -end - -function field_wrapper(space, nt::NamedTuple) - cmv(z) = nt - return cmv.(Fields.coordinate_field(space)) -end - ##### ##### Second order interpolation / derivatives ##### @@ -118,6 +52,8 @@ function op_3mul_2add!(x, y, L, D, U) y2 = @view y[2:(end - 1)] y3 = @view y[2:end] @inbounds for i in eachindex(x) + i==1 && continue + i==length(x) && continue x[i] = L[i] * y1[i] + D[i] * y2[i] + U[i] * y3[i] end return nothing @@ -314,8 +250,9 @@ bcs_tested(c, ::typeof(op_divgrad_uₕ!)) = (; inner = (), outer = set_value_divgrad_uₕ_maybe_field_bcs(c)), ) -function benchmark_func!(t_ave, trials, fun, c, f, h_space, verbose = false) +function benchmark_func!(t_ave, trials, fun, c, f, verbose = false) for bcs in bcs_tested(c, fun) + h_space = nameof(typeof(axes(c))) key = (h_space, fun, bc_name(bcs)...) verbose && @info "\n@benchmarking $key" trials[key] = BenchmarkTools.@benchmark $fun($c, $f, $bcs) @@ -355,21 +292,25 @@ function benchmark_operators(z_elems, ::Type{FT}) where {FT} t_ave = OrderedCollections.OrderedDict() benchmark_arrays(z_elems, FT) - @warn string( - "The `set_value_divgrad_uₕ_maybe_field_bcs` bcs are different", - "between `:has_h_space` and `:no_h_space`." - ) + cspace = TU.ColumnCenterFiniteDifferenceSpace(FT; zelem=z_elems) + fspace = Spaces.FaceFiniteDifferenceSpace(cspace) + cfield = fill(field_vars(FT), cspace) + ffield = fill(field_vars(FT), fspace) + benchmark_operators_base(trials, t_ave, cfield, ffield) - (; cfield, ffield) = get_fields(z_elems, FT, :no_h_space) - benchmark_operators_base(trials, t_ave, cfield, ffield, :no_h_space) + cspace = TU.CenterExtrudedFiniteDifferenceSpace(FT; zelem=z_elems) + fspace = Spaces.ExtrudedFiniteDifferenceSpace{Spaces.CellFace}(cspace) + cfield = fill(field_vars(FT), cspace) + ffield = fill(field_vars(FT), fspace) + benchmark_operators_base(trials, t_ave, cfield, ffield) - (; cfield, ffield) = get_fields(z_elems, FT, :has_h_space) - benchmark_operators_base(trials, t_ave, cfield, ffield, :has_h_space) + # Tests are removed since they're flakey. And maintaining + # them before they're converged is a bit of work.. test_results(t_ave) return (; trials, t_ave) end -function benchmark_operators_base(trials, t_ave, cfield, ffield, h_space) +function benchmark_operators_base(trials, t_ave, cfield, ffield) ops = [ #### Core discrete operators op_GradientF2C!, @@ -402,10 +343,10 @@ function benchmark_operators_base(trials, t_ave, cfield, ffield, h_space) @info "Benchmarking operators, this may take a minute or two..." for op in ops - if uses_bycolumn(op) && h_space == :no_h_space + if uses_bycolumn(op) && axes(cfield) isa Spaces.FiniteDifferenceSpace continue end - benchmark_func!(t_ave, trials, op, cfield, ffield, h_space, #= verbose = =# false) + benchmark_func!(t_ave, trials, op, cfield, ffield, #= verbose = =# false) end return nothing @@ -417,85 +358,66 @@ function test_results(t_ave) buffer = 2 ns = 1 μs = 10^3 - @test t_ave[(:no_h_space, op_GradientF2C!, :none)] < 559.8423*ns*buffer - @test t_ave[(:no_h_space, op_GradientF2C!, :SetValue, :SetValue)] < 569.8995*ns*buffer - @test t_ave[(:no_h_space, op_GradientC2F!, :SetGradient, :SetGradient)] < 250.761*ns*buffer - @test t_ave[(:no_h_space, op_GradientC2F!, :SetValue, :SetValue)] < 248.521*ns*buffer - @test t_ave[(:no_h_space, op_DivergenceF2C!, :none)] < 1.550*μs*buffer - @test t_ave[(:no_h_space, op_DivergenceF2C!, :Extrapolate, :Extrapolate)] < 1.587*μs*buffer - @test t_ave[(:no_h_space, op_DivergenceC2F!, :SetDivergence, :SetDivergence)] < 1.565*μs*buffer - @test t_ave[(:no_h_space, op_InterpolateF2C!, :none)] < 332.432*ns*buffer - @test t_ave[(:no_h_space, op_InterpolateC2F!, :SetValue, :SetValue)] < 404.5473*ns*buffer - @test t_ave[(:no_h_space, op_InterpolateC2F!, :Extrapolate, :Extrapolate)] < 400.4656*ns*buffer - @test t_ave[(:no_h_space, op_broadcast_example2!, :none)] < 600*ns*buffer - @test t_ave[(:no_h_space, op_LeftBiasedC2F!, :SetValue)] < 365.2909*ns*buffer - @test t_ave[(:no_h_space, op_LeftBiasedF2C!, :none)] < 185.358*ns*buffer - @test t_ave[(:no_h_space, op_LeftBiasedF2C!, :SetValue)] < 221.175*ns*buffer - @test t_ave[(:no_h_space, op_RightBiasedC2F!, :SetValue)] < 138.649*ns*buffer - @test t_ave[(:no_h_space, op_RightBiasedF2C!, :none)] < 186.417*ns*buffer - @test t_ave[(:no_h_space, op_RightBiasedF2C!, :SetValue)] < 189.139*ns*buffer - @test t_ave[(:no_h_space, op_CurlC2F!, :SetCurl, :SetCurl)] < 2.884*μs*buffer - @test t_ave[(:no_h_space, op_CurlC2F!, :SetValue, :SetValue)] < 2.926*μs*buffer - @test t_ave[(:no_h_space, op_UpwindBiasedProductC2F!, :SetValue, :SetValue)] < 697.341*ns*buffer - @test t_ave[(:no_h_space, op_UpwindBiasedProductC2F!, :Extrapolate, :Extrapolate)] < 659.267*ns*buffer - @test t_ave[(:no_h_space, op_divUpwind3rdOrderBiasedProductC2F!, :ThirdOrderOneSided, :ThirdOrderOneSided, :SetValue, :SetValue)] < 4.483*μs*buffer - @test t_ave[(:no_h_space, op_divgrad_CC!, :SetValue, :SetValue, :none)] < 1.607*μs*buffer - @test t_ave[(:no_h_space, op_divgrad_FF!, :none, :SetDivergence, :SetDivergence)] < 1.529*μs*buffer - @test t_ave[(:no_h_space, op_div_interp_CC!, :SetValue, :SetValue, :none)] < 1.510*μs*buffer - @test t_ave[(:no_h_space, op_div_interp_FF!, :none, :SetValue, :SetValue)] < 1.523*μs*buffer - @test t_ave[(:no_h_space, op_divgrad_uₕ!, :none, :SetValue, :Extrapolate)] < 4.637*μs*buffer - @test t_ave[(:no_h_space, op_divgrad_uₕ!, :none, :SetValue, :SetValue)] < 4.618*μs*buffer - @test t_ave[(:has_h_space, op_GradientF2C!, :none)] < 441.097*ns*buffer - @test t_ave[(:has_h_space, op_GradientF2C!, :SetValue, :SetValue)] < 724.818*ns*buffer - @test t_ave[(:has_h_space, op_GradientC2F!, :SetGradient, :SetGradient)] < 346.544*ns*buffer - @test t_ave[(:has_h_space, op_GradientC2F!, :SetValue, :SetValue)] < 327.835*ns*buffer - @test t_ave[(:has_h_space, op_DivergenceF2C!, :none)] < 1.884*μs*buffer - @test t_ave[(:has_h_space, op_DivergenceF2C!, :Extrapolate, :Extrapolate)] < 1.953*μs*buffer - @test t_ave[(:has_h_space, op_DivergenceC2F!, :SetDivergence, :SetDivergence)] < 1.858*μs*buffer - @test t_ave[(:has_h_space, op_InterpolateF2C!, :none)] < 436.229*ns*buffer - @test t_ave[(:has_h_space, op_InterpolateC2F!, :SetValue, :SetValue)] < 713.735*ns*buffer - @test t_ave[(:has_h_space, op_InterpolateC2F!, :Extrapolate, :Extrapolate)] < 808.127*ns*buffer - @test t_ave[(:has_h_space, op_broadcast_example0!, :none)] < 800*ns*buffer - @test t_ave[(:has_h_space, op_broadcast_example1!, :none)] < 39*μs*buffer - @test t_ave[(:has_h_space, op_broadcast_example2!, :none)] < 35*μs*buffer - @test t_ave[(:has_h_space, op_LeftBiasedC2F!, :SetValue)] < 619.749*ns*buffer - @test t_ave[(:has_h_space, op_LeftBiasedF2C!, :none)] < 276.520*ns*buffer - @test t_ave[(:has_h_space, op_LeftBiasedF2C!, :SetValue)] < 333.901*ns*buffer - @test t_ave[(:has_h_space, op_RightBiasedC2F!, :SetValue)] < 245.966*ns*buffer - @test t_ave[(:has_h_space, op_RightBiasedF2C!, :none)] < 277.616*ns*buffer - @test t_ave[(:has_h_space, op_RightBiasedF2C!, :SetValue)] < 280.969*ns*buffer - @test t_ave[(:has_h_space, op_CurlC2F!, :SetCurl, :SetCurl)] < 3.078*μs*buffer - @test t_ave[(:has_h_space, op_CurlC2F!, :SetValue, :SetValue)] < 3.159*μs*buffer - @test t_ave[(:has_h_space, op_UpwindBiasedProductC2F!, :SetValue, :SetValue)] < 5.197*μs*buffer - @test t_ave[(:has_h_space, op_UpwindBiasedProductC2F!, :Extrapolate, :Extrapolate)] < 5.304*μs*buffer - @test t_ave[(:has_h_space, op_divUpwind3rdOrderBiasedProductC2F!, :ThirdOrderOneSided, :ThirdOrderOneSided, :SetValue, :SetValue)] < 14.304*μs*buffer - @test t_ave[(:has_h_space, op_divgrad_CC!, :SetValue, :SetValue, :none)] < 8.593*μs*buffer - @test t_ave[(:has_h_space, op_divgrad_FF!, :none, :SetDivergence, :SetDivergence)] < 8.597*μs*buffer - @test t_ave[(:has_h_space, op_div_interp_CC!, :SetValue, :SetValue, :none)] < 1.735*μs*buffer - @test t_ave[(:has_h_space, op_div_interp_FF!, :none, :SetValue, :SetValue)] < 1.744*μs*buffer - @test t_ave[(:has_h_space, op_divgrad_uₕ!, :none, :SetValue, :Extrapolate)] < 70.819*μs*buffer - @test t_ave[(:has_h_space, op_divgrad_uₕ!, :none, :SetValue, :SetValue)] < 72.569*μs*buffer - - # Broken tests - @test_broken t_ave[(:no_h_space, op_CurlC2F!, :SetCurl, :SetCurl)] < 500 - @test_broken t_ave[(:no_h_space, op_CurlC2F!, :SetValue, :SetValue)] < 500 - @test_broken t_ave[(:no_h_space, op_divUpwind3rdOrderBiasedProductC2F!, :ThirdOrderOneSided, :ThirdOrderOneSided, :SetValue, :SetValue)] < 500 - @test_broken t_ave[(:no_h_space, op_divgrad_uₕ!, :none, :SetValue, :Extrapolate)] < 500 - @test_broken t_ave[(:no_h_space, op_divgrad_uₕ!, :none, :SetValue, :SetValue)] < 500 # different with/without h_space - @test_broken t_ave[(:has_h_space, op_DivergenceF2C!, :none)] < 500 - @test_broken t_ave[(:has_h_space, op_DivergenceF2C!, :Extrapolate, :Extrapolate)] < 500 - @test_broken t_ave[(:has_h_space, op_DivergenceC2F!, :SetDivergence, :SetDivergence)] < 500 - @test_broken t_ave[(:has_h_space, op_CurlC2F!, :SetCurl, :SetCurl)] < 500 - @test_broken t_ave[(:has_h_space, op_CurlC2F!, :SetValue, :SetValue)] < 500 - @test t_ave[(:has_h_space, op_UpwindBiasedProductC2F!, :SetValue, :SetValue)] < 800 - @test t_ave[(:has_h_space, op_UpwindBiasedProductC2F!, :Extrapolate, :Extrapolate)] < 800 - @test_broken t_ave[(:has_h_space, op_divUpwind3rdOrderBiasedProductC2F!, :ThirdOrderOneSided, :ThirdOrderOneSided, :SetValue, :SetValue)] < 500 - @test_broken t_ave[(:has_h_space, op_divgrad_CC!, :SetValue, :SetValue, :none)] < 500 - @test_broken t_ave[(:has_h_space, op_divgrad_FF!, :none, :SetDivergence, :SetDivergence)] < 500 - @test t_ave[(:has_h_space, op_div_interp_CC!, :SetValue, :SetValue, :none)] < 800 - @test t_ave[(:has_h_space, op_div_interp_FF!, :none, :SetValue, :SetValue)] < 800 - @test_broken t_ave[(:has_h_space, op_divgrad_uₕ!, :none, :SetValue, :Extrapolate)] < 500 - @test_broken t_ave[(:has_h_space, op_divgrad_uₕ!, :none, :SetValue, :SetValue)] < 500 # different with/without h_space + ms = 10^6 + @test t_ave[(:FiniteDifferenceSpace, op_GradientF2C!, :none)] ≤ 253.100*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_GradientF2C!, :SetValue, :SetValue)] ≤ 270.448*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_GradientC2F!, :SetGradient, :SetGradient)] ≤ 242.053*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_GradientC2F!, :SetValue, :SetValue)] ≤ 241.647*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_DivergenceF2C!, :none)] ≤ 1.005*μs*buffer + @test t_ave[(:FiniteDifferenceSpace, op_DivergenceF2C!, :Extrapolate, :Extrapolate)] ≤ 1.076*μs*buffer + @test t_ave[(:FiniteDifferenceSpace, op_DivergenceC2F!, :SetDivergence, :SetDivergence)] ≤ 878.028*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_InterpolateF2C!, :none)] ≤ 254.523*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_InterpolateC2F!, :SetValue, :SetValue)] ≤ 254.241*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_InterpolateC2F!, :Extrapolate, :Extrapolate)] ≤ 241.308*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_broadcast_example2!, :none)] ≤ 555.039*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_LeftBiasedC2F!, :SetValue)] ≤ 207.264*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_LeftBiasedF2C!, :none)] ≤ 137.031*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_LeftBiasedF2C!, :SetValue)] ≤ 185.135*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_RightBiasedC2F!, :SetValue)] ≤ 129.971*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_RightBiasedF2C!, :none)] ≤ 142.120*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_RightBiasedF2C!, :SetValue)] ≤ 141.446*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_CurlC2F!, :SetCurl, :SetCurl)] ≤ 1.692*μs*buffer + @test t_ave[(:FiniteDifferenceSpace, op_CurlC2F!, :SetValue, :SetValue)] ≤ 1.616*μs*buffer + @test t_ave[(:FiniteDifferenceSpace, op_UpwindBiasedProductC2F!, :SetValue, :SetValue)] ≤ 754.856*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_UpwindBiasedProductC2F!, :Extrapolate, :Extrapolate)] ≤ 765.401*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_divUpwind3rdOrderBiasedProductC2F!, :ThirdOrderOneSided, :ThirdOrderOneSided, :SetValue, :SetValue)] ≤ 2.540*μs*buffer + @test t_ave[(:FiniteDifferenceSpace, op_divgrad_CC!, :SetValue, :SetValue, :none)] ≤ 924.147*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_divgrad_FF!, :none, :SetDivergence, :SetDivergence)] ≤ 876.510*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_div_interp_CC!, :SetValue, :SetValue, :none)] ≤ 721.119*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_div_interp_FF!, :none, :SetValue, :SetValue)] ≤ 686.581*ns*buffer + @test t_ave[(:FiniteDifferenceSpace, op_divgrad_uₕ!, :none, :SetValue, :Extrapolate)] ≤ 4.960*μs*buffer + @test t_ave[(:FiniteDifferenceSpace, op_divgrad_uₕ!, :none, :SetValue, :SetValue)] ≤ 5.047*μs*buffer + + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_GradientF2C!, :none)] ≤ 1.746*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_GradientF2C!, :SetValue, :SetValue)] ≤ 1.754*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_GradientC2F!, :SetGradient, :SetGradient)] ≤ 1.899*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_GradientC2F!, :SetValue, :SetValue)] ≤ 1.782*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_DivergenceF2C!, :none)] ≤ 6.792*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_DivergenceF2C!, :Extrapolate, :Extrapolate)] ≤ 6.776*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_DivergenceC2F!, :SetDivergence, :SetDivergence)] ≤ 6.720*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_InterpolateF2C!, :none)] ≤ 1.701*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_InterpolateC2F!, :SetValue, :SetValue)] ≤ 1.713*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_InterpolateC2F!, :Extrapolate, :Extrapolate)] ≤ 1.698*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_broadcast_example0!, :none)] ≤ 1.059*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_broadcast_example1!, :none)] ≤ 154.330*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_broadcast_example2!, :none)] ≤ 152.689*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_LeftBiasedC2F!, :SetValue)] ≤ 1.758*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_LeftBiasedF2C!, :none)] ≤ 1.711*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_LeftBiasedF2C!, :SetValue)] ≤ 1.754*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_RightBiasedC2F!, :SetValue)] ≤ 1.847*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_RightBiasedF2C!, :none)] ≤ 1.582*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_RightBiasedF2C!, :SetValue)] ≤ 1.551*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_CurlC2F!, :SetCurl, :SetCurl)] ≤ 4.669*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_CurlC2F!, :SetValue, :SetValue)] ≤ 4.568*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_UpwindBiasedProductC2F!, :SetValue, :SetValue)] ≤ 3.444*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_UpwindBiasedProductC2F!, :Extrapolate, :Extrapolate)] ≤ 3.432*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_divUpwind3rdOrderBiasedProductC2F!, :ThirdOrderOneSided, :ThirdOrderOneSided, :SetValue, :SetValue)] ≤ 5.650*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_divgrad_CC!, :SetValue, :SetValue, :none)] ≤ 4.474*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_divgrad_FF!, :none, :SetDivergence, :SetDivergence)] ≤ 4.470*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_div_interp_CC!, :SetValue, :SetValue, :none)] ≤ 3.566*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_div_interp_FF!, :none, :SetValue, :SetValue)] ≤ 3.663*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_divgrad_uₕ!, :none, :SetValue, :Extrapolate)] ≤ 7.470*ms*buffer + @test t_ave[(:ExtrudedFiniteDifferenceSpace, op_divgrad_uₕ!, :none, :SetValue, :SetValue)] ≤ 7.251*ms*buffer end #! format: on diff --git a/test/Operators/finitedifference/opt.jl b/test/Operators/finitedifference/opt.jl index 86f5f2f9ae..0d97d23715 100644 --- a/test/Operators/finitedifference/opt.jl +++ b/test/Operators/finitedifference/opt.jl @@ -225,7 +225,9 @@ end center_values = ones(FT, center_space) center_velocities = Geometry.WVector.(center_values) - filter(@nospecialize(ft)) = ft !== typeof(Base.mapreduce_empty) + filter18(@nospecialize(ft)) = ft !== typeof(Base.mapreduce_empty) + filter19(@nospecialize f) = f !== Base.mapreduce_empty + filter = VERSION ≤ v"1.9" ? filter18 : filter19 # face space operators @test_opt function_filter = filter sum(ones(FT, face_space)) diff --git a/test/Operators/finitedifference/opt_examples.jl b/test/Operators/finitedifference/opt_examples.jl index 757a11648f..8fd9d1de9f 100644 --- a/test/Operators/finitedifference/opt_examples.jl +++ b/test/Operators/finitedifference/opt_examples.jl @@ -9,21 +9,9 @@ import ClimaCore.Operators: half, PlusHalf const n_tuples = 3 -# Hack we're using in TurbulenceConvection -# for handling ntuple fields: -Base.@propagate_inbounds Base.getindex( - field::Fields.FiniteDifferenceField, - i::Integer, -) = Base.getproperty(field, i) - a_bcs(::Type{FT}, i::Int) where {FT} = (; bottom = Operators.SetValue(FT(0)), top = Operators.Extrapolate()) -function field_wrapper(space, nt::NamedTuple) - cmv(z) = nt - return cmv.(Fields.coordinate_field(space)) -end - function alloc_test_f2c_interp(cfield, ffield) (; fx, fy, fz, fϕ, fψ) = ffield (; cx, cy, cz, cϕ, cψ) = cfield @@ -342,8 +330,8 @@ function alloc_test_nested_expressions_12(cfield, ffield, ntcfield, ntffield) # Compile first @inbounds for i in 1:n_tuples - cnt_i = cnt[i] - fnt_i = fnt[i] + cnt_i = cnt.:($i) + fnt_i = fnt.:($i) cxnt = cnt_i.cx fxnt = fnt_i.fx cynt = cnt_i.cy @@ -359,10 +347,10 @@ function alloc_test_nested_expressions_12(cfield, ffield, ntcfield, ntffield) @inbounds for i in 1:n_tuples p_i = @allocated begin - cnt_i = cnt[i] - fnt_i = fnt[i] + cnt_i = cnt.:($i) + fnt_i = fnt.:($i) end - @test p_i == 0 + @test_broken p_i == 0 cxnt = cnt_i.cx fxnt = fnt_i.fx cynt = cnt_i.cy @@ -376,7 +364,7 @@ function alloc_test_nested_expressions_12(cfield, ffield, ntcfield, ntffield) p = @allocated begin @. cznt = cxnt * cynt * Ic(fynt) * Ic(fynt) * cϕnt * cψnt end - @test p == 0 + @test_broken p == 0 end end @@ -407,8 +395,8 @@ function alloc_test_nested_expressions_13( # Compile first @inbounds for i in 1:n_tuples - cnt_i = cnt[i] - fnt_i = fnt[i] + cnt_i = cnt.:($i) + fnt_i = fnt.:($i) cxnt = cnt_i.cx fxnt = fnt_i.fx fynt = fnt_i.fy @@ -422,8 +410,8 @@ function alloc_test_nested_expressions_13( end @inbounds for i in 1:n_tuples - cnt_i = cnt[i] - fnt_i = fnt[i] + cnt_i = cnt.:($i) + fnt_i = fnt.:($i) cxnt = cnt_i.cx fxnt = fnt_i.fx fynt = fnt_i.fy @@ -439,7 +427,7 @@ function alloc_test_nested_expressions_13( fψ end #! format: on - @test p_i == 0 + @test_broken p_i == 0 end end @@ -462,10 +450,10 @@ end (; fx = FT(0), fy = FT(0), fz = FT(0), fϕ = FT(0), fψ = FT(0)) cntfield_vars() = (; nt = ntuple(i -> cfield_vars(), n_tuples)) fntfield_vars() = (; nt = ntuple(i -> ffield_vars(), n_tuples)) - cfield = field_wrapper(cs, cfield_vars()) - ffield = field_wrapper(fs, ffield_vars()) - ntcfield = field_wrapper(cs, cntfield_vars()) - ntffield = field_wrapper(fs, fntfield_vars()) + cfield = fill(cfield_vars(), cs) + ffield = fill(ffield_vars(), fs) + ntcfield = fill(cntfield_vars(), cs) + ntffield = fill(fntfield_vars(), fs) wvec_glob = Geometry.WVector alloc_test_f2c_interp(cfield, ffield) diff --git a/test/Operators/hybrid/opt.jl b/test/Operators/hybrid/opt.jl index 253fe4925e..6fcebff200 100644 --- a/test/Operators/hybrid/opt.jl +++ b/test/Operators/hybrid/opt.jl @@ -256,7 +256,9 @@ end center_values = ones(FT, center_space) center_velocities = Geometry.WVector.(center_values) - filter(@nospecialize(ft)) = ft !== typeof(Base.mapreduce_empty) + filter18(@nospecialize(ft)) = ft !== typeof(Base.mapreduce_empty) + filter19(@nospecialize f) = f !== Base.mapreduce_empty + filter = VERSION ≤ v"1.9" ? filter18 : filter19 # face space operators @test_opt function_filter = filter sum(ones(FT, face_space)) diff --git a/test/Operators/spectralelement/opt.jl b/test/Operators/spectralelement/opt.jl index cff2977628..90fec6dc23 100644 --- a/test/Operators/spectralelement/opt.jl +++ b/test/Operators/spectralelement/opt.jl @@ -99,7 +99,9 @@ end @static if @isdefined(var"@test_opt") - filter(@nospecialize(ft)) = ft !== typeof(Base.mapreduce_empty) + filter18(@nospecialize(ft)) = ft !== typeof(Base.mapreduce_empty) + filter19(@nospecialize f) = f !== Base.mapreduce_empty + filter = VERSION ≤ v"1.9" ? filter18 : filter19 function test_operators(field, vfield) @test_opt opt_Gradient(field) diff --git a/test/Project.toml b/test/Project.toml index 9351af89f0..2e21b3681b 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -10,7 +10,6 @@ ClimaComms = "3a4d1b5c-c61d-41fd-a00a-5873ba7a1b0d" ClimaCore = "d414da3d-4745-48bb-8d80-42e94e092884" Combinatorics = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" CubedSphere = "7445602f-e544-4518-8976-18f8e8ae6cdb" -DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e" FastBroadcast = "7034ab61-46d4-4ed7-9d0f-46aef9175898" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" GFlops = "2ea8233c-34d4-5acc-88b4-02f326385bcc" diff --git a/test/Spaces/extruded_cuda.jl b/test/Spaces/extruded_cuda.jl index fde2cb1e38..52c10fe8bc 100644 --- a/test/Spaces/extruded_cuda.jl +++ b/test/Spaces/extruded_cuda.jl @@ -26,7 +26,7 @@ compare(cpu, gpu, sym) = ) collect(TU.all_spaces(Float64; zelem = 10, context)) # make sure we can construct spaces as = collect(TU.all_spaces(Float64; zelem = 10, context)) - @test length(as) == 7 + @test length(as) == 8 end @testset "copyto! with CuArray-backed extruded spaces" begin diff --git a/test/Spaces/spaces.jl b/test/Spaces/spaces.jl index 1ef252fffe..fe151942c9 100644 --- a/test/Spaces/spaces.jl +++ b/test/Spaces/spaces.jl @@ -21,6 +21,12 @@ import ClimaCore.DataLayouts: IJFH, VF space = Spaces.SpectralElementSpace1D(topology, quad) + @test repr(space) === """ + SpectralElementSpace1D: + context: SingletonCommsContext using CPUSingleThreaded + mesh: 1-element IntervalMesh of IntervalDomain: x ∈ [-3.0,5.0] (periodic) + quadrature: 4-point Gauss-Legendre-Lobatto quadrature""" + coord_data = Spaces.coordinates_data(space) @test eltype(coord_data) == Geometry.XPoint{Float64} @@ -99,17 +105,19 @@ end boundary_names = (:bottom, :top), ) mesh = Meshes.IntervalMesh(domain; nelems = 1) - topology = Topologies.IntervalTopology(mesh) + topology = Topologies.IntervalTopology(context, mesh) - for Space in - [Spaces.CenterFiniteDifferenceSpace, Spaces.FaceFiniteDifferenceSpace] - space = Spaces.CenterFiniteDifferenceSpace(topology) - coord_data = Spaces.coordinates_data(space) - point_space = Spaces.level(space, 1) - @test point_space isa Spaces.PointSpace - @test Spaces.coordinates_data(point_space)[] == - Spaces.level(coord_data, 1)[] - end + space = Spaces.CenterFiniteDifferenceSpace(topology) + @test repr(space) == """ + CenterFiniteDifferenceSpace: + context: SingletonCommsContext using CPUSingleThreaded + mesh: 1-element IntervalMesh of IntervalDomain: z ∈ [0.0,5.0] (:bottom, :top)""" + + coord_data = Spaces.coordinates_data(space) + point_space = Spaces.level(space, 1) + @test point_space isa Spaces.PointSpace + @test Spaces.coordinates_data(point_space)[] == + Spaces.level(coord_data, 1)[] x_max = FT(0) y_max = FT(1) @@ -155,6 +163,11 @@ end points, weights = Spaces.Quadratures.quadrature_points(FT, quad) space = Spaces.SpectralElementSpace2D(grid_topology, quad) + @test repr(space) == """ + SpectralElementSpace2D: + context: SingletonCommsContext using CPUSingleThreaded + mesh: 1×1-element RectilinearMesh of RectangleDomain: x ∈ [-3.0,5.0] (periodic) × y ∈ [-2.0,8.0] (:south, :north) + quadrature: 4-point Gauss-Legendre-Lobatto quadrature""" coord_data = Spaces.coordinates_data(space) array = parent(coord_data) diff --git a/test/TestUtilities/TestUtilities.jl b/test/TestUtilities/TestUtilities.jl index 200dfc75bb..f9957fcace 100644 --- a/test/TestUtilities/TestUtilities.jl +++ b/test/TestUtilities/TestUtilities.jl @@ -106,11 +106,11 @@ function CenterExtrudedFiniteDifferenceSpace( ::Type{FT}; zelem = 10, context = ClimaComms.SingletonCommsContext(), + helem = 4, + Nq = 4, ) where {FT} radius = FT(128) zlim = (0, 1) - helem = 4 - Nq = 4 vertdomain = Domains.IntervalDomain( Geometry.ZPoint{FT}(zlim[1]), Geometry.ZPoint{FT}(zlim[2]); @@ -131,15 +131,17 @@ end function FaceExtrudedFiniteDifferenceSpace( ::Type{FT}; zelem = 10, + helem = 4, context = ClimaComms.SingletonCommsContext(), ) where {FT} - cspace = CenterExtrudedFiniteDifferenceSpace(FT; zelem, context) + cspace = CenterExtrudedFiniteDifferenceSpace(FT; zelem, context, helem) return Spaces.ExtrudedFiniteDifferenceSpace{Spaces.CellFace}(cspace) end function all_spaces( ::Type{FT}; zelem = 10, + helem = 4, context = ClimaComms.SingletonCommsContext(), ) where {FT} return [ @@ -152,8 +154,8 @@ function all_spaces( ColumnCenterFiniteDifferenceSpace(FT; zelem, context), ColumnFaceFiniteDifferenceSpace(FT; zelem, context), SphereSpectralElementSpace(FT; context), - CenterExtrudedFiniteDifferenceSpace(FT; zelem, context), - # FaceExtrudedFiniteDifferenceSpace(FT; zelem, context), # errors on sum + CenterExtrudedFiniteDifferenceSpace(FT; zelem, context, helem), + FaceExtrudedFiniteDifferenceSpace(FT; zelem, context, helem), # TODO: incorporate this list of spaces somehow: # space_vf = Spaces.CenterFiniteDifferenceSpace(topology_z) # space_ifh = Spaces.SpectralElementSpace1D(topology_x, quad) diff --git a/test/runtests.jl b/test/runtests.jl index 28967cdd3c..ef5b9008f0 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -47,7 +47,6 @@ if !Sys.iswindows() =# # now part of buildkite # @safetestset "Fields" begin @time include("Fields/field.jl") end - @safetestset "Fields diffeq" begin @time include("Fields/fielddiffeq.jl") end @safetestset "Spectral elem - rectilinear" begin @time include("Operators/spectralelement/rectilinear.jl") end @safetestset "Spectral elem - opt" begin @time include("Operators/spectralelement/opt.jl") end @@ -78,6 +77,7 @@ if !Sys.iswindows() @safetestset "MatrixFields - BandMatrixRow" begin @time include("MatrixFields/band_matrix_row.jl") end @safetestset "MatrixFields - rmul_with_projection" begin @time include("MatrixFields/rmul_with_projection.jl") end @safetestset "MatrixFields - field2arrays" begin @time include("MatrixFields/field2arrays.jl") end + @safetestset "MatrixFields - matrix multiplication at boundaries" begin @time include("MatrixFields/matrix_multiplication_at_boundaries.jl") end # now part of buildkite # @safetestset "MatrixFields - matrix field broadcasting" begin @time include("MatrixFields/matrix_field_broadcasting.jl") end