diff --git a/Manifest.toml b/Manifest.toml index a70a5f40b..e3eaace68 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -2,29 +2,36 @@ julia_version = "1.12.6" manifest_format = "2.0" -project_hash = "4a1c54453712ec36523d0a77fe2ba0726bb1dfec" +project_hash = "ea0c53f331d7eac673bf44febd817737c30df434" [[deps.ADTypes]] git-tree-sha1 = "d9aaef7c63466eee4de23b4d9dad03629df54bea" uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" version = "1.22.1" +weakdeps = ["ChainRulesCore", "ConstructionBase", "EnzymeCore"] [deps.ADTypes.extensions] ADTypesChainRulesCoreExt = "ChainRulesCore" ADTypesConstructionBaseExt = "ConstructionBase" ADTypesEnzymeCoreExt = "EnzymeCore" - [deps.ADTypes.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" - EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" - [[deps.AMD]] deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse_jll"] git-tree-sha1 = "45a1272e3f809d36431e57ab22703c6896b8908f" uuid = "14f7f29c-3bd6-536c-9a0b-7339e30b5a3e" version = "0.5.3" +[[deps.AbstractFFTs]] +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 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" @@ -65,12 +72,23 @@ weakdeps = ["SparseArrays", "StaticArrays"] AdaptSparseArraysExt = "SparseArrays" AdaptStaticArraysExt = "StaticArrays" +[[deps.AdaptivePredicates]] +git-tree-sha1 = "7e651ea8d262d2d74ce75fdf47c4d63c07dba7a6" +uuid = "35492f91-a3bd-45ad-95db-fcad7dcfedb7" +version = "1.2.0" + [[deps.AliasTables]] deps = ["PtrArrays", "Random"] git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" version = "1.1.3" +[[deps.Animations]] +deps = ["Colors"] +git-tree-sha1 = "e092fa223bf66a3c41f9c022bd074d916dc303e7" +uuid = "27a7e980-b3e6-11e9-2bcd-0b925532e340" +version = "0.4.2" + [[deps.Aqua]] deps = ["Compat", "Pkg", "Test"] git-tree-sha1 = "4537cc8ed3fba5d88b844a18f7e9bb93f07d2742" @@ -134,10 +152,33 @@ version = "7.27.0" uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" version = "1.11.0" +[[deps.Automa]] +deps = ["PrecompileTools", "TranscodingStreams"] +git-tree-sha1 = "94eab0b3ccdcac361188cc661daf69d4433c1818" +uuid = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b" +version = "1.2.0" + +[[deps.AxisAlgorithms]] +deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] +git-tree-sha1 = "01b8ccb13d68535d73d2b0c23e39bd23155fb712" +uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950" +version = "1.1.0" + +[[deps.AxisArrays]] +deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"] +git-tree-sha1 = "4126b08903b777c88edf1754288144a0492c05ad" +uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9" +version = "0.4.8" + [[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" version = "1.11.0" +[[deps.BaseDirs]] +git-tree-sha1 = "8c290a1b223deaeea9aea44b235d24546da8eb98" +uuid = "18cc8868-cbac-4acf-b575-c8ff214dc66f" +version = "1.4.0" + [[deps.BasicModelInterface]] git-tree-sha1 = "ca36dc6dc9bbeea3dbbe3901837496ece85276e5" uuid = "59605e27-edc0-445a-b93d-c09a3a50b330" @@ -164,21 +205,23 @@ deps = ["CommonSolve", "ConcreteStructs", "NonlinearSolveBase", "PrecompileTools git-tree-sha1 = "6e7c9b6ab9aa711009a49252e45a122212c1d869" uuid = "70df07ce-3d50-431d-a3e7-ca6ddb60ac1e" version = "1.12.2" +weakdeps = ["ChainRulesCore", "ForwardDiff"] [deps.BracketingNonlinearSolve.extensions] BracketingNonlinearSolveChainRulesCoreExt = ["ChainRulesCore", "ForwardDiff"] BracketingNonlinearSolveForwardDiffExt = "ForwardDiff" - [deps.BracketingNonlinearSolve.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" - [[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "1b96ea4a01afe0ea4090c5c8039690672dd13f2e" uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" version = "1.0.9+0" +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + [[deps.CFTime]] deps = ["Dates", "Printf"] git-tree-sha1 = "fad2f199d1f1ae0c8e820ab68f81f6dbf62e60b2" @@ -189,18 +232,52 @@ version = "0.2.10" uuid = "8bf52ea8-c179-5cab-976a-9e18b702a9bc" version = "1.11.0" +[[deps.CRlibm]] +deps = ["CRlibm_jll"] +git-tree-sha1 = "66188d9d103b92b6cd705214242e27f5737a1e5e" +uuid = "96374032-68de-5a5b-8d9e-752f78720389" +version = "1.0.2" + +[[deps.CRlibm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e329286945d0cfc04456972ea732551869af1cfc" +uuid = "4e9b3aee-d8a1-5a3d-ad8b-7d824db253f0" +version = "1.0.1+0" + [[deps.CSV]] deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] git-tree-sha1 = "8d8e0b0f350b8e1c91420b5e64e5de774c2f0f4d" uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" version = "0.10.16" +[[deps.Cairo]] +deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"] +git-tree-sha1 = "71aa551c5c33f1a4415867fe06b7844faadb0ae9" +uuid = "159f3aea-2a34-519c-b102-8c37f9878175" +version = "1.1.1" + +[[deps.CairoMakie]] +deps = ["CRC32c", "Cairo", "Cairo_jll", "Colors", "FileIO", "FreeType", "GeometryBasics", "LinearAlgebra", "Makie", "PrecompileTools"] +git-tree-sha1 = "47142129b1777e21da58cff265050b10d8560588" +uuid = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" +version = "0.15.13" + [[deps.Cairo_jll]] deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] git-tree-sha1 = "1fa950ebc3e37eccd51c6a8fe1f92f7d86263522" uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" version = "1.18.7+0" +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra"] +git-tree-sha1 = "12177ad6b3cad7fd50c8b3825ce24a99ad61c18f" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.26.1" +weakdeps = ["SparseArrays"] + + [deps.ChainRulesCore.extensions] + ChainRulesCoreSparseArraysExt = "SparseArrays" + [[deps.CodeTracking]] deps = ["InteractiveUtils", "REPL", "UUIDs"] git-tree-sha1 = "cfb7a2e89e245a9d5016b70323db412b3a7438d5" @@ -219,6 +296,18 @@ git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9" uuid = "944b1d66-785c-5afd-91f1-9de20f533193" version = "0.7.8" +[[deps.CodecZstd]] +deps = ["TranscodingStreams", "Zstd_jll"] +git-tree-sha1 = "da54a6cd93c54950c15adf1d336cfd7d71f51a56" +uuid = "6b39b394-51ab-5f42-8807-6242bab2b4c2" +version = "0.8.7" + +[[deps.ColorBrewer]] +deps = ["Colors", "JSON"] +git-tree-sha1 = "07da79661b919001e6863b81fc572497daa58349" +uuid = "a2cac450-b92f-5266-8821-25eda20663c8" +version = "0.4.2" + [[deps.ColorSchemes]] deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] git-tree-sha1 = "b0fd3f56fa442f81e0a47815c92245acfaaa4e34" @@ -297,6 +386,12 @@ weakdeps = ["InverseFunctions"] [deps.CompositionsBase.extensions] CompositionsBaseInverseFunctionsExt = "InverseFunctions" +[[deps.ComputePipeline]] +deps = ["Observables", "Preferences"] +git-tree-sha1 = "7bc84b769c1d384315e7b5c4ac03a6c303e6cf35" +uuid = "95dc2771-c249-4cd0-9c9f-1f3b4330693c" +version = "0.1.8" + [[deps.ConcreteStructs]] git-tree-sha1 = "1988532cb3b4525bb718b99ba07e433bbf0e600b" uuid = "2569d6c7-a4a2-43d3-a901-331e8e4be471" @@ -324,22 +419,30 @@ version = "0.17.6" git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb" uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" version = "1.6.0" +weakdeps = ["IntervalSets", "LinearAlgebra", "StaticArrays"] [deps.ConstructionBase.extensions] ConstructionBaseIntervalSetsExt = "IntervalSets" ConstructionBaseLinearAlgebraExt = "LinearAlgebra" ConstructionBaseStaticArraysExt = "StaticArrays" - [deps.ConstructionBase.weakdeps] - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - [[deps.Contour]] git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" version = "0.6.3" +[[deps.CoreMath]] +deps = ["CoreMath_jll"] +git-tree-sha1 = "8c0480f92b1b1796239156a1b9b1bfb1b39499b4" +uuid = "b7a15901-be09-4a0e-87d2-2e66b0e09b5a" +version = "0.1.0" + +[[deps.CoreMath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a692a4c1dc59a4b8bc0b6403876eb3250fde2bc3" +uuid = "a38c48d9-6df1-5ac9-9223-b6ada3b5572b" +version = "0.1.0+0" + [[deps.Crayons]] git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" @@ -407,6 +510,12 @@ git-tree-sha1 = "473e9afc9cf30814eb67ffa5f2db7df82c3ad9fd" uuid = "ee1fde0b-3d02-5ea6-8484-8dfef6360eab" version = "1.16.2+0" +[[deps.DelaunayTriangulation]] +deps = ["AdaptivePredicates", "EnumX", "ExactPredicates", "Random"] +git-tree-sha1 = "c55f5a9fd67bdbc8e089b5a3111fe4292986a8e8" +uuid = "927a84f5-c5f4-47a5-9785-b46e178433df" +version = "1.6.6" + [[deps.DelimitedFiles]] deps = ["Mmap"] git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" @@ -549,6 +658,24 @@ deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" version = "1.11.0" +[[deps.Distributions]] +deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "Roots", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "cd3c5ac74cd3923c8945c6a81518c46abd0e73a3" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.129" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + DistributionsSparseConnectivityTracerExt = "SparseConnectivityTracer" + DistributionsTestExt = "Test" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + [[deps.DocStringExtensions]] git-tree-sha1 = "7442a5dfe1ebb773c29cc2962a8980f47221d76c" uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" @@ -569,6 +696,12 @@ weakdeps = ["JuMP"] [deps.Dualization.extensions] DualizationJuMPExt = "JuMP" +[[deps.EarCut_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e3290f2d49e661fbd94046d7e3726ffcb2d41053" +uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" +version = "2.2.4+0" + [[deps.EnumX]] git-tree-sha1 = "c49898e8438c828577f04b92fc9368c388ac783c" uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" @@ -578,21 +711,24 @@ version = "1.0.7" git-tree-sha1 = "971d7831cc85f43bc9f51d615a3f7f21270c2f1d" uuid = "f151be2c-9106-41f4-ab19-57ee4f262869" version = "0.8.21" +weakdeps = ["Adapt", "ChainRulesCore"] [deps.EnzymeCore.extensions] AdaptExt = "Adapt" EnzymeCoreChainRulesCoreExt = "ChainRulesCore" - [deps.EnzymeCore.weakdeps] - Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - [[deps.EpollShim_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "8a4be429317c42cfae6a7fc03c31bad1970c310d" uuid = "2702e6a9-849d-5ed8-8c21-79e8b8f9ee43" version = "0.0.20230411+1" +[[deps.ExactPredicates]] +deps = ["IntervalArithmetic", "Random", "StaticArrays"] +git-tree-sha1 = "83231673ea4d3d6008ac74dc5079e77ab2209d8f" +uuid = "429591f6-91af-11e9-00e2-59fbe8cec110" +version = "2.2.9" + [[deps.ExceptionUnwrapping]] deps = ["Test"] git-tree-sha1 = "d36f682e590a83d63d1c7dbd287573764682d12a" @@ -627,6 +763,12 @@ git-tree-sha1 = "7a58e45171b63ed4782f2d36fdee8713a469e6e0" uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" version = "8.1.2+0" +[[deps.FFTA]] +deps = ["AbstractFFTs", "DocStringExtensions", "LinearAlgebra", "MuladdMacro", "Primes", "Random", "Reexport"] +git-tree-sha1 = "65e55303b72f4a567a51b174dd2c47496efeb95a" +uuid = "b86e33f2-c0db-4aa1-a6e0-ab43e668529e" +version = "0.3.1" + [[deps.FastBroadcast]] deps = ["ArrayInterface", "LinearAlgebra"] git-tree-sha1 = "8b77b1a6d20b051c223c4907d92dbf9af7b23fa5" @@ -669,6 +811,32 @@ version = "1.3.3" ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "8e9c059d6857607253e837730dbf780b6b151acd" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.19.0" +weakdeps = ["HTTP"] + + [deps.FileIO.extensions] + HTTPExt = "HTTP" + +[[deps.FilePaths]] +deps = ["FilePathsBase", "MacroTools", "Reexport"] +git-tree-sha1 = "a1b2fbfe98503f15b665ed45b3d149e5d8895e4c" +uuid = "8fc22ac5-c921-52a6-82fd-178b2807b824" +version = "0.9.0" + + [deps.FilePaths.extensions] + FilePathsGlobExt = "Glob" + FilePathsURIParserExt = "URIParser" + FilePathsURIsExt = "URIs" + + [deps.FilePaths.weakdeps] + Glob = "c27321d9-0574-5035-807b-f59d2c89b15c" + URIParser = "30578b45-9adc-5946-b283-645ec420af67" + URIs = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" + [[deps.FilePathsBase]] deps = ["Compat", "Dates"] git-tree-sha1 = "3bab2c5aa25e7840a4b065805c0cdfc01f3068d2" @@ -689,6 +857,7 @@ deps = ["LinearAlgebra"] git-tree-sha1 = "2f979084d1e13948a3352cf64a25df6bd3b4dca3" uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" version = "1.16.0" +weakdeps = ["PDMats", "SparseArrays", "StaticArrays", "Statistics"] [deps.FillArrays.extensions] FillArraysPDMatsExt = "PDMats" @@ -696,12 +865,6 @@ version = "1.16.0" FillArraysStaticArraysExt = "StaticArrays" FillArraysStatisticsExt = "Statistics" - [deps.FillArrays.weakdeps] - PDMats = "90014a1f-27ba-587c-ab20-58faa44d9150" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" - [[deps.FindFirstFunctions]] deps = ["PrecompileTools"] git-tree-sha1 = "e6e5cbf7e6f2e3c075f0aea1a43a61306a990c3d" @@ -753,12 +916,24 @@ weakdeps = ["StaticArrays"] [deps.ForwardDiff.extensions] ForwardDiffStaticArraysExt = "StaticArrays" +[[deps.FreeType]] +deps = ["CEnum", "FreeType2_jll"] +git-tree-sha1 = "907369da0f8e80728ab49c1c7e09327bf0d6d999" +uuid = "b38be410-82b0-50bf-ab77-7b57e271db43" +version = "4.1.1" + [[deps.FreeType2_jll]] deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] git-tree-sha1 = "70329abc09b886fd2c5d94ad2d9527639c421e3e" uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" version = "2.14.3+1" +[[deps.FreeTypeAbstraction]] +deps = ["BaseDirs", "ColorVectorSpace", "Colors", "FreeType", "GeometryBasics", "Mmap"] +git-tree-sha1 = "4ebb930ef4a43817991ba35db6317a05e59abd11" +uuid = "663a7486-cb36-511b-a19d-713bb74d65c9" +version = "0.10.8" + [[deps.FriBidi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "7a214fdac5ed5f59a22c2d9a885a16da1c74bbc7" @@ -820,6 +995,27 @@ git-tree-sha1 = "6fada551286ab6ea4ca1628cb2de9f166a2ec966" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" version = "0.73.26+0" +[[deps.Gamma]] +git-tree-sha1 = "86f86b6168a016ed88e4ae4e64577b98c3b59e8e" +uuid = "a0844989-3bd2-4988-8bea-c9407ab0941b" +version = "1.1.0" + +[[deps.GeometryBasics]] +deps = ["EarCut_jll", "LinearAlgebra", "PrecompileTools", "Random", "StaticArrays"] +git-tree-sha1 = "364685f5ffde25deb1bbcfd5bb278a5c6b7a9b37" +uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" +version = "0.5.11" + + [deps.GeometryBasics.extensions] + ExtentsExt = "Extents" + GeometryBasicsGeoInterfaceExt = "GeoInterface" + IntervalSetsExt = "IntervalSets" + + [deps.GeometryBasics.weakdeps] + Extents = "411431e0-e8b7-467b-b5e0-f676ba4f2910" + GeoInterface = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + [[deps.GettextRuntime_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll"] git-tree-sha1 = "45288942190db7c5f760f59c04495064eedf9340" @@ -832,6 +1028,12 @@ git-tree-sha1 = "38044a04637976140074d0b0621c1edf0eb531fd" uuid = "61579ee1-b43e-5ca0-a5da-69d92c66a64b" version = "9.55.1+0" +[[deps.Giflib_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6570366d757b50fabae9f4315ad74d2e40c0560a" +uuid = "59f7168a-df46-5410-90c8-f2779963d0ec" +version = "5.2.3+0" + [[deps.Glib_jll]] deps = ["Artifacts", "GettextRuntime_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] git-tree-sha1 = "24f6def62397474a297bfcec22384101609142ed" @@ -843,6 +1045,12 @@ git-tree-sha1 = "246c628cec062230b7d183aab88841fa94fcabe9" uuid = "c27321d9-0574-5035-807b-f59d2c89b15c" version = "1.5.0" +[[deps.Graphics]] +deps = ["Colors", "LinearAlgebra", "NaNMath"] +git-tree-sha1 = "a641238db938fff9b2f60d08ed9030387daf428c" +uuid = "a2bd30eb-e257-5431-a919-1863eab51364" +version = "1.1.3" + [[deps.Graphite2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "69ffb934a5c5b7e086a0b4fee3427db2556fba6e" @@ -854,13 +1062,16 @@ deps = ["ArnoldiMethod", "DataStructures", "Inflate", "LinearAlgebra", "Random", git-tree-sha1 = "7eb45fe833a5b7c51cf6d89c5a841d5967e44be3" uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" version = "1.14.0" +weakdeps = ["Distributed", "SharedArrays"] [deps.Graphs.extensions] GraphsSharedArraysExt = "SharedArrays" - [deps.Graphs.weakdeps] - Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b" - SharedArrays = "1a1011a3-84de-559e-8e89-a11a2f7dc383" +[[deps.GridLayoutBase]] +deps = ["GeometryBasics", "InteractiveUtils", "Observables"] +git-tree-sha1 = "93d5c27c8de51687a2c70ec0716e6e76f298416f" +uuid = "3955a311-db13-416c-9275-1d80ed98e5e9" +version = "0.11.2" [[deps.Grisu]] git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" @@ -903,12 +1114,59 @@ git-tree-sha1 = "c35847ca5b4997fc8418836354a56c459bcf48d8" uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" version = "2.14.0+0" +[[deps.HypergeometricFunctions]] +deps = ["Gamma", "LinearAlgebra"] +git-tree-sha1 = "18d7deab5fb0440dc6a7b6993c5c27b25420de10" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.29" + [[deps.IOCapture]] deps = ["Logging", "Random"] git-tree-sha1 = "0ee181ec08df7d7c911901ea38baf16f755114dc" uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89" version = "1.0.0" +[[deps.ImageAxes]] +deps = ["AxisArrays", "ImageBase", "ImageCore", "Reexport", "SimpleTraits"] +git-tree-sha1 = "e12629406c6c4442539436581041d372d69c55ba" +uuid = "2803e5a7-5153-5ecf-9a86-9b4c37f5f5ac" +version = "0.6.12" + +[[deps.ImageBase]] +deps = ["ImageCore", "Reexport"] +git-tree-sha1 = "eb49b82c172811fd2c86759fa0553a2221feb909" +uuid = "c817782e-172a-44cc-b673-b171935fbb9e" +version = "0.1.7" + +[[deps.ImageCore]] +deps = ["ColorVectorSpace", "Colors", "FixedPointNumbers", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "PrecompileTools", "Reexport"] +git-tree-sha1 = "8c193230235bbcee22c8066b0374f63b5683c2d3" +uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534" +version = "0.10.5" + +[[deps.ImageIO]] +deps = ["FileIO", "IndirectArrays", "JpegTurbo", "LazyModules", "Netpbm", "OpenEXR", "PNGFiles", "QOI", "Sixel", "TiffImages", "UUIDs", "WebP"] +git-tree-sha1 = "696144904b76e1ca433b886b4e7edd067d76cbf7" +uuid = "82e4d734-157c-48bb-816b-45c225c6df19" +version = "0.6.9" + +[[deps.ImageMetadata]] +deps = ["AxisArrays", "ImageAxes", "ImageBase", "ImageCore"] +git-tree-sha1 = "2a81c3897be6fbcde0802a0ebe6796d0562f63ec" +uuid = "bc367c6b-8a6b-528e-b4bd-a4b897500b49" +version = "0.9.10" + +[[deps.Imath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "dcc8d0cd653e55213df9b75ebc6fe4a8d3254c65" +uuid = "905a6f67-0a94-5f89-b386-d35d92009cd1" +version = "3.2.2+0" + +[[deps.IndirectArrays]] +git-tree-sha1 = "012e604e1c7458645cb8b436f8fba789a51b257f" +uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959" +version = "1.0.0" + [[deps.Infiltrator]] deps = ["InteractiveUtils", "Markdown", "REPL", "UUIDs"] git-tree-sha1 = "0330ef9ac27dc069bf97fa5ab1a4391be4fcc4f6" @@ -933,6 +1191,11 @@ version = "1.4.5" ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" Parsers = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +[[deps.IntegerMathUtils]] +git-tree-sha1 = "4c1acff2dc6b6967e7e750633c50bc3b8d83e617" +uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235" +version = "0.1.3" + [[deps.IntelOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] git-tree-sha1 = "ec1debd61c300961f98064cfb21287613ad7f303" @@ -944,6 +1207,54 @@ deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" version = "1.11.0" +[[deps.Interpolations]] +deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] +git-tree-sha1 = "48922d06068130f87e43edef52382e6a94305ae6" +uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" +version = "0.16.3" +weakdeps = ["ForwardDiff", "Unitful"] + + [deps.Interpolations.extensions] + InterpolationsForwardDiffExt = "ForwardDiff" + InterpolationsUnitfulExt = "Unitful" + +[[deps.IntervalArithmetic]] +deps = ["CRlibm", "CoreMath", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Printf", "Random", "RoundingEmulator"] +git-tree-sha1 = "c3ee408ae340565f41699e3a3fa1053698c7626e" +uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" +version = "1.0.10" + + [deps.IntervalArithmetic.extensions] + IntervalArithmeticArblibExt = "Arblib" + IntervalArithmeticDiffRulesExt = "DiffRules" + IntervalArithmeticForwardDiffExt = "ForwardDiff" + IntervalArithmeticIntervalSetsExt = "IntervalSets" + IntervalArithmeticIrrationalConstantsExt = "IrrationalConstants" + IntervalArithmeticLinearAlgebraExt = "LinearAlgebra" + IntervalArithmeticRecipesBaseExt = "RecipesBase" + IntervalArithmeticSparseArraysExt = "SparseArrays" + + [deps.IntervalArithmetic.weakdeps] + Arblib = "fb37089c-8514-4489-9461-98f9c8763369" + DiffRules = "b552c78f-8df3-52c6-915a-8e097449b14b" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + IrrationalConstants = "92d709cd-6900-40b7-9082-c6be49f344b6" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.IntervalSets]] +git-tree-sha1 = "79d6bd28c8d9bccc2229784f1bd637689b256377" +uuid = "8197267c-284f-5f27-9208-e0e47529a953" +version = "0.7.14" +weakdeps = ["Random", "RecipesBase", "Statistics"] + + [deps.IntervalSets.extensions] + IntervalSetsRandomExt = "Random" + IntervalSetsRecipesBaseExt = "RecipesBase" + IntervalSetsStatisticsExt = "Statistics" + [[deps.InverseFunctions]] git-tree-sha1 = "a779299d77cd080bf77b97535acecd73e1c5e5cb" uuid = "3587e190-3f89-42d0-90ee-14403ec27112" @@ -964,6 +1275,12 @@ git-tree-sha1 = "b2d91fe939cae05960e760110b328288867b5758" uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" version = "0.2.6" +[[deps.Isoband]] +deps = ["isoband_jll"] +git-tree-sha1 = "f9b6d97355599074dc867318950adaa6f9946137" +uuid = "f1662d9f-8043-43de-a69a-05efc1cc6ff4" +version = "0.1.1" + [[deps.IterTools]] git-tree-sha1 = "42d5f897009e7ff2cf88db414a389e5ed1bdd023" uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" @@ -1016,6 +1333,12 @@ git-tree-sha1 = "2f05ed29618da60c06a87e9c033982d4f71d0b6c" uuid = "ae98c720-c025-4a4a-838c-29b094483192" version = "0.2.1" +[[deps.JpegTurbo]] +deps = ["CEnum", "FileIO", "ImageCore", "JpegTurbo_jll", "TOML"] +git-tree-sha1 = "9496de8fb52c224a2e3f9ff403947674517317d9" +uuid = "b835a17e-a41a-41e7-81f0-2f016b05efe0" +version = "0.1.6" + [[deps.JpegTurbo_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "1dae3057da6f2b9c857afef03177bbdc7c4afe92" @@ -1051,6 +1374,12 @@ deps = ["StyledStrings"] uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011" version = "1.12.0" +[[deps.KernelDensity]] +deps = ["Distributions", "DocStringExtensions", "FFTA", "Interpolations", "StatsBase"] +git-tree-sha1 = "9eda8292dd3268b3b7ec9df21bbfac24e177ec52" +uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b" +version = "0.6.12" + [[deps.Krylov]] deps = ["LinearAlgebra", "Printf", "SparseArrays"] git-tree-sha1 = "fc2e5bc665dfa1be33fac60b5762d462bccfae7b" @@ -1117,6 +1446,11 @@ deps = ["Artifacts", "Pkg"] uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" version = "1.11.0" +[[deps.LazyModules]] +git-tree-sha1 = "a560dd966b386ac9ae60bdd3a3d3a326062d3c3e" +uuid = "8cdb02fc-e678-4876-92c5-9defec4f444e" +version = "0.3.1" + [[deps.LeftChildRightSiblingTrees]] deps = ["AbstractTrees"] git-tree-sha1 = "95ba48564903b43b2462318aa243ee79d81135ff" @@ -1367,6 +1701,23 @@ git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" version = "0.5.16" +[[deps.Makie]] +deps = ["Animations", "Base64", "CRC32c", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "ComputePipeline", "Contour", "Dates", "DelaunayTriangulation", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG_jll", "FileIO", "FilePaths", "FixedPointNumbers", "Format", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageBase", "ImageIO", "InteractiveUtils", "Interpolations", "IntervalSets", "InverseFunctions", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MacroTools", "Markdown", "MathTeXEngine", "Observables", "OffsetArrays", "PNGFiles", "Packing", "Pkg", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Scratch", "ShaderAbstractions", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun", "Unitful"] +git-tree-sha1 = "f2c8715d05bf10f9d4dc354e69dee30b6be53239" +uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" +version = "0.24.13" + + [deps.Makie.extensions] + MakieDynamicQuantitiesExt = "DynamicQuantities" + + [deps.Makie.weakdeps] + DynamicQuantities = "06fc5a27-2a28-4c7c-a15d-362465fb6821" + +[[deps.MappedArrays]] +git-tree-sha1 = "0ee4497a4e80dbd29c058fcee6493f5219556f40" +uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" +version = "0.4.3" + [[deps.Markdown]] deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" @@ -1408,6 +1759,12 @@ version = "1.51.1" BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" CliqueTrees = "60701a23-6482-424a-84db-faee86b9b1f8" +[[deps.MathTeXEngine]] +deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "UnicodeFun"] +git-tree-sha1 = "aa1078778be5a8e5259ff04fbc3d258b3e78d464" +uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" +version = "0.6.9" + [[deps.MaybeInplace]] deps = ["ArrayInterface", "LinearAlgebra", "MacroTools"] git-tree-sha1 = "bf287c2abdd365d73c9ee86b262c6d8af0d6e2a1" @@ -1475,6 +1832,12 @@ git-tree-sha1 = "2c140d60d7cb82badf06d8783800d0bcd1a7daa2" uuid = "78c3b35d-d492-501b-9361-3d52fe80e533" version = "0.8.1" +[[deps.MosaicViews]] +deps = ["MappedArrays", "OffsetArrays", "PaddedViews", "StackViews"] +git-tree-sha1 = "7b86a5d4d70a9f5cdf2dacb3cbe6d251d1a61dbe" +uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389" +version = "0.3.4" + [[deps.Moshi]] deps = ["ExproniconLite", "Jieko"] git-tree-sha1 = "999dfa2b4f8334c1c23bd307c2b0cb6f97c54591" @@ -1521,6 +1884,12 @@ git-tree-sha1 = "8a36db9b934b0e72583e624abc8f3b3d60554f2c" uuid = "7243133f-43d8-5620-bbf4-c2c921802cf3" version = "401.1000.0+0" +[[deps.Netpbm]] +deps = ["FileIO", "ImageCore", "ImageMetadata"] +git-tree-sha1 = "d92b107dbb887293622df7697a2223f9f8176fcd" +uuid = "f09324ee-3d7c-5217-9330-fc30815ba969" +version = "1.1.1" + [[deps.NetworkOptions]] uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" version = "1.3.0" @@ -1622,6 +1991,11 @@ git-tree-sha1 = "22faba70c22d2f03e60fbc61da99c4ebfc3eb9ba" uuid = "d8793406-e978-5875-9003-1fc021f44a92" version = "0.5.0" +[[deps.Observables]] +git-tree-sha1 = "7438a59546cf62428fc9d1bc94729146d37a7225" +uuid = "510215fc-4207-5dde-b226-833fc4488ee2" +version = "0.5.5" + [[deps.OffsetArrays]] git-tree-sha1 = "117432e406b5c023f665fa73dc26e79ec3630151" uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" @@ -1643,11 +2017,29 @@ git-tree-sha1 = "565175ce692c065e50ad32efbb61ba69b1586593" uuid = "656ef2d0-ae68-5445-9ca0-591084a874a2" version = "0.3.33+1" +[[deps.OpenBLASConsistentFPCSR_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "dafdaa3ff15f20ff703d909d3a6f574a5b0586f3" +uuid = "6cdc7f73-28fd-5e50-80fb-958a8875b1af" +version = "0.3.33+1" + [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" version = "0.3.29+0" +[[deps.OpenEXR]] +deps = ["Colors", "FileIO", "OpenEXR_jll"] +git-tree-sha1 = "97db9e07fe2091882c765380ef58ec553074e9c7" +uuid = "52e1d378-f018-4a11-a4be-720524705ac7" +version = "0.3.3" + +[[deps.OpenEXR_jll]] +deps = ["Artifacts", "Imath_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "0d621a4beb5e48d195f907c3c5b0bea285d9ff9d" +uuid = "18a262bb-aa17-5467-a713-aee519bc75cb" +version = "3.4.13+0" + [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] uuid = "05823500-19ac-5b8b-9628-191a04bc5112" @@ -1765,12 +2157,40 @@ deps = ["Artifacts", "Libdl"] uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" version = "10.44.0+1" +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "26766d4b5f1a410c218a19b85a672c6edb693c65" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.40" +weakdeps = ["StatsBase"] + + [deps.PDMats.extensions] + StatsBaseExt = "StatsBase" + +[[deps.PNGFiles]] +deps = ["Base64", "CEnum", "ImageCore", "IndirectArrays", "OffsetArrays", "libpng_jll"] +git-tree-sha1 = "32b657a0d57c310a1a172bfc8c8cf68c5e674323" +uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883" +version = "0.4.5" + [[deps.PackageCompiler]] deps = ["Artifacts", "Glob", "LazyArtifacts", "Libdl", "Pkg", "Printf", "RelocatableFolders", "TOML", "UUIDs", "p7zip_jll"] git-tree-sha1 = "513193b976208b1b646ad4303323153e8bff0997" uuid = "9b87118b-4619-50d2-8e1e-99f35a4d4d9d" version = "2.4.0" +[[deps.Packing]] +deps = ["GeometryBasics"] +git-tree-sha1 = "bc5bf2ea3d5351edf285a06b0016788a121ce92c" +uuid = "19eb6ba3-879d-56ad-ad62-d5c202156566" +version = "0.5.1" + +[[deps.PaddedViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "0fac6313486baae819364c52b4f483450a9d793f" +uuid = "5432bcbf-9aad-5242-b902-cca2824c8663" +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 = "58e5ed5e386e156bd93e86b305ebd21ac63d2d04" @@ -1816,6 +2236,12 @@ git-tree-sha1 = "30a1cf0b8fac0400f7f9790b1ad8ad89db325b84" uuid = "6254a0f9-6143-4104-aa2e-fd339a2830a6" version = "0.1.19" +[[deps.PkgVersion]] +deps = ["Pkg"] +git-tree-sha1 = "f9501cc0430a26bc3d156ae1b5b0c1b47af4d6da" +uuid = "eebad327-c553-4316-9ea0-9fa01ccd7688" +version = "0.3.3" + [[deps.PlotThemes]] deps = ["PlotUtils", "Statistics"] git-tree-sha1 = "41031ef3a1be6f5bbbf3e8073f210556daeae5ca" @@ -1848,6 +2274,11 @@ version = "1.41.6" ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" +[[deps.PolygonOps]] +git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6" +uuid = "647866c9-e3ac-4575-94e7-e3d426903924" +version = "0.1.2" + [[deps.PooledArrays]] deps = ["DataAPI", "Future"] git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" @@ -1896,6 +2327,12 @@ version = "3.4.0" Typstry = "f0ed7684-a786-439e-b1e3-3b82803b501e" XLSX = "fdbf4ff8-1666-58a4-91e7-1b58723a45e0" +[[deps.Primes]] +deps = ["IntegerMathUtils"] +git-tree-sha1 = "25cdd1d20cd005b52fc12cb6be3f75faaf59bb9b" +uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae" +version = "0.5.7" + [[deps.Printf]] deps = ["Unicode"] uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" @@ -1907,6 +2344,12 @@ git-tree-sha1 = "f0803bc1171e455a04124affa9c21bba5ac4db32" uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c" version = "0.1.6" +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "fbb92c6c56b34e1a2c4c36058f68f332bec840e7" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.11.0" + [[deps.PtrArrays]] git-tree-sha1 = "4fbbafbc6251b883f4d2705356f3641f3652a7fe" uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" @@ -1936,6 +2379,12 @@ version = "0.9.35" CategoricalArrays = "324d7699-5711-5eae-9e2f-1d82baa6b597" PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" +[[deps.QOI]] +deps = ["ColorTypes", "FileIO", "FixedPointNumbers"] +git-tree-sha1 = "472daaa816895cb7aee81658d4e7aec901fa1106" +uuid = "4b34888f-f399-49d4-9bb3-47ed5cae4e65" +version = "1.0.2" + [[deps.Qt6Base_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Vulkan_Loader_jll", "Xorg_libSM_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_cursor_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "libinput_jll", "xkbcommon_jll"] git-tree-sha1 = "144895f6166994730ee7ff8113b981fc360638f1" @@ -1966,6 +2415,18 @@ git-tree-sha1 = "672c938b4b4e3e0169a07a5f227029d4905456f2" uuid = "e99dba38-086e-5de3-a5b1-6e4c66e897c3" version = "6.10.2+1" +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "5e8e8b0ab68215d7a2b14b9921a946fee794749e" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.11.3" + + [deps.QuadGK.extensions] + QuadGKEnzymeExt = "Enzyme" + + [deps.QuadGK.weakdeps] + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + [[deps.REPL]] deps = ["InteractiveUtils", "JuliaSyntaxHighlighting", "Markdown", "Sockets", "StyledStrings", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" @@ -1976,6 +2437,21 @@ deps = ["SHA"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" version = "1.11.0" +[[deps.RangeArrays]] +git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5" +uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d" +version = "0.3.2" + +[[deps.Ratios]] +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"] git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" @@ -2067,6 +2543,45 @@ path = "core" uuid = "aac5e3d9-0b8f-4d4f-8241-b1a7a9632635" version = "2026.1.2" +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "5b3d50eb374cea306873b371d3f8d3915a018f0b" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.9.0" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "58cdd8fb2201a6267e1db87ff148dd6c1dbd8ad8" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.5.1+0" + +[[deps.Roots]] +deps = ["Accessors", "CommonSolve", "Printf"] +git-tree-sha1 = "125cbd31a56de53169c3eed9c17180bc6c245f83" +uuid = "f2b01f46-fcfa-551c-844a-d8ac1e96c665" +version = "3.0.4" + + [deps.Roots.extensions] + RootsChainRulesCoreExt = "ChainRulesCore" + RootsForwardDiffExt = "ForwardDiff" + RootsIntervalRootFindingExt = "IntervalRootFinding" + RootsSymPyExt = "SymPy" + RootsSymPyPythonCallExt = "SymPyPythonCall" + RootsUnitfulExt = "Unitful" + + [deps.Roots.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + IntervalRootFinding = "d2bf35a9-74e0-55ec-b149-d360ff49b807" + SymPy = "24249f21-da20-56a4-8eb1-6a02cf4ae2e6" + SymPyPythonCall = "bc8888f7-b21e-4b7c-a06a-5d9c9496438c" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.RoundingEmulator]] +git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b" +uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705" +version = "0.2.1" + [[deps.RuntimeGeneratedFunctions]] deps = ["ExprTools", "SHA", "Serialization"] git-tree-sha1 = "bd9d6c153d0c8a120b504bfb2f3be42308cc857a" @@ -2077,6 +2592,12 @@ version = "0.5.21" uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" version = "0.7.0" +[[deps.SIMD]] +deps = ["PrecompileTools"] +git-tree-sha1 = "e24dc23107d426a096d3eae6c165b921e74c18e4" +uuid = "fdea26ae-647d-5447-a871-4b548cad5224" +version = "3.7.2" + [[deps.SPDX]] deps = ["Dates", "JSON", "Logging", "SHA", "TimeZones", "UUIDs"] git-tree-sha1 = "03332121e01c5191a1c12d9fbda2284a102a5155" @@ -2209,12 +2730,29 @@ git-tree-sha1 = "c5391c6ace3bc430ca630251d02ea9687169ca68" uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" version = "1.1.2" +[[deps.ShaderAbstractions]] +deps = ["ColorTypes", "FixedPointNumbers", "GeometryBasics", "LinearAlgebra", "Observables", "StaticArrays"] +git-tree-sha1 = "818554664a2e01fc3784becb2eb3a82326a604b6" +uuid = "65257c39-d410-5151-9873-9b3e5be5013e" +version = "0.5.0" + +[[deps.SharedArrays]] +deps = ["Distributed", "Mmap", "Random", "Serialization"] +uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" +version = "1.11.0" + [[deps.Showoff]] deps = ["Dates", "Grisu"] git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" version = "1.0.3" +[[deps.SignedDistanceFields]] +deps = ["Statistics"] +git-tree-sha1 = "3949ad92e1c9d2ff0cd4a1317d5ecbba682f4b92" +uuid = "73760f76-fbc4-59ce-8f25-708e95d2df96" +version = "0.4.1" + [[deps.SimpleBufferStream]] git-tree-sha1 = "f305871d2f381d21527c770d4788c06c097c9bc1" uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" @@ -2242,6 +2780,12 @@ git-tree-sha1 = "7ddb0b49c109481b046972c0e4ab02b2127d6a75" uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" version = "0.9.6" +[[deps.Sixel]] +deps = ["Dates", "FileIO", "ImageCore", "IndirectArrays", "OffsetArrays", "REPL", "libsixel_jll"] +git-tree-sha1 = "0494aed9501e7fb65daba895fb7fd57cc38bc743" +uuid = "45858cf5-a6b0-47a3-bbea-62219f50df47" +version = "0.1.5" + [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" version = "1.11.0" @@ -2314,33 +2858,34 @@ deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_j git-tree-sha1 = "6547cbdd8ce32efba0d21c5a40fa96d1a3548f9f" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" version = "2.8.0" +weakdeps = ["ChainRulesCore"] [deps.SpecialFunctions.extensions] SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" - [deps.SpecialFunctions.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - [[deps.StableRNGs]] deps = ["Random"] git-tree-sha1 = "4f96c596b8c8258cc7d3b19797854d368f243ddc" uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" version = "1.0.4" +[[deps.StackViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "be1cf4eb0ac528d96f5115b4ed80c26a8d8ae621" +uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15" +version = "0.1.2" + [[deps.StaticArrays]] deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] git-tree-sha1 = "246a8bb2e6667f832eea063c3a56aef96429a3db" uuid = "90137ffa-7385-5640-81b9-e52037218182" version = "1.9.18" +weakdeps = ["ChainRulesCore", "Statistics"] [deps.StaticArrays.extensions] StaticArraysChainRulesCoreExt = "ChainRulesCore" StaticArraysStatisticsExt = "Statistics" - [deps.StaticArrays.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" - [[deps.StaticArraysCore]] git-tree-sha1 = "6ab403037779dae8c514bad259f32a447262455a" uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" @@ -2368,6 +2913,17 @@ git-tree-sha1 = "e4d7a1a0edc20af42689ea6f4f3587a2175d50ee" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" version = "0.34.12" +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "770240df9a3b8888065046948f7a09b4e0f997d5" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "2.2.0" +weakdeps = ["ChainRulesCore", "InverseFunctions"] + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + [[deps.StringManipulation]] deps = ["PrecompileTools"] git-tree-sha1 = "d05693d339e37d6ab134c5ab53c29fce5ee5d7d5" @@ -2426,6 +2982,10 @@ version = "2.8.2" uuid = "f489334b-da3d-4c2e-b8f0-e476e12c162b" version = "1.11.0" +[[deps.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + [[deps.SuiteSparse_jll]] deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" @@ -2497,6 +3057,12 @@ git-tree-sha1 = "42fd9023fef18b9b78c8343a4e2f3813ffbcefcb" uuid = "1c621080-faea-4a02-84b6-bbd5e436b8fe" version = "1.0.0" +[[deps.TiffImages]] +deps = ["CodecZstd", "ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "PrecompileTools", "ProgressMeter", "SIMD", "UUIDs"] +git-tree-sha1 = "9ca5f1f2d42f80df4b8c9f6ab5a64f438bbd9976" +uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69" +version = "0.11.9" + [[deps.TimeZones]] deps = ["Artifacts", "Dates", "Downloads", "InlineStrings", "Mocking", "Printf", "Scratch", "TZJData", "Unicode", "p7zip_jll"] git-tree-sha1 = "d422301b2a1e294e3e4214061e44f338cafe18a2" @@ -2524,6 +3090,11 @@ git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" version = "0.11.3" +[[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" @@ -2550,6 +3121,21 @@ git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" version = "0.4.1" +[[deps.Unitful]] +deps = ["Dates", "LinearAlgebra", "Random"] +git-tree-sha1 = "57e1b2c9de4bd6f40ecb9de4ac1797b81970d008" +uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" +version = "1.28.0" +weakdeps = ["ConstructionBase", "ForwardDiff", "InverseFunctions", "LaTeXStrings", "Latexify", "NaNMath", "Printf"] + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + ForwardDiffExt = "ForwardDiff" + InverseFunctionsUnitfulExt = "InverseFunctions" + LatexifyExt = ["Latexify", "LaTeXStrings"] + NaNMathExt = "NaNMath" + PrintfExt = "Printf" + [[deps.UnsafePointers]] git-tree-sha1 = "c81331b3b2e60a982be57c046ec91f599ede674a" uuid = "e17b2a0c-0bdf-430a-bd0c-3a23cae4ff39" @@ -2578,6 +3164,18 @@ git-tree-sha1 = "0716e01c3b40413de5dedbc9c5c69f27cddfddfc" uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" version = "1.4.3" +[[deps.WebP]] +deps = ["CEnum", "ColorTypes", "FileIO", "FixedPointNumbers", "ImageCore", "libwebp_jll"] +git-tree-sha1 = "aa1ca3c47f119fbdae8770c29820e5e6119b83f2" +uuid = "e3aaa7dc-3e4b-44e0-be63-ffb868ccd7c1" +version = "0.1.3" + +[[deps.WoodburyMatrices]] +deps = ["LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "248a7031b3da79a127f14e5dc5f417e26f9f6db7" +uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" +version = "1.1.0" + [[deps.WorkerUtilities]] git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7" uuid = "76eceee3-57b5-4d4a-8e66-0e911cebbf60" @@ -2822,6 +3420,12 @@ git-tree-sha1 = "b6a34e0e0960190ac2a4363a1bd003504772d631" uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" version = "0.61.1+0" +[[deps.isoband_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51b5eeb3f98367157a7a12a1fb0aa5328946c03c" +uuid = "9a68df92-36a6-505f-a73e-abb412b6bfb4" +version = "0.2.3+0" + [[deps.libaec_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] git-tree-sha1 = "60f4792734488db6f42e2c7699f1d4594780bd03" @@ -2881,6 +3485,12 @@ git-tree-sha1 = "e51150d5ab85cee6fc36726850f0e627ad2e4aba" uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" version = "1.6.58+0" +[[deps.libsixel_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "libpng_jll"] +git-tree-sha1 = "c1733e347283df07689d71d61e14be986e49e47a" +uuid = "075b6546-f08a-558a-be8f-8157d0f608a5" +version = "1.10.5+0" + [[deps.libva_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll", "Xorg_libXfixes_jll", "libdrm_jll"] git-tree-sha1 = "7dbf96baae3310fe2fa0df0ccbb3c6288d5816c9" @@ -2893,6 +3503,12 @@ git-tree-sha1 = "11e1772e7f3cc987e9d3de991dd4f6b2602663a5" uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" version = "1.3.8+0" +[[deps.libwebp_jll]] +deps = ["Artifacts", "Giflib_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libglvnd_jll", "Libtiff_jll", "libpng_jll"] +git-tree-sha1 = "4e4282c4d846e11dce56d74fa8040130b7a95cb3" +uuid = "c5f90fcd-3b7e-5836-afba-fc50a0988cb2" +version = "1.6.0+0" + [[deps.libzip_jll]] deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "OpenSSL_jll", "XZ_jll", "Zlib_jll", "Zstd_jll"] git-tree-sha1 = "86addc139bca85fdf9e7741e10977c45785727b7" diff --git a/Project.toml b/Project.toml index 918c7fdb4..252af0fb4 100644 --- a/Project.toml +++ b/Project.toml @@ -11,6 +11,7 @@ Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" Artifacts = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" BasicModelInterface = "59605e27-edc0-445a-b93d-c09a3a50b330" +CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" Configurations = "5218b696-f38b-4ac9-8b61-a12ec717816d" DBInterface = "a10d1c49-ce27-4219-8d33-6db1a4562965" @@ -24,6 +25,7 @@ DiffEqCallbacks = "459566f4-90b8-5000-8ac3-15dfb0a30def" DifferentiationInterface = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" EnumX = "4e289a0a-7415-4d19-859d-a7e5c4648b56" FindFirstFunctions = "64ca27bc-2ba2-4a57-88aa-44e436879224" +FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" FiniteDiff = "6a86dc24-6348-571c-b903-95158fe2bd41" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" Glob = "c27321d9-0574-5035-807b-f59d2c89b15c" @@ -72,6 +74,7 @@ SciMLOperators = "c0aeaf25-5076-4817-a8d5-81caf7dfa961" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" SparseMatrixColorings = "0a514795-09f3-496d-8182-132a7b665d35" +StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" TOML = "fa267f1f-6049-4f14-aa54-33bafae1ed76" diff --git a/core/src/config.jl b/core/src/config.jl index 502c173a7..3a79b5f16 100644 --- a/core/src/config.jl +++ b/core/src/config.jl @@ -225,9 +225,14 @@ end route_priority::RoutePriority = RoutePriority() end +@option struct IrrigationConfig <: TableOption + dt::Float64 = 86400.0 +end + @option struct Experimental <: TableOption concentration::Bool = false allocation::Bool = false + irrigation::Bool = false end # For logging enabled experimental features @@ -254,6 +259,7 @@ end logging::Logging = Logging() results::Results = Results() experimental::Experimental = Experimental() + irrigation::IrrigationConfig = IrrigationConfig() end struct Config diff --git a/core/src/model.jl b/core/src/model.jl index 9e2764b4e..086cb3225 100644 --- a/core/src/model.jl +++ b/core/src/model.jl @@ -193,6 +193,7 @@ function Model(config::Config)::Model saveat = convert_saveat(config.solver.saveat, t_end) saveat isa Float64 && push!(tstops, range(0, t_end; step = saveat)) + push!(tstops, get_irrigation_tstops(config)) tstops = sort(unique(reduce(vcat, tstops))) adaptive = is_adaptive(config.solver.dt) @@ -278,10 +279,55 @@ function is_finished(model::Model)::Bool end """ - step!(model::Model, dt::Float64)::Model +Before each allocation solve: pull irrigation demand from the soil model and +write it into the corresponding UserDemand demand column. +No-op when irrigation is disabled or the IrrigationModel has not been set yet. +""" +function update_irrigation_demand!(p_independent::ParametersIndependent, t::Float64)::Nothing + (; irrigation, user_demand) = p_independent + isnothing(irrigation) && return nothing + isnothing(irrigation.model) && return nothing + isnothing(irrigation.compute_demand!) && return nothing + demand_vec = irrigation.compute_demand!(irrigation.model) + for (i, id) in enumerate(irrigation.node_id) + val = isnan(demand_vec[i]) ? 0.0 : demand_vec[i] + user_demand.demand[id.idx, irrigation.demand_priority_idxs[i]] = val * irrigation.irrigated_area_m2[i] + end + return nothing +end -Take Model timesteps until `t + dt` is reached exactly. """ +After each allocation solve: pass the granted allocation back into the soil model +and advance the soil model to `t + Δt`. +No-op when irrigation is disabled or the IrrigationModel has not been set yet. +""" +function update_irrigation_supply!(p_independent::ParametersIndependent, Δt::Float64)::Nothing + (; irrigation, user_demand, allocation) = p_independent + isnothing(irrigation) && return nothing + isnothing(irrigation.model) && return nothing + isnothing(irrigation.advance!) && return nothing + for (i, id) in enumerate(irrigation.node_id) + # Sum realized volume [m³] over all inflow links of this UserDemand node, + # across all allocation models (there is typically one subnetwork). + realized_m3 = sum( + get(am.cumulative_supplied_volume, lm.link, 0.0) + for am in allocation.allocation_models + for lm in user_demand.inflow_links[id.idx]; + init = 0.0, + ) + # Convert m³ over Δt → m/s → set on soil model + irrigation.allocated_buffer[i] = realized_m3 / Δt / irrigation.irrigated_area_m2[i] + end + irrigation.model.allocation.irrigation_allocation .= irrigation.allocated_buffer + # Advance the soil model one step (update! increments tcurrent internally) + t_end_soil = irrigation.model.tcurrent + Δt + while irrigation.model.tcurrent < t_end_soil - 0.5 * irrigation.model.dt + irrigation.model.allocation.irrigation_allocation .= irrigation.allocated_buffer + irrigation.advance!(irrigation.model) + end + return nothing +end + function step!(model::Model, dt::Float64)::Model (; config, integrator) = model (; t) = integrator @@ -290,7 +336,11 @@ function step!(model::Model, dt::Float64)::Model # set over BMI at time t before calling this function. ntimes = t / something(config.allocation.dt, 86400.0) if round(ntimes) ≈ ntimes + update_irrigation_demand!(integrator.p.p_independent, t) update_allocation!(model) + SciMLBase.step!(integrator, dt, true) + update_irrigation_supply!(integrator.p.p_independent, dt) + return model end SciMLBase.step!(integrator, dt, true) return model @@ -334,24 +384,31 @@ function solve_with_allocation!(model::Model)::Nothing (; config, integrator) = model (; tspan::Tuple{Float64, Float64}) = integrator.sol.prob + p_independent = integrator.p.p_independent if config.allocation.dt === nothing saveat = config.solver.saveat while integrator.t < tspan[end] - eps(tspan[end]) Δt = compute_and_set_adaptive_Δt!(model, saveat, tspan[end]) + update_irrigation_demand!(p_independent, integrator.t) update_allocation!(model, Δt; record = is_saveat_time(integrator.t, saveat, tspan[end])) SciMLBase.step!(integrator, Δt, true) + update_irrigation_supply!(p_independent, Δt) end else dt_alloc = config.allocation.dt n_allocation_times = floor(Int, tspan[end] / dt_alloc) for _ in 1:n_allocation_times + update_irrigation_demand!(p_independent, integrator.t) update_allocation!(model) SciMLBase.step!(integrator, dt_alloc, true) + update_irrigation_supply!(p_independent, dt_alloc) end dt = tspan[end] - integrator.t if dt > 0 + update_irrigation_demand!(p_independent, integrator.t) update_allocation!(model) SciMLBase.step!(integrator, dt, true) + update_irrigation_supply!(p_independent, dt) end end return nothing diff --git a/core/src/parameter.jl b/core/src/parameter.jl index 49b6b0599..f618135d0 100644 --- a/core/src/parameter.jl +++ b/core/src/parameter.jl @@ -1129,6 +1129,38 @@ The part of the parameters passed to the rhs and callbacks that are mutable. tprev::Float64 = 0.0 end +""" +Coupling parameters for the Wflow-based irrigation soil model. + +node_id: NodeIDs of the UserDemand nodes that have irrigation enabled +model: The IrrigationModel instance from irrigation/src/irrigation.jl (set after construction) +demand_priority_idx: Column index into UserDemand.demand / UserDemand.allocated to write/read +allocated_buffer: Scratch buffer [m/s] for passing allocation results to the soil model +""" +mutable struct IrrigationCoupling + node_id::Vector{NodeID} + model::Any # Irrigation.IrrigationModel; set externally before solve + compute_demand!::Any # Function (model) -> demand_vec; set together with model + advance!::Any # Function (model) -> nothing; advances soil model one dt + demand_priority_idxs::Vector{Int} # per-node priority column index into UserDemand.demand + irrigated_area_m2::Vector{Float64} # irrigated area per soil column [m²] + # Parsed forcing per node (index i = node order in node_id) + precipitation_mmday::Vector{Vector{Float64}} + potential_evaporation_mmday::Vector{Vector{Float64}} + forcing_timestamps::Vector{DateTime} + allocated_buffer::Vector{Float64} +end + +IrrigationCoupling(node_id::Vector{NodeID}, demand_priority_idxs::Vector{Int}) = + IrrigationCoupling( + node_id, nothing, nothing, nothing, demand_priority_idxs, + ones(length(node_id)), + [Float64[] for _ in node_id], + [Float64[] for _ in node_id], + DateTime[], + zeros(length(node_id)), +) + """ The part of the parameters passed to the rhs and callbacks that are non-mutable, and not derived from the state vector `u` (or the time `t`). In this context e.g. a vector @@ -1184,6 +1216,8 @@ the object itself is not. u_reduced::RibasimReducedCVectorType{Float64} # Solver constants level_difference_threshold::Float64 + # Optional irrigation soil model coupling (nothing when not enabled) + irrigation::Union{IrrigationCoupling, Nothing} = nothing end """ diff --git a/core/src/read.jl b/core/src/read.jl index 4b8f54cbd..2daf5fd50 100644 --- a/core/src/read.jl +++ b/core/src/read.jl @@ -1689,6 +1689,39 @@ function Parameters(db::DB, config::Config)::Parameters ), ) + irrigation = if config.experimental.irrigation + user_demand = nodes.user_demand + # Find the priority column index for each UserDemand node (first active priority) + demand_priority_idxs = [findfirst(user_demand.has_demand_priority[id.idx, :]) for id in user_demand.node_id] + # Fall back to 1 for any node with no priority set yet (will be overridden by soil model) + demand_priority_idxs = [isnothing(idx) ? 1 : idx for idx in demand_priority_idxs] + coupling = IrrigationCoupling(user_demand.node_id, demand_priority_idxs) + + # Read irrigated area per node (optional; default 1.0 m²) + irr_static = load_structvector(db, config, Schema.UserDemand.IrrigationStatic) + for row in irr_static + idx = findfirst(id -> id.value == row.node_id, coupling.node_id) + isnothing(idx) && continue + coupling.irrigated_area_m2[idx] = row.irrigated_area_m2 + end + + # Read per-node forcing timeseries + irr_forcing = load_structvector(db, config, Schema.UserDemand.IrrigationForcing) + if !isempty(irr_forcing) + coupling.forcing_timestamps = sort(unique(irr_forcing.time)) + for (i, id) in enumerate(coupling.node_id) + rows = filter(r -> r.node_id == id.value, irr_forcing) + sorted = sort(rows; by = r -> r.time) + coupling.precipitation_mmday[i] = [r.precipitation for r in sorted] + coupling.potential_evaporation_mmday[i] = [r.potential_evaporation for r in sorted] + end + end + + coupling + else + nothing + end + p_independent = ParametersIndependent(; config.starttime, config.solver.reltol, @@ -1711,6 +1744,7 @@ function Parameters(db::DB, config::Config)::Parameters convergence = CVector(zeros(n_states), state_ranges), u_reduced, config.solver.level_difference_threshold, + irrigation, ) collect_control_mappings!(p_independent) diff --git a/core/src/schema.jl b/core/src/schema.jl index b8be0a7aa..720287202 100644 --- a/core/src/schema.jl +++ b/core/src/schema.jl @@ -342,6 +342,18 @@ module Schema concentration::Float64 end + struct IrrigationStatic <: Table + node_id::Int32 + irrigated_area_m2::Float64 + end + + struct IrrigationForcing <: Table + node_id::Int32 + time::DateTime + precipitation::Float64 + potential_evaporation::Float64 + end + end module LevelDemand diff --git a/core/src/util.jl b/core/src/util.jl index b1d8ef4e3..d5a060c90 100644 --- a/core/src/util.jl +++ b/core/src/util.jl @@ -1336,3 +1336,18 @@ function add_substance_mass!( end return nothing end + +get_t_end(config::Config) = seconds_since(config.endtime, config.starttime) + +""" +Return the uniform grid of solver tstops [s] for the irrigation coupling, or an +empty vector when irrigation is disabled. +""" +function get_irrigation_tstops(config::Config)::Vector{Float64} + return if config.experimental.irrigation + t_end = get_t_end(config) + collect(range(0, t_end; step = config.irrigation.dt)) + else + Float64[] + end +end diff --git a/core/src/validation.jl b/core/src/validation.jl index 4dac0401b..190803c66 100644 --- a/core/src/validation.jl +++ b/core/src/validation.jl @@ -244,6 +244,8 @@ sort_by(::StructVector{Schema.TabulatedRatingCurve.Time}) = sort_by(::StructVector{Schema.UserDemand.Concentration}) = x -> (x.node_id, x.substance, x.time) +sort_by(::StructVector{Schema.UserDemand.IrrigationStatic}) = x -> (x.node_id) +sort_by(::StructVector{Schema.UserDemand.IrrigationForcing}) = x -> (x.node_id, x.time) sort_by(::StructVector{Schema.UserDemand.Static}) = x -> (x.node_id, x.demand_priority) sort_by(::StructVector{Schema.UserDemand.Time}) = x -> (x.node_id, x.demand_priority, x.time) diff --git a/irrigation/Manifest.toml b/irrigation/Manifest.toml new file mode 100644 index 000000000..00d4cf283 --- /dev/null +++ b/irrigation/Manifest.toml @@ -0,0 +1,3088 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.12.6" +manifest_format = "2.0" +project_hash = "d41f153c0933b78ff938add5caa616441cd2e6c0" + +[[deps.ADTypes]] +git-tree-sha1 = "d9aaef7c63466eee4de23b4d9dad03629df54bea" +uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" +version = "1.22.1" +weakdeps = ["ChainRulesCore", "ConstructionBase", "EnzymeCore"] + + [deps.ADTypes.extensions] + ADTypesChainRulesCoreExt = "ChainRulesCore" + ADTypesConstructionBaseExt = "ConstructionBase" + ADTypesEnzymeCoreExt = "EnzymeCore" + +[[deps.AMD]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse_jll"] +git-tree-sha1 = "45a1272e3f809d36431e57ab22703c6896b8908f" +uuid = "14f7f29c-3bd6-536c-9a0b-7339e30b5a3e" +version = "0.5.3" + +[[deps.AbstractFFTs]] +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 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" +uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" +version = "0.4.5" + +[[deps.Accessors]] +deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "MacroTools"] +git-tree-sha1 = "7063ad1083578215c7c4bf410368150abe8d5524" +uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" +version = "0.1.45" + + [deps.Accessors.extensions] + AxisKeysExt = "AxisKeys" + IntervalSetsExt = "IntervalSets" + LinearAlgebraExt = "LinearAlgebra" + StaticArraysExt = "StaticArrays" + StructArraysExt = "StructArrays" + TestExt = "Test" + UnitfulExt = "Unitful" + + [deps.Accessors.weakdeps] + AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.Adapt]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "daa72978cd7a624246e894a4f4f067706d4e17e2" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.7.0" +weakdeps = ["SparseArrays", "StaticArrays"] + + [deps.Adapt.extensions] + AdaptSparseArraysExt = "SparseArrays" + AdaptStaticArraysExt = "StaticArrays" + +[[deps.AdaptivePredicates]] +git-tree-sha1 = "7e651ea8d262d2d74ce75fdf47c4d63c07dba7a6" +uuid = "35492f91-a3bd-45ad-95db-fcad7dcfedb7" +version = "1.2.0" + +[[deps.AliasTables]] +deps = ["PtrArrays", "Random"] +git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" +uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" +version = "1.1.3" + +[[deps.Animations]] +deps = ["Colors"] +git-tree-sha1 = "e092fa223bf66a3c41f9c022bd074d916dc303e7" +uuid = "27a7e980-b3e6-11e9-2bcd-0b925532e340" +version = "0.4.2" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.2" + +[[deps.ArnoldiMethod]] +deps = ["LinearAlgebra", "Random", "StaticArrays"] +git-tree-sha1 = "d57bd3762d308bded22c3b82d033bff85f6195c6" +uuid = "ec485272-7323-5ecc-a04f-4719b315124d" +version = "0.4.0" + +[[deps.ArrayInterface]] +deps = ["Adapt", "LinearAlgebra"] +git-tree-sha1 = "75757da5d9f771ef5909fc84f81d2f9d24127315" +uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" +version = "7.27.0" + + [deps.ArrayInterface.extensions] + ArrayInterfaceAMDGPUExt = "AMDGPU" + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceCUDSSExt = ["CUDSS", "CUDA"] + ArrayInterfaceChainRulesCoreExt = "ChainRulesCore" + ArrayInterfaceChainRulesExt = "ChainRules" + ArrayInterfaceFillArraysExt = "FillArrays" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + ArrayInterfaceMetalExt = "Metal" + ArrayInterfaceReverseDiffExt = "ReverseDiff" + ArrayInterfaceSparseArraysExt = "SparseArrays" + ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" + ArrayInterfaceTrackerExt = "Tracker" + + [deps.ArrayInterface.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + 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" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" +version = "1.11.0" + +[[deps.Automa]] +deps = ["PrecompileTools", "TranscodingStreams"] +git-tree-sha1 = "94eab0b3ccdcac361188cc661daf69d4433c1818" +uuid = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b" +version = "1.2.0" + +[[deps.AxisAlgorithms]] +deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] +git-tree-sha1 = "01b8ccb13d68535d73d2b0c23e39bd23155fb712" +uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950" +version = "1.1.0" + +[[deps.AxisArrays]] +deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"] +git-tree-sha1 = "4126b08903b777c88edf1754288144a0492c05ad" +uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9" +version = "0.4.8" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +version = "1.11.0" + +[[deps.BaseDirs]] +git-tree-sha1 = "8c290a1b223deaeea9aea44b235d24546da8eb98" +uuid = "18cc8868-cbac-4acf-b575-c8ff214dc66f" +version = "1.4.0" + +[[deps.BasicModelInterface]] +git-tree-sha1 = "ca36dc6dc9bbeea3dbbe3901837496ece85276e5" +uuid = "59605e27-edc0-445a-b93d-c09a3a50b330" +version = "0.1.1" + +[[deps.BinaryHeaps]] +git-tree-sha1 = "3cf91ee7912c42f2785c50463a80b356494413fa" +uuid = "b2a6c25c-c996-4615-94ab-6e519ffb8690" +version = "1.0.1" + +[[deps.BitTwiddlingConvenienceFunctions]] +deps = ["Static"] +git-tree-sha1 = "f21cfd4950cb9f0587d5067e69405ad2acd27b87" +uuid = "62783981-4cbd-42fc-bca8-16325de8dc4b" +version = "0.1.6" + +[[deps.Blosc_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Lz4_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "535c80f1c0847a4c967ea945fca21becc9de1522" +uuid = "0b7ba130-8d10-5ba8-a3d6-c5182647fed9" +version = "1.21.7+0" + +[[deps.BracketingNonlinearSolve]] +deps = ["CommonSolve", "ConcreteStructs", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase"] +git-tree-sha1 = "6e7c9b6ab9aa711009a49252e45a122212c1d869" +uuid = "70df07ce-3d50-431d-a3e7-ca6ddb60ac1e" +version = "1.12.2" +weakdeps = ["ChainRulesCore", "ForwardDiff"] + + [deps.BracketingNonlinearSolve.extensions] + BracketingNonlinearSolveChainRulesCoreExt = ["ChainRulesCore", "ForwardDiff"] + BracketingNonlinearSolveForwardDiffExt = "ForwardDiff" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1b96ea4a01afe0ea4090c5c8039690672dd13f2e" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.9+0" + +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + +[[deps.CFTime]] +deps = ["Dates", "Printf"] +git-tree-sha1 = "fad2f199d1f1ae0c8e820ab68f81f6dbf62e60b2" +uuid = "179af706-886a-5703-950a-314cd64e0468" +version = "0.2.10" + +[[deps.CPUSummary]] +deps = ["CpuId", "IfElse", "PrecompileTools", "Preferences", "Static"] +git-tree-sha1 = "f3a21d7fc84ba618a779d1ed2fcca2e682865bab" +uuid = "2a0fbf3d-bb9c-48f3-b0a9-814d99fd7ab9" +version = "0.2.7" + +[[deps.CRC32c]] +uuid = "8bf52ea8-c179-5cab-976a-9e18b702a9bc" +version = "1.11.0" + +[[deps.CRlibm]] +deps = ["CRlibm_jll"] +git-tree-sha1 = "66188d9d103b92b6cd705214242e27f5737a1e5e" +uuid = "96374032-68de-5a5b-8d9e-752f78720389" +version = "1.0.2" + +[[deps.CRlibm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e329286945d0cfc04456972ea732551869af1cfc" +uuid = "4e9b3aee-d8a1-5a3d-ad8b-7d824db253f0" +version = "1.0.1+0" + +[[deps.Cairo]] +deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"] +git-tree-sha1 = "71aa551c5c33f1a4415867fe06b7844faadb0ae9" +uuid = "159f3aea-2a34-519c-b102-8c37f9878175" +version = "1.1.1" + +[[deps.CairoMakie]] +deps = ["CRC32c", "Cairo", "Cairo_jll", "Colors", "FileIO", "FreeType", "GeometryBasics", "LinearAlgebra", "Makie", "PrecompileTools"] +git-tree-sha1 = "47142129b1777e21da58cff265050b10d8560588" +uuid = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" +version = "0.15.13" + +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "1fa950ebc3e37eccd51c6a8fe1f92f7d86263522" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.18.7+0" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra"] +git-tree-sha1 = "12177ad6b3cad7fd50c8b3825ce24a99ad61c18f" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.26.1" +weakdeps = ["SparseArrays"] + + [deps.ChainRulesCore.extensions] + ChainRulesCoreSparseArraysExt = "SparseArrays" + +[[deps.CloseOpenIntervals]] +deps = ["Static", "StaticArrayInterface"] +git-tree-sha1 = "05ba0d07cd4fd8b7a39541e31a7b0254704ea581" +uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9" +version = "0.1.13" + +[[deps.CodecBzip2]] +deps = ["Bzip2_jll", "TranscodingStreams"] +git-tree-sha1 = "84990fa864b7f2b4901901ca12736e45ee79068c" +uuid = "523fee87-0ab8-5b00-afb7-3ecf72e48cfd" +version = "0.8.5" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.8" + +[[deps.CodecZstd]] +deps = ["TranscodingStreams", "Zstd_jll"] +git-tree-sha1 = "da54a6cd93c54950c15adf1d336cfd7d71f51a56" +uuid = "6b39b394-51ab-5f42-8807-6242bab2b4c2" +version = "0.8.7" + +[[deps.ColorBrewer]] +deps = ["Colors", "JSON"] +git-tree-sha1 = "07da79661b919001e6863b81fc572497daa58349" +uuid = "a2cac450-b92f-5266-8821-25eda20663c8" +version = "0.4.2" + +[[deps.ColorSchemes]] +deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] +git-tree-sha1 = "b0fd3f56fa442f81e0a47815c92245acfaaa4e34" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.31.0" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "67e11ee83a43eb71ddc950302c53bf33f0690dfe" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.12.1" +weakdeps = ["StyledStrings"] + + [deps.ColorTypes.extensions] + StyledStringsExt = "StyledStrings" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] +git-tree-sha1 = "8b3b6f87ce8f65a2b4f857528fd8d70086cd72b1" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.11.0" +weakdeps = ["SpecialFunctions"] + + [deps.ColorVectorSpace.extensions] + SpecialFunctionsExt = "SpecialFunctions" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "37ea44092930b1811e666c3bc38065d7d87fcc74" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.13.1" + +[[deps.CommonDataModel]] +deps = ["CFTime", "DataStructures", "Dates", "DiskArrays", "Preferences", "Printf", "Statistics"] +git-tree-sha1 = "54d50f8a0a68ff4160564dfa09fc5de32465cfca" +uuid = "1fbeeb36-5f17-413c-809b-666fb144f157" +version = "0.4.4" + +[[deps.CommonSolve]] +git-tree-sha1 = "99ee296f88c12485402e37c2fd025f95ae097637" +uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" +version = "0.2.9" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools"] +git-tree-sha1 = "cda2cfaebb4be89c9084adaca7dd7333369715c5" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.1" + +[[deps.CommonWorldInvalidations]] +git-tree-sha1 = "f1697a56da59e8a2cefcbbfe71c13354a6f18c61" +uuid = "f70d9fcc-98c5-4d4a-abd7-e4cdeebd8ca8" +version = "1.1.0" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.18.1" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.3.0+1" + +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" +weakdeps = ["InverseFunctions"] + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + +[[deps.ComputePipeline]] +deps = ["Observables", "Preferences"] +git-tree-sha1 = "7bc84b769c1d384315e7b5c4ac03a6c303e6cf35" +uuid = "95dc2771-c249-4cd0-9c9f-1f3b4330693c" +version = "0.1.8" + +[[deps.ConcreteStructs]] +git-tree-sha1 = "1988532cb3b4525bb718b99ba07e433bbf0e600b" +uuid = "2569d6c7-a4a2-43d3-a901-331e8e4be471" +version = "0.2.5" + +[[deps.Configurations]] +deps = ["ExproniconLite", "OrderedCollections", "TOML"] +git-tree-sha1 = "4358750bb58a3caefd5f37a4a0c5bfdbbf075252" +uuid = "5218b696-f38b-4ac9-8b61-a12ec717816d" +version = "0.17.6" + +[[deps.ConstructionBase]] +git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.6.0" +weakdeps = ["IntervalSets", "LinearAlgebra", "StaticArrays"] + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseLinearAlgebraExt = "LinearAlgebra" + ConstructionBaseStaticArraysExt = "StaticArrays" + +[[deps.Contour]] +git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" +uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" +version = "0.6.3" + +[[deps.CoreMath]] +deps = ["CoreMath_jll"] +git-tree-sha1 = "8c0480f92b1b1796239156a1b9b1bfb1b39499b4" +uuid = "b7a15901-be09-4a0e-87d2-2e66b0e09b5a" +version = "0.1.0" + +[[deps.CoreMath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a692a4c1dc59a4b8bc0b6403876eb3250fde2bc3" +uuid = "a38c48d9-6df1-5ac9-9223-b6ada3b5572b" +version = "0.1.0+0" + +[[deps.CpuId]] +deps = ["Markdown"] +git-tree-sha1 = "fcbb72b032692610bfbdb15018ac16a36cf2e406" +uuid = "adafc99b-e345-5852-983c-f28acb93d879" +version = "0.3.1" + +[[deps.Crayons]] +git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" +uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" +version = "4.1.1" + +[[deps.DBInterface]] +git-tree-sha1 = "a444404b3f94deaa43ca2a58e18153a82695282b" +uuid = "a10d1c49-ce27-4219-8d33-6db1a4562965" +version = "2.6.1" + +[[deps.DataAPI]] +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.16.0" + +[[deps.DataInterpolations]] +deps = ["EnumX", "FindFirstFunctions", "ForwardDiff", "LinearAlgebra", "PrettyTables", "RecipesBase", "Reexport"] +git-tree-sha1 = "ab3e0909ad9a9f92b0a1b6920b081deaa30e5433" +uuid = "82cc6244-b520-54b8-b5a6-8a565e85f1d0" +version = "9.0.0" + + [deps.DataInterpolations.extensions] + DataInterpolationsChainRulesCoreExt = "ChainRulesCore" + DataInterpolationsMakieExt = "Makie" + DataInterpolationsMooncakeExt = ["Mooncake", "ChainRulesCore"] + DataInterpolationsOptimExt = "Optim" + DataInterpolationsSparseConnectivityTracerExt = ["SparseConnectivityTracer", "FillArrays"] + DataInterpolationsSymbolicsExt = "Symbolics" + + [deps.DataInterpolations.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" + Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + Optim = "429524aa-4258-5aef-a3af-852621145aeb" + SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" + Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.DataStructures]] +deps = ["OrderedCollections"] +git-tree-sha1 = "6fb53a69613a0b2b68a0d12671717d307ab8b24e" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.19.5" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" +version = "1.11.0" + +[[deps.DelaunayTriangulation]] +deps = ["AdaptivePredicates", "EnumX", "ExactPredicates", "Random"] +git-tree-sha1 = "c55f5a9fd67bdbc8e089b5a3111fe4292986a8e8" +uuid = "927a84f5-c5f4-47a5-9785-b46e178433df" +version = "1.6.6" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +version = "1.9.1" + +[[deps.DiffEqBase]] +deps = ["ArrayInterface", "BracketingNonlinearSolve", "ConcreteStructs", "DocStringExtensions", "FastBroadcast", "FastClosures", "FastPower", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLLogging", "SciMLOperators", "SciMLStructures", "Setfield", "StaticArraysCore", "SymbolicIndexingInterface", "TruncatedStacktraces"] +git-tree-sha1 = "3696ff4a00fe366e768ba6df61779ac6f5079c2d" +uuid = "2b5f629d-d688-5b77-993f-72d75c75574e" +version = "7.6.1" + + [deps.DiffEqBase.extensions] + DiffEqBaseCUDAExt = "CUDA" + DiffEqBaseChainRulesCoreExt = "ChainRulesCore" + DiffEqBaseDynamicQuantitiesExt = "DynamicQuantities" + DiffEqBaseEnzymeExt = ["ChainRulesCore", "Enzyme"] + DiffEqBaseFlexUnitsExt = "FlexUnits" + DiffEqBaseForwardDiffExt = ["ForwardDiff"] + DiffEqBaseGTPSAExt = "GTPSA" + DiffEqBaseGeneralizedGeneratedExt = "GeneralizedGenerated" + DiffEqBaseMPIExt = "MPI" + DiffEqBaseMeasurementsExt = "Measurements" + DiffEqBaseMonteCarloMeasurementsExt = "MonteCarloMeasurements" + DiffEqBaseMooncakeExt = "Mooncake" + DiffEqBaseReverseDiffExt = "ReverseDiff" + DiffEqBaseSparseArraysExt = "SparseArrays" + DiffEqBaseTrackerExt = "Tracker" + DiffEqBaseUnitfulExt = "Unitful" + + [deps.DiffEqBase.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" + DynamicQuantities = "06fc5a27-2a28-4c7c-a15d-362465fb6821" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + FlexUnits = "76e01b6b-c995-4ce6-8559-91e72a3d4e95" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + GTPSA = "b27dd330-f138-47c5-815b-40db9dd9b6e8" + GeneralizedGenerated = "6b9d7cbe-bcb9-11e9-073f-15a7a543e2eb" + MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.DiffEqCallbacks]] +deps = ["ConcreteStructs", "DataStructures", "DiffEqBase", "DifferentiationInterface", "LinearAlgebra", "Markdown", "PrecompileTools", "RecipesBase", "RecursiveArrayTools", "SciMLBase", "StaticArraysCore"] +git-tree-sha1 = "1028a398b137a52cc0027a28d99b231531636b1b" +uuid = "459566f4-90b8-5000-8ac3-15dfb0a30def" +version = "4.18.1" + + [deps.DiffEqCallbacks.extensions] + DiffEqCallbacksFunctorsExt = "Functors" + + [deps.DiffEqCallbacks.weakdeps] + Functors = "d9f16b24-f501-4c13-a1f2-28368ffc5196" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "79a2aca180a85c690c58a020d47b426954b590f8" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.16.0" + +[[deps.DifferentiationInterface]] +deps = ["ADTypes", "LinearAlgebra"] +git-tree-sha1 = "2348cf722e74ef177e165986c765b61217f7433a" +uuid = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" +version = "0.7.19" + + [deps.DifferentiationInterface.extensions] + DifferentiationInterfaceChainRulesCoreExt = "ChainRulesCore" + DifferentiationInterfaceDiffractorExt = "Diffractor" + DifferentiationInterfaceEnzymeExt = ["EnzymeCore", "Enzyme"] + DifferentiationInterfaceFastDifferentiationExt = "FastDifferentiation" + DifferentiationInterfaceFiniteDiffExt = "FiniteDiff" + DifferentiationInterfaceFiniteDifferencesExt = "FiniteDifferences" + DifferentiationInterfaceForwardDiffExt = ["ForwardDiff", "DiffResults"] + DifferentiationInterfaceGPUArraysCoreExt = ["GPUArraysCore", "Adapt"] + DifferentiationInterfaceGTPSAExt = "GTPSA" + DifferentiationInterfaceHyperHessiansExt = "HyperHessians" + DifferentiationInterfaceMooncakeExt = "Mooncake" + DifferentiationInterfacePolyesterForwardDiffExt = ["PolyesterForwardDiff", "ForwardDiff", "DiffResults"] + DifferentiationInterfaceReverseDiffExt = ["ReverseDiff", "DiffResults"] + DifferentiationInterfaceSparseArraysExt = "SparseArrays" + DifferentiationInterfaceSparseConnectivityTracerExt = "SparseConnectivityTracer" + DifferentiationInterfaceSparseMatrixColoringsExt = "SparseMatrixColorings" + DifferentiationInterfaceStaticArraysExt = "StaticArrays" + DifferentiationInterfaceSymbolicsExt = "Symbolics" + DifferentiationInterfaceTrackerExt = "Tracker" + DifferentiationInterfaceZygoteExt = ["Zygote", "ForwardDiff"] + + [deps.DifferentiationInterface.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DiffResults = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" + Diffractor = "9f5e2b26-1114-432f-b630-d3fe2085c51c" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + FastDifferentiation = "eb9bf01b-bf85-4b60-bf87-ee5de06c00be" + FiniteDiff = "6a86dc24-6348-571c-b903-95158fe2bd41" + FiniteDifferences = "26cc04aa-876d-5657-8c51-4c34ba976000" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + GTPSA = "b27dd330-f138-47c5-815b-40db9dd9b6e8" + HyperHessians = "06b494a0-c8e0-40cc-ad32-d99506a00a6c" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + PolyesterForwardDiff = "98d1487c-24ca-40b6-b7ab-df2af84e126b" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" + SparseMatrixColorings = "0a514795-09f3-496d-8182-132a7b665d35" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.DiskArrays]] +deps = ["ConstructionBase", "LRUCache", "Mmap", "OffsetArrays"] +git-tree-sha1 = "9903195c34a488c5265d9a105f39718b7a2b3568" +uuid = "3c3547ce-8d99-4f5e-a174-61eb10b00ae3" +version = "0.4.22" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" +version = "1.11.0" + +[[deps.Distributions]] +deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "Roots", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "cd3c5ac74cd3923c8945c6a81518c46abd0e73a3" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.129" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + DistributionsSparseConnectivityTracerExt = "SparseConnectivityTracer" + DistributionsTestExt = "Test" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.DocStringExtensions]] +git-tree-sha1 = "7442a5dfe1ebb773c29cc2962a8980f47221d76c" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.5" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.7.0" + +[[deps.Dualization]] +deps = ["LinearAlgebra", "MathOptInterface"] +git-tree-sha1 = "2186a7ffcd33ea52dcc28321020e049f00454b2f" +uuid = "191a621a-6537-11e9-281d-650236a99e60" +version = "0.7.7" +weakdeps = ["JuMP"] + + [deps.Dualization.extensions] + DualizationJuMPExt = "JuMP" + +[[deps.EarCut_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e3290f2d49e661fbd94046d7e3726ffcb2d41053" +uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" +version = "2.2.4+0" + +[[deps.EnumX]] +git-tree-sha1 = "c49898e8438c828577f04b92fc9368c388ac783c" +uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" +version = "1.0.7" + +[[deps.EnzymeCore]] +git-tree-sha1 = "971d7831cc85f43bc9f51d615a3f7f21270c2f1d" +uuid = "f151be2c-9106-41f4-ab19-57ee4f262869" +version = "0.8.21" +weakdeps = ["Adapt", "ChainRulesCore"] + + [deps.EnzymeCore.extensions] + AdaptExt = "Adapt" + EnzymeCoreChainRulesCoreExt = "ChainRulesCore" + +[[deps.ExactPredicates]] +deps = ["IntervalArithmetic", "Random", "StaticArrays"] +git-tree-sha1 = "83231673ea4d3d6008ac74dc5079e77ab2209d8f" +uuid = "429591f6-91af-11e9-00e2-59fbe8cec110" +version = "2.2.9" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e6c4a6407a949e79a9d3f249bf49e6987c80e01f" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.8.2+0" + +[[deps.ExprTools]] +git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" +uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" +version = "0.1.10" + +[[deps.ExproniconLite]] +git-tree-sha1 = "c13f0b150373771b0fdc1713c97860f8df12e6c2" +uuid = "55351af7-c7e9-48d6-89ff-24e801d99491" +version = "0.10.14" + +[[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", "libva_jll", "libvorbis_jll", "x264_jll", "x265_jll"] +git-tree-sha1 = "7a58e45171b63ed4782f2d36fdee8713a469e6e0" +uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" +version = "8.1.2+0" + +[[deps.FFTA]] +deps = ["AbstractFFTs", "DocStringExtensions", "LinearAlgebra", "MuladdMacro", "Primes", "Random", "Reexport"] +git-tree-sha1 = "65e55303b72f4a567a51b174dd2c47496efeb95a" +uuid = "b86e33f2-c0db-4aa1-a6e0-ab43e668529e" +version = "0.3.1" + +[[deps.FastBroadcast]] +deps = ["ArrayInterface", "LinearAlgebra"] +git-tree-sha1 = "8b77b1a6d20b051c223c4907d92dbf9af7b23fa5" +uuid = "7034ab61-46d4-4ed7-9d0f-46aef9175898" +version = "1.3.3" +weakdeps = ["Polyester", "Static"] + + [deps.FastBroadcast.extensions] + FastBroadcastPolyesterExt = "Polyester" + FastBroadcastStaticExt = "Static" + +[[deps.FastClosures]] +git-tree-sha1 = "acebe244d53ee1b461970f8910c235b259e772ef" +uuid = "9aa1b823-49e4-5ca5-8b0f-3971ec8bab6a" +version = "0.3.2" + +[[deps.FastPower]] +git-tree-sha1 = "1b078ec113773ef9a5b07ea71ff90630eff88f58" +uuid = "a4df4552-cc26-4903-aec0-212e50a0e84b" +version = "1.3.3" + + [deps.FastPower.extensions] + FastPowerEnzymeExt = "Enzyme" + FastPowerForwardDiffExt = "ForwardDiff" + FastPowerMeasurementsExt = "Measurements" + FastPowerMonteCarloMeasurementsExt = "MonteCarloMeasurements" + FastPowerMooncakeExt = "Mooncake" + FastPowerReverseDiffExt = "ReverseDiff" + FastPowerTrackerExt = "Tracker" + + [deps.FastPower.weakdeps] + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "8e9c059d6857607253e837730dbf780b6b151acd" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.19.0" + + [deps.FileIO.extensions] + HTTPExt = "HTTP" + + [deps.FileIO.weakdeps] + HTTP = "cd3eb016-35fb-5094-929b-558a96fad6f3" + +[[deps.FilePaths]] +deps = ["FilePathsBase", "MacroTools", "Reexport"] +git-tree-sha1 = "a1b2fbfe98503f15b665ed45b3d149e5d8895e4c" +uuid = "8fc22ac5-c921-52a6-82fd-178b2807b824" +version = "0.9.0" + + [deps.FilePaths.extensions] + FilePathsGlobExt = "Glob" + FilePathsURIParserExt = "URIParser" + FilePathsURIsExt = "URIs" + + [deps.FilePaths.weakdeps] + Glob = "c27321d9-0574-5035-807b-f59d2c89b15c" + URIParser = "30578b45-9adc-5946-b283-645ec420af67" + URIs = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" + +[[deps.FilePathsBase]] +deps = ["Compat", "Dates"] +git-tree-sha1 = "3bab2c5aa25e7840a4b065805c0cdfc01f3068d2" +uuid = "48062228-2e41-5def-b9a4-89aafe57970f" +version = "0.9.24" +weakdeps = ["Mmap", "Test"] + + [deps.FilePathsBase.extensions] + FilePathsBaseMmapExt = "Mmap" + FilePathsBaseTestExt = "Test" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" +version = "1.11.0" + +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "2f979084d1e13948a3352cf64a25df6bd3b4dca3" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.16.0" +weakdeps = ["PDMats", "SparseArrays", "StaticArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStaticArraysExt = "StaticArrays" + FillArraysStatisticsExt = "Statistics" + +[[deps.FindFirstFunctions]] +deps = ["PrecompileTools"] +git-tree-sha1 = "e6e5cbf7e6f2e3c075f0aea1a43a61306a990c3d" +uuid = "64ca27bc-2ba2-4a57-88aa-44e436879224" +version = "3.0.1" + +[[deps.FiniteDiff]] +deps = ["ArrayInterface", "LinearAlgebra", "Setfield"] +git-tree-sha1 = "2e5742cda07276e1834281ada4cc71b6bfc87586" +uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" +version = "2.31.1" + + [deps.FiniteDiff.extensions] + FiniteDiffBandedMatricesExt = "BandedMatrices" + FiniteDiffBlockBandedMatricesExt = "BlockBandedMatrices" + FiniteDiffSparseArraysExt = "SparseArrays" + FiniteDiffStaticArraysExt = "StaticArrays" + + [deps.FiniteDiff.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.FixedPointNumbers]] +deps = ["Random", "Statistics"] +git-tree-sha1 = "59af96b98217c6ef4ae0dfe065ac7c20831d1a84" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.6" + +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] +git-tree-sha1 = "f85dac9a96a01087df6e3a749840015a0ca3817d" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.17.1+0" + +[[deps.Format]] +git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" +uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" +version = "1.3.7" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "2c5d0b0e12088cde2cf84afb2784415b1ea3dfee" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "1.4.1" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + +[[deps.FreeType]] +deps = ["CEnum", "FreeType2_jll"] +git-tree-sha1 = "907369da0f8e80728ab49c1c7e09327bf0d6d999" +uuid = "b38be410-82b0-50bf-ab77-7b57e271db43" +version = "4.1.1" + +[[deps.FreeType2_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "70329abc09b886fd2c5d94ad2d9527639c421e3e" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.14.3+1" + +[[deps.FreeTypeAbstraction]] +deps = ["BaseDirs", "ColorVectorSpace", "Colors", "FreeType", "GeometryBasics", "Mmap"] +git-tree-sha1 = "4ebb930ef4a43817991ba35db6317a05e59abd11" +uuid = "663a7486-cb36-511b-a19d-713bb74d65c9" +version = "0.10.8" + +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "7a214fdac5ed5f59a22c2d9a885a16da1c74bbc7" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.17+0" + +[[deps.FunctionWrappers]] +git-tree-sha1 = "d62485945ce5ae9c0c48f124a84998d755bae00e" +uuid = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e" +version = "1.1.3" + +[[deps.FunctionWrappersWrappers]] +deps = ["FunctionWrappers", "PrecompileTools", "TruncatedStacktraces"] +git-tree-sha1 = "ffa0d00178e2004db4da70d96e17ee02e85e8966" +uuid = "77dc65aa-8811-40c2-897b-53d922fa7daf" +version = "1.10.0" + + [deps.FunctionWrappersWrappers.extensions] + FunctionWrappersWrappersEnzymeExt = ["Enzyme", "EnzymeCore"] + FunctionWrappersWrappersMooncakeExt = "Mooncake" + + [deps.FunctionWrappersWrappers.weakdeps] + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" +version = "1.11.0" + +[[deps.GPUArraysCore]] +deps = ["Adapt"] +git-tree-sha1 = "83cf05ab16a73219e5f6bd1bdfa9848fa24ac627" +uuid = "46192b85-c4d5-4398-a991-12ede77f4527" +version = "0.2.0" + +[[deps.Gamma]] +git-tree-sha1 = "86f86b6168a016ed88e4ae4e64577b98c3b59e8e" +uuid = "a0844989-3bd2-4988-8bea-c9407ab0941b" +version = "1.1.0" + +[[deps.GeometryBasics]] +deps = ["EarCut_jll", "LinearAlgebra", "PrecompileTools", "Random", "StaticArrays"] +git-tree-sha1 = "364685f5ffde25deb1bbcfd5bb278a5c6b7a9b37" +uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" +version = "0.5.11" + + [deps.GeometryBasics.extensions] + ExtentsExt = "Extents" + GeometryBasicsGeoInterfaceExt = "GeoInterface" + IntervalSetsExt = "IntervalSets" + + [deps.GeometryBasics.weakdeps] + Extents = "411431e0-e8b7-467b-b5e0-f676ba4f2910" + GeoInterface = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + +[[deps.GettextRuntime_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll"] +git-tree-sha1 = "45288942190db7c5f760f59c04495064eedf9340" +uuid = "b0724c58-0f36-5564-988d-3bb0596ebc4a" +version = "0.22.4+0" + +[[deps.Giflib_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6570366d757b50fabae9f4315ad74d2e40c0560a" +uuid = "59f7168a-df46-5410-90c8-f2779963d0ec" +version = "5.2.3+0" + +[[deps.Glib_jll]] +deps = ["Artifacts", "GettextRuntime_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "24f6def62397474a297bfcec22384101609142ed" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.86.3+0" + +[[deps.Glob]] +git-tree-sha1 = "246c628cec062230b7d183aab88841fa94fcabe9" +uuid = "c27321d9-0574-5035-807b-f59d2c89b15c" +version = "1.5.0" + +[[deps.Graphics]] +deps = ["Colors", "LinearAlgebra", "NaNMath"] +git-tree-sha1 = "a641238db938fff9b2f60d08ed9030387daf428c" +uuid = "a2bd30eb-e257-5431-a919-1863eab51364" +version = "1.1.3" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "69ffb934a5c5b7e086a0b4fee3427db2556fba6e" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.16+0" + +[[deps.Graphs]] +deps = ["ArnoldiMethod", "DataStructures", "Inflate", "LinearAlgebra", "Random", "SimpleTraits", "SparseArrays", "Statistics"] +git-tree-sha1 = "7eb45fe833a5b7c51cf6d89c5a841d5967e44be3" +uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" +version = "1.14.0" +weakdeps = ["Distributed", "SharedArrays"] + + [deps.Graphs.extensions] + GraphsSharedArraysExt = "SharedArrays" + +[[deps.GridLayoutBase]] +deps = ["GeometryBasics", "InteractiveUtils", "Observables"] +git-tree-sha1 = "93d5c27c8de51687a2c70ec0716e6e76f298416f" +uuid = "3955a311-db13-416c-9275-1d80ed98e5e9" +version = "0.11.2" + +[[deps.HDF5_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LibCURL_jll", "Libdl", "MPIABI_jll", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "OpenSSL_jll", "TOML", "Zlib_jll", "aws_c_s3_jll", "dlfcn_win32_jll", "libaec_jll", "mpif_jll"] +git-tree-sha1 = "45337643a2d97262d5fe72ce1f13e8a662d13d62" +uuid = "0234f1f7-429e-5d53-9886-15a909be8d59" +version = "2.1.2+0" + +[[deps.HarfBuzz_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"] +git-tree-sha1 = "f923f9a774fcf3f5cb761bfa43aeadd689714813" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "8.5.1+0" + +[[deps.HiGHS]] +deps = ["HiGHS_jll", "LinearAlgebra", "MathOptIIS", "MathOptInterface", "OpenBLAS32_jll", "PrecompileTools", "SparseArrays"] +git-tree-sha1 = "01a5241985559c08a5baadbcebd6d87daaf84a84" +uuid = "87dc4568-4c63-4d18-b0c0-bb2238e4078b" +version = "1.24.1" + +[[deps.HiGHS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Zlib_jll", "libblastrampoline_jll"] +git-tree-sha1 = "5814a4409f49e8430c184cbe4bc19fa2957bbf0a" +uuid = "8fd58aa0-07eb-5a78-9b36-339c94fd15ea" +version = "1.15.1+0" + +[[deps.Hwloc_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "XML2_jll", "Xorg_libpciaccess_jll"] +git-tree-sha1 = "c35847ca5b4997fc8418836354a56c459bcf48d8" +uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" +version = "2.14.0+0" + +[[deps.HypergeometricFunctions]] +deps = ["Gamma", "LinearAlgebra"] +git-tree-sha1 = "18d7deab5fb0440dc6a7b6993c5c27b25420de10" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.29" + +[[deps.IfElse]] +git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" +uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" +version = "0.1.1" + +[[deps.ImageAxes]] +deps = ["AxisArrays", "ImageBase", "ImageCore", "Reexport", "SimpleTraits"] +git-tree-sha1 = "e12629406c6c4442539436581041d372d69c55ba" +uuid = "2803e5a7-5153-5ecf-9a86-9b4c37f5f5ac" +version = "0.6.12" + +[[deps.ImageBase]] +deps = ["ImageCore", "Reexport"] +git-tree-sha1 = "eb49b82c172811fd2c86759fa0553a2221feb909" +uuid = "c817782e-172a-44cc-b673-b171935fbb9e" +version = "0.1.7" + +[[deps.ImageCore]] +deps = ["ColorVectorSpace", "Colors", "FixedPointNumbers", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "PrecompileTools", "Reexport"] +git-tree-sha1 = "8c193230235bbcee22c8066b0374f63b5683c2d3" +uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534" +version = "0.10.5" + +[[deps.ImageIO]] +deps = ["FileIO", "IndirectArrays", "JpegTurbo", "LazyModules", "Netpbm", "OpenEXR", "PNGFiles", "QOI", "Sixel", "TiffImages", "UUIDs", "WebP"] +git-tree-sha1 = "696144904b76e1ca433b886b4e7edd067d76cbf7" +uuid = "82e4d734-157c-48bb-816b-45c225c6df19" +version = "0.6.9" + +[[deps.ImageMetadata]] +deps = ["AxisArrays", "ImageAxes", "ImageBase", "ImageCore"] +git-tree-sha1 = "2a81c3897be6fbcde0802a0ebe6796d0562f63ec" +uuid = "bc367c6b-8a6b-528e-b4bd-a4b897500b49" +version = "0.9.10" + +[[deps.Imath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "dcc8d0cd653e55213df9b75ebc6fe4a8d3254c65" +uuid = "905a6f67-0a94-5f89-b386-d35d92009cd1" +version = "3.2.2+0" + +[[deps.IndirectArrays]] +git-tree-sha1 = "012e604e1c7458645cb8b436f8fba789a51b257f" +uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959" +version = "1.0.0" + +[[deps.Inflate]] +git-tree-sha1 = "d1b1b796e47d94588b3757fe84fbf65a5ec4a80d" +uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" +version = "0.1.5" + +[[deps.InlineStrings]] +git-tree-sha1 = "8f3d257792a522b4601c24a577954b0a8cd7334d" +uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" +version = "1.4.5" + + [deps.InlineStrings.extensions] + ArrowTypesExt = "ArrowTypes" + ParsersExt = "Parsers" + + [deps.InlineStrings.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" + Parsers = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" + +[[deps.IntegerMathUtils]] +git-tree-sha1 = "4c1acff2dc6b6967e7e750633c50bc3b8d83e617" +uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235" +version = "0.1.3" + +[[deps.IntelOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "ec1debd61c300961f98064cfb21287613ad7f303" +uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" +version = "2025.2.0+0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" +version = "1.11.0" + +[[deps.Interpolations]] +deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] +git-tree-sha1 = "48922d06068130f87e43edef52382e6a94305ae6" +uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" +version = "0.16.3" +weakdeps = ["ForwardDiff", "Unitful"] + + [deps.Interpolations.extensions] + InterpolationsForwardDiffExt = "ForwardDiff" + InterpolationsUnitfulExt = "Unitful" + +[[deps.IntervalArithmetic]] +deps = ["CRlibm", "CoreMath", "MacroTools", "OpenBLASConsistentFPCSR_jll", "Printf", "Random", "RoundingEmulator"] +git-tree-sha1 = "c3ee408ae340565f41699e3a3fa1053698c7626e" +uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" +version = "1.0.10" + + [deps.IntervalArithmetic.extensions] + IntervalArithmeticArblibExt = "Arblib" + IntervalArithmeticDiffRulesExt = "DiffRules" + IntervalArithmeticForwardDiffExt = "ForwardDiff" + IntervalArithmeticIntervalSetsExt = "IntervalSets" + IntervalArithmeticIrrationalConstantsExt = "IrrationalConstants" + IntervalArithmeticLinearAlgebraExt = "LinearAlgebra" + IntervalArithmeticRecipesBaseExt = "RecipesBase" + IntervalArithmeticSparseArraysExt = "SparseArrays" + + [deps.IntervalArithmetic.weakdeps] + Arblib = "fb37089c-8514-4489-9461-98f9c8763369" + DiffRules = "b552c78f-8df3-52c6-915a-8e097449b14b" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + IrrationalConstants = "92d709cd-6900-40b7-9082-c6be49f344b6" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.IntervalSets]] +git-tree-sha1 = "79d6bd28c8d9bccc2229784f1bd637689b256377" +uuid = "8197267c-284f-5f27-9208-e0e47529a953" +version = "0.7.14" +weakdeps = ["Random", "RecipesBase", "Statistics"] + + [deps.IntervalSets.extensions] + IntervalSetsRandomExt = "Random" + IntervalSetsRecipesBaseExt = "RecipesBase" + IntervalSetsStatisticsExt = "Statistics" + +[[deps.InverseFunctions]] +git-tree-sha1 = "a779299d77cd080bf77b97535acecd73e1c5e5cb" +uuid = "3587e190-3f89-42d0-90ee-14403ec27112" +version = "0.1.17" +weakdeps = ["Dates", "Test"] + + [deps.InverseFunctions.extensions] + InverseFunctionsDatesExt = "Dates" + InverseFunctionsTestExt = "Test" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "b2d91fe939cae05960e760110b328288867b5758" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.6" + +[[deps.Isoband]] +deps = ["isoband_jll"] +git-tree-sha1 = "f9b6d97355599074dc867318950adaa6f9946137" +uuid = "f1662d9f-8043-43de-a69a-05efc1cc6ff4" +version = "0.1.1" + +[[deps.IterTools]] +git-tree-sha1 = "42d5f897009e7ff2cf88db414a389e5ed1bdd023" +uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" +version = "1.10.0" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "7204148362dafe5fe6a273f855b8ccbe4df8173e" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.8.0" + +[[deps.JSON]] +deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"] +git-tree-sha1 = "c89d196f5ffb64bfbf80985b699ea913b0d2c211" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "1.6.1" + + [deps.JSON.extensions] + JSONArrowExt = ["ArrowTypes"] + + [deps.JSON.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" + +[[deps.Jieko]] +deps = ["ExproniconLite"] +git-tree-sha1 = "2f05ed29618da60c06a87e9c033982d4f71d0b6c" +uuid = "ae98c720-c025-4a4a-838c-29b094483192" +version = "0.2.1" + +[[deps.JpegTurbo]] +deps = ["CEnum", "FileIO", "ImageCore", "JpegTurbo_jll", "TOML"] +git-tree-sha1 = "9496de8fb52c224a2e3f9ff403947674517317d9" +uuid = "b835a17e-a41a-41e7-81f0-2f016b05efe0" +version = "0.1.6" + +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1dae3057da6f2b9c857afef03177bbdc7c4afe92" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "3.2.0+0" + +[[deps.JuMP]] +deps = ["LinearAlgebra", "MacroTools", "MathOptInterface", "MutableArithmetics", "OrderedCollections", "PrecompileTools", "Printf", "SparseArrays"] +git-tree-sha1 = "6941586d9cf3c0af718bc6e6250dcf24057d412e" +uuid = "4076af6c-e467-56ae-b986-b466b2749572" +version = "1.30.1" + + [deps.JuMP.extensions] + JuMPDimensionalDataExt = "DimensionalData" + + [deps.JuMP.weakdeps] + DimensionalData = "0703355e-b756-11e9-17c0-8b28908087d0" + +[[deps.JuliaSyntaxHighlighting]] +deps = ["StyledStrings"] +uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011" +version = "1.12.0" + +[[deps.KernelDensity]] +deps = ["Distributions", "DocStringExtensions", "FFTA", "Interpolations", "StatsBase"] +git-tree-sha1 = "9eda8292dd3268b3b7ec9df21bbfac24e177ec52" +uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b" +version = "0.6.12" + +[[deps.Krylov]] +deps = ["LinearAlgebra", "Printf", "SparseArrays"] +git-tree-sha1 = "fc2e5bc665dfa1be33fac60b5762d462bccfae7b" +uuid = "ba0b0d4f-ebba-5204-a429-3ac8c609bfb7" +version = "0.10.8" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "059aabebaa7c82ccb853dd4a0ee9d17796f7e1bc" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.3+0" + +[[deps.LERC_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "17b94ecafcfa45e8360a4fc9ca6b583b049e4e37" +uuid = "88015f11-f218-50d7-93a8-a6af411a945d" +version = "4.1.0+0" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "3ac157462e1e800777cc97d0eafd1bdb5356a470" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "21.1.8+0" + +[[deps.LRUCache]] +git-tree-sha1 = "5519b95a490ff5fe629c4a7aa3b3dfc9160498b3" +uuid = "8ac3fa9e-de4c-5943-b1dc-09c6b5f20637" +version = "1.6.2" +weakdeps = ["Serialization"] + + [deps.LRUCache.extensions] + SerializationExt = ["Serialization"] + +[[deps.LaTeXStrings]] +git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.4.0" + +[[deps.LayoutPointers]] +deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] +git-tree-sha1 = "a9eaadb366f5493a5654e843864c13d8b107548c" +uuid = "10f19ff3-798f-405d-979b-55457f8fc047" +version = "0.1.17" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" +version = "1.11.0" + +[[deps.LazyModules]] +git-tree-sha1 = "a560dd966b386ac9ae60bdd3a3d3a326062d3c3e" +uuid = "8cdb02fc-e678-4876-92c5-9defec4f444e" +version = "0.3.1" + +[[deps.LeftChildRightSiblingTrees]] +deps = ["AbstractTrees"] +git-tree-sha1 = "95ba48564903b43b2462318aa243ee79d81135ff" +uuid = "1d6d02ad-be62-4b6b-8a6d-2f90e265016e" +version = "0.2.1" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.15.0+0" + +[[deps.LibGit2]] +deps = ["LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" +version = "1.11.0" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.9.0+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "OpenSSL_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.3+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +version = "1.11.0" + +[[deps.Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c8da7e6a91781c41a863611c7e966098d783c57a" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.4.7+0" + +[[deps.Libglvnd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "d36c21b9e7c172a44a10484125024495e2625ac0" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.7.1+1" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "be484f5c92fad0bd8acfef35fe017900b0b73809" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.18.0+0" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "cc3ad4faf30015a3e8094c9b5b7f19e85bdf2386" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.42.0+0" + +[[deps.Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "aebd334d06cee9f24cea70bd19a39749daf73881" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.7.3+0" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d620582b1f0cbe2c72dd1d5bd195a9ce73370ab1" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.42.0+0" + +[[deps.LineSearch]] +deps = ["ADTypes", "CommonSolve", "ConcreteStructs", "FastClosures", "LinearAlgebra", "MaybeInplace", "PrecompileTools", "SciMLBase", "SciMLJacobianOperators", "StaticArraysCore"] +git-tree-sha1 = "a7553de02835e996f80bf895a291ab981ba1f796" +uuid = "87fe0de2-c867-4266-b59a-2f0a94fc965b" +version = "0.1.10" + + [deps.LineSearch.extensions] + LineSearchLineSearchesExt = "LineSearches" + + [deps.LineSearch.weakdeps] + LineSearches = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +version = "1.12.0" + +[[deps.LinearSolve]] +deps = ["AMD", "ArrayInterface", "ConcreteStructs", "DocStringExtensions", "EnumX", "GPUArraysCore", "InteractiveUtils", "Krylov", "Libdl", "LinearAlgebra", "MKL_jll", "Markdown", "OpenBLAS_jll", "PrecompileTools", "Preferences", "PureKLU", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLLogging", "SciMLOperators", "Setfield", "SparseArrays", "SparseColumnPivotedQR", "StaticArraysCore"] +git-tree-sha1 = "a4d32a4ec5bc98b5bf6512cf1d7d0abe10b6c5f8" +uuid = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae" +version = "4.2.0" + + [deps.LinearSolve.extensions] + LinearSolveAMDGPUExt = "AMDGPU" + LinearSolveAlgebraicMultigridExt = "AlgebraicMultigrid" + LinearSolveBLISExt = ["blis_jll", "LAPACK_jll"] + LinearSolveBandedMatricesExt = "BandedMatrices" + LinearSolveBlockDiagonalsExt = "BlockDiagonals" + LinearSolveCUDAExt = ["cuSOLVER"] + LinearSolveCUDSSExt = "CUDSS" + LinearSolveCUSOLVERRFExt = ["CUSOLVERRF", "SparseArrays"] + LinearSolveChainRulesCoreExt = "ChainRulesCore" + LinearSolveCliqueTreesExt = ["CliqueTrees", "SparseArrays"] + LinearSolveElementalExt = "Elemental" + LinearSolveEnzymeExt = ["EnzymeCore", "SparseArrays"] + LinearSolveFastAlmostBandedMatricesExt = "FastAlmostBandedMatrices" + LinearSolveFastLapackInterfaceExt = "FastLapackInterface" + LinearSolveForwardDiffExt = "ForwardDiff" + LinearSolveGinkgoExt = ["Ginkgo", "SparseArrays"] + LinearSolveHSLExt = ["HSL", "SparseArrays"] + LinearSolveHYPREExt = "HYPRE" + LinearSolveIterativeSolversExt = "IterativeSolvers" + LinearSolveKernelAbstractionsExt = "KernelAbstractions" + LinearSolveKrylovKitExt = "KrylovKit" + LinearSolveMUMPSExt = ["MUMPS", "SparseArrays"] + LinearSolveMetalExt = "Metal" + LinearSolveMooncakeExt = "Mooncake" + LinearSolvePETScExt = ["PETSc", "SparseArrays", "SparseMatricesCSR"] + LinearSolvePETScMPIExt = ["PETSc", "PartitionedArrays", "SparseArrays", "SparseMatricesCSR"] + LinearSolveParUExt = ["ParU_jll", "SparseArrays"] + LinearSolvePardisoExt = ["Pardiso", "SparseArrays"] + LinearSolvePartitionedSolversExt = ["PartitionedArrays", "PartitionedSolvers"] + LinearSolvePureUMFPACKExt = ["PureUMFPACK", "SparseArrays"] + LinearSolveRecursiveFactorizationExt = "RecursiveFactorization" + LinearSolveSTRUMPACKExt = ["SparseArrays", "STRUMPACK_jll"] + LinearSolveSparseArraysExt = "SparseArrays" + LinearSolveSparspakExt = ["SparseArrays", "Sparspak"] + LinearSolveSpecializingFactorizationsExt = "SpecializingFactorizations" + LinearSolveSuperLUDISTExt = ["SparseArrays", "SuperLUDIST"] + + [deps.LinearSolve.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + AlgebraicMultigrid = "2169fc97-5a83-5252-b627-83903c6c433c" + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockDiagonals = "0a1fb500-61f7-11e9-3c65-f5ef3456f9f0" + CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" + CUSOLVERRF = "a8cc9031-bad2-4722-94f5-40deabb4245c" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + CliqueTrees = "60701a23-6482-424a-84db-faee86b9b1f8" + Elemental = "902c3f28-d1ec-5e7e-8399-a24c3845ee38" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + FastAlmostBandedMatrices = "9d29842c-ecb8-4973-b1e9-a27b1157504e" + FastLapackInterface = "29a986be-02c6-4525-aec4-84b980013641" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + Ginkgo = "4c8bd3c9-ead9-4b5e-a625-08f1338ba0ec" + HSL = "34c5aeac-e683-54a6-a0e9-6e0fdc586c50" + HYPRE = "b5ffcf37-a2bd-41ab-a3da-4bd9bc8ad771" + IterativeSolvers = "42fd0dbc-a981-5370-80f2-aaf504508153" + KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" + KrylovKit = "0b1a1467-8014-51b9-945f-bf0ae24f4b77" + LAPACK_jll = "51474c39-65e3-53ba-86ba-03b1b862ec14" + MUMPS = "55d2b088-9f4e-11e9-26c0-150b02ea6a46" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + PETSc = "ace2c81b-2b5f-4b1e-a30d-d662738edfe0" + ParU_jll = "9e0b026c-e8ce-559c-a2c4-6a3d5c955bc9" + Pardiso = "46dd5b70-b6fb-5a00-ae2d-e8fea33afaf2" + PartitionedArrays = "5a9dfac6-5c52-46f7-8278-5e2210713be9" + PartitionedSolvers = "11b65f7f-80ac-401b-9ef2-3db765482d62" + PureUMFPACK = "b7e1f0a2-3c4d-4e5f-9a0b-1c2d3e4f5a6b" + RecursiveFactorization = "f2c3362d-daeb-58d1-803e-2bc74f2840b4" + STRUMPACK_jll = "86fbd0b9-476f-557c-b766-62c724b42d8c" + SparseMatricesCSR = "a0a7dd2c-ebf4-11e9-1f05-cf50bc540ca1" + Sparspak = "e56a9233-b9d6-4f03-8d0f-1825330902ac" + SpecializingFactorizations = "fa08b7a1-13d3-4faf-875d-5cbc1520e3f3" + SuperLUDIST = "4cd002a6-0da4-410d-a012-232df062f478" + blis_jll = "6136c539-28a5-5bf0-87cc-b183200dce32" + cuSOLVER = "887afef0-6a32-4de5-add4-7827692ba8fc" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "13ca9e2586b89836fd20cccf56e57e2b9ae7f38f" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.29" + + [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" +version = "1.11.0" + +[[deps.LoggingExtras]] +deps = ["Dates", "Logging"] +git-tree-sha1 = "f00544d95982ea270145636c181ceda21c4e2575" +uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" +version = "1.2.0" + +[[deps.Lz4_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "191686b1ac1ea9c89fc52e996ad15d1d241d1e33" +uuid = "5ced341a-0733-55b8-9ab6-a4889d929147" +version = "1.10.1+0" + +[[deps.MKL_jll]] +deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"] +git-tree-sha1 = "282cadc186e7b2ae0eeadbd7a4dffed4196ae2aa" +uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" +version = "2025.2.0+0" + +[[deps.MPIABI_jll]] +deps = ["Artifacts", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "9be143b6045719e8fb019d2b3bc2aebad1184fef" +uuid = "b5ada748-db0f-5fc0-8972-9331c762740c" +version = "0.1.5+0" + +[[deps.MPICH_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "07dbec8aab01696edc0151a401a6cdfe95b9b885" +uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" +version = "5.0.1+0" + +[[deps.MPIPreferences]] +deps = ["Libdl", "Preferences"] +git-tree-sha1 = "8e98d5d80b87403c311fd51e8455d4546ba7a5f8" +uuid = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" +version = "0.1.12" + +[[deps.MPItrampoline_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "675df097f8eeb28998b2cfe3b25655af73d5f7df" +uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" +version = "5.5.6+0" + +[[deps.MacroTools]] +git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.16" + +[[deps.Makie]] +deps = ["Animations", "Base64", "CRC32c", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "ComputePipeline", "Contour", "Dates", "DelaunayTriangulation", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG_jll", "FileIO", "FilePaths", "FixedPointNumbers", "Format", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageBase", "ImageIO", "InteractiveUtils", "Interpolations", "IntervalSets", "InverseFunctions", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MacroTools", "Markdown", "MathTeXEngine", "Observables", "OffsetArrays", "PNGFiles", "Packing", "Pkg", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Scratch", "ShaderAbstractions", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun", "Unitful"] +git-tree-sha1 = "f2c8715d05bf10f9d4dc354e69dee30b6be53239" +uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" +version = "0.24.13" + + [deps.Makie.extensions] + MakieDynamicQuantitiesExt = "DynamicQuantities" + + [deps.Makie.weakdeps] + DynamicQuantities = "06fc5a27-2a28-4c7c-a15d-362465fb6821" + +[[deps.ManualMemory]] +git-tree-sha1 = "bcaef4fc7a0cfe2cba636d84cda54b5e4e4ca3cd" +uuid = "d125e4d3-2237-4719-b19c-fa641b8a4667" +version = "0.1.8" + +[[deps.MappedArrays]] +git-tree-sha1 = "0ee4497a4e80dbd29c058fcee6493f5219556f40" +uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" +version = "0.4.3" + +[[deps.Markdown]] +deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" +version = "1.11.0" + +[[deps.MathOptAnalyzer]] +deps = ["Dualization", "LinearAlgebra", "MathOptIIS", "MathOptInterface", "Printf"] +git-tree-sha1 = "5c0427e61a7f4396f513cb1e72270866140e275e" +uuid = "d1179b25-476b-425c-b826-c7787f0fff83" +version = "0.1.2" +weakdeps = ["JuMP"] + + [deps.MathOptAnalyzer.extensions] + MathOptAnalyzerJuMPExt = "JuMP" + +[[deps.MathOptIIS]] +deps = ["MathOptInterface"] +git-tree-sha1 = "3b3d69130d8ab8c39d5fa4d30e20a8e6428c9d37" +uuid = "8c4f8055-bd93-4160-a86b-a0c04941dbff" +version = "0.2.0" + +[[deps.MathOptInterface]] +deps = ["CodecBzip2", "CodecZlib", "ForwardDiff", "JSON", "LinearAlgebra", "MutableArithmetics", "NaNMath", "OrderedCollections", "PrecompileTools", "Printf", "SparseArrays", "SpecialFunctions", "Test"] +git-tree-sha1 = "9f23c8c1667bd0b0e611110aaf80aa91c1bdf274" +uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" +version = "1.51.1" + + [deps.MathOptInterface.extensions] + MathOptInterfaceBenchmarkToolsExt = "BenchmarkTools" + MathOptInterfaceCliqueTreesExt = "CliqueTrees" + + [deps.MathOptInterface.weakdeps] + BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" + CliqueTrees = "60701a23-6482-424a-84db-faee86b9b1f8" + +[[deps.MathTeXEngine]] +deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "UnicodeFun"] +git-tree-sha1 = "aa1078778be5a8e5259ff04fbc3d258b3e78d464" +uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" +version = "0.6.9" + +[[deps.MaybeInplace]] +deps = ["ArrayInterface", "LinearAlgebra", "MacroTools"] +git-tree-sha1 = "bf287c2abdd365d73c9ee86b262c6d8af0d6e2a1" +uuid = "bb5d69b7-63fc-4a16-80bd-7e42200c7bdb" +version = "0.1.5" +weakdeps = ["SparseArrays"] + + [deps.MaybeInplace.extensions] + MaybeInplaceSparseArraysExt = "SparseArrays" + +[[deps.MetaGraphsNext]] +deps = ["Graphs", "SimpleTraits"] +git-tree-sha1 = "fa3dc4a0d6569797af15f858ff012990c4afbf61" +uuid = "fa8bd995-216d-47f1-8a91-f3b68fbeb377" +version = "0.8.0" + + [deps.MetaGraphsNext.extensions] + MetaGraphsNextJLD2Ext = ["Graphs", "JLD2"] + + [deps.MetaGraphsNext.weakdeps] + JLD2 = "033835bb-8acc-5ee8-8aae-3f567f8a3819" + +[[deps.MicrosoftMPI_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bc95bf4149bf535c09602e3acdf950d9b4376227" +uuid = "9237b28f-5490-5468-be7b-bb81f5f5e6cf" +version = "10.1.4+3" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.2.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" +version = "1.11.0" + +[[deps.MosaicViews]] +deps = ["MappedArrays", "OffsetArrays", "PaddedViews", "StackViews"] +git-tree-sha1 = "7b86a5d4d70a9f5cdf2dacb3cbe6d251d1a61dbe" +uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389" +version = "0.3.4" + +[[deps.Moshi]] +deps = ["ExproniconLite", "Jieko"] +git-tree-sha1 = "999dfa2b4f8334c1c23bd307c2b0cb6f97c54591" +uuid = "2e0e35c7-a2e4-4343-998d-7ef72827ed2d" +version = "0.3.8" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2025.11.4" + +[[deps.MuladdMacro]] +deps = ["PrecompileTools"] +git-tree-sha1 = "e8dcbeef032ba2f9051a44ac22b4e54e3a1a0099" +uuid = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221" +version = "0.2.6" + +[[deps.MutableArithmetics]] +deps = ["LinearAlgebra", "SparseArrays", "Test"] +git-tree-sha1 = "dc5b2c4c111c46bc79ac4405eeb563523b39c004" +uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" +version = "1.8.0" + +[[deps.NCDatasets]] +deps = ["CFTime", "CommonDataModel", "DataStructures", "Dates", "DiskArrays", "NetCDF_jll", "NetworkOptions", "Printf"] +git-tree-sha1 = "5eb7747d10437f5acb2675c1f865ffa0353f3f9c" +uuid = "85f8d34a-cbdd-5861-8df4-14fed0d494ab" +version = "0.14.15" + + [deps.NCDatasets.extensions] + NCDatasetsMPIExt = "MPI" + + [deps.NCDatasets.weakdeps] + MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "dbd2e8cd2c1c27f0b584f6661b4309609c5a685e" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.1.4" + +[[deps.NetCDF_jll]] +deps = ["Artifacts", "Blosc_jll", "Bzip2_jll", "HDF5_jll", "JLLWrappers", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPIABI_jll", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "TOML", "XML2_jll", "Zlib_jll", "Zstd_jll", "libaec_jll", "libzip_jll"] +git-tree-sha1 = "8a36db9b934b0e72583e624abc8f3b3d60554f2c" +uuid = "7243133f-43d8-5620-bbf4-c2c921802cf3" +version = "401.1000.0+0" + +[[deps.Netpbm]] +deps = ["FileIO", "ImageCore", "ImageMetadata"] +git-tree-sha1 = "d92b107dbb887293622df7697a2223f9f8176fcd" +uuid = "f09324ee-3d7c-5217-9330-fc30815ba969" +version = "1.1.1" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.3.0" + +[[deps.NonlinearSolve]] +deps = ["ADTypes", "ArrayInterface", "BracketingNonlinearSolve", "CommonSolve", "ConcreteStructs", "DifferentiationInterface", "FastClosures", "FiniteDiff", "ForwardDiff", "LineSearch", "LinearAlgebra", "LinearSolve", "NonlinearSolveBase", "NonlinearSolveFirstOrder", "NonlinearSolveQuasiNewton", "NonlinearSolveSpectralMethods", "PrecompileTools", "Preferences", "Reexport", "SciMLBase", "Setfield", "SimpleNonlinearSolve", "StaticArraysCore", "SymbolicIndexingInterface"] +git-tree-sha1 = "fa84bceaa43cc91db844b4e869f50f53e2b797bc" +uuid = "8913a72c-1f9b-4ce2-8d82-65094dcecaec" +version = "4.20.2" + + [deps.NonlinearSolve.extensions] + NonlinearSolveFastLevenbergMarquardtExt = "FastLevenbergMarquardt" + NonlinearSolveFixedPointAccelerationExt = "FixedPointAcceleration" + NonlinearSolveLeastSquaresOptimExt = "LeastSquaresOptim" + NonlinearSolveMINPACKExt = "MINPACK" + NonlinearSolveNLSolversExt = "NLSolvers" + NonlinearSolveNLsolveExt = ["NLsolve", "LineSearches"] + NonlinearSolvePETScExt = ["PETSc", "MPI", "SparseArrays"] + NonlinearSolveSIAMFANLEquationsExt = "SIAMFANLEquations" + NonlinearSolveSpeedMappingExt = "SpeedMapping" + NonlinearSolveSundialsExt = "Sundials" + + [deps.NonlinearSolve.weakdeps] + FastLevenbergMarquardt = "7a0df574-e128-4d35-8cbd-3d84502bf7ce" + FixedPointAcceleration = "817d07cb-a79a-5c30-9a31-890123675176" + LeastSquaresOptim = "0fc2ff8b-aaa3-5acd-a817-1944a5e08891" + LineSearches = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" + MINPACK = "4854310b-de5a-5eb6-a2a5-c1dee2bd17f9" + MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" + NLSolvers = "337daf1e-9722-11e9-073e-8b9effe078ba" + NLsolve = "2774e3e8-f4cf-5e23-947b-6d7e65073b56" + PETSc = "ace2c81b-2b5f-4b1e-a30d-d662738edfe0" + SIAMFANLEquations = "084e46ad-d928-497d-ad5e-07fa361a48c4" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + SpeedMapping = "f1835b91-879b-4a3f-a438-e4baacf14412" + Sundials = "c3572dad-4567-51f8-b174-8c6c989267f4" + +[[deps.NonlinearSolveBase]] +deps = ["ADTypes", "Adapt", "ArrayInterface", "CommonSolve", "Compat", "ConcreteStructs", "DifferentiationInterface", "EnzymeCore", "FastClosures", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "LogExpFunctions", "Markdown", "MaybeInplace", "PreallocationTools", "PrecompileTools", "Preferences", "Printf", "RecursiveArrayTools", "SciMLBase", "SciMLJacobianOperators", "SciMLLogging", "SciMLOperators", "SciMLStructures", "Setfield", "StaticArraysCore", "SymbolicIndexingInterface", "TimerOutputs"] +git-tree-sha1 = "70e128636da33678ef4aa088e47e0c4ad7c86d92" +uuid = "be0214bd-f91f-a760-ac4e-3421ce2b2da0" +version = "2.33.0" + + [deps.NonlinearSolveBase.extensions] + NonlinearSolveBaseBandedMatricesExt = "BandedMatrices" + NonlinearSolveBaseChainRulesCoreExt = "ChainRulesCore" + NonlinearSolveBaseEnzymeExt = ["ChainRulesCore", "Enzyme"] + NonlinearSolveBaseForwardDiffExt = "ForwardDiff" + NonlinearSolveBaseLineSearchExt = "LineSearch" + NonlinearSolveBaseLinearSolveExt = "LinearSolve" + NonlinearSolveBaseMooncakeExt = "Mooncake" + NonlinearSolveBaseReverseDiffExt = "ReverseDiff" + NonlinearSolveBaseSparseArraysExt = "SparseArrays" + NonlinearSolveBaseSparseMatrixColoringsExt = "SparseMatrixColorings" + NonlinearSolveBaseTrackerExt = "Tracker" + + [deps.NonlinearSolveBase.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + LineSearch = "87fe0de2-c867-4266-b59a-2f0a94fc965b" + LinearSolve = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + SparseMatrixColorings = "0a514795-09f3-496d-8182-132a7b665d35" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.NonlinearSolveFirstOrder]] +deps = ["ADTypes", "ArrayInterface", "CommonSolve", "ConcreteStructs", "FiniteDiff", "ForwardDiff", "LineSearch", "LinearAlgebra", "LinearSolve", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "SciMLJacobianOperators", "SciMLLogging", "Setfield", "StaticArraysCore"] +git-tree-sha1 = "94fc6df89c83ff62403f4e22d2db65960cd1914d" +uuid = "5959db7a-ea39-4486-b5fe-2dd0bf03d60d" +version = "2.1.3" + +[[deps.NonlinearSolveQuasiNewton]] +deps = ["ArrayInterface", "CommonSolve", "ConcreteStructs", "LinearAlgebra", "LinearSolve", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "SciMLLogging", "SciMLOperators", "StaticArraysCore"] +git-tree-sha1 = "7a6137308a5876fd0a72b2455eeb9a68bbaf09ad" +uuid = "9a2c21bd-3a47-402d-9113-8faf9a0ee114" +version = "1.13.3" +weakdeps = ["ForwardDiff"] + + [deps.NonlinearSolveQuasiNewton.extensions] + NonlinearSolveQuasiNewtonForwardDiffExt = "ForwardDiff" + +[[deps.NonlinearSolveSpectralMethods]] +deps = ["CommonSolve", "ConcreteStructs", "LineSearch", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase"] +git-tree-sha1 = "ba7d164f81482d09a03ea7e8c59ef313618e661e" +uuid = "26075421-4e9a-44e1-8bd1-420ed7ad02b2" +version = "1.7.2" +weakdeps = ["ForwardDiff"] + + [deps.NonlinearSolveSpectralMethods.extensions] + NonlinearSolveSpectralMethodsForwardDiffExt = "ForwardDiff" + +[[deps.Observables]] +git-tree-sha1 = "7438a59546cf62428fc9d1bc94729146d37a7225" +uuid = "510215fc-4207-5dde-b226-833fc4488ee2" +version = "0.5.5" + +[[deps.OffsetArrays]] +git-tree-sha1 = "117432e406b5c023f665fa73dc26e79ec3630151" +uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" +version = "1.17.0" +weakdeps = ["Adapt"] + + [deps.OffsetArrays.extensions] + OffsetArraysAdaptExt = "Adapt" + +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "b6aa4566bb7ae78498a5e68943863fa8b5231b59" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.6+0" + +[[deps.OpenBLAS32_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "libblastrampoline_jll"] +git-tree-sha1 = "8b492aefdd20fb9dc1ebc377ff7e5fa1591c9acc" +uuid = "656ef2d0-ae68-5445-9ca0-591084a874a2" +version = "0.3.33+2" + +[[deps.OpenBLASConsistentFPCSR_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "dafdaa3ff15f20ff703d909d3a6f574a5b0586f3" +uuid = "6cdc7f73-28fd-5e50-80fb-958a8875b1af" +version = "0.3.33+1" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.29+0" + +[[deps.OpenEXR]] +deps = ["Colors", "FileIO", "OpenEXR_jll"] +git-tree-sha1 = "97db9e07fe2091882c765380ef58ec553074e9c7" +uuid = "52e1d378-f018-4a11-a4be-720524705ac7" +version = "0.3.3" + +[[deps.OpenEXR_jll]] +deps = ["Artifacts", "Imath_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "0d621a4beb5e48d195f907c3c5b0bea285d9ff9d" +uuid = "18a262bb-aa17-5467-a713-aee519bc75cb" +version = "3.4.13+0" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.7+0" + +[[deps.OpenMPI_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML", "Zlib_jll"] +git-tree-sha1 = "6d6c0ca4824268c1a7dca1f4721c535ac63d9074" +uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" +version = "5.0.11+0" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "3.5.4+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1346c9208249809840c91b26703912dff463d335" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.6+0" + +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e2bb57a313a74b8104064b7efd01406c0a50d2ff" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.6.1+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "94ba93778373a53bfd5a0caaf7d809c445292ff4" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.8.2" + +[[deps.OrdinaryDiffEqBDF]] +deps = ["ADTypes", "ArrayInterface", "DiffEqBase", "FastBroadcast", "LinearAlgebra", "MacroTools", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqNonlinearSolve", "OrdinaryDiffEqSDIRK", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "TruncatedStacktraces"] +git-tree-sha1 = "3d207d6282e905e1875d98d343bef54781129164" +uuid = "6ad6398a-0878-4a85-9266-38940aa047c8" +version = "2.3.0" + +[[deps.OrdinaryDiffEqCore]] +deps = ["ADTypes", "Accessors", "Adapt", "ArrayInterface", "BinaryHeaps", "CommonSolve", "DiffEqBase", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "FastClosures", "FastPower", "FunctionWrappers", "FunctionWrappersWrappers", "InteractiveUtils", "LinearAlgebra", "Logging", "MacroTools", "MuladdMacro", "PrecompileTools", "Preferences", "Random", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLLogging", "SciMLOperators", "SciMLStructures", "SymbolicIndexingInterface", "TruncatedStacktraces"] +git-tree-sha1 = "c4035f06d7749c49347d8a200d3ba0a17085492e" +uuid = "bbf590c4-e513-4bbe-9b18-05decba2e5d8" +version = "4.6.0" + + [deps.OrdinaryDiffEqCore.extensions] + OrdinaryDiffEqCoreMooncakeExt = "Mooncake" + OrdinaryDiffEqCorePolyesterExt = "Polyester" + OrdinaryDiffEqCoreSparseArraysExt = "SparseArrays" + + [deps.OrdinaryDiffEqCore.weakdeps] + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + Polyester = "f517fe37-dbe3-4b94-8317-1923a5111588" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.OrdinaryDiffEqDifferentiation]] +deps = ["ADTypes", "ArrayInterface", "ConcreteStructs", "ConstructionBase", "DiffEqBase", "DifferentiationInterface", "FastBroadcast", "FiniteDiff", "ForwardDiff", "FunctionWrappersWrappers", "LinearAlgebra", "LinearSolve", "OrdinaryDiffEqCore", "SciMLBase", "SciMLOperators", "SparseMatrixColorings", "StaticArraysCore"] +git-tree-sha1 = "d9c555750fc4cf0283515536d04e6522b2d0b76f" +uuid = "4302a76b-040a-498a-8c04-15b101fed76b" +version = "3.2.3" +weakdeps = ["SparseArrays"] + + [deps.OrdinaryDiffEqDifferentiation.extensions] + OrdinaryDiffEqDifferentiationSparseArraysExt = "SparseArrays" + +[[deps.OrdinaryDiffEqLowOrderRK]] +deps = ["DiffEqBase", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase"] +git-tree-sha1 = "ffca1eb28ddddf868033d52ae8de660716f4c35b" +uuid = "1344f307-1e59-4825-a18e-ace9aa3fa4c6" +version = "2.2.0" + +[[deps.OrdinaryDiffEqNonlinearSolve]] +deps = ["ADTypes", "ArrayInterface", "ConstructionBase", "DiffEqBase", "FastBroadcast", "FastClosures", "ForwardDiff", "LinearAlgebra", "LinearSolve", "MuladdMacro", "NonlinearSolve", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "PreallocationTools", "RecursiveArrayTools", "SciMLBase", "SciMLOperators", "SimpleNonlinearSolve", "SparseArrays", "StaticArraysCore"] +git-tree-sha1 = "d91bbb8a5baa7d4d3e8f998fcad3fe8562982255" +uuid = "127b3ac7-2247-4354-8eb6-78cf4e7c58e8" +version = "2.1.0" + +[[deps.OrdinaryDiffEqRosenbrock]] +deps = ["ADTypes", "DiffEqBase", "DifferentiationInterface", "FastBroadcast", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "LinearSolve", "MacroTools", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqRosenbrockTableaus", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase"] +git-tree-sha1 = "5415ad34584fa4394bc6fb27eefa53dbe65a209a" +uuid = "43230ef6-c299-4910-a778-202eb28ce4ce" +version = "2.4.0" + +[[deps.OrdinaryDiffEqRosenbrockTableaus]] +git-tree-sha1 = "c0adc33245d5717c874963897e86606776de1b71" +uuid = "b4bd8bb3-f80f-41d2-9b21-73a655b304b9" +version = "2.2.0" + +[[deps.OrdinaryDiffEqSDIRK]] +deps = ["ADTypes", "DiffEqBase", "FastBroadcast", "LinearAlgebra", "MacroTools", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqNonlinearSolve", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "TruncatedStacktraces"] +git-tree-sha1 = "9bfa939cd31975536e397675df92a0cf9290399f" +uuid = "2d112036-d095-4a1e-ab9a-08536f3ecdbf" +version = "2.7.1" + +[[deps.OrdinaryDiffEqTsit5]] +deps = ["DiffEqBase", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "TruncatedStacktraces"] +git-tree-sha1 = "857ead35624a8ff60029531a31bb35e9a22bea3b" +uuid = "b1df2697-797e-41e3-8120-5422d3b24e4a" +version = "2.0.2" + +[[deps.PCRE2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" +version = "10.44.0+1" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "26766d4b5f1a410c218a19b85a672c6edb693c65" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.40" +weakdeps = ["StatsBase"] + + [deps.PDMats.extensions] + StatsBaseExt = "StatsBase" + +[[deps.PNGFiles]] +deps = ["Base64", "CEnum", "ImageCore", "IndirectArrays", "OffsetArrays", "libpng_jll"] +git-tree-sha1 = "32b657a0d57c310a1a172bfc8c8cf68c5e674323" +uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883" +version = "0.4.5" + +[[deps.Packing]] +deps = ["GeometryBasics"] +git-tree-sha1 = "bc5bf2ea3d5351edf285a06b0016788a121ce92c" +uuid = "19eb6ba3-879d-56ad-ad62-d5c202156566" +version = "0.5.1" + +[[deps.PaddedViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "0fac6313486baae819364c52b4f483450a9d793f" +uuid = "5432bcbf-9aad-5242-b902-cca2824c8663" +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 = "58e5ed5e386e156bd93e86b305ebd21ac63d2d04" +uuid = "36c8627f-9965-5494-a995-c6b170f724f3" +version = "1.57.1+0" + +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "32a4e09c5f29402573d673901778a0e03b0807b9" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.8.6" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] +git-tree-sha1 = "e4a6721aa89e62e5d4217c0b21bd714263779dda" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.46.4+0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.12.1" +weakdeps = ["REPL"] + + [deps.Pkg.extensions] + REPLExt = "REPL" + +[[deps.PkgVersion]] +deps = ["Pkg"] +git-tree-sha1 = "f9501cc0430a26bc3d156ae1b5b0c1b47af4d6da" +uuid = "eebad327-c553-4316-9ea0-9fa01ccd7688" +version = "0.3.3" + +[[deps.PlotUtils]] +deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "StableRNGs", "Statistics"] +git-tree-sha1 = "26ca162858917496748aad52bb5d3be4d26a228a" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.4.4" + +[[deps.Polyester]] +deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] +git-tree-sha1 = "16bbc30b5ebea91e9ce1671adc03de2832cff552" +uuid = "f517fe37-dbe3-4b94-8317-1923a5111588" +version = "0.7.19" + +[[deps.PolyesterWeave]] +deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] +git-tree-sha1 = "645bed98cd47f72f67316fd42fc47dee771aefcd" +uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad" +version = "0.2.2" + +[[deps.PolygonOps]] +git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6" +uuid = "647866c9-e3ac-4575-94e7-e3d426903924" +version = "0.1.2" + +[[deps.PreallocationTools]] +deps = ["Adapt", "ArrayInterface", "PrecompileTools"] +git-tree-sha1 = "0c319df479a33799d3b7566fbf14498e4e38a6f3" +uuid = "d236fae5-4411-538c-8e31-a6e3d9e00b46" +version = "1.2.1" + + [deps.PreallocationTools.extensions] + PreallocationToolsForwardDiffExt = "ForwardDiff" + PreallocationToolsReverseDiffExt = "ReverseDiff" + PreallocationToolsSparseConnectivityTracerExt = "SparseConnectivityTracer" + + [deps.PreallocationTools.weakdeps] + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "edbeefc7a4889f528644251bdb5fc9ab5348bc2c" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.3.4" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "8b770b60760d4451834fe79dd483e318eee709c4" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.5.2" + +[[deps.PrettyTables]] +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "ebf455bb866ee6737030e3d3816bb6a0683c4325" +uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +version = "3.4.0" + + [deps.PrettyTables.extensions] + PrettyTablesExcelExt = "XLSX" + PrettyTablesTypstryExt = "Typstry" + + [deps.PrettyTables.weakdeps] + Typstry = "f0ed7684-a786-439e-b1e3-3b82803b501e" + XLSX = "fdbf4ff8-1666-58a4-91e7-1b58723a45e0" + +[[deps.Primes]] +deps = ["IntegerMathUtils"] +git-tree-sha1 = "25cdd1d20cd005b52fc12cb6be3f75faaf59bb9b" +uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae" +version = "0.5.7" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" +version = "1.11.0" + +[[deps.ProgressLogging]] +deps = ["Logging", "SHA", "UUIDs"] +git-tree-sha1 = "f0803bc1171e455a04124affa9c21bba5ac4db32" +uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c" +version = "0.1.6" + +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "fbb92c6c56b34e1a2c4c36058f68f332bec840e7" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.11.0" + +[[deps.PropertyDicts]] +git-tree-sha1 = "a6b4c12d38387a4382fa53b8a6591f9c219add16" +uuid = "f8a19df8-e894-5f55-a973-672c1158cbca" +version = "0.2.1" + +[[deps.PtrArrays]] +git-tree-sha1 = "4fbbafbc6251b883f4d2705356f3641f3652a7fe" +uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" +version = "1.4.0" + +[[deps.PureKLU]] +deps = ["LinearAlgebra", "MuladdMacro", "PrecompileTools", "SparseArrays"] +git-tree-sha1 = "7ff9a12af707ff8b8fc54e5e10b732af1019f6f4" +uuid = "0c0d3e7f-3a8b-4f7e-b6f1-9a4d2e7c1f01" +version = "1.1.0" +weakdeps = ["ForwardDiff"] + + [deps.PureKLU.extensions] + PureKLUForwardDiffExt = "ForwardDiff" + +[[deps.QOI]] +deps = ["ColorTypes", "FileIO", "FixedPointNumbers"] +git-tree-sha1 = "472daaa816895cb7aee81658d4e7aec901fa1106" +uuid = "4b34888f-f399-49d4-9bb3-47ed5cae4e65" +version = "1.0.2" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "5e8e8b0ab68215d7a2b14b9921a946fee794749e" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.11.3" + + [deps.QuadGK.extensions] + QuadGKEnzymeExt = "Enzyme" + + [deps.QuadGK.weakdeps] + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + +[[deps.REPL]] +deps = ["InteractiveUtils", "JuliaSyntaxHighlighting", "Markdown", "Sockets", "StyledStrings", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" +version = "1.11.0" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +version = "1.11.0" + +[[deps.RangeArrays]] +git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5" +uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d" +version = "0.3.2" + +[[deps.Ratios]] +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"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.RecursiveArrayTools]] +deps = ["Adapt", "ArrayInterface", "DocStringExtensions", "GPUArraysCore", "LinearAlgebra", "PrecompileTools", "RecipesBase", "StaticArraysCore", "SymbolicIndexingInterface"] +git-tree-sha1 = "a0aa35f847b21c7884371ec60913632cc1b68495" +uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" +version = "4.3.2" + + [deps.RecursiveArrayTools.extensions] + RecursiveArrayToolsCUDAExt = "CUDA" + RecursiveArrayToolsFastBroadcastExt = "FastBroadcast" + RecursiveArrayToolsFastBroadcastPolyesterExt = ["FastBroadcast", "Polyester"] + RecursiveArrayToolsForwardDiffExt = "ForwardDiff" + RecursiveArrayToolsKernelAbstractionsExt = "KernelAbstractions" + RecursiveArrayToolsMeasurementsExt = "Measurements" + RecursiveArrayToolsMonteCarloMeasurementsExt = "MonteCarloMeasurements" + RecursiveArrayToolsMooncakeExt = "Mooncake" + RecursiveArrayToolsReverseDiffExt = ["ReverseDiff", "Zygote"] + RecursiveArrayToolsSparseArraysExt = ["SparseArrays"] + RecursiveArrayToolsStatisticsExt = "Statistics" + RecursiveArrayToolsStructArraysExt = "StructArrays" + RecursiveArrayToolsTablesExt = ["Tables"] + RecursiveArrayToolsTrackerExt = "Tracker" + RecursiveArrayToolsZygoteExt = "Zygote" + + [deps.RecursiveArrayTools.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + FastBroadcast = "7034ab61-46d4-4ed7-9d0f-46aef9175898" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + Polyester = "f517fe37-dbe3-4b94-8317-1923a5111588" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "1.0.1" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.1" + +[[deps.Ribasim]] +deps = ["ADTypes", "Accessors", "BasicModelInterface", "Configurations", "DBInterface", "DataInterpolations", "DataStructures", "Dates", "DelimitedFiles", "DiffEqBase", "DiffEqCallbacks", "DifferentiationInterface", "EnumX", "FindFirstFunctions", "FiniteDiff", "ForwardDiff", "Graphs", "HiGHS", "IterTools", "JuMP", "LinearAlgebra", "LinearSolve", "Logging", "LoggingExtras", "MathOptAnalyzer", "MetaGraphsNext", "Moshi", "NCDatasets", "NaNMath", "OrdinaryDiffEqBDF", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqLowOrderRK", "OrdinaryDiffEqNonlinearSolve", "OrdinaryDiffEqRosenbrock", "OrdinaryDiffEqSDIRK", "OrdinaryDiffEqTsit5", "PrecompileTools", "Printf", "SQLite", "SciMLBase", "SciMLOperators", "SparseArrays", "SparseConnectivityTracer", "SparseMatrixColorings", "StructArrays", "Tables", "TerminalLoggers", "TranscodingStreams"] +path = "C:\\src\\Ribasim\\irrigation\\example\\..\\..\\core" +uuid = "aac5e3d9-0b8f-4d4f-8241-b1a7a9632635" +version = "2026.1.2" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "5b3d50eb374cea306873b371d3f8d3915a018f0b" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.9.0" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "58cdd8fb2201a6267e1db87ff148dd6c1dbd8ad8" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.5.1+0" + +[[deps.Roots]] +deps = ["Accessors", "CommonSolve", "Printf"] +git-tree-sha1 = "46d2af536e1afe8f04cf31a59298adadf96e99e6" +uuid = "f2b01f46-fcfa-551c-844a-d8ac1e96c665" +version = "3.0.2" + + [deps.Roots.extensions] + RootsChainRulesCoreExt = "ChainRulesCore" + RootsForwardDiffExt = "ForwardDiff" + RootsIntervalRootFindingExt = "IntervalRootFinding" + RootsSymPyExt = "SymPy" + RootsSymPyPythonCallExt = "SymPyPythonCall" + RootsUnitfulExt = "Unitful" + + [deps.Roots.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + IntervalRootFinding = "d2bf35a9-74e0-55ec-b149-d360ff49b807" + SymPy = "24249f21-da20-56a4-8eb1-6a02cf4ae2e6" + SymPyPythonCall = "bc8888f7-b21e-4b7c-a06a-5d9c9496438c" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.RoundingEmulator]] +git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b" +uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705" +version = "0.2.1" + +[[deps.RuntimeGeneratedFunctions]] +deps = ["ExprTools", "SHA", "Serialization"] +git-tree-sha1 = "bd9d6c153d0c8a120b504bfb2f3be42308cc857a" +uuid = "7e49a35a-f44a-4d26-94aa-eba1b4ca6b47" +version = "0.5.21" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.SIMD]] +deps = ["PrecompileTools"] +git-tree-sha1 = "e24dc23107d426a096d3eae6c165b921e74c18e4" +uuid = "fdea26ae-647d-5447-a871-4b548cad5224" +version = "3.7.2" + +[[deps.SIMDTypes]] +git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" +uuid = "94e857df-77ce-4151-89e5-788b33177be4" +version = "0.1.0" + +[[deps.SQLite]] +deps = ["DBInterface", "Random", "SQLite_jll", "Serialization", "Tables", "WeakRefStrings"] +git-tree-sha1 = "e06c74d1b23a4180c3f79a718235c8a15c165849" +uuid = "0aa819cd-b072-5ff4-a722-6bc24af294d9" +version = "1.8.1" + +[[deps.SQLite_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll", "dlfcn_win32_jll"] +git-tree-sha1 = "324744e40b84e6dc2cfaa4122ce969a083c40a6f" +uuid = "76ed43ae-9a5d-5a62-8c75-30186b810ce8" +version = "3.53.2+0" + +[[deps.SciMLBase]] +deps = ["ADTypes", "Accessors", "Adapt", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "PreallocationTools", "PrecompileTools", "Preferences", "Printf", "Random", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLLogging", "SciMLOperators", "SciMLPublic", "SciMLStructures", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface"] +git-tree-sha1 = "efe313cd6ec7ec80301c889b21734ba6b062f9ee" +uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462" +version = "3.33.0" + + [deps.SciMLBase.extensions] + SciMLBaseChainRulesCoreExt = "ChainRulesCore" + SciMLBaseDifferentiationInterfaceExt = "DifferentiationInterface" + SciMLBaseDistributionsExt = "Distributions" + SciMLBaseEnzymeExt = "Enzyme" + SciMLBaseForwardDiffExt = "ForwardDiff" + SciMLBaseFunctionPropertiesExt = "FunctionProperties" + SciMLBaseMakieExt = "Makie" + SciMLBaseMeasurementsExt = "Measurements" + SciMLBaseMonteCarloMeasurementsExt = "MonteCarloMeasurements" + SciMLBaseMooncakeExt = "Mooncake" + SciMLBasePartialFunctionsExt = "PartialFunctions" + SciMLBasePyCallExt = "PyCall" + SciMLBasePythonCallExt = "PythonCall" + SciMLBaseRCallExt = "RCall" + SciMLBaseReverseDiffExt = "ReverseDiff" + SciMLBaseStaticArraysExt = "StaticArrays" + SciMLBaseTrackerExt = "Tracker" + SciMLBaseZygoteExt = ["Zygote", "ChainRulesCore"] + + [deps.SciMLBase.weakdeps] + ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DifferentiationInterface = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" + Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + FunctionProperties = "f62d2435-5019-4c03-9749-2d4c77af0cbc" + Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + PartialFunctions = "570af359-4316-4cb7-8c74-252c00c2016b" + PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" + PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" + RCall = "6f49c342-dc21-5d91-9882-a32aef131414" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.SciMLJacobianOperators]] +deps = ["ADTypes", "ArrayInterface", "ConcreteStructs", "ConstructionBase", "DifferentiationInterface", "FastClosures", "LinearAlgebra", "SciMLBase", "SciMLOperators"] +git-tree-sha1 = "fcdbc0214fd43dcb9201bddda77bc4cb2ddf5da7" +uuid = "19f34311-ddf3-4b8b-af20-060888a46c0e" +version = "0.1.14" + +[[deps.SciMLLogging]] +deps = ["Logging", "LoggingExtras", "Preferences"] +git-tree-sha1 = "032fad418d14f5b9bad9db7f97db23514886dabc" +uuid = "a6db7da4-7206-11f0-1eab-35f2a5dbe1d1" +version = "2.0.1" + + [deps.SciMLLogging.extensions] + SciMLLoggingTracyExt = "Tracy" + + [deps.SciMLLogging.weakdeps] + Tracy = "e689c965-62c8-4b79-b2c5-8359227902fd" + +[[deps.SciMLOperators]] +deps = ["Accessors", "Adapt", "ArrayInterface", "DocStringExtensions", "LinearAlgebra"] +git-tree-sha1 = "54ac780e1be8c12ad39295b5d4dfd4b1af3685ba" +uuid = "c0aeaf25-5076-4817-a8d5-81caf7dfa961" +version = "1.24.0" + + [deps.SciMLOperators.extensions] + SciMLOperatorsLoopVectorizationExt = "LoopVectorization" + SciMLOperatorsSparseArraysExt = "SparseArrays" + SciMLOperatorsStaticArraysCoreExt = "StaticArraysCore" + + [deps.SciMLOperators.weakdeps] + LoopVectorization = "bdcacae8-1622-11e9-2a5c-532679323890" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + +[[deps.SciMLPublic]] +git-tree-sha1 = "2b1b64add566435a768abdb3b053cac17d19ff3c" +uuid = "431bcebd-1456-4ced-9d72-93c2757fff0b" +version = "1.2.1" + +[[deps.SciMLStructures]] +deps = ["ArrayInterface", "PrecompileTools"] +git-tree-sha1 = "1419128e9816e2876f7c4e93a519683b6d1d211e" +uuid = "53ae85a6-f571-4167-b2af-e1d143709226" +version = "1.10.1" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "9b81b8393e50b7d4e6d0a9f14e192294d3b7c109" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.3.0" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" +version = "1.11.0" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "c5391c6ace3bc430ca630251d02ea9687169ca68" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.2" + +[[deps.ShaderAbstractions]] +deps = ["ColorTypes", "FixedPointNumbers", "GeometryBasics", "LinearAlgebra", "Observables", "StaticArrays"] +git-tree-sha1 = "818554664a2e01fc3784becb2eb3a82326a604b6" +uuid = "65257c39-d410-5151-9873-9b3e5be5013e" +version = "0.5.0" + +[[deps.SharedArrays]] +deps = ["Distributed", "Mmap", "Random", "Serialization"] +uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" +version = "1.11.0" + +[[deps.SignedDistanceFields]] +deps = ["Statistics"] +git-tree-sha1 = "3949ad92e1c9d2ff0cd4a1317d5ecbba682f4b92" +uuid = "73760f76-fbc4-59ce-8f25-708e95d2df96" +version = "0.4.1" + +[[deps.SimpleNonlinearSolve]] +deps = ["ADTypes", "ArrayInterface", "BracketingNonlinearSolve", "CommonSolve", "ConcreteStructs", "DifferentiationInterface", "FastClosures", "FiniteDiff", "ForwardDiff", "LineSearch", "LinearAlgebra", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "Setfield", "StaticArraysCore"] +git-tree-sha1 = "72413286ef77ccacac383c5578641b99100eabd9" +uuid = "727e6d20-b764-4bd8-a329-72de5adea6c7" +version = "2.12.1" + + [deps.SimpleNonlinearSolve.extensions] + SimpleNonlinearSolveChainRulesCoreExt = "ChainRulesCore" + SimpleNonlinearSolveReverseDiffExt = "ReverseDiff" + SimpleNonlinearSolveTrackerExt = "Tracker" + + [deps.SimpleNonlinearSolve.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "7ddb0b49c109481b046972c0e4ab02b2127d6a75" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.6" + +[[deps.Sixel]] +deps = ["Dates", "FileIO", "ImageCore", "IndirectArrays", "OffsetArrays", "REPL", "libsixel_jll"] +git-tree-sha1 = "0494aed9501e7fb65daba895fb7fd57cc38bc743" +uuid = "45858cf5-a6b0-47a3-bbea-62219f50df47" +version = "0.1.5" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" +version = "1.11.0" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "13cd91cc9be159e3f4d95b857fa2aa383b53772a" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.3" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.12.0" + +[[deps.SparseColumnPivotedQR]] +deps = ["LinearAlgebra", "PrecompileTools", "SparseArrays"] +git-tree-sha1 = "e408da3a280ab9033531cad1ebccbb54c81ea9c3" +uuid = "a57abbd0-fea5-4d57-96be-5e525945e8e4" +version = "2.1.2" +weakdeps = ["AMD"] + + [deps.SparseColumnPivotedQR.extensions] + SparseColumnPivotedQRAMDExt = "AMD" + +[[deps.SparseConnectivityTracer]] +deps = ["ADTypes", "DocStringExtensions", "FillArrays", "LinearAlgebra", "Random", "SparseArrays"] +git-tree-sha1 = "ad4d1275eeb223cbd4d362563954a661fe12d2f7" +uuid = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" +version = "1.2.2" + + [deps.SparseConnectivityTracer.extensions] + SparseConnectivityTracerChainRulesCoreExt = "ChainRulesCore" + SparseConnectivityTracerLogExpFunctionsExt = "LogExpFunctions" + SparseConnectivityTracerNNlibExt = "NNlib" + SparseConnectivityTracerNaNMathExt = "NaNMath" + SparseConnectivityTracerSpecialFunctionsExt = "SpecialFunctions" + + [deps.SparseConnectivityTracer.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + LogExpFunctions = "2ab3a3ac-af41-5b50-aa03-7779005ae688" + NNlib = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" + NaNMath = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + +[[deps.SparseMatrixColorings]] +deps = ["ADTypes", "DocStringExtensions", "LinearAlgebra", "PrecompileTools", "Random", "SparseArrays"] +git-tree-sha1 = "f63d76c7b7c329cf11badd564fd8ba877b09c3fe" +uuid = "0a514795-09f3-496d-8182-132a7b665d35" +version = "0.4.27" + + [deps.SparseMatrixColorings.extensions] + SparseMatrixColoringsCUDAExt = ["CUDA", "cuSPARSE"] + SparseMatrixColoringsCliqueTreesExt = "CliqueTrees" + SparseMatrixColoringsColorsExt = "Colors" + SparseMatrixColoringsGPUArraysExt = "GPUArrays" + SparseMatrixColoringsJuMPExt = ["JuMP", "MathOptInterface"] + + [deps.SparseMatrixColorings.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + CliqueTrees = "60701a23-6482-424a-84db-faee86b9b1f8" + Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" + GPUArrays = "0c68f7d7-f131-5f86-a1c3-88cf8149b2d7" + JuMP = "4076af6c-e467-56ae-b986-b466b2749572" + MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" + cuSPARSE = "b26da814-b3bc-49ef-b0ee-c816305aa060" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "6547cbdd8ce32efba0d21c5a40fa96d1a3548f9f" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.8.0" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + +[[deps.StableRNGs]] +deps = ["Random"] +git-tree-sha1 = "4f96c596b8c8258cc7d3b19797854d368f243ddc" +uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" +version = "1.0.4" + +[[deps.StackViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "be1cf4eb0ac528d96f5115b4ed80c26a8d8ae621" +uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15" +version = "0.1.2" + +[[deps.Static]] +deps = ["CommonWorldInvalidations", "IfElse", "PrecompileTools", "SciMLPublic"] +git-tree-sha1 = "b151f033556272891e184d7d36c62518b56bbaac" +uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" +version = "1.4.2" + +[[deps.StaticArrayInterface]] +deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "PrecompileTools", "SciMLPublic", "Static"] +git-tree-sha1 = "2a635e15d5035c53b345077c947f31ff91744078" +uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" +version = "1.10.0" +weakdeps = ["OffsetArrays", "StaticArrays"] + + [deps.StaticArrayInterface.extensions] + StaticArrayInterfaceOffsetArraysExt = "OffsetArrays" + StaticArrayInterfaceStaticArraysExt = "StaticArrays" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "246a8bb2e6667f832eea063c3a56aef96429a3db" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.18" +weakdeps = ["ChainRulesCore", "Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "6ab403037779dae8c514bad259f32a447262455a" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.4" + +[[deps.Statistics]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0" +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.11.1" +weakdeps = ["SparseArrays"] + + [deps.Statistics.extensions] + SparseArraysExt = ["SparseArrays"] + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "178ed29fd5b2a2cfc3bd31c13375ae925623ff36" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.8.0" + +[[deps.StatsBase]] +deps = ["AliasTables", "DataAPI", "DataStructures", "IrrationalConstants", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "e4d7a1a0edc20af42689ea6f4f3587a2175d50ee" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.12" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "770240df9a3b8888065046948f7a09b4e0f997d5" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "2.2.0" +weakdeps = ["ChainRulesCore", "InverseFunctions"] + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + +[[deps.StrideArraysCore]] +deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] +git-tree-sha1 = "5316097111523c9a970596a5b33cfea5f92e8581" +uuid = "7792a7ef-975c-4747-a70f-980b88e8d1da" +version = "0.5.9" + +[[deps.StringManipulation]] +deps = ["PrecompileTools"] +git-tree-sha1 = "d05693d339e37d6ab134c5ab53c29fce5ee5d7d5" +uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" +version = "0.4.4" + +[[deps.StructArrays]] +deps = ["ConstructionBase", "DataAPI", "Tables"] +git-tree-sha1 = "ad8002667372439f2e3611cfd14097e03fa4bccd" +uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" +version = "0.7.3" + + [deps.StructArrays.extensions] + StructArraysAdaptExt = "Adapt" + StructArraysGPUArraysCoreExt = ["GPUArraysCore", "KernelAbstractions"] + StructArraysLinearAlgebraExt = "LinearAlgebra" + StructArraysSparseArraysExt = "SparseArrays" + StructArraysStaticArraysExt = "StaticArrays" + + [deps.StructArrays.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.StructUtils]] +deps = ["Dates", "UUIDs"] +git-tree-sha1 = "82bee338d650aa515f31866c460cb7e3bcef90b8" +uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42" +version = "2.8.2" + + [deps.StructUtils.extensions] + StructUtilsMeasurementsExt = ["Measurements"] + StructUtilsStaticArraysCoreExt = ["StaticArraysCore"] + StructUtilsTablesExt = ["Tables"] + + [deps.StructUtils.weakdeps] + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" + +[[deps.StyledStrings]] +uuid = "f489334b-da3d-4c2e-b8f0-e476e12c162b" +version = "1.11.0" + +[[deps.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.8.3+2" + +[[deps.SymbolicIndexingInterface]] +deps = ["Accessors", "ArrayInterface", "RuntimeGeneratedFunctions", "StaticArraysCore"] +git-tree-sha1 = "d4751bc16b120dc617719f7901a3b4e69c85b7bf" +uuid = "2efcf032-c050-4f8e-a9bb-153293bab1f5" +version = "0.3.49" +weakdeps = ["PrettyTables"] + + [deps.SymbolicIndexingInterface.extensions] + SymbolicIndexingInterfacePrettyTablesExt = "PrettyTables" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "0f38a06c83f0007bbab3cf911262841c9a0f07e0" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.13.0" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.TensorCore]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" +uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" +version = "0.1.1" + +[[deps.TerminalLoggers]] +deps = ["LeftChildRightSiblingTrees", "Logging", "Markdown", "Printf", "ProgressLogging", "UUIDs"] +git-tree-sha1 = "f133fab380933d042f6796eda4e130272ba520ca" +uuid = "5d786b92-1e48-4d6f-9151-6b4477ca9bed" +version = "0.1.7" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +version = "1.11.0" + +[[deps.ThreadingUtilities]] +deps = ["ManualMemory"] +git-tree-sha1 = "7c73336785b21f723f5b143f6e99cf6c43b37dc1" +uuid = "8290d209-cae3-49c0-8002-c8c24d57dab5" +version = "0.5.6" + +[[deps.TiffImages]] +deps = ["CodecZstd", "ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "PrecompileTools", "ProgressMeter", "SIMD", "UUIDs"] +git-tree-sha1 = "9ca5f1f2d42f80df4b8c9f6ab5a64f438bbd9976" +uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69" +version = "0.11.9" + +[[deps.TimerOutputs]] +deps = ["ExprTools", "Printf"] +git-tree-sha1 = "3748bd928e68c7c346b52125cf41fff0de6937d0" +uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" +version = "0.5.29" + + [deps.TimerOutputs.extensions] + FlameGraphsExt = "FlameGraphs" + + [deps.TimerOutputs.weakdeps] + FlameGraphs = "08572546-2f56-4bcf-ba4e-bab62c3a3f89" + +[[deps.TranscodingStreams]] +git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.11.3" + +[[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.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" +version = "1.11.0" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" +version = "1.11.0" + +[[deps.UnicodeFun]] +deps = ["REPL"] +git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" +uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" +version = "0.4.1" + +[[deps.Unitful]] +deps = ["Dates", "LinearAlgebra", "Random"] +git-tree-sha1 = "57e1b2c9de4bd6f40ecb9de4ac1797b81970d008" +uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" +version = "1.28.0" + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + ForwardDiffExt = "ForwardDiff" + InverseFunctionsUnitfulExt = "InverseFunctions" + LatexifyExt = ["Latexify", "LaTeXStrings"] + NaNMathExt = "NaNMath" + PrintfExt = "Printf" + + [deps.Unitful.weakdeps] + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + LaTeXStrings = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" + Latexify = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" + NaNMath = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" + Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.WeakRefStrings]] +deps = ["DataAPI", "InlineStrings", "Parsers"] +git-tree-sha1 = "0716e01c3b40413de5dedbc9c5c69f27cddfddfc" +uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" +version = "1.4.3" + +[[deps.WebP]] +deps = ["CEnum", "ColorTypes", "FileIO", "FixedPointNumbers", "ImageCore", "libwebp_jll"] +git-tree-sha1 = "aa1ca3c47f119fbdae8770c29820e5e6119b83f2" +uuid = "e3aaa7dc-3e4b-44e0-be63-ffb868ccd7c1" +version = "0.1.3" + +[[deps.Wflow]] +deps = ["Accessors", "BasicModelInterface", "CFTime", "CompositionsBase", "Dates", "DelimitedFiles", "EnumX", "FillArrays", "Glob", "Graphs", "LoggingExtras", "NCDatasets", "OrderedCollections", "Parameters", "Polyester", "ProgressLogging", "PropertyDicts", "StaticArrays", "Statistics", "TOML", "TerminalLoggers"] +git-tree-sha1 = "bca8a9ffab8e2bc1dceec8d3ce6197cae2f57210" +repo-rev = "ea8754e6382ffc8327929fc44b6954c6c0605b1d" +repo-subdir = "Wflow" +repo-url = "https://github.com/Deltares/Wflow.jl" +uuid = "d48b7d99-76e7-47ae-b1d5-ff0c1cf9a818" +version = "1.1.0-dev" + +[[deps.WoodburyMatrices]] +deps = ["LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "248a7031b3da79a127f14e5dc5f417e26f9f6db7" +uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" +version = "1.1.0" + +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] +git-tree-sha1 = "80d3930c6347cfce7ccf96bd3bafdf079d9c0390" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.13.9+0" + +[[deps.XZ_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "b29c22e245d092b8b4e8d3c09ad7baa586d9f573" +uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" +version = "5.8.3+0" + +[[deps.Xorg_libX11_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] +git-tree-sha1 = "808090ede1d41644447dd5cbafced4731c56bd2f" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.8.13+0" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "aa1261ebbac3ccc8d16558ae6799524c450ed16b" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.13+0" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "52858d64353db33a56e13c341d7bf44cd0d7b309" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.6+0" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "1a4a26870bf1e5d26cd585e38038d399d7e65706" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.8+0" + +[[deps.Xorg_libXfixes_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "75e00946e43621e09d431d9b95818ee751e6b2ef" +uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" +version = "6.0.2+0" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "7ed9347888fac59a618302ee38216dd0379c480d" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.12+0" + +[[deps.Xorg_libpciaccess_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "58972370b81423fc546c56a60ed1a009450177c3" +uuid = "a65dc6b1-eb27-53a1-bb3e-dea574b5389e" +version = "0.19.0+0" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXau_jll", "Xorg_libXdmcp_jll"] +git-tree-sha1 = "bfcaf7ec088eaba362093393fe11aa141fa15422" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.17.1+0" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a63799ff68005991f9d9491b6e95bd3478d783cb" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.6.0+0" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.3.1+2" + +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "446b23e73536f84e8037f5dce465e92275f6a308" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.7+1" + +[[deps.aws_c_auth_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_cal_jll", "aws_c_http_jll", "aws_c_sdkutils_jll"] +git-tree-sha1 = "8cab83c96af80a1be968251ce1a0548a7545484d" +uuid = "2b3700d1-4306-52e2-a478-c162f0c514be" +version = "0.9.6+0" + +[[deps.aws_c_cal_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_common_jll"] +git-tree-sha1 = "22c0f42f4a1f0dc5dcfa8fd267c4ac407c455e7a" +uuid = "70f11efc-bab2-57f1-b0f3-22aad4e67c4b" +version = "0.9.13+0" + +[[deps.aws_c_common_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a759cb9bf456ad792cc7898a81ae333cce9ef02a" +uuid = "73048d1d-b8c4-5092-a58d-866c5e8d1e50" +version = "0.12.6+0" + +[[deps.aws_c_compression_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_common_jll"] +git-tree-sha1 = "7910c72f45f44afd297c39fe43b99c56d5ed22ec" +uuid = "73a04cd5-f3d7-5bac-9290-e8adb709f224" +version = "0.3.2+0" + +[[deps.aws_c_http_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_compression_jll", "aws_c_io_jll"] +git-tree-sha1 = "e358d5a001ef7afbd4f8c5225322512819cda2f2" +uuid = "3254fc65-9028-534d-aa9d-d76d128babc6" +version = "0.10.13+0" + +[[deps.aws_c_io_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_cal_jll", "aws_c_common_jll", "s2n_tls_jll"] +git-tree-sha1 = "7e481d474b2087ee8bbf55b81bf9119f21e396d9" +uuid = "13c41daa-f319-5298-b5eb-5754e0170d52" +version = "0.26.3+0" + +[[deps.aws_c_s3_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_auth_jll", "aws_c_common_jll", "aws_c_http_jll", "aws_checksums_jll", "s2n_tls_jll"] +git-tree-sha1 = "3e9917ab25114feba657e71be41cad068b9f6595" +uuid = "bd1f34fb-993f-5903-a121-aaf302eed6d4" +version = "0.11.5+0" + +[[deps.aws_c_sdkutils_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_common_jll"] +git-tree-sha1 = "c43dfba2c1ab9ea9f02f2c80e86fa16f6460244e" +uuid = "1282aa60-004d-510b-9f52-12498d409daa" +version = "0.2.4+1" + +[[deps.aws_checksums_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_common_jll"] +git-tree-sha1 = "2570c8e23f4771a087b12a47edcaaa670ac05a01" +uuid = "b2a88e68-78e7-5e94-8c20-c02986ec140e" +version = "0.2.10+0" + +[[deps.dlfcn_win32_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e141d67ffe550eadfb5af1bdbdaf138031e4805f" +uuid = "c4b69c83-5512-53e3-94e6-de98773c479f" +version = "1.4.2+0" + +[[deps.isoband_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51b5eeb3f98367157a7a12a1fb0aa5328946c03c" +uuid = "9a68df92-36a6-505f-a73e-abb412b6bfb4" +version = "0.2.3+0" + +[[deps.libaec_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "60f4792734488db6f42e2c7699f1d4594780bd03" +uuid = "477f73a3-ac25-53e9-8cc3-50b2fa2566f0" +version = "1.1.7+0" + +[[deps.libaom_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "850b06095ee71f0135d644ffd8a52850699581ed" +uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" +version = "3.13.3+0" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "125eedcb0a4a0bba65b657251ce1d27c8714e9d6" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.17.4+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.15.0+0" + +[[deps.libdrm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libpciaccess_jll"] +git-tree-sha1 = "63aac0bcb0b582e11bad965cef4a689905456c03" +uuid = "8e53e030-5e6c-5a89-a30b-be5b7263a166" +version = "2.4.125+1" + +[[deps.libfdk_aac_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "646634dd19587a56ee2f1199563ec056c5f228df" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.4+0" + +[[deps.libpng_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "e51150d5ab85cee6fc36726850f0e627ad2e4aba" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.58+0" + +[[deps.libsixel_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "libpng_jll"] +git-tree-sha1 = "c1733e347283df07689d71d61e14be986e49e47a" +uuid = "075b6546-f08a-558a-be8f-8157d0f608a5" +version = "1.10.5+0" + +[[deps.libva_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll", "Xorg_libXfixes_jll", "libdrm_jll"] +git-tree-sha1 = "7dbf96baae3310fe2fa0df0ccbb3c6288d5816c9" +uuid = "9a156e7d-b971-5f62-b2c9-67348b8fb97c" +version = "2.23.0+0" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll"] +git-tree-sha1 = "11e1772e7f3cc987e9d3de991dd4f6b2602663a5" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.8+0" + +[[deps.libwebp_jll]] +deps = ["Artifacts", "Giflib_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libglvnd_jll", "Libtiff_jll", "libpng_jll"] +git-tree-sha1 = "4e4282c4d846e11dce56d74fa8040130b7a95cb3" +uuid = "c5f90fcd-3b7e-5836-afba-fc50a0988cb2" +version = "1.6.0+0" + +[[deps.libzip_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "OpenSSL_jll", "XZ_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "86addc139bca85fdf9e7741e10977c45785727b7" +uuid = "337d8026-41b4-5cde-a456-74a10e5b31d1" +version = "1.11.3+0" + +[[deps.mpif_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIABI_jll", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "TOML"] +git-tree-sha1 = "a8083ee0737c243c8f40a4ba86a0956997facb73" +uuid = "9aeb927a-4695-514f-a259-621a69f20ec0" +version = "0.1.7+0" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.64.0+1" + +[[deps.oneTBB_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "da8c1f6eee04831f14edcfa5dae611d309807e57" +uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e" +version = "2022.3.0+0" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.7.0+0" + +[[deps.s2n_tls_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "64ae051c6f03044eb7d98027d1b552b4e21e650c" +uuid = "cddc5d3d-934d-5d3a-9747-62fc12ea3f48" +version = "1.7.3+0" + +[[deps.x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "14cc7083fc6dff3cc44f2bc435ee96d06ed79aa7" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "10164.0.1+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e7b67590c14d487e734dcb925924c5dc43ec85f3" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +version = "4.1.0+0" diff --git a/irrigation/Project.toml b/irrigation/Project.toml new file mode 100644 index 000000000..5857151c5 --- /dev/null +++ b/irrigation/Project.toml @@ -0,0 +1,10 @@ +[deps] +CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" +FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" +NCDatasets = "85f8d34a-cbdd-5861-8df4-14fed0d494ab" +Ribasim = "aac5e3d9-0b8f-4d4f-8241-b1a7a9632635" +StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" +Wflow = "d48b7d99-76e7-47ae-b1d5-ff0c1cf9a818" + +[sources] +Wflow = {rev = "ea8754e6382ffc8327929fc44b6954c6c0605b1d", subdir = "Wflow", url = "https://github.com/Deltares/Wflow.jl"} diff --git a/irrigation/README.md b/irrigation/README.md new file mode 100644 index 000000000..0bf93f4d0 --- /dev/null +++ b/irrigation/README.md @@ -0,0 +1,144 @@ +# Irrigation + +A self-contained Julia module that wraps Wflow's SBM land-surface components (soil, interception, runoff, water demand) into a lightweight irrigation model. Designed as a prototype for coupling Wflow soil physics with an external water allocator such as Ribasim. + +## Structure + +``` +irrigation/ +├── Project.toml # Julia environment (pinned Wflow source) +├── Manifest.toml # Exact dependency versions +├── README.md +├── src/ +│ ├── irrigation.jl # Irrigation module (wraps Wflow components) +│ └── irrigation_utils.jl # Config structs, forcing, logger +└── example/ + ├── coupled_simulation.jl # Coupled Ribasim + irrigation run + ├── run_irrigation_standalone.jl # Standalone run with plots + ├── run_irrigation_coupled.py # Python driver: generate model + run + └── plot_results.py # Result visualisation +``` + +## Requirements + +- Julia ≥ 1.11 +- All dependencies (including Wflow) are pinned in `Project.toml` / `Manifest.toml` — no manual setup needed + +## Running the example + +### Standalone (no Ribasim) + +``` +julia irrigation/example/run_irrigation_standalone.jl +``` + +Activates the `irrigation` environment and runs three scenarios, writing PNG plots to the working directory: + +| Output file | Description | +|---|---| +| `single_column_no_allocation.png` | 30-day run, no irrigation | +| `single_column_allocation.png` | 30-day run, 50% allocation | +| `multi_column_allocation.png` | 4 cells with 100 / 75 / 25 / 0% allocation | + +### Coupled (with Ribasim) + +``` +pixi run python irrigation/example/run_irrigation_coupled.py +``` + +Generates the Ribasim GeoPackage model and runs `coupled_simulation.jl`, writing results to `irrigation/example/irrigation_model/coupled_irrigation.nc`. + +The first run downloads and precompiles dependencies (including Wflow from GitHub and CairoMakie) — this takes a few minutes. Subsequent runs are fast. + +## Wflow version + +Wflow is pinned to a specific commit on the Deltares GitHub (`ea8754e`) which contains the 1.1.0-dev API used by this module. When Wflow 1.1.0 is released to the Julia registry, the `[sources]` block in `Project.toml` can be removed and replaced with a `[compat]` bound. + +## Module API + +```julia +include("irrigation/src/irrigation.jl") +using .Irrigation + +# Initialise with default synthetic forcing (30 days) +m = Irrigation.init() + +# Run without external allocation +Irrigation.update_until!(m, 30 * m.dt) + +# Or step manually and inject allocation each day +m = Irrigation.init(; n = 4) # 4 independent soil columns +for step in 1:30 + demand = Irrigation.get_demand(m) # [m/s], length n + Irrigation.set_allocated!(m, demand .* 0.5) # supply 50% of demand + Irrigation.update_until!(m, step * m.dt) +end +``` + +### Key functions + +| Function | Description | +|---|---| +| `Irrigation.init(; forcing, n, soil_cfg, veg_cfg, irr_cfg)` | Create model with `n` independent soil columns | +| `Irrigation.get_demand!(m)` | Compute irrigation demand [m/s] from soil moisture deficit | +| `Irrigation.set_allocated!(m, alloc)` | Set external irrigation supply [m/s] for next timestep | +| `Irrigation.update!(m)` | Advance model one `dt` step | +| `Irrigation.update_until!(m, t_end)` | Advance model to time `t_end` [s] (standalone use) | +| `Irrigation.finalize!(m, path; ...)` | Flush logger to NetCDF | + +### Configuration + +Pass keyword structs to `init()` to override defaults: + +```julia +soil = Irrigation.SoilConfig(theta_s = 0.50, ksat_surface = 1e-6) +veg = Irrigation.VegetationConfig(rooting_depth = 0.8) +irr = Irrigation.IrrigationConfig(irrigation_efficiency = 0.9) +m = Irrigation.init(; soil_cfg = soil, veg_cfg = veg, irr_cfg = irr) +``` + +## Coupling with Ribasim + +The module is designed so that `get_demand` / `set_allocated!` map directly to BMI `get_value` / `set_value` calls. In a coupled run Ribasim reads the demand, routes water through its network, and returns the achievable allocation (which may be less than demand). + +### Coupling concept + +Each timestep follows this update pattern: + +```mermaid +sequenceDiagram + participant W as Irrigation module + participant A as Allocation (LP) + participant P as Physical layer (ODE) + + loop every allocation timestep + Note over W: get_demand!() — soil state @ t-1 + W->>A: demand [m/s] → user_demand.demand + + Note over A: update_allocation!()
LP solve for t + A->>P: allocated flows [m³/s] + + Note over P: SciMLBase.step!()
ODE water balance solve for t + + P->>W: realized volumes [m³] → m/s
update_irrigation_supply!() + Note over W: update!() — advance soil to t + end +``` + +### Online coupling API + +```julia +# initialise +Irrigation.init() + +# Ribasim.solve!(model) + for each allocation timestep + Irrigation.get_demand!() # [m/s] — soil state @ t-1 + → LP solve → ODE step + Irrigation.set_allocated!(realized) + Irrigation.update!() # advance soil to t + end + +# finalize to flush logger +Irrigation.finalize!() +``` diff --git a/irrigation/dependency_graph.md b/irrigation/dependency_graph.md new file mode 100644 index 000000000..0dffef4e5 --- /dev/null +++ b/irrigation/dependency_graph.md @@ -0,0 +1,100 @@ +# Dependency Graph: Ribasim · Irrigation · Wflow + +## How Ribasim, Irrigation and Wflow share the SBM components + +```mermaid +graph LR + subgraph WflowComponents["Wflow.jl — shared building blocks"] + Soil["SbmSoilModel\n+ SbmSoilParameters"] + Interception["GashInterceptionModel"] + Demand["DemandModel\n(NonPaddyModel, …)"] + Lateral["LateralSSF / LateralKinematic\n(subsurface + surface routing)"] + WflowAlloc["Wflow internal\nAllocationModel"] + end + + subgraph WflowRun["Wflow full SBM run"] + WflowSolver["Wflow.run()"] + end + + subgraph IrrigationPkg["Irrigation module"] + IrrigationModel["IrrigationModel\n(wraps Wflow components)"] + CustomWT["Custom water-table loop\n(replaces lateral flow)"] + ExtAlloc["ExternalIrrigationAllocation\n(stub — values set by Ribasim)"] + end + + subgraph RibasimCore["Ribasim"] + Network["Network solver\n(ODE + allocation)"] + end + + %% Wflow full run uses all components + WflowSolver --> Soil + WflowSolver --> Interception + WflowSolver --> Demand + WflowSolver --> Lateral + WflowSolver --> WflowAlloc + + %% Irrigation reuses the vertical components, skips lateral + IrrigationModel --> Soil + IrrigationModel --> Interception + IrrigationModel --> Demand + IrrigationModel --> CustomWT + IrrigationModel --> ExtAlloc + + %% Ribasim drives Irrigation + Network -->|"set allocated water [m/s]"| ExtAlloc + Network -->|"call get_demand! / update!"| IrrigationModel +``` + +**Key difference:** Wflow's full SBM run routes water laterally between cells via `LateralSSF`/kinematic wave. +The `Irrigation` module uses the same vertical soil physics but replaces lateral flow with a single-column water-table update — because each irrigated cell is treated independently, with Ribasim handling the inter-cell water distribution. + +## Model parts vs. parameters + +### Model parts (state / behaviour) + +| Field | Type | Source | +|---|---|---| +| `soil` | `SbmSoilModel` | Wflow | +| `interception` | `GashInterceptionModel` | Wflow | +| `runoff` | `OpenWaterRunoff` | Wflow | +| `demand` | `DemandModel` | Wflow | +| `allocation` | `ExternalIrrigationAllocation` | local stub | +| `snow` | `NoSnowModel` | Wflow | +| `glacier` | `NoGlacierModel` | Wflow | +| `atmospheric_forcing` | `AtmosphericForcing` | Wflow | + +Sub-models inside `DemandModel`: + +| Field | Type | +|---|---| +| `domestic` | `NoNonIrrigationDemandModel` | +| `industry` | `NoNonIrrigationDemandModel` | +| `livestock` | `NoNonIrrigationDemandModel` | +| `paddy` | `NoIrrigationPaddyModel` | +| `nonpaddy` | `NonPaddyModel` | + +### Parameter structs (configuration / static data) + +| Struct | Used by | Shared? | +|---|---|---| +| `VegetationParameters` | `SbmSoilParameters`, `GashParameters` | **yes** — single instance passed to both | +| `SbmSoilParameters` | `SbmSoilModel` | — | +| `KvExponential` | `SbmSoilParameters` (kv_profile field) | — | +| `GashParameters` | `GashInterceptionModel` | — | +| `NonPaddyParameters` | `NonPaddyModel` | — | +| `DemandVariables` | `DemandModel` | — | + +### Local config structs (irrigation_utils.jl) + +| Struct | Purpose | +|---|---| +| `VegetationConfig` | User-facing vegetation defaults → mapped to `VegetationParameters` | +| `SoilConfig` | User-facing soil defaults → mapped to `SbmSoilParameters` | +| `IrrigationConfig` | Irrigation efficiency / max rate → mapped to `NonPaddyParameters` | + +## Key design notes + +- **Wflow** is a hard dependency of `Irrigation` — all soil/interception/demand types come from it. +- **Ribasim** and **Irrigation** are **not coupled at the package level**. The coupling happens at runtime in `coupled_simulation.jl` by injecting three function pointers (`irr.model`, `irr.compute_demand!`, `irr.advance!`) into Ribasim's parameter struct. +- `VegetationParameters` is created once and **shared** between `SbmSoilParameters` and `GashParameters`. +- The custom water-table loop (per-cell `water_table_change` → `update_ustorelayerdepth!`) replaces the lateral groundwater component that a full Wflow SBM model would use. diff --git a/irrigation/example/coupled_simulation.jl b/irrigation/example/coupled_simulation.jl new file mode 100644 index 000000000..3a6ae0342 --- /dev/null +++ b/irrigation/example/coupled_simulation.jl @@ -0,0 +1,43 @@ +import Pkg +Pkg.activate(joinpath(@__DIR__, "..")) +Pkg.develop(; path = joinpath(@__DIR__, "..", "..", "core")) +Pkg.instantiate() + +include(joinpath(@__DIR__, "..", "src", "irrigation.jl")) + +using Ribasim + +toml_path = joinpath(@__DIR__, "irrigation_model", "irrigation_model.toml") +isfile(toml_path) || error("Model not found. Run generate_model.py first.") + +config = Ribasim.Config(toml_path) +model = Ribasim.Model(config) + +irr = model.integrator.p.p_independent.irrigation +isnothing(irr) && error("[experimental] irrigation = true not set in TOML.") +isempty(irr.forcing_timestamps) && error("No irrigation forcing in GeoPackage. Run generate_model.py first.") + +n = length(irr.node_id) +forcing = Irrigation.Forcing(irr.forcing_timestamps, irr.precipitation_mmday[1], irr.potential_evaporation_mmday[1]) +irr_model = Irrigation.init(; forcing, t_start = config.starttime, n) + +irr.model = irr_model +irr.compute_demand! = Irrigation.get_demand! +irr.advance! = Irrigation.update! + +initial_total_storage = [ + irr_model.soil.variables.total_soil_water_storage[i] * 1.0e3 + + irr_model.interception.variables.canopy_storage[i] * 1.0e3 + for i in 1:n +] + +Ribasim.solve!(model) +Ribasim.write_results(model) + +Irrigation.finalize!( + irr_model, + joinpath(@__DIR__, "irrigation_model", "coupled_irrigation.nc"); + initial_total_storage, + ribasim_node_ids = Int32[id.value for id in irr.node_id], + irrigated_area_m2 = irr.irrigated_area_m2, +) diff --git a/irrigation/example/plot_results.py b/irrigation/example/plot_results.py new file mode 100644 index 000000000..334cd3048 --- /dev/null +++ b/irrigation/example/plot_results.py @@ -0,0 +1,369 @@ +""" +Python/matplotlib port of the ``plot_results`` function from ``run_irrigation.jl``. + +The function signature mirrors the Julia original: + + plot_results(results, nsteps, initial_total_storage, file, *, icol=0) + +Parameters +---------- +results : dict + Dict of 2-D numpy arrays (shape ``n x nsteps``) and a 1-D array for + ``rec_precip`` (shape ``nsteps``). Matches the fields of + ``IrrigationLogger`` in ``irrigation_utils.jl``: + + rec_wt_depth, rec_sat_storage, rec_unsat_storage, rec_actual_et, + rec_interception, rec_infiltration, rec_infiltration_excess, + rec_saturated_excess, rec_net_runoff_soil, rec_storage, rec_leakage, + rec_demand, rec_irrigation, rec_canopy_storage, + rec_precip ← 1-D (uniform forcing, same for every cell) + +nsteps : int + Number of time steps that were simulated. +initial_total_storage : float or array-like of float + Initial combined soil + canopy storage [mm] for each cell (or a single + float for the single-column case). +file : str or Path + Output image path (e.g. ``"single_column_no_allocation.png"``). +icol : int, optional + Zero-based column index to plot. Default 0 (first / only cell). +""" + +from __future__ import annotations + +from pathlib import Path + +import matplotlib.pyplot as plt +import netCDF4 as nc +import numpy as np + + +def read_logger( + path: str | Path, +) -> tuple[dict, int, np.ndarray, np.ndarray | None, np.ndarray]: + """Read an ``IrrigationLogger`` NetCDF file written by ``Irrigation.finalize!``. + + Returns + ------- + results : dict + nsteps : int + initial_total_storage : np.ndarray shape ``(n,)`` + ribasim_node_ids : np.ndarray or None + irrigated_area_m2 : np.ndarray shape ``(n,)`` + """ + with nc.Dataset(path, "r") as ds: + results = { + name: ( + np.array( + ds[name][:] + ).T # Julia writes (cell, time) col-major → Python reads (time, cell); transpose back + if ds[name].ndim == 2 + else np.array(ds[name][:]) + ) + for name in ds.variables + if name not in ("initial_total_storage", "ribasim_node_id") + } + initial_total_storage = np.array(ds["initial_total_storage"][:]) + ribasim_node_ids = ( + np.array(ds["ribasim_node_id"][:]) + if "ribasim_node_id" in ds.variables + else None + ) + irrigated_area_m2 = ( + np.array(ds["irrigated_area_m2"][:]) + if "irrigated_area_m2" in ds.variables + else np.ones(initial_total_storage.shape) + ) + nsteps = results["rec_precip"].shape[0] + return results, nsteps, initial_total_storage, ribasim_node_ids, irrigated_area_m2 + + +def read_allocation(path: str | Path) -> dict: + """Read Ribasim's ``allocation.nc`` result file. + + Returns a dict keyed by ``node_id`` (int), each value being a dict with: + - ``demand`` : np.ndarray shape ``(ntsteps,)`` [m³/s], summed over priorities + - ``allocated`` : np.ndarray shape ``(ntsteps,)`` [m³/s], summed over priorities + - ``supplied`` : np.ndarray shape ``(ntsteps,)`` [m³/s], summed over priorities + """ + with nc.Dataset(path, "r") as ds: + node_ids = np.array(ds["node_id"][:]) # (nnodes,) + # Julia wrote (nprio, nnodes, ntsteps) col-major → Python reads (ntsteps, nnodes, nprio) + demand = np.array(ds["demand"][:]) + allocated = np.array(ds["allocated"][:]) + supplied = np.array(ds["supplied"][:]) + + # Sum over the last axis (demand_priority) to get (ntsteps, nnodes) + # Replace NaN (unused priority slots) with 0 before summing + def _sum_prio(arr): + arr = np.where(np.isnan(arr), 0.0, arr) + return arr.sum(axis=-1) # (ntsteps, nnodes) + + demand_sum = _sum_prio(demand) + allocated_sum = _sum_prio(allocated) + supplied_sum = _sum_prio(supplied) + + return { + int(node_ids[j]): { + "demand": demand_sum[:, j], + "allocated": allocated_sum[:, j], + "supplied": supplied_sum[:, j], + } + for j in range(len(node_ids)) + } + + +def plot_results( + results: dict, + nsteps: int, + initial_total_storage: float | list[float] | np.ndarray, + file: str | Path, + *, + icol: int = 0, + ribasim_node_id: int | None = None, + allocation: dict | None = None, + irrigated_area_m2: float = 1.0, +) -> None: + # ── unpack logger arrays ────────────────────────────────────────────────── + rec_precip = np.asarray(results["rec_precip"]) # (nsteps,) + rec_actual_et = np.asarray(results["rec_actual_et"]) # (n, nsteps) + rec_interception = np.asarray(results["rec_interception"]) # (n, nsteps) + rec_net_runoff_soil = np.asarray(results["rec_net_runoff_soil"]) # (n, nsteps) + rec_storage = np.asarray(results["rec_storage"]) # (n, nsteps) + rec_leakage = np.asarray(results["rec_leakage"]) # (n, nsteps) + rec_demand = np.asarray(results["rec_demand"]) # (n, nsteps) + rec_irrigation = np.asarray(results["rec_irrigation"]) # (n, nsteps) + rec_canopy_storage = np.asarray(results["rec_canopy_storage"]) # (n, nsteps) + rec_wt_depth = np.asarray(results["rec_wt_depth"]) # (n, nsteps) + + # column slice (Julia uses 1-based; Python uses 0-based icol) + rec_demand_plot = rec_demand[icol, :] + rec_irrigation_plot = rec_irrigation[icol, :] + rec_wt_depth_plot = rec_wt_depth[icol, :] + rec_actual_et_plot = rec_actual_et[icol, :] + rec_interception_plot = rec_interception[icol, :] + rec_net_runoff_plot = rec_net_runoff_soil[icol, :] + rec_storage_plot = rec_storage[icol, :] + rec_leakage_plot = rec_leakage[icol, :] + rec_canopy_storage_plot = rec_canopy_storage[icol, :] + + days = np.arange(1, nsteps + 1) + + # ── derived quantities ──────────────────────────────────────────────────── + initial_storage_col = ( + float(initial_total_storage) + if np.ndim(initial_total_storage) == 0 + else np.asarray(initial_total_storage)[icol] + ) + + total_storage = rec_storage_plot + rec_canopy_storage_plot # mm + delta_storage = np.diff(np.concatenate([[initial_storage_col], total_storage])) + + rec_total_et = rec_actual_et_plot + rec_interception_plot + rec_net_runoff = rec_net_runoff_plot + + balance_error = ( + (rec_precip + rec_irrigation_plot) + - rec_total_et + - rec_net_runoff + - rec_leakage_plot + - delta_storage + ) + print( + f"\nBalance error (mm/day): " + f"min={balance_error.min():.3f} " + f"max={balance_error.max():.3f} " + f"mean={balance_error.mean():.3f}" + ) + + # ── stacked bar components ──────────────────────────────────────────────── + stor_release = np.maximum(-delta_storage, 0.0) + stor_gain = np.maximum(delta_storage, 0.0) + + # positive side (above zero) + pos1_top = stor_release + pos2_top = pos1_top + rec_precip + pos3_top = pos2_top + rec_irrigation_plot + + # negative side (below zero) + neg1_bot = -rec_interception_plot + neg2_bot = neg1_bot - rec_actual_et_plot + neg3_bot = neg2_bot - rec_net_runoff + neg4_bot = neg3_bot - rec_leakage_plot + neg5_bot = neg4_bot - stor_gain + + zeros = np.zeros(nsteps) + + # ── figure layout ───────────────────────────────────────────────────────── + fig, axes = plt.subplots(4, 1, figsize=(10, 11), sharex=False) + fig.subplots_adjust(hspace=0.45) + + # ── Panel 1: daily water budget stacked bars ────────────────────────────── + ax = axes[0] + ax.set_title("Daily water budget [+ in / - out] - land balance") + ax.set_xlabel("Day") + ax.set_ylabel("mm/day") + ax.set_xticks(range(1, nsteps + 1, 5)) + + def _bar(ax, bottom, top, color, label=None): + ax.bar( + days, + top - bottom, + bottom=bottom, + color=color, + label=label, + width=0.8, + align="center", + ) + + _bar(ax, zeros, pos1_top, (0.855, 0.647, 0.125, 0.85), "Storage release") + _bar(ax, pos1_top, pos2_top, (0.275, 0.510, 0.706, 0.85), "Precipitation") + _bar(ax, pos2_top, pos3_top, (0.118, 0.565, 1.000, 0.85), "Irrigation (external)") + _bar(ax, neg1_bot, zeros, (0.529, 0.808, 0.922, 0.85), "Interception ET") + _bar(ax, neg2_bot, neg1_bot, (0.180, 0.545, 0.341, 0.85), "Soil AET") + _bar( + ax, + neg3_bot, + neg2_bot, + (1.000, 0.647, 0.000, 0.85), + "Net runoff (infil + sat excess)", + ) + _bar(ax, neg4_bot, neg3_bot, (0.576, 0.439, 0.859, 0.85), "Leakage") + _bar( + ax, neg5_bot, neg4_bot, (0.855, 0.647, 0.125, 0.85) + ) # stor gain (no legend entry) + ax.axhline(0, color="black", linewidth=1) + ax.legend(loc="upper left", fontsize=7) + + # ── Panel 2: water table depth ──────────────────────────────────────────── + ax2 = axes[1] + ax2.set_title("Water table depth below surface") + ax2.set_xlabel("Day") + ax2.set_ylabel("depth [m]") + ax2.set_xticks(range(1, nsteps + 1, 5)) + ax2.invert_yaxis() + ax2.plot(days, rec_wt_depth_plot, color="steelblue", linewidth=2) + ax2.scatter(days, rec_wt_depth_plot, color="steelblue", s=5) + + # ── Panel 3: irrigation demand vs allocation ─────────────────────────────── + ax3 = axes[2] + ax3.set_title("Irrigation: demand vs allocation") + ax3.set_xlabel("Day") + ax3.set_ylabel("mm/day") + ax3.set_xticks(range(1, nsteps + 1, 5)) + ax3.bar( + days, + rec_irrigation_plot, + color=(0.118, 0.565, 1.000, 0.85), + label="Allocation (external)", + width=0.8, + ) + # stairs: extend last value one step, shift x by -0.5 to match Julia barplot alignment + stair_x = np.concatenate([days - 0.5, [nsteps + 0.5]]) + stair_y = np.concatenate([rec_demand_plot, [rec_demand_plot[-1]]]) + ax3.step( + stair_x, + stair_y, + where="post", + color="navy", + linewidth=2, + label="Demand (soil moisture deficit)", + ) + ax3.legend(loc="upper right", fontsize=7) + + # ── Panel 4: cumulative fluxes ──────────────────────────────────────────── + ax4 = axes[3] + ax4.set_title("Cumulative fluxes") + ax4.set_xlabel("Day") + ax4.set_ylabel("mm") + ax4.set_xticks(range(1, nsteps + 1, 5)) + ax4.plot( + days, + np.cumsum(rec_precip), + color="steelblue", + linewidth=2, + label="Precipitation", + ) + ax4.plot( + days, + np.cumsum(rec_irrigation_plot), + color="dodgerblue", + linewidth=2, + label="Irrigation", + ) + ax4.plot( + days, np.cumsum(rec_total_et), color="seagreen", linewidth=2, label="Total ET" + ) + ax4.plot( + days, np.cumsum(rec_net_runoff), color="orange", linewidth=2, label="Net runoff" + ) + ax4.plot( + days, + np.cumsum(rec_leakage_plot), + color="mediumpurple", + linewidth=2, + label="Leakage", + ) + ax4.legend(loc="upper left", fontsize=7) + + # ── Panel 5 (optional): Ribasim allocation results ──────────────────────── + if ( + allocation is not None + and ribasim_node_id is not None + and ribasim_node_id in allocation + ): + fig.set_size_inches(10, 14) # taller to fit 5th panel + ax5 = fig.add_subplot(5, 1, 5) + # reposition existing axes to fit 5 panels + for i, ax in enumerate(axes): + ax.set_position([0.125, 0.79 - i * 0.185, 0.775, 0.15]) + ax5.set_position([0.125, 0.79 - 4 * 0.185, 0.775, 0.15]) + + node_data = allocation[ribasim_node_id] + # convert m³/s → mm/day + area = irrigated_area_m2 if irrigated_area_m2 > 0 else 1.0 + to_mm_day = 1000.0 * 86400.0 / area + alloc_days = np.arange(1, len(node_data["demand"]) + 1) + ax5.set_title(f"Ribasim allocation — UserDemand node {ribasim_node_id}") + ax5.set_xlabel("Day") + ax5.set_ylabel("mm/day") + ax5.set_xticks(range(1, nsteps + 1, 5)) + + supplied_mm = node_data["supplied"] * to_mm_day + demand_mm = node_data["demand"] * to_mm_day + allocated_mm = node_data["allocated"] * to_mm_day + + # bar: supplied (matches the allocation bar in panel 3) + ax5.bar( + alloc_days, + supplied_mm, + color=(0.118, 0.565, 1.000, 0.85), + width=0.8, + label="Supplied", + ) + + # stepped lines: demand and allocated + stair_x = np.concatenate([alloc_days - 0.5, [len(alloc_days) + 0.5]]) + ax5.step( + stair_x, + np.concatenate([demand_mm, [demand_mm[-1]]]), + where="post", + color="navy", + linewidth=2, + label="Demand", + ) + ax5.step( + stair_x, + np.concatenate([allocated_mm, [allocated_mm[-1]]]), + where="post", + color="dodgerblue", + linewidth=1.5, + linestyle="--", + label="Allocated", + ) + + ax5.legend(loc="upper right", fontsize=7) + + fig.savefig(file, dpi=150, bbox_inches="tight") + plt.close(fig) + print(f"Plot saved to: {Path(file).resolve()}") diff --git a/irrigation/example/run_irrigation_coupled.py b/irrigation/example/run_irrigation_coupled.py new file mode 100644 index 000000000..970ea742b --- /dev/null +++ b/irrigation/example/run_irrigation_coupled.py @@ -0,0 +1,131 @@ +""" +Generate the Ribasim irrigation coupling example model. + +Starts from the standard ``allocation_example_model`` (two basins, two +UserDemand nodes, a LinearResistance connector, and a TabulatedRatingCurve +outlet) and enables the irrigation coupling flag so the Julia side knows to +wire in the Wflow soil model. + +Topology (from the allocation docs example):: + + FlowBoundary 1 ─► Basin 2 ─► UserDemand 3 (priority 1) + └► LinearResistance 4 ─► Basin 5 ─► UserDemand 6 (priority 3) + └► TabulatedRatingCurve 7 ─► Terminal 8 + +The model runs for 30 days (2020-01-01 to 2020-01-31) to match the 30-day +default synthetic forcing of the irrigation module. + +Run from the repo root:: + + pixi run python irrigation/example/generate_model.py +""" + +import subprocess +import sys +from datetime import datetime, timedelta +from pathlib import Path + +import pandas as pd +from ribasim.config import Allocation, Experimental +from ribasim_testmodels import allocation_example_model + +sys.path.insert(0, str(Path(__file__).parent)) +from plot_results import plot_results, read_allocation, read_logger + +sys.path.insert(0, str(Path(__file__).parent)) + +OUT_DIR = Path(__file__).parent / "irrigation_model" / "irrigation_model.toml" + +# ─────────────────────────────────────────────────────────────────────────── +model = allocation_example_model() + +# Extend to 30 days so it matches the irrigation module default forcing length +model.endtime = datetime(2020, 1, 31) + +# Run allocation every day to match the soil model's daily timestep +model.allocation = Allocation(dt=86400.0) + +# Enable irrigation coupling (keeps allocation=True and concentration=True from the base model) +model.experimental = Experimental( + allocation=True, + concentration=True, + irrigation=True, +) + +# ── Irrigation soil model inputs ────────────────────────────────────────────── +# Irrigated area per UserDemand node [m²] — 10 km² creates realistic demand vs 2 m³/s supply +IRRIGATED_AREA_M2 = 1e7 +user_demand_node_ids = list(model.user_demand.node.df.index) + +model.user_demand.irrigation_static.df = pd.DataFrame( + { + "node_id": user_demand_node_ids, + "irrigated_area_m2": [IRRIGATED_AREA_M2] * len(user_demand_node_ids), + } +) + +# 30-day synthetic forcing matching Irrigation.default_forcing(): +# precipitation : 1 mm/day for days 1-15, 30 mm/day for days 16-30 +# potential ET : 6 mm/day for days 1-15, 0 mm/day for days 16-30 +timestamps = [model.starttime + timedelta(days=i) for i in range(1, 31)] +precip = [1.0] * 15 + [30.0] * 15 +pet = [6.0] * 15 + [0.0] * 15 + +rows = [] +for node_id in user_demand_node_ids: + for t, p, e in zip(timestamps, precip, pet, strict=True): + rows.append( + { + "node_id": node_id, + "time": t, + "precipitation": p, + "potential_evaporation": e, + } + ) +model.user_demand.irrigation_forcing.df = pd.DataFrame(rows) + +# ─────────────────────────────────────────────────────────────────────────── +OUT_DIR.parent.mkdir(exist_ok=True) +model.write(OUT_DIR) +print(f"Model written to: {OUT_DIR.resolve()}") +print(f"UserDemand nodes: {list(model.user_demand.node.df.index)}") + +# ── Run the coupled Julia simulation ────────────────────────────────────────── +REPO_ROOT = Path(__file__).parent.parent.parent +coupled_script = Path(__file__).parent / "coupled_irrigation.jl" +print("\nRunning coupled_irrigation.jl …") +result = subprocess.run( + ["julia", f"--project={Path(__file__).parent.parent}", str(coupled_script)], + cwd=REPO_ROOT, +) +if result.returncode != 0: + print("coupled_irrigation.jl failed — skipping plots.") + sys.exit(result.returncode) + +# ── Plot irrigation results ─────────────────────────────────────────────────── +NC_DIR = OUT_DIR.parent +nc_path = NC_DIR / "coupled_irrigation.nc" +allocation_nc = NC_DIR / "results" / "allocation.nc" + +if nc_path.exists(): + results, nsteps, initial_total_storage, ribasim_node_ids, irrigated_area_m2 = ( + read_logger(nc_path) + ) + allocation = read_allocation(allocation_nc) if allocation_nc.exists() else None + if allocation is None: + print("No allocation.nc found — plotting without Ribasim network results.") + n_cols = results["rec_demand"].shape[0] + for icol in range(n_cols): + node_id = int(ribasim_node_ids[icol]) if ribasim_node_ids is not None else None + plot_results( + results, + nsteps, + initial_total_storage, + NC_DIR / f"coupled_irrigation_col{icol}.png", + icol=icol, + ribasim_node_id=node_id, + allocation=allocation, + irrigated_area_m2=float(irrigated_area_m2[icol]), + ) +else: + print(f"Skipping plot — {nc_path} not found.") diff --git a/irrigation/example/run_irrigation_standalone.jl b/irrigation/example/run_irrigation_standalone.jl new file mode 100644 index 000000000..ee628d337 --- /dev/null +++ b/irrigation/example/run_irrigation_standalone.jl @@ -0,0 +1,317 @@ +import Pkg +Pkg.activate(joinpath(@__DIR__, "..")) +Pkg.instantiate() + +include("../src/irrigation.jl") +using CairoMakie + +function plot_results( + results, + nsteps::Int, + initial_total_storage::Union{Float64, Vector{Float64}}, + file::String; + icol::Int = 1, + ) + initial_storage_col = + isa(initial_total_storage, Float64) ? initial_total_storage : + initial_total_storage[icol] + (; + rec_wt_depth, + rec_sat_storage, + rec_unsat_storage, + rec_actual_et, + rec_interception, + rec_infiltration, + rec_infiltration_excess, + rec_saturated_excess, + rec_net_runoff_soil, + rec_storage, + rec_leakage, + rec_demand, + rec_irrigation, + rec_canopy_storage, + rec_precip, + ) = results + + rec_demand_plot = rec_demand[icol, :] + rec_irrigation_plot = rec_irrigation[icol, :] + rec_wt_depth_plot = rec_wt_depth[icol, :] + rec_actual_et_plot = rec_actual_et[icol, :] + rec_interception_plot = rec_interception[icol, :] + rec_net_runoff_plot = rec_net_runoff_soil[icol, :] + rec_storage_plot = rec_storage[icol, :] + rec_leakage_plot = rec_leakage[icol, :] + rec_canopy_storage_plot = rec_canopy_storage[icol, :] + + days = collect(1:nsteps) + + # Storage change: soil + canopy [mm/day] + total_storage = rec_storage_plot .+ rec_canopy_storage_plot # mm + Δstorage = diff([initial_storage_col; total_storage]) + + # Total ET (soil AET + interception ET) + rec_total_et = rec_actual_et_plot .+ rec_interception_plot + + rec_net_runoff = rec_net_runoff_plot + + # Balance error + balance_error = + (rec_precip .+ rec_irrigation_plot) .- rec_total_et .- rec_net_runoff .- + rec_leakage_plot .- Δstorage + println( + "\nBalance error (mm/day): min=$(round(minimum(balance_error), digits = 3)) max=$(round(maximum(balance_error), digits = 3)) mean=$(round(sum(balance_error) / nsteps, digits = 3))", + ) + + # Decompose storage change into release (positive) and gain (negative) + stor_release = max.(-Δstorage, 0.0) # storage releasing water → positive contribution + stor_gain = max.(Δstorage, 0.0) # storage gaining water → negative contribution + + # Positive side (above zero): storage release, then precipitation, then irrigation on top + pos1_top = stor_release + pos2_top = stor_release .+ rec_precip + pos3_top = pos2_top .+ rec_irrigation_plot + + # Negative side (below zero): interception ET | soil AET | infil excess | sat excess | leakage | stor gain + neg1_bot = .-rec_interception_plot + neg2_bot = neg1_bot .- rec_actual_et_plot + neg3_bot = neg2_bot .- rec_net_runoff + neg4_bot = neg3_bot .- rec_leakage_plot + neg5_bot = neg4_bot .- stor_gain + + fig = Figure(; size = (1000, 1100)) + ax = Axis( + fig[1, 1]; + title = "Daily water budget [+ in / − out] — land balance (mass_balance.jl)", + xlabel = "Day", + ylabel = "mm/day", + xticks = 1:5:nsteps, + ) + + # Positive bars (stacked upward) + barplot!( + ax, + days, + pos1_top; + fillto = zeros(nsteps), + color = (:goldenrod, 0.85), + label = "Storage release", + ) + barplot!( + ax, + days, + pos2_top; + fillto = pos1_top, + color = (:steelblue, 0.85), + label = "Precipitation", + ) + barplot!( + ax, + days, + pos3_top; + fillto = pos2_top, + color = (:dodgerblue, 0.85), + label = "Irrigation (external)", + ) + + # Negative bars (stacked downward) + barplot!( + ax, + days, + neg1_bot; + fillto = zeros(nsteps), + color = (:skyblue, 0.85), + label = "Interception ET", + ) + barplot!( + ax, + days, + neg2_bot; + fillto = neg1_bot, + color = (:seagreen, 0.85), + label = "Soil AET", + ) + barplot!( + ax, + days, + neg3_bot; + fillto = neg2_bot, + color = (:orange, 0.85), + label = "Net runoff (infil + sat excess)", + ) + barplot!( + ax, + days, + neg4_bot; + fillto = neg3_bot, + color = (:mediumpurple, 0.85), + label = "Leakage", + ) + barplot!( + ax, + days, + neg5_bot; + fillto = neg4_bot, + color = (:goldenrod, 0.85), + label = nothing, + ) + + hlines!(ax, [0]; color = :black, linewidth = 1) + axislegend(ax; position = :lt) + + # ── Panel 2: water table depth ──────────────────────────────────────────────── + ax2 = Axis( + fig[2, 1]; + title = "Water table depth below surface", + xlabel = "Day", + ylabel = "depth [m]", + xticks = 1:5:nsteps, + yreversed = true, + ) + lines!(ax2, days, rec_wt_depth_plot; color = :steelblue, linewidth = 2) + scatter!(ax2, days, rec_wt_depth_plot; color = :steelblue, markersize = 5) + + # ── Panel 3: irrigation demand vs allocation ─────────────────────────────────── + # demand = rec_demand (soil-moisture-deficit driven, from NonPaddyModel) [mm/day] + # allocation = rec_irrigation = fraction_realised × demand (external supply, e.g. Ribasim) + # In a real coupling, Ribasim reads demand via BMI get_value, routes water through its + # network, and returns the achievable allocation which may be < demand. + ax3 = Axis( + fig[3, 1]; + title = "Irrigation: demand vs allocation", + xlabel = "Day", + ylabel = "mm/day", + xticks = 1:5:nsteps, + ) + barplot!( + ax3, + days, + rec_irrigation_plot; + color = (:dodgerblue, 0.85), + label = "Allocation (external)", + ) + stairs!( + ax3, + [days; nsteps + 1] .- 0.5, + [rec_demand_plot; rec_demand_plot[end]]; + color = :navy, + linewidth = 2, + step = :post, + label = "Demand (soil moisture deficit)", + ) + axislegend(ax3; position = :rt) + + # ── Panel 4: cumulative water budget ────────────────────────────────────────── + ax4 = Axis( + fig[4, 1]; + title = "Cumulative fluxes", + xlabel = "Day", + ylabel = "mm", + xticks = 1:5:nsteps, + ) + lines!( + ax4, + days, + cumsum(rec_precip); + color = :steelblue, + linewidth = 2, + label = "Precipitation", + ) + lines!( + ax4, + days, + cumsum(rec_irrigation_plot); + color = :dodgerblue, + linewidth = 2, + label = "Irrigation", + ) + lines!( + ax4, + days, + cumsum(rec_total_et); + color = :seagreen, + linewidth = 2, + label = "Total ET", + ) + lines!( + ax4, + days, + cumsum(rec_net_runoff); + color = :orange, + linewidth = 2, + label = "Net runoff", + ) + lines!( + ax4, + days, + cumsum(rec_leakage_plot); + color = :mediumpurple, + linewidth = 2, + label = "Leakage", + ) + axislegend(ax4; position = :lt) + save(file, fig) + return println("Plot saved to: $file") +end + +# -- inputs -------------------------------------------------------------------- +forcing = Irrigation.default_forcing() # 30-day synthetic series, edit or replace + +# -- run simulation without allocation ----------------------------------------- +m = Irrigation.init(; forcing) + +# read initial storage before any update +initial_total_storage = + m.soil.variables.total_soil_water_storage[1] * 1.0e3 + + m.interception.variables.canopy_storage[1] * 1.0e3 # mm + +# runs full simulation at ones for reference, without any allocation +nsteps = length(forcing.timestamps) +Irrigation.update_until!(m, nsteps * m.dt) +plot_results(m.logger, nsteps, initial_total_storage, joinpath(@__DIR__, "single_column_no_allocation.png")) +Irrigation.finalize!(m, joinpath(@__DIR__, "single_column_no_allocation.nc"); initial_total_storage) + +# -- run simulation with allocation -------------------------------------------- +m = Irrigation.init(; forcing) + +# read initial storage before any update +initial_total_storage = + m.soil.variables.total_soil_water_storage[1] * 1.0e3 + + m.interception.variables.canopy_storage[1] * 1.0e3 # mm + +nsteps = length(forcing.timestamps) +for step in 1:nsteps + demand = Irrigation.get_demand!(m) + Irrigation.set_allocated!(m, demand .* 0.5) # 50% reduction + print(step, step * m.dt) + Irrigation.update_until!(m, step * m.dt) +end +plot_results(m.logger, nsteps, initial_total_storage, joinpath(@__DIR__, "single_column_allocation.png")) +Irrigation.finalize!(m, joinpath(@__DIR__, "single_column_allocation.nc"); initial_total_storage) + +# -- run multi column simulation with allocation -------------------------------- +m = Irrigation.init(; forcing, n = 4) + +# read initial storage before any update — one value per cell (all identical at init) +initial_total_storage_multicol = [ + m.soil.variables.total_soil_water_storage[icol] * 1.0e3 + + m.interception.variables.canopy_storage[icol] * 1.0e3 for icol in 1:4 +] + +nsteps = length(forcing.timestamps) +fraction_realised = [1.0, 0.75, 0.25, 0.0] +for step in 1:nsteps + demand = Irrigation.get_demand!(m) + Irrigation.set_allocated!(m, demand .* fraction_realised) + print(step, step * m.dt) + Irrigation.update_until!(m, step * m.dt) +end +for icol in 1:4 + plot_results( + m.logger, + nsteps, + initial_total_storage_multicol, + joinpath(@__DIR__, "multi_column_col$(icol).png"); + icol, + ) +end +Irrigation.finalize!(m, joinpath(@__DIR__, "multi_column.nc"); initial_total_storage = initial_total_storage_multicol) diff --git a/irrigation/src/irrigation.jl b/irrigation/src/irrigation.jl new file mode 100644 index 000000000..4840133f7 --- /dev/null +++ b/irrigation/src/irrigation.jl @@ -0,0 +1,378 @@ +module Irrigation + +using Dates +using NCDatasets +using Wflow +using StaticArrays: SVector +using FillArrays + +include("irrigation_utils.jl") + +# ── Allocation stub ──────────────────────────────────────────────────────────── +struct ExternalIrrigationAllocation <: Wflow.AbstractAllocationModel + n::Int + irrigation_allocation::Vector{Float64} # [m/s], set externally each step +end +ExternalIrrigationAllocation(n::Int) = ExternalIrrigationAllocation(n, zeros(n)) +Wflow.get_irrigation_allocated(a::ExternalIrrigationAllocation) = a.irrigation_allocation +Wflow.get_groundwater_abstraction_flux(a::ExternalIrrigationAllocation) = + FillArrays.Zeros(a.n) + +# ── State struct ─────────────────────────────────────────────────────────────── +mutable struct IrrigationModel + n::Int + # Wflow components (unpacked for direct access) + soil::Wflow.SbmSoilModel + interception::Wflow.GashInterceptionModel + runoff::Wflow.OpenWaterRunoff + demand::Wflow.DemandModel + allocation::ExternalIrrigationAllocation + atmospheric_forcing::Wflow.AtmosphericForcing + snow::Wflow.NoSnowModel + glacier::Wflow.NoGlacierModel + config::Wflow.Config + exfiltwater_average::Vector{Float64} + # Forcing + forcing::Forcing + t_start::DateTime + irr_config::IrrigationConfig + dt::Float64 + # Clock + tcurrent::Float64 # seconds elapsed since t_start + # Logger + logger::IrrigationLogger +end + +# ── init ─────────────────────────────────────────────────────────────────────── +function init(; + forcing::Forcing = default_forcing(), + t_start::DateTime = forcing.timestamps[1] - Day(1), + dt::Float64 = 86400.0, + n::Int = 1, + soil_cfg::SoilConfig = SoilConfig(), + veg_cfg::VegetationConfig = VegetationConfig(), + irr_cfg::IrrigationConfig = IrrigationConfig(), + ) + sc = soil_cfg + vc = veg_cfg + ic = irr_cfg + + N = length(sc.layer_thickness) + cumulative_depth = SVector(0.0, cumsum(sc.layer_thickness)...) + soil_thickness = sum(sc.layer_thickness) + brooks_corey_exp = SVector(ntuple(_ -> sc.brooks_corey_exponent, N)...) + kv_factor_vec = SVector(ntuple(_ -> sc.kv_factor, N)...) + + atmospheric_forcing = Wflow.AtmosphericForcing(; n) + + vegetation_parameters = Wflow.VegetationParameters(; + leaf_area_index = nothing, + canopy_gap_fraction = fill(vc.canopy_gap_fraction, n), + maximum_canopy_storage = fill(vc.maximum_canopy_storage, n), + rooting_depth = fill(vc.rooting_depth, n), + crop_coefficient = fill(vc.crop_coefficient, n), + ) + + interception = Wflow.GashInterceptionModel(; + n, + parameters = Wflow.GashParameters(; + evaporation_to_precipitation_ratio = fill( + vc.evaporation_to_precipitation_ratio, + n, + ), + vegetation_parameter_set = vegetation_parameters, + ), + ) + + snow = Wflow.NoSnowModel(n) + glacier = Wflow.NoGlacierModel(n) + runoff = Wflow.OpenWaterRunoff(; n) + + soil_parameters = Wflow.SbmSoilParameters(; + maximum_number_of_layers = N, + number_of_layers = fill(N, n), + vegetation_parameter_set = vegetation_parameters, + kv_profile = Wflow.KvExponential(fill(sc.ksat_surface, n), fill(sc.ksat_decay, n)), + theta_s = fill(sc.theta_s, n), + theta_r = fill(sc.theta_r, n), + theta_fc = fill(sc.theta_fc, n), + soil_water_capacity = fill((sc.theta_s - sc.theta_r) * soil_thickness, n), + soil_thickness = fill(soil_thickness, n), + actual_layer_thickness = fill(sc.layer_thickness, n), + cumulative_layer_depth = fill(cumulative_depth, n), + air_entry_pressure = fill(sc.air_entry_pressure, n), + brooks_corey_exponent = fill(brooks_corey_exp, n), + vertical_hydraulic_conductivity_factor = fill(kv_factor_vec, n), + rootfraction = fill(sc.rootfraction, n), + infiltration_capacity_compacted_soil = fill(sc.infiltration_capacity_compacted, n), + infiltration_capacity_soil = fill(sc.infiltration_capacity_soil, n), + maximum_leakage = fill(sc.maximum_leakage, n), + cap_hmax = fill(sc.cap_hmax, n), + cap_n = fill(sc.cap_n, n), + w_soil = fill(sc.w_soil, n), + cf_soil = fill(sc.cf_soil, n), + compacted_soil_area_fraction = fill(sc.compacted_area_fraction, n), + wet_root_distribution_parameter = fill(sc.wet_root_distribution_parameter, n), + h1 = fill(sc.h1, n), + h2 = fill(sc.h2, n), + h3_high = fill(sc.h3_high, n), + h3_low = fill(sc.h3_low, n), + h4 = fill(sc.h4, n), + alpha_h1 = fill(sc.alpha_h1, n), + soil_fraction = fill(sc.soil_fraction, n), + ) + + soil = Wflow.SbmSoilModel(; + n, + parameters = soil_parameters, + variables = Wflow.SbmSoilVariables(n, soil_parameters), + ) + + demand = Wflow.DemandModel(; + domestic = Wflow.NoNonIrrigationDemandModel(n), + industry = Wflow.NoNonIrrigationDemandModel(n), + livestock = Wflow.NoNonIrrigationDemandModel(n), + paddy = Wflow.NoIrrigationPaddyModel(n), + nonpaddy = Wflow.NonPaddyModel(; + n, + parameters = Wflow.NonPaddyParameters(; + irrigation_efficiency = fill(ic.irrigation_efficiency, n), + maximum_irrigation_rate = fill(ic.maximum_irrigation_rate, n), + irrigation_areas = fill(true, n), + irrigation_trigger = fill(true, n), + ), + ), + variables = Wflow.DemandVariables(; n), + ) + + allocation = ExternalIrrigationAllocation(n) + + fill!(runoff.variables.runoff_river, 0.0) + fill!(runoff.variables.runoff_land, 0.0) + fill!(runoff.variables.actual_open_water_evaporation_land, 0.0) + fill!(runoff.variables.actual_open_water_evaporation_river, 0.0) + fill!(runoff.variables.net_runoff_river, 0.0) + + config = Wflow.Config( + Dict{String, Any}( + "path" => "", + "model" => Dict{String, Any}( + "type" => "sbm", + "snow__flag" => false, + "soil_infiltration_reduction__flag" => false, + ), + "input" => Dict{String, Any}( + "path_forcing" => "", + "path_static" => "", + "basin__local_drain_direction" => "", + "river_location__mask" => "", + "subbasin_location__count" => "", + "forcing" => Dict{String, Any}(), + "static" => Dict{String, Any}(), + ), + ); + path = "", + ) + + nsteps = length(forcing.timestamps) + println("Irrigation model initialised.") + + return IrrigationModel( + n, + soil, + interception, + runoff, + demand, + allocation, + atmospheric_forcing, + snow, + glacier, + config, + zeros(n), # exfiltwater_average + forcing, + t_start, + irr_cfg, + dt, + 0.0, # tcurrent [s] + IrrigationLogger(n, nsteps), + ) +end + +# ── update! ──────────────────────────────────────────────────────────────────── +function update!(m::IrrigationModel) + (; + soil, + interception, + runoff, + demand, + allocation, + atmospheric_forcing, + snow, + glacier, + config, + exfiltwater_average, + forcing, + t_start, + dt, + ) = m + + # derive current DateTime (right-labelled: end of the interval being computed) + t_now = t_start + Second(round(Int, m.tcurrent + dt)) + step = searchsortedfirst(forcing.timestamps, t_now) # logger index + precip_mmday, pet_mmday = get_forcing(forcing, t_now) + + dummy_subsurface = (; variables = (; exfiltwater_average)) + + fill!(atmospheric_forcing.precipitation, precip_mmday * 1.0e-3 / dt) + fill!(atmospheric_forcing.potential_evaporation, pet_mmday * 1.0e-3 / dt) + fill!(atmospheric_forcing.temperature, 283.15) + + Wflow.update_interception_model!(interception, atmospheric_forcing, dt) + + Wflow.get_water_flux_surface!( + runoff.boundary_conditions.water_flux_surface, + snow, + glacier, + interception, + ) + + Wflow.update_bc_soil_model!( + soil, + atmospheric_forcing, + (; interception, runoff, demand, allocation), + dt, + ) + + Wflow.update_soil_water_flow!( + soil, + atmospheric_forcing, + (; snow, runoff, demand), + config, + dt, + ) + + for cell_idx in 1:m.n + zi_prev = soil.variables.water_table_depth[cell_idx] + net_flux = soil.variables.recharge[cell_idx] + specific_yield = Wflow.lower_bound_drainable_porosity( + soil.parameters.theta_s[cell_idx], + soil.parameters.theta_fc[cell_idx], + ) + dh, exfilt = Wflow.water_table_change(soil, net_flux, specific_yield, cell_idx, dt) + new_wt_depth = clamp(zi_prev - dh, 0.0, soil.parameters.soil_thickness[cell_idx]) + Wflow.update_ustorelayerdepth!(soil, zi_prev, new_wt_depth, cell_idx) + exfiltwater_average[cell_idx] = exfilt + end + + Wflow.update_soil_water_storage!( + soil, + (; runoff, demand, subsurface_flow = dummy_subsurface), + dt, + ) + + log!(m.logger, step, soil, interception, demand, allocation, precip_mmday, dt) + + @. soil.variables.actual_evapotranspiration += interception.variables.interception_rate + + return m.tcurrent += dt +end + +# ── update_until! ────────────────────────────────────────────────────────────── +function update_until!(m::IrrigationModel, t_end::Float64) + while m.tcurrent < t_end - 0.5 * m.dt + update!(m) + end + return +end + +# ── public API ───────────────────────────────────────────────────────────────── +function get_demand!(m::IrrigationModel) + Wflow.update_water_demand_model!(m.demand, m.soil, m.dt) + return m.demand.nonpaddy.variables.demand_gross +end + +function set_allocated!(m::IrrigationModel, allocation::AbstractVector{Float64}) + return m.allocation.irrigation_allocation .= allocation +end + +# ── finalize! ────────────────────────────────────────────────────────────────── +""" + finalize!(m, path; initial_total_storage) + +Write `m.logger` to a NetCDF file at `path` so Python (or any other tool) can +read and plot the results without a live Julia session. + +Dimensions +- `cell` : cell index (0-based integer, length `n`) +- `time` : time-step index (1-based integer, length `nsteps`) + +Variables +- `rec_precip` : `(time,)` — uniform precipitation forcing [mm/day] +- all other `rec_*` fields : `(cell, time)` — per-cell per-step values [mm/day or m] +- `initial_total_storage` : `(cell,)` — soil+canopy storage at t=0 [mm] +""" +function finalize!( + m::IrrigationModel, + path::AbstractString; + initial_total_storage::Union{Float64, Vector{Float64}} = zeros(m.n), + ribasim_node_ids::Vector{Int32} = Int32[], + irrigated_area_m2::Vector{Float64} = ones(m.n), + ) + logger = m.logger + n = m.n + nsteps = length(logger.rec_precip) + + NCDataset(path, "c") do ds + defDim(ds, "cell", n) + defDim(ds, "time", nsteps) + + # 1-D forcing (same for all cells) + v = defVar(ds, "rec_precip", Float64, ("time",); attrib = ["units" => "mm/day"]) + v[:] = logger.rec_precip + + # initial storage per cell + v = defVar(ds, "initial_total_storage", Float64, ("cell",); attrib = ["units" => "mm"]) + v[:] = isa(initial_total_storage, Float64) ? fill(initial_total_storage, n) : initial_total_storage + + # 2-D per-cell variables (cell × time) + matrix_vars = [ + ("rec_wt_depth", logger.rec_wt_depth, "m"), + ("rec_sat_storage", logger.rec_sat_storage, "mm"), + ("rec_unsat_storage", logger.rec_unsat_storage, "mm"), + ("rec_actual_et", logger.rec_actual_et, "mm/day"), + ("rec_interception", logger.rec_interception, "mm/day"), + ("rec_infiltration", logger.rec_infiltration, "mm/day"), + ("rec_infiltration_excess", logger.rec_infiltration_excess, "mm/day"), + ("rec_saturated_excess", logger.rec_saturated_excess, "mm/day"), + ("rec_net_runoff_soil", logger.rec_net_runoff_soil, "mm/day"), + ("rec_storage", logger.rec_storage, "mm"), + ("rec_leakage", logger.rec_leakage, "mm/day"), + ("rec_demand", logger.rec_demand, "mm/day"), + ("rec_irrigation", logger.rec_irrigation, "mm/day"), + ("rec_canopy_storage", logger.rec_canopy_storage, "mm"), + ] + for (name, data, units) in matrix_vars + v = defVar(ds, name, Float64, ("cell", "time"); attrib = ["units" => units]) + v[:, :] = data + end + + # Ribasim node IDs (one per soil column) — empty when run standalone + if !isempty(ribasim_node_ids) + v = defVar( + ds, "ribasim_node_id", Int32, ("cell",); + attrib = ["long_name" => "Ribasim UserDemand node_id for each soil column"] + ) + v[:] = ribasim_node_ids + end + + # Irrigated area per soil column [m²] + v = defVar( + ds, "irrigated_area_m2", Float64, ("cell",); + attrib = ["units" => "m2", "long_name" => "irrigated area per soil column"] + ) + v[:] = irrigated_area_m2 + end + return println("Logger written to: $path") +end + +end # module Irrigation diff --git a/irrigation/src/irrigation_utils.jl b/irrigation/src/irrigation_utils.jl new file mode 100644 index 000000000..314e74c07 --- /dev/null +++ b/irrigation/src/irrigation_utils.jl @@ -0,0 +1,193 @@ +# Included inside module Irrigation (irrigation.jl). +# Requires: Dates, Wflow, FillArrays already imported by the parent file. + +# ── Forcing ─────────────────────────────────────────────────────────────────── +struct Forcing + timestamps::Vector{DateTime} # right-labelled: timestamp = end of interval + precipitation::Vector{Float64} # mm/day + potential_evaporation::Vector{Float64} # mm/day +end + +function default_forcing(t_start::DateTime = DateTime(2000, 1, 1)) + timestamps = [t_start + Day(i) for i in 1:30] + return Forcing( + timestamps, + [repeat([1.0], 15); repeat([30.0], 15)], + [repeat([6.0], 15); repeat([0.0], 15)], + ) +end + +function get_forcing(forcing::Forcing, t::DateTime) + idx = searchsortedfirst(forcing.timestamps, t) + return forcing.precipitation[idx], forcing.potential_evaporation[idx] +end + +# ── Config structs ────────────────────────────────────────────────────────────── +@kwdef struct VegetationConfig + canopy_gap_fraction::Float64 = 0.35 + maximum_canopy_storage::Float64 = 5.0e-4 # m (~0.5 mm) + rooting_depth::Float64 = 0.5 # m + crop_coefficient::Float64 = 1.0 + evaporation_to_precipitation_ratio::Float64 = 0.25 +end + +struct SoilConfig{N} + layer_thickness::SVector{N, Float64} + rootfraction::SVector{N, Float64} + theta_s::Float64 + theta_r::Float64 + theta_fc::Float64 + ksat_surface::Float64 + ksat_decay::Float64 + brooks_corey_exponent::Float64 + kv_factor::Float64 + air_entry_pressure::Float64 + wet_root_distribution_parameter::Float64 + h1::Float64 + h2::Float64 + h3_high::Float64 + h3_low::Float64 + h4::Float64 + alpha_h1::Float64 + infiltration_capacity_soil::Float64 + infiltration_capacity_compacted::Float64 + compacted_area_fraction::Float64 + maximum_leakage::Float64 + cap_hmax::Float64 + cap_n::Float64 + w_soil::Float64 + cf_soil::Float64 + soil_fraction::Float64 +end + +function SoilConfig(; + layer_thickness = SVector(0.05, 0.1, 0.2, 0.8), # m + rootfraction = SVector(0.4, 0.3, 0.2, 0.1), + theta_s = 0.45, + theta_r = 0.05, + theta_fc = 0.29, + ksat_surface = 5.0e-7, # m/s + ksat_decay = 4.0, # m⁻¹ + brooks_corey_exponent = 9.0, # uniform across layers + kv_factor = 1.0, # uniform across layers + air_entry_pressure = -0.1, + wet_root_distribution_parameter = -500.0, + h1 = 0.0, + h2 = -0.1, + h3_high = -4.0, + h3_low = -10.0, + h4 = -40.0, + alpha_h1 = 1.0, + infiltration_capacity_soil = 5.0e-6, # m/s + infiltration_capacity_compacted = 0.0, + compacted_area_fraction = 0.0, + maximum_leakage = 1.0e-3, # m/s + cap_hmax = 2.0, + cap_n = 2.0, + w_soil = 0.1125, + cf_soil = 0.038, + soil_fraction = 1.0, + ) + N = length(layer_thickness) + return SoilConfig{N}( + SVector{N, Float64}(layer_thickness), + SVector{N, Float64}(rootfraction), + theta_s, + theta_r, + theta_fc, + ksat_surface, + ksat_decay, + brooks_corey_exponent, + kv_factor, + air_entry_pressure, + wet_root_distribution_parameter, + h1, + h2, + h3_high, + h3_low, + h4, + alpha_h1, + infiltration_capacity_soil, + infiltration_capacity_compacted, + compacted_area_fraction, + maximum_leakage, + cap_hmax, + cap_n, + w_soil, + cf_soil, + soil_fraction, + ) +end + +@kwdef struct IrrigationConfig + irrigation_efficiency::Float64 = 0.8 + maximum_irrigation_rate::Float64 = 5.0e-6 # m/s (~432 mm/day) +end + +# ── Logger ──────────────────────────────────────────────────────────────────── +mutable struct IrrigationLogger + rec_wt_depth::Matrix{Float64} # n × nsteps + rec_sat_storage::Matrix{Float64} + rec_unsat_storage::Matrix{Float64} + rec_actual_et::Matrix{Float64} + rec_interception::Matrix{Float64} + rec_infiltration::Matrix{Float64} + rec_infiltration_excess::Matrix{Float64} + rec_saturated_excess::Matrix{Float64} + rec_net_runoff_soil::Matrix{Float64} + rec_storage::Matrix{Float64} + rec_leakage::Matrix{Float64} + rec_demand::Matrix{Float64} + rec_irrigation::Matrix{Float64} + rec_canopy_storage::Matrix{Float64} + rec_precip::Vector{Float64} # uniform forcing — same for all cells +end + +IrrigationLogger(n::Int, nsteps::Int) = IrrigationLogger( + zeros(n, nsteps), # rec_wt_depth + zeros(n, nsteps), # rec_sat_storage + zeros(n, nsteps), # rec_unsat_storage + zeros(n, nsteps), # rec_actual_et + zeros(n, nsteps), # rec_interception + zeros(n, nsteps), # rec_infiltration + zeros(n, nsteps), # rec_infiltration_excess + zeros(n, nsteps), # rec_saturated_excess + zeros(n, nsteps), # rec_net_runoff_soil + zeros(n, nsteps), # rec_storage + zeros(n, nsteps), # rec_leakage + zeros(n, nsteps), # rec_demand + zeros(n, nsteps), # rec_irrigation + zeros(n, nsteps), # rec_canopy_storage + zeros(nsteps), # rec_precip +) + +function log!( + logger::IrrigationLogger, + step::Int, + soil::Wflow.SbmSoilModel, + interception::Wflow.GashInterceptionModel, + demand::Wflow.DemandModel, + allocation::Wflow.AbstractAllocationModel, + precip_mmday::Float64, + dt::Float64, + ) + logger.rec_wt_depth[:, step] .= soil.variables.water_table_depth + logger.rec_sat_storage[:, step] .= soil.variables.saturated_water_depth + logger.rec_unsat_storage[:, step] .= soil.variables.unsaturated_store_depth + logger.rec_actual_et[:, step] .= soil.variables.actual_evapotranspiration .* (dt * 1.0e3) + logger.rec_interception[:, step] .= + interception.variables.interception_rate .* (dt * 1.0e3) + logger.rec_infiltration[:, step] .= soil.variables.actual_infiltration .* (dt * 1.0e3) + logger.rec_infiltration_excess[:, step] .= + soil.variables.infiltration_excess .* (dt * 1.0e3) + logger.rec_saturated_excess[:, step] .= + soil.variables.saturation_excess_water .* (dt * 1.0e3) + logger.rec_net_runoff_soil[:, step] .= soil.variables.net_runoff .* (dt * 1.0e3) + logger.rec_storage[:, step] .= soil.variables.total_soil_water_storage .* 1.0e3 + logger.rec_leakage[:, step] .= soil.variables.actual_leakage .* (dt * 1.0e3) + logger.rec_demand[:, step] .= demand.nonpaddy.variables.demand_gross .* (dt * 1.0e3) + logger.rec_irrigation[:, step] .= + Wflow.get_irrigation_allocated(allocation) .* (dt * 1.0e3) + logger.rec_canopy_storage[:, step] .= interception.variables.canopy_storage .* 1.0e3 + return logger.rec_precip[step] = precip_mmday +end diff --git a/python/ribasim/ribasim/config.py b/python/ribasim/ribasim/config.py index 597476995..4fdb9e551 100644 --- a/python/ribasim/ribasim/config.py +++ b/python/ribasim/ribasim/config.py @@ -49,6 +49,8 @@ TabulatedRatingCurveStaticSchema, TabulatedRatingCurveTimeSchema, UserDemandConcentrationSchema, + UserDemandIrrigationForcingSchema, + UserDemandIrrigationStaticSchema, UserDemandStaticSchema, UserDemandTimeSchema, ) @@ -201,10 +203,13 @@ class Experimental(ChildModel): Whether to enable tracer support (default is False) allocation : bool Whether to activate the activation layer. Replaced by 'first come first serve' when deactivated (default is False) + irrigation : bool + Whether to enable two-way coupling with the Wflow-based irrigation soil model (default is False) """ concentration: bool = False allocation: bool = False + irrigation: bool = False class Terminal(NodeModel): ... @@ -281,6 +286,14 @@ class UserDemand(NodeModel): default_factory=TableModel[UserDemandConcentrationSchema], json_schema_extra={"sort_keys": ["node_id", "substance", "time"]}, ) + irrigation_static: TableModel[UserDemandIrrigationStaticSchema] = Field( + default_factory=TableModel[UserDemandIrrigationStaticSchema], + json_schema_extra={"sort_keys": ["node_id"]}, + ) + irrigation_forcing: TableModel[UserDemandIrrigationForcingSchema] = Field( + default_factory=TableModel[UserDemandIrrigationForcingSchema], + json_schema_extra={"sort_keys": ["node_id", "time"]}, + ) class LevelDemand(NodeModel): diff --git a/python/ribasim/ribasim/schemas.py b/python/ribasim/ribasim/schemas.py index 0106695de..a6c9640d3 100644 --- a/python/ribasim/ribasim/schemas.py +++ b/python/ribasim/ribasim/schemas.py @@ -396,6 +396,22 @@ class UserDemandConcentrationSchema(_BaseSchema): concentration: float = pa.Field(nullable=False) +class UserDemandIrrigationForcingSchema(_BaseSchema): + _node_id_relation: str = "equal" + fid: Index[Int32] = pa.Field(default=1, check_name=True, coerce=True) + node_id: np.int32 = pa.Field(nullable=False, default=0) + time: pd.Timestamp = pa.Field(nullable=False) + precipitation: float = pa.Field(nullable=False) + potential_evaporation: float = pa.Field(nullable=False) + + +class UserDemandIrrigationStaticSchema(_BaseSchema): + _node_id_relation: str = "equal" + fid: Index[Int32] = pa.Field(default=1, check_name=True, coerce=True) + node_id: np.int32 = pa.Field(nullable=False, default=0) + irrigated_area_m2: float = pa.Field(nullable=False) + + class UserDemandStaticSchema(_BaseSchema): _node_id_relation: str = "partition" fid: Index[Int32] = pa.Field(default=1, check_name=True, coerce=True)