Skip to content

Commit

Permalink
Use ClimaDiagnostics.jl
Browse files Browse the repository at this point in the history
  • Loading branch information
Sbozzolo committed Apr 20, 2024
1 parent 156a715 commit 3f5daf6
Show file tree
Hide file tree
Showing 25 changed files with 348 additions and 2,292 deletions.
8 changes: 0 additions & 8 deletions .buildkite/pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -820,14 +820,6 @@ steps:
slurm_mem: 24GB
slurm_cpus_per_task: 8

# Flame graphs
- label: ":fire: Flame graph: perf target (IO)"
command: >
julia --color=yes --project=perf perf/benchmark_netcdf_io.jl
artifact_paths: "flame_perf_io/*.html"
agents:
slurm_gpus: 1

- label: ":fire: Flame graph: perf target (default)"
command: >
julia --color=yes --project=perf perf/flame.jl
Expand Down
2 changes: 2 additions & 0 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ Artifacts = "56f22d72-fd6d-98f1-02f0-08ddc0907c33"
AtmosphericProfilesLibrary = "86bc3604-9858-485a-bdbe-831ec50de11d"
ClimaComms = "3a4d1b5c-c61d-41fd-a00a-5873ba7a1b0d"
ClimaCore = "d414da3d-4745-48bb-8d80-42e94e092884"
ClimaDiagnostics = "1ecacbb8-0713-4841-9a07-eb5aa8a2d53f"
ClimaParams = "5c42b081-d73a-476f-9059-fd94b934656c"
ClimaTimeSteppers = "595c0a79-7f3d-439a-bc5a-b232dc3bde79"
ClimaUtilities = "b3f4f4ca-9299-4f7f-bd9b-81e1242a7513"
Expand Down Expand Up @@ -53,6 +54,7 @@ AtmosphericProfilesLibrary = "0.1"
CPUSummary = "0.2"
ClimaComms = "0.5"
ClimaCore = "0.13"
ClimaDiagnostics = "0.1"
ClimaParams = "0.10.4"
ClimaTimeSteppers = "0.7.18"
ClimaUtilities = "0.1.3"
Expand Down
30 changes: 19 additions & 11 deletions docs/Manifest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

julia_version = "1.10.2"
manifest_format = "2.0"
project_hash = "de545a9981288a0945908b937b51bff80bfd4b8f"
project_hash = "64afcb8dacf7a673d0068ba1a72602801e8d529a"

[[deps.ADTypes]]
git-tree-sha1 = "016833eb52ba2d6bea9fcb50ca295980e728ee24"
Expand Down Expand Up @@ -90,14 +90,15 @@ version = "1.1.1"

[[deps.ArrayInterface]]
deps = ["Adapt", "LinearAlgebra", "SparseArrays", "SuiteSparse"]
git-tree-sha1 = "44691067188f6bd1b2289552a23e4b7572f4528d"
git-tree-sha1 = "133a240faec6e074e07c31ee75619c90544179cf"
uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"
version = "7.9.0"
version = "7.10.0"

[deps.ArrayInterface.extensions]
ArrayInterfaceBandedMatricesExt = "BandedMatrices"
ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices"
ArrayInterfaceCUDAExt = "CUDA"
ArrayInterfaceCUDSSExt = "CUDSS"
ArrayInterfaceChainRulesExt = "ChainRules"
ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore"
ArrayInterfaceReverseDiffExt = "ReverseDiff"
Expand All @@ -108,6 +109,7 @@ version = "7.9.0"
BandedMatrices = "aae01518-5342-5314-be14-df237901396f"
BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0"
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e"
ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2"
GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527"
ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
Expand Down Expand Up @@ -257,9 +259,9 @@ version = "1.0.1+0"

[[deps.CUDA]]
deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CUDA_Driver_jll", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "Crayons", "DataFrames", "ExprTools", "GPUArrays", "GPUCompiler", "KernelAbstractions", "LLVM", "LLVMLoopInfo", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "NVTX", "Preferences", "PrettyTables", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "Requires", "SparseArrays", "StaticArrays", "Statistics"]
git-tree-sha1 = "3dcab8a2c18ca319ea15a41d90e9528b8e93894a"
git-tree-sha1 = "dd1c682b372b6791b69f6823afe364fc92a0146c"
uuid = "052768ef-5323-5732-b1bb-66c8b64840ba"
version = "5.3.0"
version = "5.3.1"
weakdeps = ["ChainRulesCore", "SpecialFunctions"]

[deps.CUDA.extensions]
Expand Down Expand Up @@ -319,7 +321,7 @@ weakdeps = ["SparseArrays"]
ChainRulesCoreSparseArraysExt = "SparseArrays"

[[deps.ClimaAtmos]]
deps = ["Adapt", "ArgParse", "ArtifactWrappers", "Artifacts", "AtmosphericProfilesLibrary", "ClimaComms", "ClimaCore", "ClimaParams", "ClimaTimeSteppers", "ClimaUtilities", "CloudMicrophysics", "Colors", "Dates", "Dierckx", "DiffEqBase", "DiffEqCallbacks", "Distributions", "DocStringExtensions", "FastGaussQuadrature", "Insolation", "Interpolations", "IntervalSets", "Krylov", "LinearAlgebra", "Logging", "NCDatasets", "NVTX", "Pkg", "Printf", "RRTMGP", "Random", "RootSolvers", "SciMLBase", "StaticArrays", "Statistics", "StatsBase", "SurfaceFluxes", "Thermodynamics", "YAML"]
deps = ["Adapt", "ArgParse", "ArtifactWrappers", "Artifacts", "AtmosphericProfilesLibrary", "ClimaComms", "ClimaCore", "ClimaDiagnostics", "ClimaParams", "ClimaTimeSteppers", "ClimaUtilities", "CloudMicrophysics", "Colors", "Dates", "Dierckx", "DiffEqBase", "DiffEqCallbacks", "Distributions", "DocStringExtensions", "FastGaussQuadrature", "Insolation", "Interpolations", "IntervalSets", "Krylov", "LinearAlgebra", "Logging", "NCDatasets", "NVTX", "Pkg", "Printf", "RRTMGP", "Random", "RootSolvers", "SciMLBase", "StaticArrays", "Statistics", "StatsBase", "SurfaceFluxes", "Thermodynamics", "YAML"]
path = ".."
uuid = "b2c96348-7fb7-4fe0-8da9-78d88439e717"
version = "0.23.0"
Expand All @@ -340,6 +342,12 @@ weakdeps = ["Krylov"]
[deps.ClimaCore.extensions]
KrylovExt = "Krylov"

[[deps.ClimaDiagnostics]]
deps = ["Accessors", "ClimaComms", "ClimaCore", "Dates", "NCDatasets", "SciMLBase"]
git-tree-sha1 = "fee70c0ba0e056565e8dd71cc4ac55f25e606a74"
uuid = "1ecacbb8-0713-4841-9a07-eb5aa8a2d53f"
version = "0.1.1"

[[deps.ClimaParams]]
deps = ["DocStringExtensions", "TOML", "Test"]
git-tree-sha1 = "528aadfaae6f447df3879eab224625ecceec5982"
Expand All @@ -353,10 +361,10 @@ uuid = "595c0a79-7f3d-439a-bc5a-b232dc3bde79"
version = "0.7.19"

[[deps.ClimaUtilities]]
deps = ["Artifacts", "CFTime", "Dates"]
git-tree-sha1 = "d1b30a07829248b325ffffbb739d0f6fe79dfe7c"
deps = ["Artifacts", "Dates"]
git-tree-sha1 = "66b13d461cabc5e9265c9715dba512aea0e1e67f"
uuid = "b3f4f4ca-9299-4f7f-bd9b-81e1242a7513"
version = "0.1.3"
version = "0.1.4"

[deps.ClimaUtilities.extensions]
DataHandlingExt = ["ClimaCore", "NCDatasets"]
Expand Down Expand Up @@ -1765,9 +1773,9 @@ version = "0.5.12"

[[deps.Pango_jll]]
deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"]
git-tree-sha1 = "526f5a03792669e4187e584e8ec9d534248ca765"
git-tree-sha1 = "cb5a2ab6763464ae0f19c86c56c63d4a2b0f5bda"
uuid = "36c8627f-9965-5494-a995-c6b170f724f3"
version = "1.52.1+0"
version = "1.52.2+0"

[[deps.Parameters]]
deps = ["OrderedCollections", "UnPack"]
Expand Down
1 change: 1 addition & 0 deletions docs/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ ArgParse = "c7e460c6-2fb9-53a9-8c5b-16f535851c63"
CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
ClimaAtmos = "b2c96348-7fb7-4fe0-8da9-78d88439e717"
ClimaParams = "5c42b081-d73a-476f-9059-fd94b934656c"
ClimaDiagnostics = "1ecacbb8-0713-4841-9a07-eb5aa8a2d53f"
DiffEqBase = "2b5f629d-d688-5b77-993f-72d75c75574e"
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
DocumenterCitations = "daee34ce-89f3-4625-b898-19384cb65244"
Expand Down
101 changes: 2 additions & 99 deletions docs/src/diagnostics.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,105 +84,8 @@ writers.

### The low-level interface

Diagnostics are computed and output through callbacks to the main integrator.
`ClimaAtmos` produces the list of callbacks from a ordered list of
`ScheduledDiagnostic`s. These callbacks are orchestrated by a callback
`orchestrate_diagnostics` that runs at the end of every step and calls all the
diagnostic callbacks that are scheduled to be run at that step.

A `ScheduledDiagnostic` is an instruction on how to compute and output a given
`DiagnosticVariable` (see below), along with specific choices regarding
reductions, compute/output frequencies, and so on. It can be point-wise in space
and time, or can be the result of a reduction in a period that is defined by
`output_every` (e.g., the daily average temperature).

More specifically, a `ScheduledDiagnostic` contains the following pieces of data

- `variable`: The diagnostic variable that has to be computed and output.
- `output_every`: Frequency of how often to save the results to disk. If
`output_every` is non-positive, only output at the first time step.
- `output_writer`: Function that controls out to save the computed diagnostic
variable to disk.
- `reduction_time_func`: If not `nothing`, the `ScheduledDiagnostic` receives an
area of scratch space `acc` where to accumulate partial results. Then, at
every `compute_every`, `reduction_time_func` is computed between the
previously stored value in `acc` and the new value. This implements a running
reduction. For example, if `reduction_time_func = max`, the space `acc` will
hold the running maxima of the diagnostic. `acc` is reset after output.
- `reduction_space_func`: NOT IMPLEMENTED YET
- `compute_every`: Run the computations every `compute_every`. This is not
particularly useful for point-wise diagnostics, where we enforce that
`compute_every` = `output_every`. `compute_every` has to evenly divide
`output_every`.
- `pre_output_hook!`: Function that has to be run before saving to disk for
reductions (mostly used to implement averages). The function
`pre_output_hook!` is called with two arguments: the value accumulated during
the reduction, and the number of times the diagnostic was computed from the
last time it was output.
- `output_short_name`: A descriptive name that can be used by the
`output_writer`. If not provided, a default one is generated. It has to be
unique.
- `output_long_name`: A descriptive name that can be used by the `output_writer`
as attribute. If not provided, a default one is generated.

To implement operations like the arithmetic average, the `reduction_time_func`
has to be chosen as `+`, and a `pre_output_hook!` that renormalize `acc` by the
number of samples has to be provided. `pre_output_hook!` should mutate the
accumulator in place. The return value of `pre_output_hook!` is discarded. An
example of `pre_output_hook!` to compute the arithmetic average is
`pre_output_hook!(acc, N) = @. acc = acc / N`. `ClimaAtmos` provides an alias to
the function needed to compute averages `ClimaAtmos.average_pre_output_hook!`.

For custom reductions, it is necessary to also specify the identity of operation
by defining a new method to `identity_of_reduction`. `identity_of_reduction` is
a function that takes a `op` argument, where `op` is the operation for which we
want to define the identity. For instance, for the `max`,
`identity_of_reduction` would be `identity_of_reduction(::typeof{max}) = -Inf`.
The identities known to `ClimaAtmos` are defined in the
`diagnostics/reduction_identities.jl` file. The identity is needed to ensure
that we have a neutral state for the accumulators that are used in the
reductions.

A key entry in a `ScheduledDiagnostic` is the `output_writer`, the function
responsible for saving the output to disk. `output_writer` is called with three
arguments: the value that has to be output, the `ScheduledDiagnostic`, and the
integrator. Internally, the integrator contains extra information (such as the
current timestep), so the `output_writer` can implement arbitrarily complex
behaviors. It is responsibility of the `output_writer` to properly use the
provided information for meaningful output. `ClimaAtmos` provides functions that
return `output_writer`s for standard operations. The main one is currently
`HDF5Writer`, which should be enough for most use cases. To use it, just
initialize a `ClimaAtmos.HDF5Writer` object with your choice of configuration
and pass it as a `output_writer` argument to the `ScheduledDiagnostic`. More
information about the options supported by `ClimaAtmos.HDF5Writer` is available
in its constructor.

There are two flavors of `ScheduledDiagnostic`s:
`ScheduledDiagnosticIterations`, and `ScheduledDiagnosticTime`. The main
difference between the two is the domain of definition of their frequencies,
which is measured in timesteps for the first one, and in seconds for the other
one. `ScheduledDiagnosticTime`s offer a more natural way to set up physically
meaningful reductions (e.g., we want a daily average). However, it is not clear
what to do when the period does not line up with the timestep. What is the
expected behavior when we want a daily average but our timestep is of 10 hours?
There are multiple possible answer to this question. In `ClimaAtmos`, we enforce
that all the periods are multiples of the timestep. With this restriction, a
`ScheduledDiagnosticTime` can be translated to a
`ScheduledDiagnosticIterations`, where the problem is perfectly represented (in
this sense, one can think of `ScheduledDiagnosticIterations` as being as
internal representation and as `ScheduledDiagnosticTime` being the user-facing
one).

`ScheduledDiagnosticTime` behave like as `ScheduledDiagnosticIterations`, with
the exception that they can take a special value for `compute_every`, which can
be set to `:timestep` (the symbol) to ensure that the diagnostic is computed at
the end of every integration step. This is particularly convenient when defining
default diagnostics, as they should be largely independent on the choice of the
specific simulation being run (and its timestep).

Given a timestep `dt`, a `ScheduledDiagnosticIterations` can be obtained from a
`ScheduledDiagnosticTime` `sd` simply by calling
``ScheduledDiagnosticIterations(sd, dt)`.
Check out the documentation for the `ClimaDiagnostics` to find more information
about the low level interface.

## The NetCDF output

Expand Down
40 changes: 26 additions & 14 deletions examples/Manifest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

julia_version = "1.10.2"
manifest_format = "2.0"
project_hash = "60f53d07d79df5008ec331956e3787f67e499da0"
project_hash = "6787473a7399a92137a6bc5c4e0ab1f75dd24605"

[[deps.ADTypes]]
git-tree-sha1 = "016833eb52ba2d6bea9fcb50ca295980e728ee24"
Expand Down Expand Up @@ -85,14 +85,15 @@ version = "1.1.1"

[[deps.ArrayInterface]]
deps = ["Adapt", "LinearAlgebra", "SparseArrays", "SuiteSparse"]
git-tree-sha1 = "44691067188f6bd1b2289552a23e4b7572f4528d"
git-tree-sha1 = "133a240faec6e074e07c31ee75619c90544179cf"
uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9"
version = "7.9.0"
version = "7.10.0"

[deps.ArrayInterface.extensions]
ArrayInterfaceBandedMatricesExt = "BandedMatrices"
ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices"
ArrayInterfaceCUDAExt = "CUDA"
ArrayInterfaceCUDSSExt = "CUDSS"
ArrayInterfaceChainRulesExt = "ChainRules"
ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore"
ArrayInterfaceReverseDiffExt = "ReverseDiff"
Expand All @@ -103,6 +104,7 @@ version = "7.9.0"
BandedMatrices = "aae01518-5342-5314-be14-df237901396f"
BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0"
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e"
ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2"
GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527"
ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267"
Expand Down Expand Up @@ -235,9 +237,9 @@ version = "1.0.1+0"

[[deps.CUDA]]
deps = ["AbstractFFTs", "Adapt", "BFloat16s", "CEnum", "CUDA_Driver_jll", "CUDA_Runtime_Discovery", "CUDA_Runtime_jll", "Crayons", "DataFrames", "ExprTools", "GPUArrays", "GPUCompiler", "KernelAbstractions", "LLVM", "LLVMLoopInfo", "LazyArtifacts", "Libdl", "LinearAlgebra", "Logging", "NVTX", "Preferences", "PrettyTables", "Printf", "Random", "Random123", "RandomNumbers", "Reexport", "Requires", "SparseArrays", "StaticArrays", "Statistics"]
git-tree-sha1 = "3dcab8a2c18ca319ea15a41d90e9528b8e93894a"
git-tree-sha1 = "dd1c682b372b6791b69f6823afe364fc92a0146c"
uuid = "052768ef-5323-5732-b1bb-66c8b64840ba"
version = "5.3.0"
version = "5.3.1"
weakdeps = ["ChainRulesCore", "SpecialFunctions"]

[deps.CUDA.extensions]
Expand Down Expand Up @@ -298,16 +300,20 @@ weakdeps = ["SparseArrays"]

[[deps.ClimaAnalysis]]
deps = ["NCDatasets", "OrderedCollections", "Statistics"]
git-tree-sha1 = "13af105a344bb87c6747e57ce0abc55294906fbd"
git-tree-sha1 = "1cc42fc6f284dd721051aca33efdba8676ab2617"
uuid = "29b5916a-a76c-4e73-9657-3c8fd22e65e6"
version = "0.4.1"
weakdeps = ["CairoMakie"]
version = "0.5.1"

[deps.ClimaAnalysis.extensions]
CairoMakieExt = "CairoMakie"
GeoMakieExt = "GeoMakie"

[deps.ClimaAnalysis.weakdeps]
CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0"
GeoMakie = "db073c08-6b98-4ee5-b6a4-5efafb3259c6"

[[deps.ClimaAtmos]]
deps = ["Adapt", "ArgParse", "ArtifactWrappers", "Artifacts", "AtmosphericProfilesLibrary", "ClimaComms", "ClimaCore", "ClimaParams", "ClimaTimeSteppers", "ClimaUtilities", "CloudMicrophysics", "Colors", "Dates", "Dierckx", "DiffEqBase", "DiffEqCallbacks", "Distributions", "DocStringExtensions", "FastGaussQuadrature", "Insolation", "Interpolations", "IntervalSets", "Krylov", "LinearAlgebra", "Logging", "NCDatasets", "NVTX", "Pkg", "Printf", "RRTMGP", "Random", "RootSolvers", "SciMLBase", "StaticArrays", "Statistics", "StatsBase", "SurfaceFluxes", "Thermodynamics", "YAML"]
deps = ["Adapt", "ArgParse", "ArtifactWrappers", "Artifacts", "AtmosphericProfilesLibrary", "ClimaComms", "ClimaCore", "ClimaDiagnostics", "ClimaParams", "ClimaTimeSteppers", "ClimaUtilities", "CloudMicrophysics", "Colors", "Dates", "Dierckx", "DiffEqBase", "DiffEqCallbacks", "Distributions", "DocStringExtensions", "FastGaussQuadrature", "Insolation", "Interpolations", "IntervalSets", "Krylov", "LinearAlgebra", "Logging", "NCDatasets", "NVTX", "Pkg", "Printf", "RRTMGP", "Random", "RootSolvers", "SciMLBase", "StaticArrays", "Statistics", "StatsBase", "SurfaceFluxes", "Thermodynamics", "YAML"]
path = ".."
uuid = "b2c96348-7fb7-4fe0-8da9-78d88439e717"
version = "0.23.0"
Expand Down Expand Up @@ -358,6 +364,12 @@ git-tree-sha1 = "76e6513438a5a888cf548f78b6e71311e370d626"
uuid = "c8b6d40d-e815-466f-95ae-c48aefa668fa"
version = "0.7.5"

[[deps.ClimaDiagnostics]]
deps = ["Accessors", "ClimaComms", "ClimaCore", "Dates", "NCDatasets", "SciMLBase"]
git-tree-sha1 = "fee70c0ba0e056565e8dd71cc4ac55f25e606a74"
uuid = "1ecacbb8-0713-4841-9a07-eb5aa8a2d53f"
version = "0.1.1"

[[deps.ClimaParams]]
deps = ["DocStringExtensions", "TOML", "Test"]
git-tree-sha1 = "528aadfaae6f447df3879eab224625ecceec5982"
Expand All @@ -371,10 +383,10 @@ uuid = "595c0a79-7f3d-439a-bc5a-b232dc3bde79"
version = "0.7.19"

[[deps.ClimaUtilities]]
deps = ["Artifacts", "CFTime", "Dates"]
git-tree-sha1 = "d1b30a07829248b325ffffbb739d0f6fe79dfe7c"
deps = ["Artifacts", "Dates"]
git-tree-sha1 = "66b13d461cabc5e9265c9715dba512aea0e1e67f"
uuid = "b3f4f4ca-9299-4f7f-bd9b-81e1242a7513"
version = "0.1.3"
version = "0.1.4"
weakdeps = ["Adapt", "ClimaComms", "ClimaCore", "ClimaCoreTempestRemap", "Interpolations", "NCDatasets"]

[deps.ClimaUtilities.extensions]
Expand Down Expand Up @@ -1788,9 +1800,9 @@ version = "0.5.12"

[[deps.Pango_jll]]
deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"]
git-tree-sha1 = "526f5a03792669e4187e584e8ec9d534248ca765"
git-tree-sha1 = "cb5a2ab6763464ae0f19c86c56c63d4a2b0f5bda"
uuid = "36c8627f-9965-5494-a995-c6b170f724f3"
version = "1.52.1+0"
version = "1.52.2+0"

[[deps.Parameters]]
deps = ["OrderedCollections", "UnPack"]
Expand Down
3 changes: 2 additions & 1 deletion examples/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ ClimaCorePlots = "cf7c7e5a-b407-4c48-9047-11a94a308626"
ClimaCoreSpectra = "c2caaa1d-32ae-4754-ba0d-80e7561362e9"
ClimaCoreTempestRemap = "d934ef94-cdd4-4710-83d6-720549644b70"
ClimaCoreVTK = "c8b6d40d-e815-466f-95ae-c48aefa668fa"
ClimaDiagnostics = "1ecacbb8-0713-4841-9a07-eb5aa8a2d53f"
ClimaParams = "5c42b081-d73a-476f-9059-fd94b934656c"
ClimaTimeSteppers = "595c0a79-7f3d-439a-bc5a-b232dc3bde79"
ClimaUtilities = "b3f4f4ca-9299-4f7f-bd9b-81e1242a7513"
Expand Down Expand Up @@ -67,7 +68,7 @@ YAML = "ddb6d928-2868-570f-bddf-ab3f9cf99eb6"
[compat]
BlockArrays = "0.16"
CairoMakie = "0.10, 0.11"
ClimaAnalysis = "0.4"
ClimaAnalysis = "0.5.1"
ClimaCoreMakie = "0.3, 0.4"
ClimaCorePlots = "0.2"
ClimaCoreSpectra = "0.1"
Expand Down
Loading

0 comments on commit 3f5daf6

Please sign in to comment.