diff --git a/.github/workflows/Documenter.yml b/.github/workflows/Documenter.yml deleted file mode 100644 index b91b123b5..000000000 --- a/.github/workflows/Documenter.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Documenter -on: - push: - branches: [master] - tags: [v*] - pull_request: - -jobs: - Documenter: - name: Documentation - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: julia-actions/julia-buildpkg@latest - - uses: julia-actions/julia-docdeploy@latest - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }} diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 000000000..9450cbfbe --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,72 @@ +name: Quarto documentation +on: + push: + branches: [master] + tags: [v*] + pull_request: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +# needed to allow julia-actions/cache to delete old caches that it has created +permissions: + actions: write + contents: read + +jobs: + publish: + name: Build and publish docs + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + - uses: julia-actions/cache@v2 + with: + cache-compiled: "true" + cache-registries: "true" + - uses: prefix-dev/setup-pixi@v0.8.1 + with: + pixi-version: "latest" + - name: Prepare pixi + run: pixi run install-ci + + - name: Install Quarto + uses: quarto-dev/quarto-actions/setup@v2 + + - name: Check Quarto installation and all engines + run: pixi run quarto-check + + - name: Render Quarto Project + run: pixi run quarto-render + + - name: Publish Quarto Project as preview + if: github.event_name == 'pull_request' + uses: peaceiris/actions-gh-pages@v4 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/_site + destination_dir: previews/PR${{ github.event.number }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Publish Quarto Project as dev + if: github.event_name == 'push' && github.ref == 'refs/heads/master' + uses: peaceiris/actions-gh-pages@v4 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/_site + destination_dir: dev + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Publish Quarto Project as version + if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') + uses: peaceiris/actions-gh-pages@v4 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./docs/_site + destination_dir: ${{ github.ref_name }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 000000000..a5be71f46 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,5 @@ +/.quarto/ +/_extensions/ +/_freeze/ +/_inv/ +/_site/ diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/docs/404.qmd b/docs/404.qmd new file mode 100644 index 000000000..14d0bc4d9 --- /dev/null +++ b/docs/404.qmd @@ -0,0 +1,7 @@ +--- +title: Page Not Found +--- + +The page you requested cannot be found (perhaps it was moved or renamed). + +You may want to try searching to find the page's new location. diff --git a/docs/Manifest.toml b/docs/Manifest.toml new file mode 100644 index 000000000..68d5a6671 --- /dev/null +++ b/docs/Manifest.toml @@ -0,0 +1,1894 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.10.5" +manifest_format = "2.0" +project_hash = "de6c21344f393ad428bd6ca27e0089790acde31d" + +[[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.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "d80af0733c99ea80575f612813fa6aa71022d33a" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.1.0" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + 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 = "e81c509d2c8e49592413bfb0bb3b08150056c79d" +uuid = "27a7e980-b3e6-11e9-2bcd-0b925532e340" +version = "0.4.1" + +[[deps.ArgCheck]] +git-tree-sha1 = "a3a402a35a2f7e0b87828ccabbd5ebfbebe356b4" +uuid = "dce04be8-c92d-5529-be00-80e4d2c0e197" +version = "2.3.0" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[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 = "3640d077b6dafd64ceb8fd5c1ec76f7ca53bcf76" +uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" +version = "7.16.0" + + [deps.ArrayInterface.extensions] + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceCUDSSExt = "CUDSS" + ArrayInterfaceChainRulesExt = "ChainRules" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + ArrayInterfaceReverseDiffExt = "ReverseDiff" + ArrayInterfaceSparseArraysExt = "SparseArrays" + ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" + ArrayInterfaceTrackerExt = "Tracker" + + [deps.ArrayInterface.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" + ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + 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" + +[[deps.Automa]] +deps = ["PrecompileTools", "SIMD", "TranscodingStreams"] +git-tree-sha1 = "a8f503e8e1a5f583fbef15a8440c8c7e32185df2" +uuid = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b" +version = "1.1.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 = "16351be62963a67ac4083f748fdb3cca58bfd52f" +uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9" +version = "0.4.7" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.BasicModelInterface]] +git-tree-sha1 = "0e2855d28cc3983a9edf4bee18478b020178a43f" +uuid = "59605e27-edc0-445a-b93d-c09a3a50b330" +version = "0.1.0" + +[[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 = "ef12cdd1c7fb7e1dfd6fa8fd60d4db6bc61d2f23" +uuid = "0b7ba130-8d10-5ba8-a3d6-c5182647fed9" +version = "1.21.6+0" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "8873e196c2eb87962a2048b3b8e08946535864a1" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.8+2" + +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + +[[deps.CFTime]] +deps = ["Dates", "Printf"] +git-tree-sha1 = "5afb5c5ba2688ca43a9ad2e5a91cbb93921ccfa1" +uuid = "179af706-886a-5703-950a-314cd64e0468" +version = "0.1.3" + +[[deps.CPUSummary]] +deps = ["CpuId", "IfElse", "PrecompileTools", "Static"] +git-tree-sha1 = "5a97e67919535d6841172016c9530fd69494e5ec" +uuid = "2a0fbf3d-bb9c-48f3-b0a9-814d99fd7ab9" +version = "0.2.6" + +[[deps.CRC32c]] +uuid = "8bf52ea8-c179-5cab-976a-9e18b702a9bc" + +[[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 = "7b6ad8c35f4bc3bca8eb78127c8b99719506a5fb" +uuid = "159f3aea-2a34-519c-b102-8c37f9878175" +version = "1.1.0" + +[[deps.CairoMakie]] +deps = ["CRC32c", "Cairo", "Cairo_jll", "Colors", "FileIO", "FreeType", "GeometryBasics", "LinearAlgebra", "Makie", "PrecompileTools"] +git-tree-sha1 = "fbfdb7cbe17bd14b60646c14c27a16e5038cde54" +uuid = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" +version = "0.12.15" + +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "009060c9a6168704143100f36ab08f06c2af4642" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.18.2+1" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra"] +git-tree-sha1 = "3e4b134270b372f2ed4d4d0e936aabaefc1802bc" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.25.0" +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.ColorBrewer]] +deps = ["Colors", "JSON", "Test"] +git-tree-sha1 = "61c5334f33d91e570e1d0c3eb5465835242582c4" +uuid = "a2cac450-b92f-5266-8821-25eda20663c8" +version = "0.4.0" + +[[deps.ColorSchemes]] +deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] +git-tree-sha1 = "13951eb68769ad1cd460cdb2e64e5e95f1bf123d" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.27.0" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.5" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] +git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.10.0" +weakdeps = ["SpecialFunctions"] + + [deps.ColorVectorSpace.extensions] + SpecialFunctionsExt = "SpecialFunctions" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "362a287c3aa50601b0bc359053d5c2468f0e7ce0" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.11" + +[[deps.CommonDataModel]] +deps = ["CFTime", "DataStructures", "Dates", "Preferences", "Printf", "Statistics"] +git-tree-sha1 = "d6fb5bf939a2753c74984b11434ea25d6c397a58" +uuid = "1fbeeb36-5f17-413c-809b-666fb144f157" +version = "0.3.6" + +[[deps.CommonWorldInvalidations]] +git-tree-sha1 = "ae52d1c52048455e85a387fbee9be553ec2b68d0" +uuid = "f70d9fcc-98c5-4d4a-abd7-e4cdeebd8ca8" +version = "1.0.0" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.16.0" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.1.1+0" + +[[deps.Conda]] +deps = ["Downloads", "JSON", "VersionParsing"] +git-tree-sha1 = "b19db3927f0db4151cb86d073689f2428e524576" +uuid = "8f4d0f93-b110-5947-807f-2305c1781a2d" +version = "1.10.2" + +[[deps.ConstructionBase]] +git-tree-sha1 = "76219f1ed5771adbb096743bff43fb5fdd4c1157" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.5.8" +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.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.DataAPI]] +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.16.0" + +[[deps.DataFrames]] +deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "fb61b4812c49343d7ef0b533ba982c46021938a6" +uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +version = "1.7.0" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "1d0a14036acb104d9e89698bd408f63ab58cdc82" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.20" + +[[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" + +[[deps.DelaunayTriangulation]] +deps = ["AdaptivePredicates", "EnumX", "ExactPredicates", "PrecompileTools", "Random"] +git-tree-sha1 = "89df54fbe66e5872d91d8c2cd3a375f660c3fd64" +uuid = "927a84f5-c5f4-47a5-9785-b46e178433df" +version = "1.6.1" + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +version = "1.9.1" + +[[deps.DiskArrays]] +deps = ["LRUCache", "OffsetArrays"] +git-tree-sha1 = "ef25c513cad08d7ebbed158c91768ae32f308336" +uuid = "3c3547ce-8d99-4f5e-a174-61eb10b00ae3" +version = "0.3.23" + +[[deps.DisplayAs]] +git-tree-sha1 = "43c017d5dd3a48d56486055973f443f8a39bb6d9" +uuid = "0b91fe84-8a4c-11e9-3e1d-67c38462b6d6" +version = "0.1.6" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.Distributions]] +deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "d7477ecdafb813ddee2ae727afa94e9dcb5f3fb0" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.112" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + DistributionsTestExt = "Test" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.3" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[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 = "bdb1942cd4c45e3c678fd11569d5cccd80976237" +uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" +version = "1.0.4" + +[[deps.ExactPredicates]] +deps = ["IntervalArithmetic", "Random", "StaticArrays"] +git-tree-sha1 = "b3f2ff58735b5f024c392fde763f29b057e4b025" +uuid = "429591f6-91af-11e9-00e2-59fbe8cec110" +version = "2.2.8" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1c6317308b9dc757616f0b5cb379db10494443a7" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.6.2+0" + +[[deps.Extents]] +git-tree-sha1 = "81023caa0021a41712685887db1fc03db26f41f5" +uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910" +version = "0.1.4" + +[[deps.FFMPEG_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] +git-tree-sha1 = "8cc47f299902e13f90405ddb5bf87e5d474c0d38" +uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" +version = "6.1.2+0" + +[[deps.FFTW]] +deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] +git-tree-sha1 = "4820348781ae578893311153d69049a93d05f39d" +uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" +version = "1.8.0" + +[[deps.FFTW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4d81ed14783ec49ce9f2e168208a12ce1815aa25" +uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" +version = "3.3.10+1" + +[[deps.FieldMetadata]] +git-tree-sha1 = "c279c6eab9767a3f62685e5276c850512e0a1afd" +uuid = "bf96fef3-21d2-5d20-8afa-0e7d4c32a885" +version = "0.3.1" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "62ca0547a14c57e98154423419d8a342dca75ca9" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.16.4" + +[[deps.FilePaths]] +deps = ["FilePathsBase", "MacroTools", "Reexport", "Requires"] +git-tree-sha1 = "919d9412dbf53a2e6fe74af62a73ceed0bce0629" +uuid = "8fc22ac5-c921-52a6-82fd-178b2807b824" +version = "0.8.3" + +[[deps.FilePathsBase]] +deps = ["Compat", "Dates"] +git-tree-sha1 = "7878ff7172a8e6beedd1dea14bd27c3c6340d361" +uuid = "48062228-2e41-5def-b9a4-89aafe57970f" +version = "0.9.22" +weakdeps = ["Mmap", "Test"] + + [deps.FilePathsBase.extensions] + FilePathsBaseMmapExt = "Mmap" + FilePathsBaseTestExt = "Test" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "6a70198746448456524cb442b8af316927ff3e1a" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.13.0" +weakdeps = ["PDMats", "SparseArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStatisticsExt = "Statistics" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "05882d6995ae5c12bb5f36dd2ed3f61c98cbb172" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.5" + +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] +git-tree-sha1 = "db16beca600632c95fc8aca29890d83788dd8b23" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.13.96+0" + +[[deps.Format]] +git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" +uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" +version = "1.3.7" + +[[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 = "5c1d8ae0efc6c2e7b1fc502cbe25def8f661b7bc" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.13.2+0" + +[[deps.FreeTypeAbstraction]] +deps = ["ColorVectorSpace", "Colors", "FreeType", "GeometryBasics"] +git-tree-sha1 = "2493cdfd0740015955a8e46de4ef28f49460d8bc" +uuid = "663a7486-cb36-511b-a19d-713bb74d65c9" +version = "0.10.3" + +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1ed150b39aebcc805c26b93a8d0122c940f64ce2" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.14+0" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" + +[[deps.GMP_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "781609d7-10c4-51f6-84f2-b8444358ff6d" +version = "6.2.1+6" + +[[deps.GeoFormatTypes]] +git-tree-sha1 = "59107c179a586f0fe667024c5eb7033e81333271" +uuid = "68eda718-8dee-11e9-39e7-89f7f65f511f" +version = "0.4.2" + +[[deps.GeoInterface]] +deps = ["Extents", "GeoFormatTypes"] +git-tree-sha1 = "2f6fce56cdb8373637a6614e14a5768a88450de2" +uuid = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" +version = "1.3.7" + +[[deps.GeometryBasics]] +deps = ["EarCut_jll", "Extents", "GeoInterface", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] +git-tree-sha1 = "b62f2b2d76cee0d61a2ef2b3118cd2a3215d3134" +uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" +version = "0.4.11" + +[[deps.Gettext_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" +uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" +version = "0.21.0+0" + +[[deps.Glib_jll]] +deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "674ff0db93fffcd11a3573986e550d66cd4fd71f" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.80.5+0" + +[[deps.Glob]] +git-tree-sha1 = "97285bbd5230dd766e9ef6749b80fc617126d496" +uuid = "c27321d9-0574-5035-807b-f59d2c89b15c" +version = "1.3.1" + +[[deps.GnuTLS_jll]] +deps = ["Artifacts", "GMP_jll", "JLLWrappers", "Libdl", "Nettle_jll", "P11Kit_jll", "Zlib_jll"] +git-tree-sha1 = "383db7d3f900f4c1f47a8a04115b053c095e48d3" +uuid = "0951126a-58fd-58f1-b5b3-b08c7c4a876d" +version = "3.8.4+0" + +[[deps.Graphics]] +deps = ["Colors", "LinearAlgebra", "NaNMath"] +git-tree-sha1 = "d61890399bc535850c4bf08e4e0d3a7ad0f21cbd" +uuid = "a2bd30eb-e257-5431-a919-1863eab51364" +version = "1.1.2" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.14+0" + +[[deps.Graphs]] +deps = ["ArnoldiMethod", "Compat", "DataStructures", "Distributed", "Inflate", "LinearAlgebra", "Random", "SharedArrays", "SimpleTraits", "SparseArrays", "Statistics"] +git-tree-sha1 = "1dc470db8b1131cfc7fb4c115de89fe391b9e780" +uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" +version = "1.12.0" + +[[deps.GridLayoutBase]] +deps = ["GeometryBasics", "InteractiveUtils", "Observables"] +git-tree-sha1 = "fc713f007cff99ff9e50accba6373624ddd33588" +uuid = "3955a311-db13-416c-9275-1d80ed98e5e9" +version = "0.11.0" + +[[deps.Grisu]] +git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" +uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" +version = "1.0.2" + +[[deps.HDF5_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "OpenSSL_jll", "TOML", "Zlib_jll", "libaec_jll"] +git-tree-sha1 = "82a471768b513dc39e471540fdadc84ff80ff997" +uuid = "0234f1f7-429e-5d53-9886-15a909be8d59" +version = "1.14.3+3" + +[[deps.HarfBuzz_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"] +git-tree-sha1 = "401e4f3f30f43af2c8478fc008da50096ea5240f" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "8.3.1+0" + +[[deps.HostCPUFeatures]] +deps = ["BitTwiddlingConvenienceFunctions", "IfElse", "Libdl", "Static"] +git-tree-sha1 = "8e070b599339d622e9a081d17230d74a5c473293" +uuid = "3e5b6fbb-0976-4d2c-9146-d79de83f2fb0" +version = "0.1.17" + +[[deps.Hwloc_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "dd3b49277ec2bb2c6b94eb1604d4d0616016f7a6" +uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" +version = "2.11.2+0" + +[[deps.HypergeometricFunctions]] +deps = ["LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "7c4195be1649ae622304031ed46a2f4df989f1eb" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.24" + +[[deps.IJulia]] +deps = ["Base64", "Conda", "Dates", "InteractiveUtils", "JSON", "Libdl", "Logging", "Markdown", "MbedTLS", "Pkg", "Printf", "REPL", "Random", "SoftGlobalScope", "Test", "UUIDs", "ZMQ"] +git-tree-sha1 = "1702f79fa30f56b68d5b2fd6fb3a9a14ff6f9130" +uuid = "7073ff75-c697-5162-941a-fcdaad2a7d2a" +version = "1.25.0" + +[[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 = "2e4520d67b0cef90865b3ef727594d2a58e0e1f8" +uuid = "2803e5a7-5153-5ecf-9a86-9b4c37f5f5ac" +version = "0.6.11" + +[[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 = "b2a7eaa169c13f5bcae8131a83bc30eff8f71be0" +uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534" +version = "0.10.2" + +[[deps.ImageIO]] +deps = ["FileIO", "IndirectArrays", "JpegTurbo", "LazyModules", "Netpbm", "OpenEXR", "PNGFiles", "QOI", "Sixel", "TiffImages", "UUIDs"] +git-tree-sha1 = "437abb322a41d527c197fa800455f79d414f0a3c" +uuid = "82e4d734-157c-48bb-816b-45c225c6df19" +version = "0.6.8" + +[[deps.ImageMetadata]] +deps = ["AxisArrays", "ImageAxes", "ImageBase", "ImageCore"] +git-tree-sha1 = "355e2b974f2e3212a75dfb60519de21361ad3cb7" +uuid = "bc367c6b-8a6b-528e-b4bd-a4b897500b49" +version = "0.9.9" + +[[deps.Imath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "0936ba688c6d201805a83da835b55c61a180db52" +uuid = "905a6f67-0a94-5f89-b386-d35d92009cd1" +version = "3.1.11+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 = "45521d31238e87ee9f9732561bfee12d4eebd52d" +uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" +version = "1.4.2" + + [deps.InlineStrings.extensions] + ArrowTypesExt = "ArrowTypes" + ParsersExt = "Parsers" + + [deps.InlineStrings.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" + Parsers = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" + +[[deps.IntelOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "10bd689145d2c3b2a9844005d01087cc1194e79e" +uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" +version = "2024.2.1+0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.Interpolations]] +deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "Requires", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] +git-tree-sha1 = "88a101217d7cb38a7b481ccd50d21876e1d1b0e0" +uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" +version = "0.15.1" +weakdeps = ["Unitful"] + + [deps.Interpolations.extensions] + InterpolationsUnitfulExt = "Unitful" + +[[deps.IntervalArithmetic]] +deps = ["CRlibm_jll", "LinearAlgebra", "MacroTools", "RoundingEmulator"] +git-tree-sha1 = "c59c57c36683aa17c563be6edaac888163f35285" +uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" +version = "0.22.18" + + [deps.IntervalArithmetic.extensions] + IntervalArithmeticDiffRulesExt = "DiffRules" + IntervalArithmeticForwardDiffExt = "ForwardDiff" + IntervalArithmeticIntervalSetsExt = "IntervalSets" + IntervalArithmeticRecipesBaseExt = "RecipesBase" + + [deps.IntervalArithmetic.weakdeps] + DiffRules = "b552c78f-8df3-52c6-915a-8e097449b14b" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + +[[deps.IntervalSets]] +git-tree-sha1 = "dba9ddf07f77f60450fe5d2e2beb9854d9a49bd0" +uuid = "8197267c-284f-5f27-9208-e0e47529a953" +version = "0.7.10" + + [deps.IntervalSets.extensions] + IntervalSetsRandomExt = "Random" + IntervalSetsRecipesBaseExt = "RecipesBase" + IntervalSetsStatisticsExt = "Statistics" + + [deps.IntervalSets.weakdeps] + Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + RecipesBase = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" + Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[[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.InvertedIndices]] +git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" +uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" +version = "1.3.0" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.2" + +[[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 = "be3dc50a92e5a386872a493a10050136d4703f9b" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.6.1" + +[[deps.JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.4" + +[[deps.JpegTurbo]] +deps = ["CEnum", "FileIO", "ImageCore", "JpegTurbo_jll", "TOML"] +git-tree-sha1 = "fa6d0bcff8583bac20f1ffa708c3913ca605c611" +uuid = "b835a17e-a41a-41e7-81f0-2f016b05efe0" +version = "0.1.5" + +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "25ee0be4d43d0269027024d75a24c24d6c6e590c" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "3.0.4+0" + +[[deps.KernelDensity]] +deps = ["Distributions", "DocStringExtensions", "FFTW", "Interpolations", "StatsBase"] +git-tree-sha1 = "7d703202e65efa1369de1279c162b915e245eed1" +uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b" +version = "0.6.9" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "170b660facf5df5de098d866564877e119141cbd" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.2+0" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "78211fb6cbc872f77cad3fc0b6cf647d923f4929" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "18.1.7+0" + +[[deps.LRUCache]] +git-tree-sha1 = "b3cc6698599b10e652832c2f23db3cab99d51b59" +uuid = "8ac3fa9e-de4c-5943-b1dc-09c6b5f20637" +version = "1.6.1" +weakdeps = ["Serialization"] + + [deps.LRUCache.extensions] + SerializationExt = ["Serialization"] + +[[deps.LZO_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "854a9c268c43b77b0a27f22d7fab8d33cdb3a731" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.2+1" + +[[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" + +[[deps.LazyModules]] +git-tree-sha1 = "a560dd966b386ac9ae60bdd3a3d3a326062d3c3e" +uuid = "8cdb02fc-e678-4876-92c5-9defec4f444e" +version = "0.3.1" + +[[deps.LeftChildRightSiblingTrees]] +deps = ["AbstractTrees"] +git-tree-sha1 = "fb6803dafae4a5d62ea5cab204b1e657d9737e7f" +uuid = "1d6d02ad-be62-4b6b-8a6d-2f90e265016e" +version = "0.2.0" + +[[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", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.4.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.6.4+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.2.2+1" + +[[deps.Libgcrypt_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll"] +git-tree-sha1 = "8be878062e0ffa2c3f67bb58a595375eda5de80b" +uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" +version = "1.11.0+0" + +[[deps.Libgpg_error_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c6ce1e19f3aec9b59186bdf06cdf3c4fc5f5f3e6" +uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" +version = "1.50.0+0" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "61dfdba58e585066d8bce214c5a51eaa0539f269" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.17.0+1" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "0c4f9c4f1a50d8f35048fa0532dabbadf702f81e" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.40.1+0" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "5ee6203157c120d79034c748a2acba45b82b8807" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.40.1+0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "a2d09619db4e765091ee5c6ffe8872849de0feea" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.28" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.LoggingExtras]] +deps = ["Dates", "Logging"] +git-tree-sha1 = "f02b56007b064fbfddb4c9cd60161b6dd0f40df3" +uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" +version = "1.1.0" + +[[deps.LoopVectorization]] +deps = ["ArrayInterface", "CPUSummary", "CloseOpenIntervals", "DocStringExtensions", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] +git-tree-sha1 = "8084c25a250e00ae427a379a5b607e7aed96a2dd" +uuid = "bdcacae8-1622-11e9-2a5c-532679323890" +version = "0.12.171" + + [deps.LoopVectorization.extensions] + ForwardDiffExt = ["ChainRulesCore", "ForwardDiff"] + SpecialFunctionsExt = "SpecialFunctions" + + [deps.LoopVectorization.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + +[[deps.Lz4_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "abf88ff67f4fd89839efcae2f4c39cbc4ecd0846" +uuid = "5ced341a-0733-55b8-9ab6-a4889d929147" +version = "1.10.0+1" + +[[deps.MKL_jll]] +deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"] +git-tree-sha1 = "f046ccd0c6db2832a9f639e2c669c6fe867e5f4f" +uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" +version = "2024.2.0+0" + +[[deps.MPICH_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "7715e65c47ba3941c502bffb7f266a41a7f54423" +uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" +version = "4.2.3+0" + +[[deps.MPIPreferences]] +deps = ["Libdl", "Preferences"] +git-tree-sha1 = "c105fe467859e7f6e9a852cb15cb4301126fac07" +uuid = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" +version = "0.1.11" + +[[deps.MPItrampoline_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "70e830dab5d0775183c99fc75e4c24c614ed7142" +uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" +version = "5.5.1+0" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.13" + +[[deps.Makie]] +deps = ["Animations", "Base64", "CRC32c", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "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", "MakieCore", "Markdown", "MathTeXEngine", "Observables", "OffsetArrays", "Packing", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Scratch", "ShaderAbstractions", "Showoff", "SignedDistanceFields", "SparseArrays", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun", "Unitful"] +git-tree-sha1 = "f7907907eb914138cc9e9ee66ab46f7a9efac8e8" +uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" +version = "0.21.15" + +[[deps.MakieCore]] +deps = ["ColorTypes", "GeometryBasics", "IntervalSets", "Observables"] +git-tree-sha1 = "4604f03e5b057e8e62a95a44929cafc9585b0fe9" +uuid = "20f20a25-4f0e-4fdf-b5d1-57303727442b" +version = "0.8.9" + +[[deps.ManualMemory]] +git-tree-sha1 = "bcaef4fc7a0cfe2cba636d84cda54b5e4e4ca3cd" +uuid = "d125e4d3-2237-4719-b19c-fa641b8a4667" +version = "0.1.8" + +[[deps.MappedArrays]] +git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e" +uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" +version = "0.4.2" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.MarkdownTables]] +deps = ["ArgCheck", "DisplayAs", "DocStringExtensions", "Tables"] +git-tree-sha1 = "65dff26519116033543e644fb8cf2e5869469c0b" +uuid = "1862ce21-31c7-451e-824c-f20fa3f90fa2" +version = "1.1.0" + +[[deps.MathTeXEngine]] +deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "UnicodeFun"] +git-tree-sha1 = "f45c8916e8385976e1ccd055c9874560c257ab13" +uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" +version = "0.6.2" + +[[deps.MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] +git-tree-sha1 = "c067a280ddc25f196b5e7df3877c6b226d390aaf" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.1.9" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.2+1" + +[[deps.MicrosoftMPI_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "f12a29c4400ba812841c6ace3f4efbb6dbb3ba01" +uuid = "9237b28f-5490-5468-be7b-bb81f5f5e6cf" +version = "10.1.4+2" + +[[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" + +[[deps.MosaicViews]] +deps = ["MappedArrays", "OffsetArrays", "PaddedViews", "StackViews"] +git-tree-sha1 = "7b86a5d4d70a9f5cdf2dacb3cbe6d251d1a61dbe" +uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389" +version = "0.3.4" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2023.1.10" + +[[deps.NCDatasets]] +deps = ["CFTime", "CommonDataModel", "DataStructures", "Dates", "DiskArrays", "NetCDF_jll", "NetworkOptions", "Printf"] +git-tree-sha1 = "77df6d3708ec0eb3441551e1f20f7503b37c2393" +uuid = "85f8d34a-cbdd-5861-8df4-14fed0d494ab" +version = "0.14.5" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.2" + +[[deps.NetCDF_jll]] +deps = ["Artifacts", "Blosc_jll", "Bzip2_jll", "HDF5_jll", "JLLWrappers", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "TOML", "XML2_jll", "Zlib_jll", "Zstd_jll", "libzip_jll"] +git-tree-sha1 = "4686378c4ae1d1948cfbe46c002a11a4265dcb07" +uuid = "7243133f-43d8-5620-bbf4-c2c921802cf3" +version = "400.902.211+1" + +[[deps.Netpbm]] +deps = ["FileIO", "ImageCore", "ImageMetadata"] +git-tree-sha1 = "d92b107dbb887293622df7697a2223f9f8176fcd" +uuid = "f09324ee-3d7c-5217-9330-fc30815ba969" +version = "1.1.1" + +[[deps.Nettle_jll]] +deps = ["Artifacts", "GMP_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "eca63e3847dad608cfa6a3329b95ef674c7160b4" +uuid = "4c82536e-c426-54e4-b420-14f461c4ed8b" +version = "3.7.2+0" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.Observables]] +git-tree-sha1 = "7438a59546cf62428fc9d1bc94729146d37a7225" +uuid = "510215fc-4207-5dde-b226-833fc4488ee2" +version = "0.5.5" + +[[deps.OffsetArrays]] +git-tree-sha1 = "1a27764e945a152f7ca7efa04de513d473e9542e" +uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" +version = "1.14.1" +weakdeps = ["Adapt"] + + [deps.OffsetArrays.extensions] + OffsetArraysAdaptExt = "Adapt" + +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.5+1" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.23+4" + +[[deps.OpenEXR]] +deps = ["Colors", "FileIO", "OpenEXR_jll"] +git-tree-sha1 = "327f53360fdb54df7ecd01e96ef1983536d1e633" +uuid = "52e1d378-f018-4a11-a4be-720524705ac7" +version = "0.3.2" + +[[deps.OpenEXR_jll]] +deps = ["Artifacts", "Imath_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "8292dd5c8a38257111ada2174000a33745b06d4e" +uuid = "18a262bb-aa17-5467-a713-aee519bc75cb" +version = "3.2.4+0" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+2" + +[[deps.OpenMPI_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "e25c1778a98e34219a00455d6e4384e017ea9762" +uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" +version = "4.1.6+0" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "7493f61f55a6cce7325f197443aa80d32554ba10" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "3.0.15+1" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6703a85cb3781bd5909d48730a67205f3f31a575" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.3+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.6.3" + +[[deps.P11Kit_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "2cd396108e178f3ae8dedbd8e938a18726ab2fbf" +uuid = "c2071276-7c44-58a7-b746-946036e04d0a" +version = "0.24.1+0" + +[[deps.PCRE2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" +version = "10.42.0+1" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "949347156c25054de2db3b166c52ac4728cbad65" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.31" + +[[deps.PNGFiles]] +deps = ["Base64", "CEnum", "ImageCore", "IndirectArrays", "OffsetArrays", "libpng_jll"] +git-tree-sha1 = "67186a2bc9a90f9f85ff3cc8277868961fb57cbd" +uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883" +version = "0.4.3" + +[[deps.Packing]] +deps = ["GeometryBasics"] +git-tree-sha1 = "ec3edfe723df33528e085e632414499f26650501" +uuid = "19eb6ba3-879d-56ad-ad62-d5c202156566" +version = "0.5.0" + +[[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 = "e127b609fb9ecba6f201ba7ab753d5a605d53801" +uuid = "36c8627f-9965-5494-a995-c6b170f724f3" +version = "1.54.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 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.8.1" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] +git-tree-sha1 = "35621f10a7531bc8fa58f74610b1bfb70a3cfc6b" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.43.4+0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.10.0" + +[[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 = "650a022b2ce86c7dcfbdecf00f78afeeb20e5655" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.4.2" + +[[deps.Polyester]] +deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] +git-tree-sha1 = "6d38fea02d983051776a856b7df75b30cf9a3c1f" +uuid = "f517fe37-dbe3-4b94-8317-1923a5111588" +version = "0.7.16" + +[[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.PooledArrays]] +deps = ["DataAPI", "Future"] +git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" +uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" +version = "1.4.3" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.1" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.3" + +[[deps.PrettyTables]] +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "1101cd475833706e4d0e7b122218257178f48f34" +uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +version = "2.4.0" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.ProgressLogging]] +deps = ["Logging", "SHA", "UUIDs"] +git-tree-sha1 = "80d919dee55b9c50e8d9e2da5eeafff3fe58b539" +uuid = "33c8b6b6-d38a-422a-b730-caa89a2f386c" +version = "0.1.4" + +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "8f6bc219586aef8baf0ff9a5fe16ee9c70cb65e4" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.10.2" + +[[deps.PtrArrays]] +git-tree-sha1 = "77a42d78b6a92df47ab37e177b2deac405e1c88f" +uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" +version = "1.2.1" + +[[deps.QOI]] +deps = ["ColorTypes", "FileIO", "FixedPointNumbers"] +git-tree-sha1 = "18e8f4d1426e965c7b532ddd260599e1510d26ce" +uuid = "4b34888f-f399-49d4-9bb3-47ed5cae4e65" +version = "1.0.0" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "cda3b045cf9ef07a08ad46731f5a3165e56cf3da" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.11.1" + + [deps.QuadGK.extensions] + QuadGKEnzymeExt = "Enzyme" + + [deps.QuadGK.weakdeps] + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[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.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 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "852bd0f55565a9e973fcfee83a84413270224dc4" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.8.0" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "58cdd8fb2201a6267e1db87ff148dd6c1dbd8ad8" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.5.1+0" + +[[deps.RoundingEmulator]] +git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b" +uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705" +version = "0.2.1" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.SIMD]] +deps = ["PrecompileTools"] +git-tree-sha1 = "98ca7c29edd6fc79cd74c61accb7010a4e7aee33" +uuid = "fdea26ae-647d-5447-a871-4b548cad5224" +version = "3.6.0" + +[[deps.SIMDTypes]] +git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" +uuid = "94e857df-77ce-4151-89e5-788b33177be4" +version = "0.1.0" + +[[deps.SLEEFPirates]] +deps = ["IfElse", "Static", "VectorizationBase"] +git-tree-sha1 = "456f610ca2fbd1c14f5fcf31c6bfadc55e7d66e0" +uuid = "476501e8-09a2-5ece-8869-fb82de89a1fa" +version = "0.6.43" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "3bac05bc7e74a75fd9cba4295cde4045d9fe2386" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.2.1" + +[[deps.SentinelArrays]] +deps = ["Dates", "Random"] +git-tree-sha1 = "ff11acffdb082493657550959d4feb4b6149e73a" +uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" +version = "1.4.5" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.ShaderAbstractions]] +deps = ["ColorTypes", "FixedPointNumbers", "GeometryBasics", "LinearAlgebra", "Observables", "StaticArrays", "StructArrays", "Tables"] +git-tree-sha1 = "79123bc60c5507f035e6d1d9e563bb2971954ec8" +uuid = "65257c39-d410-5151-9873-9b3e5be5013e" +version = "0.4.1" + +[[deps.SharedArrays]] +deps = ["Distributed", "Mmap", "Random", "Serialization"] +uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" + +[[deps.Showoff]] +deps = ["Dates", "Grisu"] +git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" +uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" +version = "1.0.3" + +[[deps.SignedDistanceFields]] +deps = ["Random", "Statistics", "Test"] +git-tree-sha1 = "d263a08ec505853a5ff1c1ebde2070419e3f28e9" +uuid = "73760f76-fbc4-59ce-8f25-708e95d2df96" +version = "0.4.0" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.4" + +[[deps.Sixel]] +deps = ["Dates", "FileIO", "ImageCore", "IndirectArrays", "OffsetArrays", "REPL", "libsixel_jll"] +git-tree-sha1 = "2da10356e31327c7096832eb9cd86307a50b1eb6" +uuid = "45858cf5-a6b0-47a3-bbea-62219f50df47" +version = "0.1.3" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SoftGlobalScope]] +deps = ["REPL"] +git-tree-sha1 = "986ec2b6162ccb95de5892ed17832f95badf770c" +uuid = "b85f4697-e234-5449-a836-ec8e2f98b302" +version = "1.1.0" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "66e0a8e672a0bdfca2c3f5937efb8538b9ddc085" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.1" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.10.0" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "2f5d4697f21388cbe1ff299430dd169ef97d7e14" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.4.0" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + +[[deps.StableRNGs]] +deps = ["Random"] +git-tree-sha1 = "83e6cce8324d49dfaf9ef059227f91ed4441a8e5" +uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" +version = "1.0.2" + +[[deps.StackViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "46e589465204cd0c08b4bd97385e4fa79a0c770c" +uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15" +version = "0.1.1" + +[[deps.Static]] +deps = ["CommonWorldInvalidations", "IfElse", "PrecompileTools"] +git-tree-sha1 = "87d51a3ee9a4b0d2fe054bdd3fc2436258db2603" +uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" +version = "1.1.1" + +[[deps.StaticArrayInterface]] +deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "PrecompileTools", "Static"] +git-tree-sha1 = "96381d50f1ce85f2663584c8e886a6ca97e60554" +uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" +version = "1.8.0" +weakdeps = ["OffsetArrays", "StaticArrays"] + + [deps.StaticArrayInterface.extensions] + StaticArrayInterfaceOffsetArraysExt = "OffsetArrays" + StaticArrayInterfaceStaticArraysExt = "StaticArrays" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "777657803913ffc7e8cc20f0fd04b634f871af8f" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.8" +weakdeps = ["ChainRulesCore", "Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.3" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.10.0" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.7.0" + +[[deps.StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "5cf7606d6cef84b543b483848d4ae08ad9832b21" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.3" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "b423576adc27097764a90e163157bcfc9acf0f46" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.3.2" +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 = "f35f6ab602df8413a50c4a25ca14de821e8605fb" +uuid = "7792a7ef-975c-4747-a70f-980b88e8d1da" +version = "0.5.7" + +[[deps.StringManipulation]] +deps = ["PrecompileTools"] +git-tree-sha1 = "a6b1675a536c5ad1a60e5a5153e1fee12eb146e3" +uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" +version = "0.4.0" + +[[deps.StructArrays]] +deps = ["ConstructionBase", "DataAPI", "Tables"] +git-tree-sha1 = "f4dc295e983502292c4c3f951dbb4e985e35b3be" +uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" +version = "0.6.18" + + [deps.StructArrays.extensions] + StructArraysAdaptExt = "Adapt" + StructArraysGPUArraysCoreExt = "GPUArraysCore" + StructArraysSparseArraysExt = "SparseArrays" + StructArraysStaticArraysExt = "StaticArrays" + + [deps.StructArrays.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[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.2.1+1" + +[[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 = "598cd7c1f68d1e205689b1c2fe65a9f85846f297" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.12.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" + +[[deps.ThreadingUtilities]] +deps = ["ManualMemory"] +git-tree-sha1 = "eda08f7e9818eb53661b3deb74e3159460dfbc27" +uuid = "8290d209-cae3-49c0-8002-c8c24d57dab5" +version = "0.5.2" + +[[deps.TiffImages]] +deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "ProgressMeter", "SIMD", "UUIDs"] +git-tree-sha1 = "38f139cc4abf345dd4f22286ec000728d5e8e097" +uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69" +version = "0.10.2" + +[[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.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[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 = "d95fe458f26209c66a187b1114df96fd70839efd" +uuid = "1986cc42-f94f-5a68-af5c-568840ba703d" +version = "1.21.0" +weakdeps = ["ConstructionBase", "InverseFunctions"] + + [deps.Unitful.extensions] + ConstructionBaseUnitfulExt = "ConstructionBase" + InverseFunctionsUnitfulExt = "InverseFunctions" + +[[deps.VectorizationBase]] +deps = ["ArrayInterface", "CPUSummary", "HostCPUFeatures", "IfElse", "LayoutPointers", "Libdl", "LinearAlgebra", "SIMDTypes", "Static", "StaticArrayInterface"] +git-tree-sha1 = "e7f5b81c65eb858bed630fe006837b935518aca5" +uuid = "3d5dd08c-fd9d-11e8-17fa-ed2836048c2f" +version = "0.21.70" + +[[deps.VersionParsing]] +git-tree-sha1 = "58d6e80b4ee071f5efd07fda82cb9fbe17200868" +uuid = "81def892-9a0e-5fdd-b105-ffc91e053289" +version = "1.3.0" + +[[deps.Wflow]] +deps = ["BasicModelInterface", "CFTime", "Dates", "DelimitedFiles", "FieldMetadata", "Glob", "Graphs", "IfElse", "LoggingExtras", "LoopVectorization", "NCDatasets", "Parameters", "Polyester", "ProgressLogging", "StaticArrays", "Statistics", "TOML", "TerminalLoggers"] +path = ".." +uuid = "d48b7d99-76e7-47ae-b1d5-ff0c1cf9a818" +version = "0.8.1" + +[[deps.WoodburyMatrices]] +deps = ["LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "c1a7aa6219628fcd757dede0ca95e245c5cd9511" +uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" +version = "1.0.0" + +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] +git-tree-sha1 = "6a451c6f33a176150f315726eba8b92fbfdb9ae7" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.13.4+0" + +[[deps.XSLT_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "XML2_jll", "Zlib_jll"] +git-tree-sha1 = "a54ee957f4c86b526460a720dbc882fa5edcbefc" +uuid = "aed1982a-8fda-507f-9586-7b0439959a61" +version = "1.1.41+0" + +[[deps.XZ_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "15e637a697345f6743674f1322beefbc5dcd5cfc" +uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" +version = "5.6.3+0" + +[[deps.Xorg_libX11_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] +git-tree-sha1 = "afead5aba5aa507ad5a3bf01f58f82c8d1403495" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.8.6+0" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6035850dcc70518ca32f012e46015b9beeda49d8" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.11+0" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "34d526d318358a859d7de23da945578e8e8727b7" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.4+0" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "d2d1a5c49fae4ba39983f63de6afcbea47194e85" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.6+0" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "47e45cd78224c53109495b3e324df0c37bb61fbe" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.11+0" + +[[deps.Xorg_libpthread_stubs_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9" +uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" +version = "0.1.1+0" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] +git-tree-sha1 = "bcd466676fef0878338c61e655629fa7bbc69d8e" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.17.0+0" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e92a1a012a10506618f10b7047e478403a046c77" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.5.0+0" + +[[deps.ZMQ]] +deps = ["FileWatching", "PrecompileTools", "Sockets", "ZeroMQ_jll"] +git-tree-sha1 = "18cfd00df3cbbebf8ea4ec7ea6bbceb3af716bd0" +uuid = "c2297ded-f4af-51ae-bb23-16f91089e4e1" +version = "1.3.0" + +[[deps.ZeroMQ_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "libsodium_jll"] +git-tree-sha1 = "f02ce8f0fda1ed40f4d0d59a2ad05e35e8ac9b0e" +uuid = "8f1865be-045e-5c20-9c9f-bfbfb0764568" +version = "4.3.5+1" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+1" + +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "555d1076590a6cc2fdee2ef1469451f872d8b41b" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.6+1" + +[[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 = "46bf7be2917b59b761247be3f317ddf75e50e997" +uuid = "477f73a3-ac25-53e9-8cc3-50b2fa2566f0" +version = "1.1.2+0" + +[[deps.libaom_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1827acba325fdcdf1d2647fc8d5301dd9ba43a9d" +uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" +version = "3.9.0+0" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "e17c115d55c5fbb7e52ebedb427a0dca79d4484e" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.15.2+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.11.0+0" + +[[deps.libfdk_aac_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8a22cf860a7d27e4f3498a0fe0811a7957badb38" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.3+0" + +[[deps.libpng_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "b70c870239dc3d7bc094eb2d6be9b73d27bef280" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.44+0" + +[[deps.libsixel_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Pkg", "libpng_jll"] +git-tree-sha1 = "7dfa0fd9c783d3d0cc43ea1af53d69ba45c447df" +uuid = "075b6546-f08a-558a-be8f-8157d0f608a5" +version = "1.10.3+1" + +[[deps.libsodium_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "f76d682d87eefadd3f165d8d9fda436464213142" +uuid = "a9144af2-ca23-56d9-984f-0d03f7b5ccf8" +version = "1.0.20+1" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "490376214c4721cdaca654041f635213c6165cb3" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.7+2" + +[[deps.libzip_jll]] +deps = ["Artifacts", "Bzip2_jll", "GnuTLS_jll", "JLLWrappers", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "668ac0297e6bd8f4d53dfdcd3ace71f2e00f4a35" +uuid = "337d8026-41b4-5cde-a456-74a10e5b31d1" +version = "1.11.1+0" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.52.0+1" + +[[deps.oneTBB_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "7d0ea0f4895ef2f5cb83645fa689e52cb55cf493" +uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e" +version = "2021.12.0+0" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+2" + +[[deps.x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "35976a1216d6c066ea32cba2150c4fa682b276fc" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "10164.0.0+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "dcc541bb19ed5b0ede95581fb2e41ecf179527d2" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +version = "3.6.0+0" diff --git a/docs/Project.toml b/docs/Project.toml index da0c44fd5..f912ffb9b 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -1,7 +1,6 @@ [deps] CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" -Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" -Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" - -[compat] -Documenter = "0.27" +DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" +MarkdownTables = "1862ce21-31c7-451e-824c-f20fa3f90fa2" +Wflow = "d48b7d99-76e7-47ae-b1d5-ff0c1cf9a818" diff --git a/docs/_quarto.yml b/docs/_quarto.yml new file mode 100644 index 000000000..4344ee83e --- /dev/null +++ b/docs/_quarto.yml @@ -0,0 +1,165 @@ +project: + type: website + output-dir: "_site" + render: + - "*.qmd" + +# filters: +# - include-code-files +# - interlinks +# # - section-bibliographies + +number-sections: false + +website: + title: "Wflow.jl" + favicon: _static/logo.png + search: + location: navbar + limit: 5 + type: textbox + back-to-top-navigation: true + page-footer: + left: | + Made possible by: + + Deltares + Deltares + + navbar: + logo: _static/logo.png + search: true + pinned: true + left: + - text: Home + file: index.qmd + - text: "Getting started" + file: getting_started/index.qmd + - text: "User guide" + file: user_guide/index.qmd + - text: "Examples" + file: examples/index.qmd + - text: "Model documentation" + file: model_docs/index.qmd + - text: "Developments" + file: developments/index.qmd + right: + - icon: github + menu: + - text: Source Code + url: https://github.com/Deltares/Wflow.jl + - text: Report an Issue + url: https://github.com/Deltares/Wflow.jl/issues/new/choose + - text: Version + menu: + - text: empty + + sidebar: + - title: "Home" + border: true + # collapse-level: 3 + contents: + - file: index.qmd + - file: home/case_studies.qmd + - file: home/publications.qmd + - file: changelog.qmd + - title: Getting started + # collapse-level: 3 + contents: + - file: getting_started/index.qmd + - file: getting_started/install.qmd + - file: getting_started/download_example_models.qmd + - file: getting_started/building_a_model.qmd + - file: getting_started/running_wflow.qmd + - title: User guide + contents: + - user_guide/index.qmd + - file: user_guide/required_files.qmd + - file: user_guide/toml_file.qmd + - text: Supported options + contents: + - file: user_guide/warm_states.qmd + - file: user_guide/model_config.qmd + - file: user_guide/multi_threading.qmd + - file: user_guide/output.qmd + - text: Integrations + contents: + - file: user_guide/bmi.qmd + - file: user_guide/fews.qmd + - file: user_guide/zmq_server.qmd + - text: Frequently asked questions + file: user_guide/faq.qmd + - title: Examples + - title: Model documentation + contents: + - file: model_docs/index.qmd + - file: model_docs/model_configurations.qmd + - text: Vertical processes + contents: + - file: model_docs/vertical/sbm.qmd + - file: model_docs/vertical/sediment.qmd + - file: model_docs/vertical/shared_processes.qmd + - text: Lateral processes + contents: + - file: model_docs/lateral/kinwave.qmd + - file: model_docs/lateral/local-inertial.qmd + - file: model_docs/lateral/waterbodies.qmd + - file: model_docs/lateral/gwf.qmd + - file: model_docs/lateral/sediment_flux.qmd + - text: Parameters + contents: + - file: model_docs/parameters_vertical.qmd + - file: model_docs/parameters_lateral.qmd + - title: Developments + contents: + - developments/index.qmd + - changelog.qmd + - developments/guide.qmd + - developments/julia_structs.qmd + +format: + html: + theme: + light: [cosmo, _static/theme-light.scss] + dark: [cosmo, _static/theme-dark.scss] + css: _static/styles.css + toc: true + toc-expand: true + page-layout: article + grid: + content-mode: standard + html-math-method: + method: mathjax # or katex + # MathJax specific options + mathjax-extensions: + - ams + - newcommand + - autoload + include-in-header: + - text: | + + + +# bibliography: references.bib +# citeproc: false + diff --git a/docs/_static/deltares_link.html b/docs/_static/deltares_link.html new file mode 100644 index 000000000..4565d52bd --- /dev/null +++ b/docs/_static/deltares_link.html @@ -0,0 +1,7 @@ + diff --git a/docs/_static/images/deltares-blue.svg b/docs/_static/images/deltares-blue.svg new file mode 100644 index 000000000..a5a6f8d5c --- /dev/null +++ b/docs/_static/images/deltares-blue.svg @@ -0,0 +1 @@ +Artboard 1 diff --git a/docs/_static/images/deltares-white.svg b/docs/_static/images/deltares-white.svg new file mode 100644 index 000000000..063f78c95 --- /dev/null +++ b/docs/_static/images/deltares-white.svg @@ -0,0 +1 @@ +Artboard 1 diff --git a/docs/_static/listing_code.html b/docs/_static/listing_code.html new file mode 100644 index 000000000..3e5daee3b --- /dev/null +++ b/docs/_static/listing_code.html @@ -0,0 +1,70 @@ + diff --git a/docs/_static/listing_code_large.html b/docs/_static/listing_code_large.html new file mode 100644 index 000000000..d0227a7a0 --- /dev/null +++ b/docs/_static/listing_code_large.html @@ -0,0 +1,83 @@ + diff --git a/docs/_static/listing_code_medium.html b/docs/_static/listing_code_medium.html new file mode 100644 index 000000000..d3f75bed8 --- /dev/null +++ b/docs/_static/listing_code_medium.html @@ -0,0 +1,78 @@ + diff --git a/docs/src/assets/logo.png b/docs/_static/logo.png similarity index 100% rename from docs/src/assets/logo.png rename to docs/_static/logo.png diff --git a/docs/_static/styles.css b/docs/_static/styles.css new file mode 100644 index 000000000..d41cf1157 --- /dev/null +++ b/docs/_static/styles.css @@ -0,0 +1,28 @@ +/* css styles */ + +.only-on-dark { + display: none; +} + +@media (prefers-color-scheme: dark) { + .only-on-dark { + display: block; + } + + .only-on-light { + display: none; + } +} + +[aria-label="Deltares-Image"] { + height: 30px; +} + +.navbar-right .fa-github { + font-size: 40px; /* Adjust the value as needed */ +} + +.active-item { + font-weight: bold; + text-decoration: underline; +} diff --git a/docs/_static/theme-dark.scss b/docs/_static/theme-dark.scss new file mode 100644 index 000000000..5bae5d11e --- /dev/null +++ b/docs/_static/theme-dark.scss @@ -0,0 +1,85 @@ +/*-- scss:defaults --*/ +// Base document colors + +$background: #212529; +$highlight: #292e33; +$highlight: #373a3c; +$links: #0EBBF0; +$text: #ffffff; + + +$body-bg: $background; +$body-color: $text; +$link-color: $links; +$navbar-bg: $highlight; +$navbar-hl: $links ; + +$code-color: #c2d94c; +$code-bg: #2b2b2b; + +// Code blocks +$code-block-bg-alpha: -.9; + + + +.navbar-nav .dropdown-menu { + background-color: $highlight; // Dark mode dropdown background color + + a { + color: #0EBBF0; // Dark mode dropdown text color + } +} + + +// nav tabs +// .nav-tabs { +// background-color: $links; +// } + +// .nav-tabs .nav-link { +// background-color: $links; +// } + +// .nav-tabs .nav-link, +// .nav-tabs .nav-link.active, +// .nav-tabs .nav-item.show .nav-link { +// background-color: $links; +// } + +.nav-tabs .nav-link:hover { + background-color: $links; + border-color: $links; +} + +// .nav-tabs .nav-link i { +// background-color: $links; +// } + +// .nav-tabs .nav-link { +// // background-color: rgb(0, 0, 0); +// // background: #212529; +// color: $text; +// } + +// .nav-tabs .nav-link:hover { +// border-color: $links; +// color: $text; +// } + +// // .nav-tabs .nav-item.show .nav-link { +// // background-color: rgb(0, 0, 0); +// // color: $text; +// // } + +// .nav-tabs .nav-link:hover { +// border-color: rgb(255, 72, 0); +// // border-width: 1px; +// } + +.footer-image-light { + display: none; +} + +.footer-image-dark { + display: inline; +} \ No newline at end of file diff --git a/docs/_static/theme-light.scss b/docs/_static/theme-light.scss new file mode 100644 index 000000000..d98c6ffa4 --- /dev/null +++ b/docs/_static/theme-light.scss @@ -0,0 +1,33 @@ +/*-- scss:defaults --*/ + +$background: #212529; +$highlight: #292e33; +$highlight: #373a3c; +$links: #080c80; +$text: #ffffff; + +// $body-bg: $background; +// $body-color: $text; +$link-color: $links; +$navbar-hl: $links ; +// $navbar-bg: $highlight; + +.nav-tabs .nav-link, +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + border: 1px solid rgb(222, 226, 230) +} + +.nav-tabs .nav-link:hover { + background-color: $highlight; + border-color: $links; + border: 1px solid $links; +} + +.footer-image-dark { + display: none; +} + +.footer-image-light { + display: inline; +} \ No newline at end of file diff --git a/docs/_static/version.js b/docs/_static/version.js new file mode 100644 index 000000000..e31243dc2 --- /dev/null +++ b/docs/_static/version.js @@ -0,0 +1,141 @@ +function checkPathExists(url) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, true); + xhr.onreadystatechange = function () { + if (xhr.readyState === 4) { + if (xhr.status === 200) { + resolve(true); + } else if (xhr.status === 404) { + resolve(false); + } else { + reject(new Error(xhr.statusText)); + } + } + }; + xhr.onerror = function () { + reject(new Error('Network Error')); + }; + xhr.send(); + }); +} + +window.onload = function () { + // Assuming you have a ul element in your HTML like this: + // + + // Fetch the JSON data + fetch("https://raw.githubusercontent.com/Deltares/Wflow.jl/gh-pages/switcher.json") + .then(response => response.json()) + .then(data => { + console.log('Data loaded:', data); // Log the loaded data + + const dropdown = document.querySelector('#nav-menu-version').nextElementSibling; + console.log('Dropdown element:', dropdown); // Log the dropdown element + + // Clear all existing dropdown items + dropdown.innerHTML = ''; + + data.forEach(item => { + console.log('Adding item:', item); // Log the item being added + + // Create a new li element + const li = document.createElement('li'); + + // Create a new a element + const a = document.createElement('a'); + a.className = 'dropdown-item'; + a.href = item.href; // Use the 'url' property as the href + a.textContent = item.name; // Use the 'name' property as the text + + // Add the a element to the li + li.appendChild(a); + + // Add the li to the dropdown + dropdown.appendChild(li); + }); + + console.log('Dropdown after adding items:', dropdown); // Log the dropdown after adding items + + // Get all dropdown items within the specific dropdown menu + var dropdownMenu = document.querySelector('#nav-menu-version').nextElementSibling; + + var dropdownItems = dropdownMenu.querySelectorAll('.dropdown-item'); + + // Get the current page in chunks + var currentPagePath = window.location.pathname.split('/'); + + for (var i = 0; i < dropdownItems.length; i++) { + // Get textcontent + var textContent = dropdownItems[i].textContent; + + // Get the index of the current version + var index = currentPagePath.indexOf(textContent); + + if (index !== -1) { + // Remove the active-item class from all items + for (var j = 0; j < dropdownItems.length; j++) { + dropdownItems[j].classList.remove('active-item'); + } + + dropdownItems[i].classList.add('active-item'); + break + } + } + + console.log('current page path', currentPagePath); + + // Loop through each dropdown item + for (var i = 0; i < dropdownItems.length; i++) { + // Add click event listener to each item + dropdownItems[i].addEventListener('click', function (event) { + // Prevent default action + event.preventDefault(); + + // Get the clicked item's text + var itemText = this.textContent; + var itemHref = this.getAttribute('href') + + // Loop through each dropdown item again to find a match in the current page's path + for (var j = 0; j < dropdownItems.length; j++) { + // Get the dropdown item's text + var dropdownText = dropdownItems[j].textContent; + console.log('Dropdown item:', dropdownText); + + window.location.href = itemHref; + + // The code below is taken from Delft-FIAT, and is in place to switch + // to the same page but on a different version (if that exists). This + // is currently overruled with the line above this comment, which + // redirects to the new URL (home page). + + // // Find the index of the dropdownText in the current page's path + // var index = currentPagePath.indexOf(dropdownText); + // // If the dropdownText is found in the current page's path + // if (index !== -1) { + // // Construct the new URL relative to the dropdownText and append the itemText + // addElements = currentPagePath.slice(index + 1,) + // var newUrl = itemHref + '/' + addElements.join('/') + // console.log('Clicked item:', newUrl); + // window.location.href = itemHref; + // // // Redirect to the new URL + // // checkPathExists(newUrl) + // // .then(exists => { + // // if (exists) { + // // window.location.href = newUrl; + // // } else { + // // console.log('Path does not exist, referring to home page'); + // // window.location.href = itemHref; + // // } + // // }) + + // // Exit the loop + // break; + // } + } + }); + } + + }) + .catch(error => console.error('Error:', error)); // Log any errors +} diff --git a/docs/src/changelog.md b/docs/changelog.qmd similarity index 95% rename from docs/src/changelog.md rename to docs/changelog.qmd index daa392de3..65c49f596 100644 --- a/docs/src/changelog.md +++ b/docs/changelog.qmd @@ -1,9 +1,11 @@ -# Changelog +--- +title: "Changelog" +--- All notable changes to this project will be documented in this file. -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this +project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Unreleased @@ -27,20 +29,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 `LandHydrologySBM` (with soil model `SbmSoilModel`). The model component structs have model `variables`, `parameters` and `boundary_conditions` (if applicable), including associated functions for initializing and updating these model components. The original - long update function of the `SBM` soil part has been split into separate functions. + long update function of the `SBM` soil part has been split into separate functions. ### Added - Support direct output of snow and glacier melt, and add computation of snow water equivalent (SWE). -## v0.8.1 - 2024-08-27 +## v0.x releases -### Fixed +### v0.8.1 - 2024-08-27 + +#### Fixed - Reduce allocations in update of vertical `SBM` concept. -## v0.8.0 - 2024-08-19 +### v0.8.0 - 2024-08-19 -### Fixed +#### Fixed - Added missing BMI function `get_grid_size`, it is used for unstructured grids, for example to get the length of arrays returned by BMI functions `get_grid_x` and `get_grid_y`. - Added a check for the solution of the quadratic equation as part of the Modified Puls @@ -63,7 +67,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 is fixed by using `divrem` for the computation of the number of `steps` in this function. An error is thrown when the absolute remainder of `divrem` is larger than `eps()`, or when the number of `steps` is negative. - - Fixed internal and external broken links in docs. + - Fixed internal and external broken links in docs. - The internal time step of the local inertial model (`stable_timestep` function) can get zero when `LoopVectorization` is applied (`@tturbo`) to the for loop of these functions. This issue occured on a virtual machine, Windows 10 Enterprise, with Intel(R) Xeon(R) Gold @@ -75,7 +79,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 set to `top` elevation of the `aquifer` if `head` > `top`), and `exfiltwater` should be 0 for these boundary cells. -### Changed +#### Changed - Stop exposing scalar variables through BMI. The `BMI.get_value_ptr` function was not working correctly for scalar model variables (a `view` was applied). Only a few scalar model parameters are defined, and it is not expected that exposing these variables is @@ -122,7 +126,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 for each soil layer (from top to bottom) the actual transpiration was computed, and the remaining potential transpiration was used in the next soil layer. -### Added +#### Added - Total water storage as an export variable for `SBM` concept. This is the total water stored per grid cell in millimeters. Excluded from this variable are the floodplain, lakes and reservoirs. @@ -135,9 +139,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Local inertial routing to `sbm_gwf` model type. - Water demand and allocation computations for model types `sbm` and `sbm_gwf`. -## v0.7.3 - 2024-01-12 -### Fixed +### v0.7.3 - 2024-01-12 + +#### Fixed - Documentation: add leakage term to the wflow\_sbm figure, document external input parameter `ksathorfrac` and fix description of adding external `inflow` to the kinematic wave. @@ -154,7 +159,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 bottom of the soil layer, since `kvfrac` is also used for the computation of vertical unsaturated flow. -### Changed +#### Changed - For cyclic parameters different cyclic time inputs are supported (only one common cyclic time (for example daily or monthly) was allowed). - BMI: 1) added grid information (type and location) and whether a variable can be exchanged @@ -162,15 +167,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 variables on `edges` (local inertial model) with `get_grid_edge_count` and `get_grid_edge_nodes`. -### Added +#### Added - Functions for loading and saving states and getting the `starttime` in Unix time format. This is convenient for coupling with OpenDA (and other external) software. The set states functionality from the initialization function has been moved to a separate `set_states` function for each `Model` type, to support loading states independent of initialization. -## v0.7.2 - 2023-09-27 +### v0.7.2 - 2023-09-27 -### Fixed +#### Fixed - Water balance of modified Rutter interception model. The sum of the stemflow partitioning coefficient `pt` and free throughfall coefficient `p` could get larger than 1, resulting in an overestimation of stemflow and throughfall amounts and negative net interception @@ -182,22 +187,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 (interception loss by evaporation) output of the modified Rutter interception model. The `interception` of `SBM` is used to compute the total actual evapotranspiration `actevap`. -## v0.7.1 - 2023-06-30 +### v0.7.1 - 2023-06-30 -### Fixed +#### Fixed - State initialization of 1D floodplain `volume`. In the initialization function the wrong field name of type `FloodPlainProfile` was used (`area` instead of `a`). -## v0.7.0 - 2023-06-12 +### v0.7.0 - 2023-06-12 -### Fixed +#### Fixed - `BMI.get_time_units` now gets called on the model rather than the type, like all other BMI functions, except `BMI.initialize`. Also it returns "s" instead of "seconds since 1970-01-01T00:00:00", in line with the BMI specification. - Added the `interception` component to total actual evapotranspiration `actevap` of `SBM` (was defined as the sum of soil evaporation, transpiration and open water evaporation). -### Changed +#### Changed - The time values returned in the BMI interface are no longer in seconds since 1970, but in seconds since the model start time. This is more in line with standard BMI practices. - The `starttime` was defined one model timestep `Δt` ahead of the actual model time (the @@ -214,15 +219,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 vectorization (river and 1D floodplain local inertial momentum equation) and `Polyester.@batch`. -### Added +#### Added - For (regulated) lakes with rating curve of type 1 (H-Q table), lake `storage` above the `maximumstorage` (based on maximum water level from the H-Q table) is spilled instantaneously (overflow) from the lake. - Added support to use `sum` as a reducer function for csv and scalar output options. -## v0.6.3 - 2023-03-01 +### v0.6.3 - 2023-03-01 -### Fixed +#### Fixed - Removed error when `_FillValue` is present in the time dimension of the forcing netCDF file. The simulation is allowed to continue with the attribute present, given that there are no missing values in the time dimension. This is checked by the code, and an error is @@ -231,13 +236,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 maximum of 365. The column index should be based on julian day (leap days are not counted). -### Changed +#### Changed - `NCDatasets` version. Reading the `time` dimension of multifile netCDF file became very slow since `NCDatasets` v0.12.4, this issue has been solved in v0.12.11. - Store the `time` dimension of the forcing netCDF file as part of the struct `NCreader` instead of calling `dataset["time"][:]` each time step when loading forcing data. -### Added +#### Added - Show total duration of simulation in the log file (info), and show the current time at execution of each timestep (debug). - Support for exponential decline in horizontal conductivity in the sbm\_gwf concept. This @@ -250,9 +255,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 floodplain routing](@ref) for a short description, and the following section for associated [model parameters](@ref local-inertial_floodplain_params). -## v0.6.2 - 2022-09-01 +### v0.6.2 - 2022-09-01 -### Fixed +#### Fixed - Two issues related to reservoir and lake locations as part of local inertial model: 1) added as boundary points to the update of overland flow, 2) fixed check reservoir and lake location in update river flow. @@ -264,25 +269,25 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - The check that the sum of adaptive timesteps (`Δt`) of the local inertial model (1D and 2D) does not exceed the model timestep. -### Changed +#### Changed - Changed depth `h` for reservoir and lake locations as part of the river local inertial model from `bankfull_depth` to zero. -### Added +#### Added - External inflow to the [SBM + Local inertial river (1D) and land (2D)](@ref config_sbm_gwf_lie_river_land) model configuration. -## v0.6.1 - 2022-04-26 +### v0.6.1 - 2022-04-26 -### Fixed +#### Fixed - Fixed an error with the log file, when writing to a folder that does not (yet) exists. Now, the folder is created prior to writing the log file. - Fixed a MethodError for `read_dims`, thrown when reading netCDF data with NCDatasets.jl 0.12.3 or higher. -## v0.6.0 - 2022-04-14 +### v0.6.0 - 2022-04-14 -### Added +#### Added - The [FLEXTopo](@ref config_flextopo) model. - Set a (different) uniform value for each index of input parameters with an extra dimension. A list of values (instead of one uniform value) that should be equal to the @@ -294,7 +299,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 `compressionlevel` in the `[output]` section in the TOML file. The setting defaults to 0 (no compression), but all levels between 0 and 9 can be used. -### Changed +#### Changed - Re-organized the documentation: moved explanation of different model concepts to a model documentation section, added a user guide to explain setting up the model, added new figures to the description of wflow\_sbm. @@ -306,7 +311,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 (`ShallowWaterLand`) for cells containing a river from river bed elevation `zb` to cell elevation `z`. -### Fixed +#### Fixed - Fixed calculation of average water depth `h_av` of 2D overland flow (`ShallowWaterLand`) with the local inertial approach. The summation of `h` was not correct, resulting in too low values for `h_av`. For river cells of 2D overland flow `h_av` was only updated as part @@ -320,9 +325,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 should have covered the river domain, resulting in incorrect river widths and thus incorrect effective flow widths for river cells. -## v0.5.2 - 2022-02-03 +### v0.5.2 - 2022-02-03 -### Changed +#### Changed - Model types `sbm_gwf` and `hbv` use the same approach for the calculation of the drain width `dw` as model type `sbm`. - Renamed `h_bankfull` parameter to `bankfull_depth` for consistency between kinematic-wave @@ -330,7 +335,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 `[input.lateral.river]` section of the TOML file, it will work but it is suggested to update the name. -### Added +#### Added - Additional log messages and log file as output, see also [Logging](@ref logging_toml). - Option to use the local inertial model for river flow as part of the `sbm` model type. See also [SBM + Local inertial river](@ref config_sbm_gwf_lie_river). @@ -338,7 +343,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 part of the `sbm` model type. See also [SBM + Local inertial river (1D) and land (2D)](@ref config_sbm_gwf_lie_river_land). -### Fixed +#### Fixed - Model type `hbv`: the surface width for overland flow was not corrected with the river width. - Fixed use of absolute path for `path_forcing` in TOML file, which gave an error in wflow @@ -357,9 +362,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 dimension. - Fixed CSV and netCDF scalar output of variables with dimension `layer` (`SVector`). -## v0.5.1 - 2021-11-24 +### v0.5.1 - 2021-11-24 -### Fixed +#### Fixed - Fixed calculation of `exfiltwater` as part of the `sbm_gwf` model type. This was based directly on groundwater head above the surface level, without multiplying by the `specific_yield`, resulting in an overestimation of `exfiltwater`. This is required since @@ -370,13 +375,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 level. However, this water is immediately removed, and the head will be set to surface level.) -### Added +#### Added - Optional `dir_input` and `dir_output` keys in the TOML, which can be used to quickly change the path for all input or output files that are given as a relative path. -## v0.5.0 - 2021-11-12 +### v0.5.0 - 2021-11-12 -### Changed +#### Changed - Scaling of potential capillary rise is replaced by a common approach found in literature, based on the water table depth `zi`, a maximum water depth `cap_hmax` beyond which capillary rise ceases, and a coefficient `cap_n`. See also [Capillary rise](@ref). @@ -386,14 +391,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 approach. Parameters `cap_hmax` and `cap_n` can be set through the TOML file, parameter `capscale` of the previous approach is not used anymore. -### Fixed -- Conversion of `GroundwaterFlow` boundaries [``m^3 d^{-1}``] as part of model concept - `sbm_gwf` to ``m^3 s^{-1}`` for sub-daily model time steps. For the conversion the +#### Fixed +- Conversion of `GroundwaterFlow` boundaries $\SIb{}{m^3 d^{-1}}$ as part of model concept + `sbm_gwf` to $\SI{m^3 s^{-1}}$ for sub-daily model time steps. For the conversion the `basetimestep` (86400 s) should be used (and not the model time step). -## v0.4.1 - 2021-11-04 +### v0.4.1 - 2021-11-04 -### Changed +#### Changed - The ``\alpha`` parameter of the kinematic wave has a fixed value now and is not updated because of changes in water height (this could result in large water balance errors). See also [Surface routing](@ref). @@ -403,7 +408,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 easier to implement a custom `run` function with custom loading of input data (forcing and cyclic parameters). -### Added +#### Added - Check if reservoirs and lakes have downstream nodes. Without downstream nodes is not supported and in that case an error message is thrown that is easier to understand than the previous one: "ArgumentError: Collection is empty, must contain exactly 1 element." @@ -415,23 +420,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 wave equation. - Fixed values for forcing parameters are supported, see also [Fixed forcing values](@ref). -### Added +#### Added - Option to use the local inertial model for river flow as part of the [SBM + Kinematic wave](@ref config_sbm). See also [SBM + Local inertial river](@ref config_sbm_gwf_lie_river_land). -### Fixed +#### Fixed - River inflow for reservoirs and lakes in the kinematic wave. This inflow was based on `sf.q[v]` at the previous time step, and this has been fixed to the current time step. -## v0.4.0 - 2021-09-02 +### v0.4.0 - 2021-09-02 -### Changed +#### Changed - Changed length units for lateral subsurface flow component from millimeter to meter. This means that state netCDF files from previous versions can only be reused if `ssf` is divided by 10^9. - Add snow and glacier processes to wflow\_sbm figure of the documentation. -### Added +#### Added - Multi-threading of vertical SBM concept and lateral kinematic wave components (overland, river and subsurface flow) of wflow\_sbm model [SBM + Kinematic wave](@ref config_sbm). - Improved error message for CSV Reducer. @@ -439,7 +444,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 `theta_r` and `theta_s`, to avoid encoding issues with certain text editors. The old keys still work as well. -### Fixed +#### Fixed - Calculation of volumetric water content of vertical SBM (soil layers and root zone). - Update of `satwaterdepth` in SBM (evaporation was only subtracted from a local variable, and not from `sbm.satwaterdepth`). @@ -465,14 +470,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed the lake storage initialization. For continuation runs (`reinit = false`), this caused the lake to be reset to the initial conditions instead of the saved state. -## v0.3.1 - 2021-05-19 +### v0.3.1 - 2021-05-19 -### Fixed +#### Fixed - Ignore extra dimensions in input netCDFs if they are size 1 -## v0.3.0 - 2021-05-10 +### v0.3.0 - 2021-05-10 -### Changed +#### Changed - New deposition process for coarse sediment in the reservoirs with a new parameter `restrapefficiency` in the sediment model. - New variables added to the `LandSediment` and `RiverSediment` structs in order to save @@ -483,22 +488,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 struct (instead of using the `OverlandFlowSediment` struct first). - Require Julia 1.6 or later. -### Added +#### Added - Modify model parameters and forcing through the TOML file (see [Modify parameters](@ref)). - Run wflow\_sbm (SBM + kinematic wave) in two parts (until recharge and after subsurface flow) from BMI, including the option to switch off the lateral subsurface component of wflow\_sbm. - Support more netCDF dimension and axis order variants. -### Fixed +#### Fixed - Corrected a bug in sediment deposition in the river (case when incoming sediment load is more than the river transport capacity). - Fixed update of `snow` and `glacierstore` fields of HBV and SBM concepts by the `glacier_hbv` module. -## v0.2.0 - 2021-03-26 +### v0.2.0 - 2021-03-26 -### Changed +#### Changed - Removed dependency of the `f` model parameter of wflow\_sbm on the parameters ``\theta_{s}``, ``\theta_{r}`` and ``M``. This approach is used in Topog\_SBM, but not applicable for wflow\_sbm. The `f` parameter needs to be provided as part of the netCDF @@ -513,10 +518,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 `LateralSSF struct`, now directly linked to SBM parameters. - Improve error messages (netCDF and cyclic flow graph). -### Added +#### Added - Export of netCDF scalar timeseries (separate netCDF file from gridded timeseries). This also allows for importing these timeseries by Delft-FEWS (General Adapter). -### Fixed +#### Fixed - Model parameter Manning's `n` now used during the update of the `struct SurfaceFlow`, to change the related ``\alpha`` parameter of the kinematic wave for channel flow. diff --git a/docs/developments/guide.qmd b/docs/developments/guide.qmd new file mode 100644 index 000000000..5f027754e --- /dev/null +++ b/docs/developments/guide.qmd @@ -0,0 +1,18 @@ +--- +title: Developers guide +--- + +## Contributions and reporting issues + +We welcome reporting of issues on [our GitHub +page](https://github.com/Deltares/Wflow.jl/issues/new/choose). Please provide a minimum working +example so we are able to reproduce the issue. Furthermore, we welcome contributions. We follow +the [ColPrac guide for collaborative practices](https://github.com/SciML/ColPrac). New +contributors should make sure to read that guide. + +## Style/decisions + +- For improved code readability, we decided to avoid non-ASCII characters for naming variables, + structs, functions and macros. Using the non-ASCII character for built-in operators is still + allowed. This change in naming convention is now in effect and all invalid uses of non-ASCII + characters have been replaced by ASCII equivalents. \ No newline at end of file diff --git a/docs/developments/index.qmd b/docs/developments/index.qmd new file mode 100644 index 000000000..78f57cdc5 --- /dev/null +++ b/docs/developments/index.qmd @@ -0,0 +1,28 @@ +--- +title: "Developments" +--- + +::: column-page-inset-right +{{< include /_static/listing_code.html >}} +```{=html} + + + +``` +::: \ No newline at end of file diff --git a/docs/src/model_docs/structures.md b/docs/developments/julia_structs.qmd similarity index 67% rename from docs/src/model_docs/structures.md rename to docs/developments/julia_structs.qmd index 5f25e6f3f..c4827cffb 100644 --- a/docs/src/model_docs/structures.md +++ b/docs/developments/julia_structs.qmd @@ -1,9 +1,11 @@ -# Julia structures +--- +title: Julia structures +--- ## Model - Below the composite type that represents all different aspects of a `Wflow.Model`, such as - the network, parameters, clock, model type, configuration and input and output. +Below the composite type that represents all different aspects of a `Wflow.Model`, such as the +network, parameters, clock, model type, configuration and input and output. ```julia struct Model{N,L,V,R,W,T} @@ -19,9 +21,9 @@ end ``` The `lateral` field of the `struct Model` can contain different lateral concepts. For each -wflow model these different lateral concepts are mapped through the use of a `NamedTuple`. -The `vertical` field of the `struct Model` always contains one vertical concept, for example -the SBM vertical concept. +wflow model these different lateral concepts are mapped through the use of a `NamedTuple`. The +`vertical` field of the `struct Model` always contains one vertical concept, for example the +SBM vertical concept. Below an example how lateral concepts are mapped for the SBM model through a `NamedTuple`: @@ -30,22 +32,21 @@ Below an example how lateral concepts are mapped for the SBM model through a `Na ``` The `subsurface` part is mapped to the lateral subsurface flow kinematic wave concept, the -`land` part is mapped the overland flow kinematic wave concept and the `river` part is -mapped to the river flow kinematic wave concept. Knowledge of this specific mapping is -required to understand and correctly set input, output and state variables in the TOML -configuration file, see also [Config and TOML](@ref config_toml). This mapping is described in more -detail for each model in the section Models. Also the `struct` of each mapped concept is -provided, so one can check the internal variables in the code. These structs are defined as -a parametric composite type, with type parameters between curly braces after the `struct` -name. See also the next paragraph [Vertical and lateral models](@ref) for a more -detailed description. +`land` part is mapped the overland flow kinematic wave concept and the `river` part is mapped +to the river flow kinematic wave concept. Knowledge of this specific mapping is required to +understand and correctly set input, output and state variables in the TOML configuration file, +see also [Config and TOML](../user_guide/toml_file.qmd). This mapping is described in more detail for each +model in the section Models. Also the `struct` of each mapped concept is provided, so one can +check the internal variables in the code. These structs are defined as a parametric composite +type, with type parameters between curly braces after the `struct` name. See also the next +paragraph [Vertical and lateral models](#vertical-and-lateral-models) for a more detailed description. ## Vertical and lateral models The different model concepts used in wflow are defined as parametric [composite types](https://docs.julialang.org/en/v1/manual/types/#Composite-Types). For example the vertical `SBM` concept is defined as follows: `struct SBM{T,N,M}`. `T`, `N` and `M` between -curly braces after the `struct` name refer to type parameters, for more information about -type parameters you can check out [Type +curly braces after the `struct` name refer to type parameters, for more information about type +parameters you can check out [Type parameters](https://docs.julialang.org/en/v1/manual/types/#man-parametric-composite-types). Since these parameters can be of any type, it is possible to declare an unlimited number of composite types. The type parameters are used to set the type of `struct` fields, below an @@ -76,10 +77,9 @@ example with a part of the `SBM` struct: ``` The type parameter `T` is used in wflow as a subtype of `AbstractFloat`, allowing to store -fields with a certain floating point precision (e.g. `Float64` or `Float32`) in a flexible -way. `N` refers to the maximum number of soil layers of the `SBM` soil column, and `M` -refers to the maximum number of soil layers + 1. See also part of the following instance of -`SBM`: +fields with a certain floating point precision (e.g. `Float64` or `Float32`) in a flexible way. +`N` refers to the maximum number of soil layers of the `SBM` soil column, and `M` refers to the +maximum number of soil layers + 1. See also part of the following instance of `SBM`: ```julia sbm = SBM{Float,maxlayers,maxlayers + 1}( diff --git a/docs/examples/index.qmd b/docs/examples/index.qmd new file mode 100644 index 000000000..863e561e7 --- /dev/null +++ b/docs/examples/index.qmd @@ -0,0 +1,3 @@ +--- +title: To be added in the future +--- \ No newline at end of file diff --git a/docs/getting_started/building_a_model.qmd b/docs/getting_started/building_a_model.qmd new file mode 100644 index 000000000..17c8afa83 --- /dev/null +++ b/docs/getting_started/building_a_model.qmd @@ -0,0 +1,143 @@ +--- +title: Building a model from scratch +--- + +## HydroMT-wflow + +[hydroMT](https://github.com/Deltares/hydromt) is a Python package, developed by Deltares, to +build and analyze hydro models. It provides a generic model api with attributes to access the +model schematization, (dynamic) forcing data, results and states. + +The wflow plugin [hydroMT-wflow](https://github.com/Deltares/hydromt_wflow) of hydroMT can be +used to build and analyze the following model configurations: + +- [wflow\_sbm + kinematic wave routing](../model_docs/model_configurations.qmd#sbm-kinematic-wave) +- [wflow\_sbm + local inertial river and floodplain](../model_docs/model_configurations.qmd#sbm-local-inertial-river) +- [wflow\_sbm + local inertial river (1D) and land (2D)](../model_docs/model_configurations.qmd#sbm-local-inertial-river-1d-and-land-2d) +- [wflow\_sediment](../model_docs/model_configurations.html#wflow_sediment) + +To learn more about the wflow plugin of this Python package, we refer to the [hydroMT-wflow +documentation](https://deltares.github.io/hydromt_wflow/latest/index.html). + +To inspect or modify (for example in QGIS) the netCDF static data of these wflow models it is +convenient to export the maps to a raster format. This can be done as part of the hydroMT-wflow +plugin, see also the following +[example](https://deltares.github.io/hydromt_wflow/latest/_examples/convert_staticmaps_to_mapstack.html). +It is also possible to create again the netCDF static data file based on the modified raster +map stack. + + +## Data requirements +The actual data requirements depend on the application of the Model and the Model type. Both +forcing and static data should be provided in netCDF format, with the same grid definition for +forcing and static data. The only exception is storage and rating curves for lakes, that should +be provided in CSV format, see also [Additional settings for +waterbodies](../model_docs/lateral/waterbodies.qmd#additional-settings). + +* Forcing data: + - Precipitation + - Potential evapotranspiration + - Temperature (optional, only needed for snow and glacier modelling) + +The requirements for static data (including model parameters) depend on the Model type. The +following data is required for all Model types, but not directly part of a Model component: + ++ flow direction data (D8) ++ river map (location of the river) ++ sub-catchment map (model domain) + +For the flow direction (D8) data, the PCRaster `ldd` convention is used, see also [PCRaster +ldd](https://pcraster.geo.uu.nl/pcraster/4.3.1/documentation/pcraster_manual/sphinx/secdatbase.html#ldd-data-type). +An approach to generate `ldd` data is to make use of the Python package +[pyflwdir](https://github.com/Deltares/pyflwdir): + ++ to [upscale existing flow direction + data](https://deltares.github.io/pyflwdir/latest/_examples/upscaling.html) as the 3 arcsec + MERIT Hydro data (Yamazaki et al., 2019) ++ or to [derive flow directions from elevation + data](https://deltares.github.io/pyflwdir/latest/_examples/from_dem.html), + +see also Eilander et al. (2021) for more information. Pyflwdir is also used by the +[hydroMT](https://github.com/Deltares/hydromt) Python package described in the next paragraph. +Another approach to generate `ldd` data is to make use of PCRaster functionality, see for +example +[lddcreate](https://pcraster.geo.uu.nl/pcraster/4.3.1/documentation/pcraster_manual/sphinx/op_lddcreate.html). + +Optionally, but also not directly part of a model component are `gauge` locations, that are +used to extract gridded data from certain locations. + +The different supported model configurations are described in the section [Model +configurations](../model_docs/model_configurations.qmd). Wflow\_sbm models have the vertical +concept [SBM](../model_docs/vertical/sbm.qmd) in common and input parameters for this component +are described in the [SBM model parameters table](../model_docs/parameters_vertical.qmd#sbm). +For wflow\_sbm models there are two ways to include subsurface flow: + +1. The kinematic wave approach (see section [Subsurface flow + routing](../model_docs/lateral/kinwave.qmd#subsurface-flow-routing)) as part of the `sbm` + model type. Parameters that are part of this component are described in the [Lateral + subsurface flow](../model_docs/parameters_lateral.qmd#lateral-subsurface-flow) section of + Model parameters. Input parameters for this component are derived from the SBM vertical + concept and the land slope. One external parameter (`ksathorfrac`) is used to calculate the + horizontal hydraulic conductivity at the soil surface `kh_0`. +2. Groundwater flow (see section [Groundwater flow component](../model_docs/lateral/gwf.qmd)) + as part of the `sbm_gwf` model type. For the unconfined aquifer the input parameters are + described in the section [Unconfined + aquifer](../model_docs/parameters_lateral.qmd#unconfined-aquifer) of Model parameters. The + bottom (`bottom`) of the groundwater layer is derived from from the `soilthickness` [mm] + parameter of `SBM` and the provided surface elevation `altitude` [m] as part of the static + input. The `area` parameter is derived from the model grid. Parameters that are part of the + boundary conditions of the unconfined aquifer are listed under [Constant + Head](../model_docs/lateral/gwf.qmd#head-boundary) and [Boundary + conditions](../model_docs/parameters_lateral.qmd#boundary-conditions) of the Model + parameters section. + +Most hydrological model configurations make use of the kinematic wave surface routing (river +flow, overland flow or both) and input data required for the river and overland flow components +is described in [Surface flow](../model_docs/parameters_lateral.qmd#surface-flow). There is +also the option to use the local inertial model as part of the wflow\_sbm models (model types +`sbm` and `sbm_gwf`): + ++ for river flow, see also the [Local inertial river and + floodplain](../model_docs/model_configurations.qmd#sbm-local-inertial-river) model. ++ for 1D river flow and 2D overland flow combined, see also the [Local inertial river (1D) and + land (2D)](../model_docs/model_configurations.qmd#sbm-local-inertial-river-1d-and-land-2d) + model. + +Input parameters for this approach are described in [River flow (local +inertial)](../model_docs/parameters_lateral.qmd#local-inertial), including the optional 1D +[floodplain schematization](../model_docs/parameters_lateral.qmd#d-floodplain), and [Overland +flow (local inertial)](../model_docs/parameters_lateral.qmd#overland-flow) of the Model +parameters section. + +Reservoirs or lakes can be part of the kinematic wave or local inertial model for river flow +and input parameters are described in +[Reservoirs](../model_docs/parameters_lateral.qmd#reservoirs) and +[Lakes](../model_docs/parameters_lateral.qmd#lakes). + +The [wflow\_sediment](../model_docs/model_configurations.qmd#wflow_sediment) model +configuration consists of the vertical [Soil Erosion](../model_docs/vertical/sediment.qmd) +concept and the input parameters for this concept are described in the +[Sediment](../model_docs/parameters_vertical.qmd#sediment) section of the Model parameters. The +parameters of the lateral [Sediment Flux in overland +flow](../model_docs/lateral/sediment_flux.qmd#sediment-flux-in-overland-flow) concept are +described in the [Overland flow](../model_docs/parameters_lateral.qmd#overland-flow-1) section +of the Model parameters. Parameters of this component are not directly set by data from static +input. The input parameters of the lateral concept [River Sediment +Model](../model_docs/lateral/sediment_flux.qmd#river-sediment-model) are listed in [River +flow](../model_docs/parameters_lateral.qmd#river-flow-1) of the Model parameters section. + +The Model parameters section lists all the parameters per Model component and these Tables can +also be used to check which parameters can be part of the output, see also [Output netCDF +section](../user_guide/toml_file.qmd#output-netcdf-section) and [Output CSV +section](../user_guide/toml_file.qmd#output-csv-section). + +Example models can be found in the [Example models section](./download_example_models.qmd). + +## References ++ Yamazaki, D., Ikeshima, D., Sosa, J., Bates, P. D., Allen, G. H. and Pavelsky, T. M.: MERIT + Hydro: A high‐resolution global hydrography map based on latest topography datasets, Water + Resour. Res., 2019WR024873, doi:10.1029/2019WR024873, 2019. ++ Eilander, D., van Verseveld, W., Yamazaki, D., Weerts, A., Winsemius, H. C., and Ward, P. J.: + A hydrography upscaling method for scale-invariant parametrization of distributed + hydrological models, Hydrol. Earth Syst. Sci., 25, 5287–5313, + , 2021. diff --git a/docs/src/user_guide/sample_data.md b/docs/getting_started/download_example_models.qmd similarity index 87% rename from docs/src/user_guide/sample_data.md rename to docs/getting_started/download_example_models.qmd index 7431ea7f3..67917dd1c 100644 --- a/docs/src/user_guide/sample_data.md +++ b/docs/getting_started/download_example_models.qmd @@ -1,8 +1,10 @@ -# [Example models](@id sample_data) +--- +title: Download example models +--- For each wflow Model a test model is available that can help to understand the data -requirements and the usage of each Model. The TOML configuration file per available model -are listed in the Table below: +requirements and the usage of each Model. The TOML configuration file per available model are +listed in the Table below: | model | TOML configuration file | |:--------------- | ------------------| @@ -10,12 +12,12 @@ are listed in the Table below: | wflow\_sbm + groundwater flow | [sbm\_gwf\_config.toml](https://raw.githubusercontent.com/Deltares/Wflow.jl/master/test/sbm_gwf_config.toml) | | wflow_sediment | [sediment_config.toml](https://raw.githubusercontent.com/Deltares/Wflow.jl/master/test/sediment_config.toml) | -The associated Model files (input static, forcing and state files) can easily be downloaded -and for this we share the following Julia code (per Model) that downloads the required files -to your current working directory. For running these test model see also [Usage](@ref run_wflow) -and [Command Line Interface](@ref cli). +The associated Model files (input static, forcing and state files) can easily be downloaded and +for this we share the following Julia code (per Model) that downloads the required files to +your current working directory. For running these test model see also [Usage](./running_wflow.qmd#running-a-simulation) +and [Command Line Interface](./running_wflow.qmd#using-the-command-line-interface). -## [wflow\_sbm + kinematic wave](@id wflow_sbm_data) +## wflow\_sbm + kinematic wave ```julia # urls to TOML and netCDF of the Moselle example model toml_url = "https://raw.githubusercontent.com/Deltares/Wflow.jl/master/test/sbm_config.toml" diff --git a/docs/getting_started/index.qmd b/docs/getting_started/index.qmd new file mode 100644 index 000000000..37027320c --- /dev/null +++ b/docs/getting_started/index.qmd @@ -0,0 +1,28 @@ +--- +title: "Getting started" +--- + +::: column-page-inset-right +{{< include /_static/listing_code.html >}} +```{=html} + + + +``` +::: \ No newline at end of file diff --git a/docs/src/user_guide/install.md b/docs/getting_started/install.qmd similarity index 56% rename from docs/src/user_guide/install.md rename to docs/getting_started/install.qmd index 3509b933b..fe7302893 100644 --- a/docs/src/user_guide/install.md +++ b/docs/getting_started/install.qmd @@ -1,15 +1,6 @@ -# How to install - -First, download and install the [current stable release of -Julia](https://julialang.org/downloads/#current_stable_release). If you have any issues -installing Julia, please see [platform specific -instructions](https://julialang.org/downloads/platform/) for further instructions. - -If you are new to Julia, it might be a good idea to check out the [Getting Started section -of the Julia Manual](https://docs.julialang.org/en/v1/manual/getting-started/). You can also -find additional learning resources at -[julialang.org/learning](https://julialang.org/learning/). - +--- + title: Installing wflow +--- Wflow can be used in two different ways, depending on the required use of the code: @@ -28,20 +19,29 @@ Wflow is a [Julia](https://julialang.org/) package that can be installed in seve Below, we show how to install wflow from Julia's package repository and how to install the latest version from GitHub. +First, download and install the [current stable release of +Julia](https://julialang.org/downloads/#current_stable_release). If you have any issues +installing Julia, please see [platform specific +instructions](https://julialang.org/downloads/platform/) for further instructions. + +If you are new to Julia, it might be a good idea to check out the [Getting Started section of +the Julia Manual](https://docs.julialang.org/en/v1/manual/getting-started/). You can also find +additional learning resources at [julialang.org/learning](https://julialang.org/learning/). + ### Install from Julia's package repository -To access Julia's package manager, press `]` in the Julia REPL. To get back to the Julia -REPL, press backspace or ^C. +To access Julia's package manager, press `]` in the Julia REPL. To get back to the Julia REPL, +press backspace or ^C. -!!! tip - If you haven't used Julia in a while, it's a good idea to run `up` to update your - packages. - ```julia-repl - pkg> up - ``` +::: {.callout-tip} +If you haven't used Julia in a while, it's a good idea to run `up` to update your packages. +```bash +pkg> up +``` +::: To access Julia's package manager and install wflow, use: -```julia-repl +```bash pkg> add Wflow ``` @@ -52,65 +52,67 @@ automatically resolved and installed from the Pkg General registry. You can also install wflow from the `master` branch on the repository as follows: -```julia-repl +```bash pkg> add Wflow#master ``` This command tracks the `master` branch and updates to the latest commit on that branch when you run `update`, or simply `up`, in the Pkg REPL. The `add` installs wflow in your home -directory under `.julia/packages/Wflow`. Note that packages installed under `packages` by -`add` should not be changed in the directory, as the change could disrupt Pkg's automatic -dependency handling. +directory under `.julia/packages/Wflow`. Note that packages installed under `packages` by `add` +should not be changed in the directory, as the change could disrupt Pkg's automatic dependency +handling. -If you want to modify any files in the repository, you need to do a development install. -This can be done using: +If you want to modify any files in the repository, you need to do a development install. This +can be done using: -```julia-repl +```bash pkg> dev Wflow ``` -This will clone the git repository, place it under your home directory in -`.julia/dev/Wflow`, and add the wflow package to your project environment. To receive -updates, you'll need to pull the latest changes manually using `git pull`. +This will clone the git repository, place it under your home directory in `.julia/dev/Wflow`, +and add the wflow package to your project environment. To receive updates, you'll need to pull +the latest changes manually using `git pull`. ### Check installation of wflow Finally, go back to the Julia REPL and try to load wflow: -```julia-repl +```bash julia> using Wflow ``` The first time you do this, it may take longer as any new or changed packages need to be -precompiled to enable faster loading on subsequent uses. No error messages should appear, -which indicates that you have successfully installed wflow. +precompiled to enable faster loading on subsequent uses. No error messages should appear, which +indicates that you have successfully installed wflow. Before concluding this section, we recommend a few tools that can make using and developing Julia code easier. -!!! tip - There is a section on editors and IDEs for Julia on , scroll - down to see it. We use and recommend Microsoft's free and open source [Visual Studio - Code](https://code.visualstudio.com/). Combined with the [Julia - extension](https://www.julia-vscode.org/) it provides a powerful and interactive - development experience. - -!!! tip - If you plan to modify the code of wflow, we recommend installing the `Revise.jl` - package. This package allows you to modify code and use the changes without restarting - Julia. Install it with `add Revise` from the Pkg REPL. Then create a file called - `.julia/config/startup.jl`, and put `using Revise` there. This will load Revise every - time you start a Julia session. +::: {.callout-tip} +There is a section on editors and IDEs for Julia on , scroll down to +see it. We use and recommend Microsoft's free and open source [Visual Studio +Code](https://code.visualstudio.com/). When combined with the [Julia +extension](https://www.julia-vscode.org/) it provides a powerful and interactive development +experience. +::: + +::: {.callout-tip} +If you plan to modify the code of wflow, we recommend installing the `Revise.jl` +package. This package allows you to modify code and use the changes without restarting Julia. +Install it with `add Revise` from the Pkg REPL. Then create a file called +`.julia/config/startup.jl`, and put `using Revise` there. This will load Revise every time you +start a Julia session. +::: ## Installing the compiled executable Binaries of `wflow_cli` can be downloaded from our website [download.deltares.nl](https://download.deltares.nl/en/download/wflow/), and are currently -available for Windows. Download and install the `.msi` file. After installation, you will -see two folders in the installation directory. Only the `bin/wflow_cli` is used. The -`artifacts` folder contains binary dependencies such as netCDF. +available for Windows. Download and install the `.msi` file. After installation, you will see +two folders in the installation directory. Only the `bin/wflow_cli` is used. The `artifacts` +folder contains binary dependencies such as netCDF. -``` +```bash artifacts\ bin\wflow_cli ``` @@ -118,13 +120,16 @@ bin\wflow_cli To verify whether the installation was completed successfully, run `wflow_cli` with no arguments in the command line. This will display the following message: -``` +```bash Usage: wflow_cli 'path/to/config.toml' ``` -!!! note - The old version of wflow, which was based on Python and PCRaster libraries, is also - available for download from our website - [download.deltares.nl](https://download.deltares.nl/en/download/wflow/). We recommend - installing the Julia version, as this documentation is written to support this version. +::: {.callout-note} +The old version of wflow, based on Python and PCRaster libraries is also available to download +from our website [download.deltares.nl](https://download.deltares.nl/en/download/wflow/). We +recommend installing the Julia version, as this documentation is written to support this +version. +::: + + diff --git a/docs/src/user_guide/step4_running.md b/docs/getting_started/running_wflow.qmd similarity index 84% rename from docs/src/user_guide/step4_running.md rename to docs/getting_started/running_wflow.qmd index 4f162647b..50f47fb1d 100644 --- a/docs/src/user_guide/step4_running.md +++ b/docs/getting_started/running_wflow.qmd @@ -1,16 +1,18 @@ -# [Step 4: Running a simulation](@id run_wflow) +--- +title: Running a simulation +--- ## Using Julia -Once you installed Julia and Wflow.jl, a simulation can be started from the command line -as follows: +Once you installed Julia and Wflow.jl, a simulation can be started from the command line as +follows: -``` +```bash julia -e 'using Wflow; Wflow.run()' path/to/config.toml ``` Furthermore, it is possible to write a Julia script to run a simulation. Example data to -explore how this works can be found [here](@ref sample_data). +explore how this works can be found [here](./download_example_models.qmd). ```julia using Wflow @@ -27,22 +29,21 @@ config.endtime = DateTime("2000-01-03T00:00:00") Wflow.run(config) ``` -## [Using the command line interface](@id cli) +## Using the command line interface If you don't need the extra features of using wflow as a library, but just want to run simulations, the command line interface makes it easier to do so. It consists of a single -executable, `wflow_cli` that accepts a single argument, the path to a TOML configuration -file. +executable, `wflow_cli` that accepts a single argument, the path to a TOML configuration file. Binaries of `wflow_cli` can be downloaded from our website [download.deltares.nl](https://download.deltares.nl/en/download/wflow/), and are currently available for Windows. After installing you can see three folders in the installation directory. It is only the -`bin/wflow_cli` that is directly used. All three folders need to stay together however. -The share folder contains TOML files with more information about the build. +`bin/wflow_cli` that is directly used. All three folders need to stay together however. The +share folder contains TOML files with more information about the build. -``` +```bash bin\wflow_cli lib share @@ -50,14 +51,14 @@ share Simply running `wflow_cli` with no arguments will give the following message: -``` +```bash Usage: wflow_cli 'path/to/config.toml' ``` When starting a run, you will see basic run information on the screen, as well as a progress bar, that gives an estimate of how much time is needed to finish the simulation: -``` +```bash ┌ Info: Run information │ model_type = "sbm" │ starttime = CFTime.DateTimeStandard(2000-01-01T00:00:00) diff --git a/docs/home/case_studies.qmd b/docs/home/case_studies.qmd new file mode 100644 index 000000000..1367bf3d2 --- /dev/null +++ b/docs/home/case_studies.qmd @@ -0,0 +1,81 @@ +--- +title: "Case studies" +--- + +## Wflow models for the Meuse and Rhine + +Reliable hydrological models for the Rhine and the Meuse river basins are necessary for +short-term forecasting of river flows and long-term predictions for strategic water management +planning. In collaboration with Rijkswaterstaat, Deltares is developing a new line of models +for the Rhine and the Meuse basins. The models will be used for forecasting and to estimate the +impact of climate change on water resources and extreme streamflow. In the model development, +we aim to improve hydrological predictions by including relevant processes in the model +schematization. The modularity of the wflow framework is ideal for this as we can easily +evaluate the combination of different vertical and lateral model components. For example, the +local inertial routing for river and overland flow enables us to consider retention of water in +the floodplains, which is likely to improve extreme streamflow predictions. + +![](../images/case_rhine_meuse.png) + +## Operational flood forecasting in Australia + +In Australia, there was a need for high-resolution, fast and accurate rainfall-runoff models to +provide boundary conditions for a fast and detailed flood inundation model (SFINCS). The domain +of the flood model covers the entire North and East Coast of Australia. Although many gauging +stations are available to provide real-time information, many rivers are not covered. For these +locations, wflow\_sbm models are used to provide this real-time information. Additionally, +these models are used to provide projections for potential future scenarios. Using the HydroMT +library, all wflow\_sbm models were automatically built. The high level of flexibility in +spatial and temporal resolution, combined with the physics-based nature of the concept, makes +Wflow\_sbm particularly suitable for ungauged basins. Furthermore, the model is detailed and +computationally efficient enough for coupling with the fast flood inundation model SFINCS. + +![](../images/case_flifs_1.png) + +The results of this proof of concept are very promising. Technically, we were able to quickly +set up the wflow\_sbm models, couple them to the flood inundation models (SFINCS), and run the +models operationally under the Delft-FEWS platform. Model validation was conducted for two +basins by comparing the results of Wflow\_sbm against observations and the results of +calibrated URBS models. This validation demonstrated that the uncalibrated Wflow\_sbm model +results were already quite satisfactory, especially given the complex nature of these basins, +which include several small and large reservoirs. We could also show the potential for further +calibration by adjusting the KsatHorFrac parameter. + +De Kleermaeker, S., Leijnse, T., Morales, Y., Druery, C., & Maguire, S. (2022). Developing a +real-time data and modelling framework for operational flood inundation forecasting in +Australia. In Hydrology & Water Resources Symposium 2022 (HWRS 2022): The Past, the Present, +the Future. Engineers Australia. +https://search.informit.org/doi/10.3316/informit.916755150845355 + +![](../images/case_flifs_2.png) + +## Simulating plastic transport in Thailand + +For the Pollution Control Board of the Government of Thailand and the World Bank, we supported +a material flow analysis of plastics in Thailand using wflow. Plastic pollution is a growing +global issue. Plastic waste enters rivers and is transported to the ocean where it persists and +threatens the health of the ocean, seas and coasts. The initial movement of plastic waste is in +many cases triggered by runoff from (heavy) rainfall and transported by water flow towards +small streams and rivers. Therefore there is strong relation to rainfall-runoff processes, +which can be modeled using high-resolution rainfall-runoff models. + +In this study we applied the wflow\_sbm model in combination with a fate-and-transport and +water quality model (DelWaq) to simulate the movement of plastics through five large river +basins and on three island and coastal zones (Krabi, Phuket, and Ko Samui; see screenshot of +the model below) in Thailand. Together with our partners Panya Consultants and HII, we were +able to identify hotspots of plastic pollution, estimate how much plastic waste would end up in +the Gulf of Thailand and recommend priority areas for reducing plastic waste reaching the sea. + +![](../images/case_mfa_1.png) + +The wflow\_sbm models for the five large basins were calibrated. The presence of large dams and +reservoirs complicated calibration, but with the input for the dam operation, the model +performance for these basins could be largely improved. The figure below shows the calibrated +model results for the Chao Phraya, just upstream of Bangkok. The input from the hydrological +wflow\_sbm model was used as input for the fate and transport model to assess the amount of +plastic transported to the ocean. + +![](../images/case_mfa_3.png) + +Link to World Bank report: +[https://www.worldbank.org/en/country/thailand/publication/plastic-waste-material-flow-analysis-for-thailand](https://www.worldbank.org/en/country/thailand/publication/plastic-waste-material-flow-analysis-for-thailand) diff --git a/docs/src/intro/publications.md b/docs/home/publications.qmd similarity index 59% rename from docs/src/intro/publications.md rename to docs/home/publications.qmd index d592daa38..50fc4e36c 100644 --- a/docs/src/intro/publications.md +++ b/docs/home/publications.qmd @@ -1,38 +1,40 @@ -# Publications +--- +title: "Publications" +--- ## Citing wflow For publications, please cite the following paper introducing Wflow.jl and describing the wflow\_sbm concept, together with some case studies: -van Verseveld, W. J., Weerts, A. H., Visser, M., Buitink, J., Imhoff, R. O., Boisgontier, -H., Bouaziz, L., Eilander, D., Hegnauer, M., ten Velden, C., and Russell, B., 2024. -Wflow_sbm v0.7.3, a spatially distributed hydrological model: from global data to local -applications. Geosci. Model Dev., 17, 3199–3234. . +van Verseveld, W. J., Weerts, A. H., Visser, M., Buitink, J., Imhoff, R. O., Boisgontier, H., +Bouaziz, L., Eilander, D., Hegnauer, M., ten Velden, C., and Russell, B., 2024. Wflow_sbm +v0.7.3, a spatially distributed hydrological model: from global data to local applications. +Geosci. Model Dev., 17, 3199–3234. . To cite a specific software version please use the DOI provided in the Zenodo badge [![DOI](https://zenodo.org/badge/246787232.svg)](https://zenodo.org/badge/latestdoi/246787232), -that points to the latest release. The DOIs of previous versions are also available at -Zenodo. If you use a snapshot of the development (without a DOI) please cite as follows: +that points to the latest release. The DOIs of previous versions are also available at Zenodo. +If you use a snapshot of the development (without a DOI) please cite as follows: -van Verseveld, Willem, Visser, Martijn, Buitink, Joost, Bouaziz, Laurène, Boisgontier, -Hélène, Bootsma, Huite, Weerts, Albrecht, Baptista, Carlos Fernando, Pronk, Maarten, -Eilander, Dirk, Hartgring, Sebastian, Dalmijn, Brendan, Hofer, Julian, Hegnauer, Mark, & -Mendoza, Raul, (YEAR). Deltares/Wflow.jl: unstable-master. -, obtained: DATE\_OF\_DOWNLOAD. +van Verseveld, Willem, Visser, Martijn, Buitink, Joost, Bouaziz, Laurène, Boisgontier, Hélène, +Bootsma, Huite, Weerts, Albrecht, Baptista, Carlos Fernando, Pronk, Maarten, Eilander, Dirk, +Hartgring, Sebastian, Dalmijn, Brendan, Hofer, Julian, Hegnauer, Mark, & Mendoza, Raul, (YEAR). +Deltares/Wflow.jl: unstable-master. , obtained: +DATE\_OF\_DOWNLOAD. ## Publications using wflow ### Peer reviewed journal papers -Aerts, J. P. M., Hut, R. W., van de Giesen, N. C., Drost, N., van Verseveld, W. J., Weerts, -A. H., and Hazenberg, P., 2022. Large-sample assessment of varying spatial resolution on the +Aerts, J. P. M., Hut, R. W., van de Giesen, N. C., Drost, N., van Verseveld, W. J., Weerts, A. +H., and Hazenberg, P., 2022. Large-sample assessment of varying spatial resolution on the streamflow estimates of the wflow_sbm hydrological model. Hydrol. Earth Syst. Sci., 26, 4407–4430. . -de Boer-Euser, T., Bouaziz, L., De Niel, J., Brauer, C., Dewals, B., Drogue, G., Fenicia, -F., Grelier, B., Nossent, J., Pereira, F., Savenije, H., Thirel, G., Willems, P., 2017. -Looking beyond general metrics for model comparison – lessons from an international model +de Boer-Euser, T., Bouaziz, L., De Niel, J., Brauer, C., Dewals, B., Drogue, G., Fenicia, F., +Grelier, B., Nossent, J., Pereira, F., Savenije, H., Thirel, G., Willems, P., 2017. Looking +beyond general metrics for model comparison – lessons from an international model intercomparison study. Hydrol. Earth Syst. Sci. 21, 423–440. . @@ -42,16 +44,20 @@ Pereira, F., Sprokkereef, E., Stam, J., Weerts, A.H., Willems, P., Savenije, H.H Hrachowitz, M., 2021. Behind the scenes of streamflow model performance. Hydrol. Earth Syst. Sci., 25, 1069–1095. . -Bouaziz, L. J. E., Aalbers, E. E., Weerts, A. H., Hegnauer, M., Buiteveld, H., Lammersen, -R., Stam, J., Sprokkereef, E., Savenije, H. H. G., and Hrachowitz, M., 2022. Ecosystem -adaptation to climate change: the sensitivity of hydrological predictions to time-dynamic -model parameters, Hydrol. Earth Syst. Sci., 26, 1295–1318. +Bouaziz, L. J. E., Aalbers, E. E., Weerts, A. H., Hegnauer, M., Buiteveld, H., Lammersen, R., +Stam, J., Sprokkereef, E., Savenije, H. H. G., and Hrachowitz, M., 2022. Ecosystem adaptation +to climate change: the sensitivity of hydrological predictions to time-dynamic model +parameters, Hydrol. Earth Syst. Sci., 26, 1295–1318. . -Casson, D. R., Werner, M., Weerts, A., and Solomatine, D., 2018. Global re-analysis datasets -to improve hydrological assessment and snow water equivalent estimation in a sub-Arctic -watershed. Hydrol. Earth Syst. Sci., 22, 4685–4697. -. +Casson, D. R., Werner, M., Weerts, A., and Solomatine, D., 2018. Global re-analysis datasets to +improve hydrological assessment and snow water equivalent estimation in a sub-Arctic watershed. +Hydrol. Earth Syst. Sci., 22, 4685–4697. . + +Droppers, B., Rakovec, O., Avila, L., Azimi, S., Cortés-Torres N., De León Pérez, D., Imhoff, +R., Francés, F., Kollet, S., Rigon, R., Weerts, A. & Samaniego, L, 2024. Multi-model +hydrological reference dataset over continental Europe and an African basin. Sci Data, 11, +1009\. . Droppers, B., Rakovec, O., Avila, L., Azimi, S., Cortés-Torres N., De León Pérez, D., Imhoff, R., Francés, F., Kollet, S., Rigon, R., Weerts, A. & Samaniego, L, 2024. Multi-model @@ -59,27 +65,27 @@ hydrological reference dataset over continental Europe and an African basin. Sci 1009\. . Emerton, R.E., Stephens, E.M., Pappenberger, F., Pagano, T.C., Weerts, A.H., Wood, A.W., -Salamon, P., Brown, J.D., Hjerdt, N., Donnelly, C., Baugh, C.A., Cloke, H.L., 2016. -Continental and global scale flood forecasting systems. WIREs Water 3, 391–418. +Salamon, P., Brown, J.D., Hjerdt, N., Donnelly, C., Baugh, C.A., Cloke, H.L., 2016. Continental +and global scale flood forecasting systems. WIREs Water 3, 391–418. . -Gebremicael, T.G., Mohamed, Y.A., Van der Zaag, P., 2019. Attributing the hydrological -impact of different land use types and their long-term dynamics through combining -parsimonious hydrological modelling, alteration analysis and PLSR analysis. Science of The -Total Environment, 660, 1155-1167, . +Gebremicael, T.G., Mohamed, Y.A., Van der Zaag, P., 2019. Attributing the hydrological impact +of different land use types and their long-term dynamics through combining parsimonious +hydrological modelling, alteration analysis and PLSR analysis. Science of The Total +Environment, 660, 1155-1167, . Giardino, A., Schrijvershof, R., Nederhoff, C.M., de Vroeg, H., Brière, C., Tonnon, P.-K., -Caires, S., Walstra, D.J., Sosa, J., van Verseveld, W., Schellekens, J., Sloff, C.J., 2018. -A quantitative assessment of human interventions and climate change on the West African -sediment budget, Ocean & Coastal Management, 156, 249-265. +Caires, S., Walstra, D.J., Sosa, J., van Verseveld, W., Schellekens, J., Sloff, C.J., 2018. A +quantitative assessment of human interventions and climate change on the West African sediment +budget, Ocean & Coastal Management, 156, 249-265. . Hally, A., Caumont, O., Garrote, L., Richard, E., Weerts, A., Delogu, F., Fiori, E., Rebora, N., Parodi, A., Mihalović, A., Ivković, M., Dekić, L., van Verseveld, W., Nuissier, O., -Ducrocq, V., D’Agostino, D., Galizia, A., Danovaro, E., Clematis, A., 2015. -Hydrometeorological multi-model ensemble simulations of the 4 November 2011 flash flood -event in Genoa, Italy, in the framework of the DRIHM project. Nat. Hazards Earth Syst. Sci. -15, 537–555. . +Ducrocq, V., D’Agostino, D., Galizia, A., Danovaro, E., Clematis, A., 2015. Hydrometeorological +multi-model ensemble simulations of the 4 November 2011 flash flood event in Genoa, Italy, in +the framework of the DRIHM project. Nat. Hazards Earth Syst. Sci. 15, 537–555. +. Hassaballah, K., Mohamed, Y., Uhlenbrook, S., and Biro, K., 2017. Analysis of streamflow response to land use and land cover changes using satellite data and hydrological modelling: @@ -87,18 +93,18 @@ case study of Dinder and Rahad tributaries of the Blue Nile (Ethiopia–Sudan), Syst. Sci., 21, 5217–5242. . Imhoff, R.O., Buitink, J., van Verseveld, W.J., Weerts, A.H., 2024. A fast high resolution -distributed hydrological model for forecasting, climate scenarios and digital twin -applications using wflow_sbm. Environmental Modelling & Software, 179, 106099. +distributed hydrological model for forecasting, climate scenarios and digital twin applications +using wflow_sbm. Environmental Modelling & Software, 179, 106099. -Imhoff, R.O, van Verseveld, W.J., van Osnabrugge, B., Weerts, A.H., 2020. Scaling -Point-Scale (Pedo)transfer Functions to Seamless Large-Domain Parameter Estimates for -High-Resolution Distributed Hydrologic Modeling: An Example for the Rhine River. Water -Resources Research, 56, e2019WR026807. . +Imhoff, R.O, van Verseveld, W.J., van Osnabrugge, B., Weerts, A.H., 2020. Scaling Point-Scale +(Pedo)transfer Functions to Seamless Large-Domain Parameter Estimates for High-Resolution +Distributed Hydrologic Modeling: An Example for the Rhine River. Water Resources Research, 56, +e2019WR026807. . -Imhoff, R.O., van Verseveld, W., van Osnabrugge, B., Weerts, A.H., 2020. Ruimtelijk -schaalbare hydrologische modelparameters uit open-source omgevingsdata: een voorbeeld voor -de Rijn. Stromingen: vakblad voor hydrologen, 26(3), 19-36 . +Imhoff, R.O., van Verseveld, W., van Osnabrugge, B., Weerts, A.H., 2020. Ruimtelijk schaalbare +hydrologische modelparameters uit open-source omgevingsdata: een voorbeeld voor de Rijn. +Stromingen: vakblad voor hydrologen, 26(3), 19-36 . Jeuken, A., Bouaziz, L., Corzo, G., Alfonso, L., 2016. Analyzing Needs for Climate Change Adaptation in the Magdalena River Basin in Colombia, in: Filho, W.L., Musa, H., Cavan, G., @@ -108,13 +114,13 @@ Change Management. Springer International Publishing, pp. 329–344 López López, P., Wanders, N., Schellekens, J., Renzullo, L.J., Sutanudjaja, E.H., Bierkens, M.F.P., 2016. Improved large-scale hydrological modelling through the assimilation of -streamflow and downscaled satellite soil moisture observations. Hydrol. Earth Syst. Sci., -20, 3059–3076. . +streamflow and downscaled satellite soil moisture observations. Hydrol. Earth Syst. Sci., 20, +3059–3076. . -Pranoto, B., Soekarno, H., Hartulistiyoso, E., Nur Aidi, M., Sutrisno, D., Pohan, D., -Radhika, Sutejo, B., Heru Kuncoro, A., Nahib, I., 2024. Integrating Flood Early Warning -System (FEWS) for Optimizing Small Hydropower Sites: A West Java Case Study. EVERGREEN Joint -Journal of Novel Carbon Resource Sciences & Green Asia Strategy, 11, 3, 2691-2699. +Pranoto, B., Soekarno, H., Hartulistiyoso, E., Nur Aidi, M., Sutrisno, D., Pohan, D., Radhika, +Sutejo, B., Heru Kuncoro, A., Nahib, I., 2024. Integrating Flood Early Warning System (FEWS) +for Optimizing Small Hydropower Sites: A West Java Case Study. EVERGREEN Joint Journal of Novel +Carbon Resource Sciences & Green Asia Strategy, 11, 3, 2691-2699. Rakovec, O., Weerts, A.H., Sumihar, J., Uijlenhoet, R., 2015. Operational aspects of @@ -122,49 +128,55 @@ asynchronous filtering for flood forecasting. Hydrol. Earth Syst. Sci., 19, 2911 . Ratri, D.N., A.H. Weerts, R. Muharsyah, K. Whan, A. Klein Tank, E. Aldrian, M. H. Hariadi, -Calibration of ECMWF SEAS5 based streamflow forecast in Seasonal hydrological forecasting -for Citarum river basin, West Java, Indonesia, Journal of Hydrology: Regional -Studies,45,101305, . +Calibration of ECMWF SEAS5 based streamflow forecast in Seasonal hydrological forecasting for +Citarum river basin, West Java, Indonesia, Journal of Hydrology: Regional Studies,45,101305, +. Rusli, S.R., A.H. Weerts, A. Taufiq, V. Bense, 2021. Estimating water balance components and -their uncertainty bounds in highly groundwater-dependent and data-scarce area: An example -for the Upper Citarum basin, J. Hydrol. Regional Studies, +their uncertainty bounds in highly groundwater-dependent and data-scarce area: An example for +the Upper Citarum basin, J. Hydrol. Regional Studies, . Rusli, S.R., V.F. Bense, A. Taufiq, A.H. Weerts,2023. Quantifying basin-scale changes in -groundwater storage using GRACE and one-way coupled hydrological and groundwater flow model -in the data-scarce Bandung groundwater Basin, Indonesia, Groundwater for Sustainable +groundwater storage using GRACE and one-way coupled hydrological and groundwater flow model in +the data-scarce Bandung groundwater Basin, Indonesia, Groundwater for Sustainable Development,22, 100953, . -Rusli, S.R., A.H. Weerts, S.M.T. Mustafa, D.E. Irawan, A. Taufiq, V.F. Bense, 2023. -Quantifying aquifer interaction using numerical groundwater flow model evaluated by -environmental water tracer data: Application to the data-scarce area of the Bandung -groundwater basin, West Java, Indonesia, Journal of Hydrology: Regional Studies, 50, +Rusli, S.R., A.H. Weerts, S.M.T. Mustafa, D.E. Irawan, A. Taufiq, V.F. Bense, 2023. Quantifying +aquifer interaction using numerical groundwater flow model evaluated by environmental water +tracer data: Application to the data-scarce area of the Bandung groundwater basin, West Java, +Indonesia, Journal of Hydrology: Regional Studies, 50, . -Schaller, N., Sillmann, J., Müller, M., Haarsma, R., Hazeleger, W., Hegdahl, T.J., Kelder, -T., van den Oord, G., Weerts, A., Whan, K., 2020. The role of spatial and temporal model -resolution in a flood event storyline approach in western Norway. Weather and Climate -Extremes, doi: . +Schaller, N., Sillmann, J., Müller, M., Haarsma, R., Hazeleger, W., Hegdahl, T.J., Kelder, T., +van den Oord, G., Weerts, A., Whan, K., 2020. The role of spatial and temporal model resolution +in a flood event storyline approach in western Norway. Weather and Climate Extremes, doi: +. Seizarwati, W. and M. Syahidah, 2021. Rainfall-Runoff Simulation for Water Availability -Estimation in Small Island Using Distributed Hydrological Model wflow. IOP Conf. Ser.: -Earth Environ. Sci., 930,012050, doi:10.1088/1755-1315/930/1/012050. +Estimation in Small Island Using Distributed Hydrological Model wflow. IOP Conf. Ser.: Earth +Environ. Sci., 930,012050, doi:10.1088/1755-1315/930/1/012050. -Sperna Weiland, F.C., R.D. Visser, P. Greve, B. Bisselink, L. Brunner and A.H. Weerts, -2021\. Estimating Regionalized Hydrological Impacts of Climate Change Over Europe by -Performance-Based Weighting of CORDEX Projections, Frontiers of Water, +Sperna Weiland, F.C., R.D. Visser, P. Greve, B. Bisselink, L. Brunner and A.H. Weerts, 2021\. +Estimating Regionalized Hydrological Impacts of Climate Change Over Europe by Performance-Based +Weighting of CORDEX Projections, Frontiers of Water, . Tangdamrongsub, N., Steele-Dunne, S.C., Gunter, B.C., Ditmar, P.G., Weerts, A.H., 2015. Data -assimilation of GRACE terrestrial water storage estimates into a regional hydrological model -of the Rhine River basin. Hydrol. Earth Syst. Sci. 19, 2079–2100. +assimilation of GRACE terrestrial water storage estimates into a regional hydrological model of +the Rhine River basin. Hydrol. Earth Syst. Sci. 19, 2079–2100. . -van der Laan, E., P. Hazenberg, A.H. Weerts, 2024. Simulation of long-term storage dynamics -of headwater reservoirs across the globe using public cloud computing infrastructure. -Science of The Total Environment, 172678, . +van der Laan, E., P. Hazenberg, A.H. Weerts, 2024. Simulation of long-term storage dynamics of +headwater reservoirs across the globe using public cloud computing infrastructure. Science of +The Total Environment, 172678, . + +Pranoto, B., Soekarno, H., Hartulistiyoso, E., Nur Aidi, M., Sutrisno, D., Pohan, D., +Radhika, Sutejo, B., Heru Kuncoro, A., Nahib, I., 2024. Integrating Flood Early Warning +System (FEWS) for Optimizing Small Hydropower Sites: A West Java Case Study. EVERGREEN Joint +Journal of Novel Carbon Resource Sciences & Green Asia Strategy, 11, 3, 2691-2699. + van Osnabrugge, B., Weerts, A.H., Uijlenhoet, R., 2017. genRE: A method to extend gridded precipitation climatology data sets in near real-time for hydrological forecasting purposes. @@ -176,35 +188,34 @@ forecasts to 10-day streamflow forecast skill for the Rhine River, Hydrol. Earth van der Vat, M., Boderie, P., Bons, K.A., Hegnauer, M., Hendriksen, G., van Oorschot, M., Ottow, B., Roelofsen, F., Sankhua, R.N., Sinha, S.K., Warren, A., Young, W., 2019. -Participatory Modelling of Surface and Groundwater to Support Strategic Planning in the -Ganga Basin in India. Water, 11, 2443. . +Participatory Modelling of Surface and Groundwater to Support Strategic Planning in the Ganga +Basin in India. Water, 11, 2443. . -Wannasin, C., Brauer, C. C., Uijlenhoet, R., van Verseveld, W. J., Weerts, A. H., 2021. -Daily flow simulation in Thailand Part I: Testing a distributed hydrological model with -seamless parameter maps based on global data. Journal of Hydrology: Regional Studies, 34, -1-19. . +Wannasin, C., Brauer, C. C., Uijlenhoet, R., van Verseveld, W. J., Weerts, A. H., 2021. Daily +flow simulation in Thailand Part I: Testing a distributed hydrological model with seamless +parameter maps based on global data. Journal of Hydrology: Regional Studies, 34, 1-19. +. -Wannasin, C., Brauer, C. C., Uijlenhoet, R., van Verseveld, W. J., Weerts, A. H., 2021. -Daily flow simulation in Thailand Part II: Unraveling effects of reservoir operation. -Journal of Hydrology: RegionalStudies, 34, 1-17. -. +Wannasin, C., Brauer, C. C., Uijlenhoet, R., van Verseveld, W. J., Weerts, A. H., 2021. Daily +flow simulation in Thailand Part II: Unraveling effects of reservoir operation. Journal of +Hydrology: RegionalStudies, 34, 1-17. . Wang, X., Zhang, J., Babovic, V., 2016. Improving real-time forecasting of water quality -indicators with combination of process-based models and data assimilation technique. -Ecological Indicators 66, 428–439. . +indicators with combination of process-based models and data assimilation technique. Ecological +Indicators 66, 428–439. . ### PhD, MSc, BSc Theses & Internship reports -Abdelnour, A., 2022. Bias Correction of Climate Simulations to Assess Climate Change Impacts -on Low Flows in the Rhine River, MSc thesis, Delft Universitry of technology, +Abdelnour, A., 2022. Bias Correction of Climate Simulations to Assess Climate Change Impacts on +Low Flows in the Rhine River, MSc thesis, Delft Universitry of technology, . -Ali, M.A., 2023. Machine learning for predicting spatially variable lateral hydraulic conductivity: -a step towards efficient hydrological model calibration and global applicability, Intersnhip -report, Deltares. +Ali, M.A., 2023. Machine learning for predicting spatially variable lateral hydraulic +conductivity: a step towards efficient hydrological model calibration and global applicability, +Intersnhip report, Deltares. -Arnal, L., 2014. An intercomparison of flood forecasting models for the Meuse River basin, -MSc Thesis, Vrije Universiteit, Amsterdam, . +Arnal, L., 2014. An intercomparison of flood forecasting models for the Meuse River basin, MSc +Thesis, Vrije Universiteit, Amsterdam, . Alkemade, G., 2019. Routing and calibration of distributed hydrological models, MSc Thesis, Vrije Universiteit, Amsterdam, Faculty of Science, Hydrology. @@ -212,29 +223,28 @@ Vrije Universiteit, Amsterdam, Faculty of Science, Hydrology. Azadeh Karami Fard, 2015. Modeling runoff of an Ethiopian catchment with WFLOW, MSc. Thesis, Vrije Universiteit, Amsterdam. -Benschop, J., 2023. The application of hybrid lateral routing in hydrological simulations -of the Rhine catchment, MSc Thesis, Hydrology and Environmental Hydraulics Group, Wageningen +Benschop, J., 2023. The application of hybrid lateral routing in hydrological simulations of +the Rhine catchment, MSc Thesis, Hydrology and Environmental Hydraulics Group, Wageningen University. Beusen, B., 2021. The effect of rooting depth on discharge and evapotranspiration in (semi-)arid areas, MSc Thesis, Hydrology and Quantitative Water Management Group, Wageningen University. -Beusen, B., 2021. Plastic transport and the effect of climate change in the Rhine, -Internship report, Deltares. +Beusen, B., 2021. Plastic transport and the effect of climate change in the Rhine, Internship +report, Deltares. -Bouaziz, L. J. E., 2021. Internal processes in hydrological models: A glance at the Meuse -basin from space. Delft University of Technology, Delft, the Netherlands, Doctoral -dissertation, . +Bouaziz, L. J. E., 2021. Internal processes in hydrological models: A glance at the Meuse basin +from space. Delft University of Technology, Delft, the Netherlands, Doctoral dissertation, +. Hartgring, S., 2023. On Forecasting the Rur River: Using hindcasts and forecasts of the 2021 flood event to improve understanding of flood forecasting in the Rur catchment. Delft University of Technology, Delft, the Netherlands, MSc thesis, . -Jaime, D.E.V, 2021. Ensemble hydrological forecasts to derive extreme return -periods: Case Study of the Overijsselse Vecht River using the wflow_sbm model, MSc thesis, -Unesco IHE, Delft. +Jaime, D.E.V, 2021. Ensemble hydrological forecasts to derive extreme return periods: Case +Study of the Overijsselse Vecht River using the wflow_sbm model, MSc thesis, Unesco IHE, Delft. López López, P., 2018. Application of Global Hydrological Datasets for River Basin Modelling Utrecht University, Utrecht, the Netherlands, pp. 1-214, Doctoral dissertation, @@ -244,15 +254,15 @@ Maat, W.H., 2015. Simulating discharges and forecasting floods using a conceptua rainfall-runoff model for the Bolivian Mamoré basin, MSc Thesis, University of Twente, Enschede. . -van Osnabrugge, B., 2020. Interpolate, simulate, assimilate: operational aspects of -improving hydrological forecasts in the Rhine basin. Wageningen University, Doctoral -dissertation, . +van Osnabrugge, B., 2020. Interpolate, simulate, assimilate: operational aspects of improving +hydrological forecasts in the Rhine basin. Wageningen University, Doctoral dissertation, +. -Rohrmueller, I., 2019. BENCHMARKING THE NEW WFLOW DISTRIBUTED HYDROLOGICAL MODEL, MSc -Thesis, School of Engineering - Newcastle University. +Rohrmueller, I., 2019. BENCHMARKING THE NEW WFLOW DISTRIBUTED HYDROLOGICAL MODEL, MSc Thesis, +School of Engineering - Newcastle University. -Rusli, S.R., 2024. Deepening the quantitative understanding of groundwater systems in -data-scarce areas: application in the Bandung Groundwater Basin, Indonesia. Wageningen +Rusli, S.R., 2024. Deepening the quantitative understanding of groundwater systems in +data-scarce areas: application in the Bandung Groundwater Basin, Indonesia. Wageningen University, Doctoral dissertation, . Tretjakova, D., 2015. Investigating the effect of using fully-distributed model and data @@ -260,12 +270,11 @@ assimilation on the performance of hydrological forecasting in the Karasu catchm MSc thesis, Wageningen University. van der Gaast, R.H., 2024. Evaluating the transferability of data-driven pedo-transfer -functions for the wflow\_sbm parameter KsatHorFrac in central and Western Europe. -Universiteit Twente, Enschede, The Netherlands, -. +functions for the wflow\_sbm parameter KsatHorFrac in central and Western Europe. Universiteit +Twente, Enschede, The Netherlands, . -Verbrugge, M., 2019. Reservoir Operation Optimization, a case study in the Chao Phraya -Basin, BSc thesis, Hydrology and Quantitative Water Management Group, Wageningen University. +Verbrugge, M., 2019. Reservoir Operation Optimization, a case study in the Chao Phraya Basin, +BSc thesis, Hydrology and Quantitative Water Management Group, Wageningen University. Verbrugge, M., 2023. Bias-correcting meteorological forcing to improve seasonal discharge forecasting of the Rhine, Internship report, Deltares. @@ -277,9 +286,9 @@ Wageningen University. Visser, B., 2020. Impact of climate change on local water resources of European catchments, Intersnhip report, Deltares. -Wannasin, C., 2023. Modelling and forecasting daily streamflow with reservoir operation in -the upper Chao Phraya River basin, Thailand. -Wageningen University, Doctoral dissertation, . +Wannasin, C., 2023. Modelling and forecasting daily streamflow with reservoir operation in the +upper Chao Phraya River basin, Thailand. Wageningen University, Doctoral dissertation, +. ### Reports diff --git a/docs/src/images/case_flifs_1.png b/docs/images/case_flifs_1.png similarity index 100% rename from docs/src/images/case_flifs_1.png rename to docs/images/case_flifs_1.png diff --git a/docs/src/images/case_flifs_2.png b/docs/images/case_flifs_2.png similarity index 100% rename from docs/src/images/case_flifs_2.png rename to docs/images/case_flifs_2.png diff --git a/docs/src/images/case_mfa_1.png b/docs/images/case_mfa_1.png similarity index 100% rename from docs/src/images/case_mfa_1.png rename to docs/images/case_mfa_1.png diff --git a/docs/src/images/case_mfa_3.png b/docs/images/case_mfa_3.png similarity index 100% rename from docs/src/images/case_mfa_3.png rename to docs/images/case_mfa_3.png diff --git a/docs/src/images/case_rhine_meuse.png b/docs/images/case_rhine_meuse.png similarity index 100% rename from docs/src/images/case_rhine_meuse.png rename to docs/images/case_rhine_meuse.png diff --git a/docs/src/images/lake.png b/docs/images/lake.png similarity index 100% rename from docs/src/images/lake.png rename to docs/images/lake.png diff --git a/docs/src/images/numerical_scheme_almeida.png b/docs/images/numerical_scheme_almeida.png similarity index 100% rename from docs/src/images/numerical_scheme_almeida.png rename to docs/images/numerical_scheme_almeida.png diff --git a/docs/src/images/paddy_profile.png b/docs/images/paddy_profile.png similarity index 100% rename from docs/src/images/paddy_profile.png rename to docs/images/paddy_profile.png diff --git a/docs/src/images/river-scheme.png b/docs/images/river-scheme.png similarity index 100% rename from docs/src/images/river-scheme.png rename to docs/images/river-scheme.png diff --git a/docs/src/images/sbm_ksat_profiles.png b/docs/images/sbm_ksat_profiles.png similarity index 100% rename from docs/src/images/sbm_ksat_profiles.png rename to docs/images/sbm_ksat_profiles.png diff --git a/docs/src/images/snowfall.png b/docs/images/snowfall.png similarity index 100% rename from docs/src/images/snowfall.png rename to docs/images/snowfall.png diff --git a/docs/src/images/snowmelt.png b/docs/images/snowmelt.png similarity index 100% rename from docs/src/images/snowmelt.png rename to docs/images/snowmelt.png diff --git a/docs/src/images/soil_caprise.png b/docs/images/soil_caprise.png similarity index 100% rename from docs/src/images/soil_caprise.png rename to docs/images/soil_caprise.png diff --git a/docs/src/images/soil_evap.png b/docs/images/soil_evap.png similarity index 100% rename from docs/src/images/soil_evap.png rename to docs/images/soil_evap.png diff --git a/docs/src/images/soil_frozeninfilt.png b/docs/images/soil_frozeninfilt.png similarity index 100% rename from docs/src/images/soil_frozeninfilt.png rename to docs/images/soil_frozeninfilt.png diff --git a/docs/src/images/soil_rootwateruptake.png b/docs/images/soil_rootwateruptake.png similarity index 100% rename from docs/src/images/soil_rootwateruptake.png rename to docs/images/soil_rootwateruptake.png diff --git a/docs/src/images/soil_unsatevap.png b/docs/images/soil_unsatevap.png similarity index 100% rename from docs/src/images/soil_unsatevap.png rename to docs/images/soil_unsatevap.png diff --git a/docs/src/images/soil_wetroots.png b/docs/images/soil_wetroots.png similarity index 100% rename from docs/src/images/soil_wetroots.png rename to docs/images/soil_wetroots.png diff --git a/docs/src/images/soilloss-scheme.png b/docs/images/soilloss-scheme.png similarity index 100% rename from docs/src/images/soilloss-scheme.png rename to docs/images/soilloss-scheme.png diff --git a/docs/src/images/wflow_sbm_soil.png b/docs/images/wflow_sbm_soil.png similarity index 100% rename from docs/src/images/wflow_sbm_soil.png rename to docs/images/wflow_sbm_soil.png diff --git a/docs/src/images/wflow_sediment.png b/docs/images/wflow_sediment.png similarity index 100% rename from docs/src/images/wflow_sediment.png rename to docs/images/wflow_sediment.png diff --git a/docs/index.qmd b/docs/index.qmd new file mode 100644 index 000000000..fce6434de --- /dev/null +++ b/docs/index.qmd @@ -0,0 +1,89 @@ +--- +title: "Wflow.jl" +toc: false +include-in-header: + - text: | + +format: + html +--- + +[![Build Status](https://github.com/Deltares/Wflow.jl/workflows/CI/badge.svg)](https://github.com/Deltares/Wflow.jl/actions) +[![Coverage](https://codecov.io/gh/Deltares/Wflow.jl/branch/master/graph/badge.svg)](https://codecov.io/gh/Deltares/Wflow.jl) +[![Dev](https://img.shields.io/badge/docs-dev-blue.svg)](https://deltares.github.io/Wflow.jl/dev) +[![Stable](https://img.shields.io/badge/docs-stable-blue.svg)](https://deltares.github.io/Wflow.jl/stable) +[![DOI](https://zenodo.org/badge/246787232.svg)](https://zenodo.org/badge/latestdoi/246787232) +[![ColPrac: Contributor's Guide on Collaborative Practices for Community Packages](https://img.shields.io/badge/ColPrac-Contributor's%20Guide-blueviolet)](https://github.com/SciML/ColPrac) + +# About wflow + +Wflow is Deltares' solution for modelling hydrological processes, allowing users to account for +precipitation, interception, snow accumulation and melt, evapotranspiration, soil water, +surface water, groundwater recharge, and water demand and allocation in a fully distributed +environment. Successfully applied worldwide for analyzing flood hazards, drought, climate +change impacts and land use changes, wflow is growing to be a leader in hydrology solutions. +Wflow is conceived as a framework, within which multiple distributed model concepts are +available, which maximizes the use of open earth observation data, making it the hydrological +model of choice for data scarce environments. Based on gridded topography, soil, land use and +climate data, wflow calculates all hydrological fluxes at any given grid cell in the model at a +given time step. + +Wflow was born out of the creation of Deltares in 2008, when a strategic review identified the +need for a distributed hydrological model to allow the simulation of flows at the catchment +scale. With the intention being to encourage greater scientific collaboration. For this reason: + + * Wflow is free and open source software. + * Wflow is easily coupled with other models and software applications. + * Contribution to the wflow code development is encouraged. + +From 2021 the [wflow code](https://github.com/Deltares/Wflow.jl) is distributed under the [MIT +License](https://github.com/Deltares/Wflow.jl/blob/master/LICENSE). Wflow is also available as +a [compiled executable](https://download.deltares.nl/en/download/wflow/) under the Deltares +terms and conditions. The wflow computational engine is built in the +[Julia](https://julialang.org/) language, a high-performance computing language. Wflow does not +include a graphical user interface and is designed for maximum user flexibility. Prior to 2021, +wflow was developed in Python on top of the PCRaster Python extension. The Python version is +[still available](https://github.com/openstreams/wflow), but not actively developed. + + +## Quick overview + +::: column-page-inset-right +{{< include /_static/listing_code_medium.html >}} +```{=html} + + + +``` +::: diff --git a/docs/make.jl b/docs/make.jl deleted file mode 100644 index 22dd23a5d..000000000 --- a/docs/make.jl +++ /dev/null @@ -1,58 +0,0 @@ -using Wflow -using Documenter - -pages = [ - "Introduction" => - ["index.md", "intro/use_cases.md", "intro/publications.md", "changelog.md"], - "User guide" => [ - "user_guide/intro.md", - "user_guide/install.md", - "How to use wflow" => [ - "user_guide/step1_requirements.md", - "user_guide/step2_settings_file.md", - "user_guide/step3_input_data.md", - "user_guide/step4_running.md", - "user_guide/step5_output.md", - "user_guide/additional_options.md", - "user_guide/sample_data.md", - ], - "user_guide/model-setup.md", - ], - "Model documentation" => [ - "model_docs/intro.md", - "model_docs/model_configurations.md", - "Vertical concepts" => [ - "model_docs/vertical/sbm.md", - "model_docs/vertical/sediment.md", - "model_docs/shared_concepts.md", - ], - "Lateral concepts" => [ - "model_docs/lateral/gwf.md", - "model_docs/lateral/kinwave.md", - "model_docs/lateral/local-inertial.md", - "model_docs/lateral/waterbodies.md", - "model_docs/lateral/sediment_flux.md", - ], - "Model parameters" => [ - "model_docs/params_vertical.md", - "model_docs/params_lateral.md", - "model_docs/structures.md", - ], - ], -] - -makedocs(; - modules = [Wflow], - authors = "Deltares and contributors", - repo = "https://github.com/Deltares/Wflow.jl/blob/{commit}{path}#L{line}", - sitename = "Wflow.jl", - format = Documenter.HTML(; - prettyurls = get(ENV, "CI", "false") == "true", - canonical = "https://deltares.github.io/Wflow.jl", - assets = String[], - collapselevel = 2, - ), - pages = pages, -) - -deploydocs(; repo = "github.com/Deltares/Wflow.jl", push_preview = true) diff --git a/docs/model_docs/index.qmd b/docs/model_docs/index.qmd new file mode 100644 index 000000000..969f89cb1 --- /dev/null +++ b/docs/model_docs/index.qmd @@ -0,0 +1,18 @@ +--- +title: About +--- + +As opposed to the user guide, which describes the steps needed to build and apply a model in +the software, this section explains the different model concepts that are available within the +modelling framework of wflow. Descriptions are given regarding the model concepts with links to +the original scientific papers which explain the concepts in more detail. The model parameters +which influence the processes are also shown, using inline code blocks. An overview of all +model parameters is also provided for easy reference, including their short names, long +descriptions and their units (see [parameters vertical concepts](./parameters_vertical.qmd) and +[parameters lateral concepts](./parameters_lateral.qmd)). + +## Division between vertical and lateral + +In the documentation we talk of `vertical` and `lateral` concepts. These are components in the +model that describe the vertical movement of water in each model grid cell and the lateral +movement of water across grid cells. diff --git a/docs/model_docs/lateral/gwf.qmd b/docs/model_docs/lateral/gwf.qmd new file mode 100644 index 000000000..d24c8a5bd --- /dev/null +++ b/docs/model_docs/lateral/gwf.qmd @@ -0,0 +1,283 @@ +--- +title: Groundwater flow +--- + +Single layer groundwater flow requires the four following components, and each is described in +more detail below: + ++ aquifer ++ connectivity ++ constanthead ++ boundaries + +## Aquifer types +Groundwater flow can occur either in a confined or unconfined aquifer. Confined aquifers are +overlain by a poorly permeable confining layer (e.g. clay). No air can get in to fill the pore +space so that the aquifer always remains fully saturated. For a confined aquifer, water will +always flow along the complete height $\SIb{H}{m}$ over the aquifer and transmissivity +$\SIb{kH}{m^2 d^{-1}}$ is a constant ($\SIb{k}{m d^{-1}}$ is the horizontal hydraulic +conductivity). Specific storage is the amount of water an aquifer releases per unit change in +hydraulic head, per unit volume of aquifer, as the aquifer and the groundwater itself is +compressed. Its value is much smaller than specific yield, between $10^{-5}$ (stiff) and +$10^{-2}$ (weak). + +The upper boundary of an unconfined aquifer is the water table (the phreatic surface). Specific +yield (or drainable porosity) represents the volumetric fraction the aquifer will yield when +all water drains and the pore volume is filled by air instead. Specific yield will vary roughly +between $0.05$ (clay) and $0.45$ (peat) (Johnson, 1967). + +Groundwater flow is solved forward in time and central in space. The vertically averaged +governing equation for an inhomogeneous and isotropic aquifer in one dimension can be written +as: + +$$ + S \frac{\partial \phi}{\partial t} = \frac{\partial}{\partial x} \left(kH \frac{\phi}{\delta x}\right) + Q +$$ + +where $\SIb{S}{m m^{-1}}$ is storativity (or specific yield), $\SIb{\phi}{m}$ is hydraulic +head, $t$ is time, $\SIb{k}{m t^{-1}}$ is horizontal hydraulic conductivity, $\SIb{H}{m}$ is +the (saturated) aquifer height: groundwater level - aquifer bottom elevation and $\SIb{Q}{m +t^{-1}}$ represents fluxes from boundary conditions (e.g. recharge or abstraction), see also +[Aquifer boundary conditions](#aquifer-boundary-conditions). + +The simplest finite difference formulation is forward in time, central in space, and can be +written as: + +$$ + S_i \frac{\phi_{i}^{t+1} - \phi_i^{t}}{\Delta t} = -C_{i-1} (\phi_{i-1} - \phi_i) - C_i (\phi_{i+1} - \phi_i) + Q_i +$$ + +where $i$ is the cell index, $t$ is time, $\Delta t$ is the step size, $C_{i-1}$ is the the +intercell conductance between cell $i-1$ and $i$ and $C_i$ is the intercell conductance between +cell $i$ and $i+1$. The connection data between cells is stored as part of the `Connectivity` +struct, see also [Connectivity](#connectivity) for more information. + +Conductance $C$ is defined as: + +$$ +C = \frac{kH w}{l} +$$ + +where $\SIb{w}{m}$ is the width of the cell to cell connection, and $\SIb{l}{m}$ is the length +of the cell to cell connection. $k$ and $H$ may both vary in space; intercell conductance is +therefore an average using the properties of two cells. For the calculation of the intercell +conductance $C$ the harmonic mean is used (see also Goode and Appel, 1992), here between cell +index $i$ and cell index $i+1$, in the $x$ direction: + +$$ + C_i = w \frac{k_iH_i\cdot k_{i+1}H_{i+1}}{k_iH_i \cdot l_{i+1} + k_{i+1}H_{i+1} \cdot l_i} +$$ + +where $\SIb{H}{m}$ is the aquifer top - aquifer bottom, and $k$, $l_i$ is the length in cell +$i$ ($0.5 \Delta x_i$), $l_{i+1}$ is the length in cell $i+1$ ($0.5 \Delta x_{i+1}$) and $w$ +as previously defined. For an unconfined aquifer the intercell conductance is scaled by using +the "upstream saturated fraction" as the MODFLOW documentation calls it. In this approach, the +saturated thickness of a cell-to-cell is approximated using the cell with the highest head. +This results in a consistent overestimation of the saturated thickness, but it avoids +complexities related with cell drying and rewetting, such as having to define a "wetting +threshold" or a "wetting factor". See also the documentation for MODFLOW-NWT (Niswonger et al., +1) or MODFLOW6 (Langevin et al., 2017) for more background information. For more background +on drying and rewetting, see for example McDonald et al. (1991). + +For the finite difference formulation, there is only one unknown, $\phi_i^{t+1}$. Reshuffling +terms: + +$$ +\phi_i^{t+1} = \phi_i^t + (C_{i-1} (\phi_i - \phi_{i-1}) + C_i (\phi_{i+1} - \phi_i) + Q_i) \frac{Δt}{S_i} +$$ + +This can be generalized to two dimensions, for both regular and irregular cell connectivity. +Finally, a stable time step size can be computed given the forward-in-time, central in space +scheme, based on the following criterion from Chu and Willis (1984): + +$$ + \frac{\Delta t k H}{\Delta x \Delta y S} \le \frac{1}{4} +$$ + +where $\SIb{\Delta t}{d}$ is the stable time step size, $\SIb{\Delta x}{m}$ is the cell length +in the $x$ direction and $\SIb{\Delta y}{m}$ is the cell length in the $y$ direction, +$\SIb{k}{m^2 d^{-1}}$ is the horizontal hydraulic conductivity and $\SIb{H}{m}$ is the +saturated thickness of the aquifer. For each cell $\frac{\Delta x \Delta y S}{k H}$ is +calculated, the minimum of these values is determined, and multiplied by $\frac{1}{4}$, to get +the stable time step size. + +For more details about the finite difference formulation and the stable time step size +criterion we refer to the paper of Chu and Willis (1984). + +Boundary conditions can be classified into three categories: + ++ specified head (Dirichlet) ++ specified flux (Neumann) ++ head-dependent flux (Robin) + +Neumann and Robin conditions are implemented by adding to or subtracting from a net (lumped) +cell flux. Dirichlet conditions are special cased, since they cannot (easily) be implemented +via the flux, but the head is set directly instead. + +## Connectivity +The connectivity between cells is defined as follows. + +```@docs +Wflow.Connectivity +``` + + +## Constant head +Dirichlet boundary conditions can be specified through the field `constanthead` (type +`ConstantHead`) of the `GroundwaterFlow` struct. + +```julia +@get_units struct ConstantHead{T} + head::Vector{T} | "m" + index::Vector{Int} | "-" +end +``` + +For the model `SBM + Groundwater flow` this boundary condition is optional, and if used should +be specified in the TOML file as follows (see also +[sbm\_gwf\_config.toml](https://github.com/Deltares/Wflow.jl/blob/master/test/sbm_gwf_config.toml)): + +```toml +[model] +constanthead = true +``` + +## Aquifer boundary conditions + +### River +The flux between river and aquifer is calculated using Darcy's law following the approach in +MODFLOW: + +$$ + \subtext{Q}{riv} = + \begin{align*} + \begin{cases} + C_i \min \left\{\subtext{h}{riv} - \subtext{B}{riv}, \subtext{h}{riv} - \phi\right\} &\text{ if }\quad \subtext{h}{riv} > \phi \\ + C_e (\subtext{h}{riv} - \phi) &\text{ if }\quad \subtext{h}{riv} \le \phi + \end{cases} + \end{align*} +$$ + +where $\SIb{\subtext{Q}{riv}}{L^3 T^{-1}}$ is the exchange flux from river to aquifer, +$\SIb{C_i}{L^2 T^{-1}}$ is the river bed infiltration conductance, $\SIb{C_e}{L^2 T^{-1}}$ is +the river bed exfiltration conductance, $\SIb{\subtext{B}{riv}}{L}$ the bottom of the river +bed, $\SIb{\subtext{h}{riv}}{L}$ is the river stage and $\SIb{\phi}{L}$ is the hydraulic head +in the river cell. + +The Table in the Groundwater flow [river boundary condition](../parameters_lateral.qmd#river) +section of the Model parameters provides the parameters of the struct `River`. Parameters that +can be set directly from the static input data (netCDF) are marked in this Table. + +The exchange flux (river to aquifer) $\subtext{Q}{riv}$ is an output variable (field `flux` of +the `River` struct), and is used to update the total flux in a river cell. For the model `SBM + +Groundwater flow`, the water level $\SIb{h}{m}$ of the river kinematic wave in combination with +the river `bottom` is used to update the `stage` field of the `River` struct each time step. + +### Drainage +The flux from drains to the aquifer is calculated as follows: + +$$ +\subtext{Q}{drain} = \subtext{C}{drain} \min(0, \subtext{h}{drain} - \phi) +$$ + +where $\SIb{\subtext{Q}{drain}}{L^3 T^{-1}}$ is the exchange flux from drains to aquifer, +$\SIb{\subtext{C}{drain}}{L^2 T^{-1}}$ is the drain conductance, $\SIb{\subtext{h}{drain}}{L}$ +is the drain elevation and $\SIb{\phi}{L}$ is the hydraulic head in the cell with drainage. + +The table in the Groundwater flow [drainage boundary +condition](../parameters_lateral.qmd#drainage) section of the Model parameters provides the +parameters of the struct `Drainage`. Parameters that can be set directly from the static input +data (netCDF) are marked in this Table. + +The exchange flux (drains to aquifer) $\subtext{Q}{drain}$ is an output variable (field `flux` +of struct `Drainage`), and is used to update the total flux in a cell with drains. For the +model `SBM + Groundwater flow` this boundary condition is optional, and if used should be +specified in the TOML file as follows (see also +[sbm\_gwf\_config.toml](https://github.com/Deltares/Wflow.jl/blob/master/test/sbm_gwf_config.toml)): + +```toml +[model] +drains = true +``` + +### Recharge +The recharge flux $Q_r$ to the aquifer is calculated as follows: + +$$ +Q_r = R \, A +$$ + +with $\SIb{}{L T^{-1}}$ the recharge rate and $\SIb{A}{L^2}$ the area of the aquifer cell. + +The table in the Groundwater flow [recharge boundary +condition](../parameters_lateral.qmd#recharge) section of the Model parameters section provides +the parameters of the struct `Recharge`. Parameters that can be set directly from the static +input data (netCDF) are marked in this Table. + +The recharge flux $Q_r$ is an output variable (field `flux` of struct `Recharge`), and is used +to update the total flux in a cell where recharge occurs. For the model `SBM + Groundwater +flow`, the recharge rate from the vertical SBM concept `recharge` [mm] is used to update the +`rate` field of the `Recharge` struct each time step. The `rate` field is multiplied by the +`area` field of the aquifer. + +### Head boundary +This boundary is a fixed head with time (not affected by the model stresses over time) outside +of the model domain, and is generally used to avoid an unnecessary extension of the model +domain to the location of the fixed boundary (for example a large lake). The flux from the +boundary $\SIb{Q_{hb}}{L^3 T^{-1}}$ is calculated as follows: + +$$ +Q_{hb} = C_{hb} (\phi_{hb} - \phi) +$$ + +with $\SIb{C_{hb}}{L^2 T^{-1}}$ the conductance of the head boundary, $\SIb{\phi_{hb}}{L}$ the +head of the head boundary and $\phi$ the head of the aquifer cell. + +The table in the Groundwater flow [head boundary +condition](../parameters_lateral.qmd#head-boundary) section of the Model parameters provides +the parameters of the struct `HeadBoundary`. + +The head boundary flux $Q_{hb}$ is an output variable (field `flux` of struct `HeadBoundary`), +and is used to update the total flux in a cell where this type of boundary occurs. The +parameter Head $\phi_{hb}$ can be specified as a fixed or time dependent value. + +::: {.callout-note} +This boundary is not (yet) part of the model `SBM + Groundwater flow`. +::: + +### Well boundary +A volumetric well rate $\SIb{}{L^3 T^{-1}}$ can be specified as a boundary condition. + +The Table in the [well boundary condition](../parameters_lateral.qmd#well-boundary) section of +the Model parameters provides the parameters of the struct `Well`. + +The volumetric well rate $\subtext{Q}{well}$ can be can be specified as a fixed or time +dependent value. If a cell is dry, the actual well flux `flux` is set to zero (see also the +last note on this page). + +::: {.callout-note} +This boundary is not (yet) part of the model `SBM + Groundwater flow`. +::: + +::: {.callout-note} +For an unconfined aquifer the boundary fluxes are checked, in case of a dry aquifer cell a +negative flux is not allowed. +::: + +## References ++ Chu, W. S., & Willis, R. (1984). An explicit finite difference model for unconfined aquifers. + Groundwater, 22(6), 728-734. ++ Goode, D. J., & Appel, C. A. (1992). Finite-Difference Interblock Transmissivity for + Unconfined Aquifers and for Aquifers having Smoothly Varying Transmissivity Water-resources + investigations report, 92, 4124. ++ Johnson, A. I. (1967), Specific yield: compilation of specific yields for various materials, + Water Supply Paper 1662-D, Washington, D.C.: U.S. Government Printing Office, p. 74, + doi:10.3133/wsp1662D. ++ Langevin, C.D., Hughes, J.D., Banta, E.R., Niswonger, R.G., Panday, Sorab, and Provost, A.M., + 2017, Documentation for the MODFLOW 6 Groundwater Flow Model: U.S. Geological Survey + Techniques and Methods, book 6, chap. A55, 197 p., https://doi.org/10.3133/tm6A55. ++ McDonald, M.G., Harbaugh, A.W., Orr, B.R., and Ackerman, D.J., 1991, A method of converting + no-flow cells to variable-head cells for the U.S. Geological Survey modular finite-difference + groundwater flow model: U.S. Geological Survey Open-File Report 91-536, 99 p. ++ Niswonger, R.G., Panday, Sorab, and Ibaraki, Motomu, 2011, MODFLOW-NWT, A Newton formulation + for MODFLOW-2005: U.S. Geological Survey Techniques and Methods 6-A37, 44 p. \ No newline at end of file diff --git a/docs/model_docs/lateral/kinwave.qmd b/docs/model_docs/lateral/kinwave.qmd new file mode 100644 index 000000000..b026d158a --- /dev/null +++ b/docs/model_docs/lateral/kinwave.qmd @@ -0,0 +1,201 @@ +--- +title: Kinematic wave +--- + +## Surface routing +The main flow routing scheme available in `Wflow.jl` is the kinematic wave approach for channel +and overland flow, assuming that water flow is mostly controlled by topography. The kinematic +wave equations are (Chow, 1988): + +$$ +\begin{gathered} + \dfrac{\partial Q}{\partial x} + \dfrac{\partial A}{\partial t} = q,\\ + A = \alpha Q^{\beta}. +\end{gathered} +$$ + +These equations can then be combined as a function of streamflow only: + +$$ + \dfrac{\partial Q}{\partial x} + \alpha \beta Q^{\beta - 1} \dfrac{\partial Q}{\partial t} = q. +$$ + +Here $\SIb{Q}{m^3 s^{-1}}$ is the surface runoff in the kinematic wave, $\SIb{x}{m}$ is the +length of the runoff pathway, $\SIb{A}{m}$ is the cross-section area of the runoff pathway, +$\SIb{t}{s}$ is the integration timestep and $\alpha$ and $\beta$ are unitless coefficients. + +These equations are solved with a nonlinear scheme using Newton's method and can also be +iterated depending on the model space and time resolution. By default, the iterations are +performed until a stable solution is reached ($\epsilon < 10^{-12}$). For larger models, the +number of iterations can also be fixed for to a specific sub-timestep (in seconds) for both +overland and channel flows to improve simulation time. To enable (fixed or not) iterations of +the kinematic wave the following lines can be inserted in the TOML file of the model: + +```toml +[model] +# Enable iterations of the kinematic wave +kin_wave_iteration = true +# Fixed sub-timestep for iterations of channel flow (river cells) +kw_river_tstep = 900 +# Fixed sub-timestep for iterations of overland flow (land cells) +kw_land_tstep = 3600 +``` + +The $\alpha$ parameter of the kinematic wave is fixed. To estimate the wetted perimeter for the +calculation of the $\alpha$ parameter a bankfull river depth map (default value is +$\SI{1.0}{m}$) for the river can be provided as follows: + +```toml +[input.lateral.river] +bankfull_depth = "wflow_riverdepth" +``` + +The wetted perimeter of the river is based on half bankfull river depth. For the land part the +wetted perimeter is based on the flow width. + +Simplified [reservoir and lake](./waterbodies.qmd) models can be included as part of the river +kinematic wave network. + +## Inflow +External water (supply/abstraction) `inflow` $\SIb{}{m^3 s^{-1}}$ can be added to the +kinematic wave for surface water routing, as a cyclic parameter or as part of forcing (see also +[Input section](../../user_guide/required_files.qmd)). + +## Abstractions +Abstractions from the river through the variable `abstraction` $\SIb{}{m^3 s^{-1}}$ are +possible when water demand and allocation is computed. The variable `abstraction` is set from +the water demand and allocation module each time step. The `abstraction` is divided by the +length of the runoff pathway and subtracted from the lateral inflow of the kinematic wave +routing scheme for river flow. + +## Subsurface flow routing +In the SBM model the kinematic wave approach is used to route subsurface flow laterally. +Different vertical hydraulic conductivity depth profiles are possible as part of the vertical +[SBM](../vertical/sbm.qmd#soil-processes) concept, and these profiles (after unit conversion) +are also used to compute lateral subsurface flow. The following profiles (see +[SBM](../vertical/sbm.qmd#soil-processes) for a detailed description) are available: +- `exponential` (default) +- `exponential_constant` +- `layered` +- `layered_exponential` + +For the profiles `exponential` and `exponential_constant`, the saturated store ``S`` is drained +laterally by saturated downslope subsurface flow for a slope with width ``\SIb{w}{m}`` +according to: + +$$ + Q = K_0\tan(\beta)w\begin{cases} + \frac{1}{f}\left(e^{-fz_i}-e^{-f\subtext{z}{exp}}\right) + + e^{-f\subtext{z}{exp}}(z_t-\subtext{z}{exp}) & \text{if $z_i < \subtext{z}{exp}$}\\ + \\ + e^{-f\subtext{z}{exp}}(z_t - z_i) & \text{if $z_i \ge \subtext{z}{exp}$}, + \end{cases} +$$ + +where $\beta$ is element slope angle, $\SIb{Q}{m^3 d^{-1}}$ is subsurface flow, $\SIb{K_0}{m +d^{-1}}$ is the saturated hydraulic conductivity at the soil surface, $\SIb{z_i}{m}$ is the +water table depth, $\SIb{z_{t}}{m}$ is the total soil depth, $\SIb{f}{m^{-1}}$ is a scaling +parameter that controls the decrease of $K_0$ with depth and $\SIb{\subtext{z}{exp}}{m}$ is the +depth from soil surface for which the exponential decline of $K_0$ is valid. For the +`exponential` profile, $\subtext{z}{exp}$ is equal to $z_t$. + +Combining with the following continuity equation: +$$ + (\theta_s-\theta_r)w\frac{\partial h}{\partial t} = -\frac{\partial Q}{\partial x} + wr +$$ + +where $\SIb{h}{m}$ is the water table height, $\SIb{x}{m}$ is the distance downslope, and +$\SIb{r}{m d^{-1}}$ is the net input rate to the saturated store. Substituting for $h +(\frac{\partial Q}{\partial h})$, gives: + +$$ + \frac{\partial Q}{\partial t} = -c\frac{\partial Q}{\partial x} + cwr +$$ + +where celerity $c$ is calculated as follows: +$$ + c = \frac{K_0 \tan(\beta)}{\theta_s-\theta_r}\begin{cases} + e^{-fz_i} + + e^{-f\subtext{z}{exp}} & \text{if $z_i < \subtext{z}{exp}$}\\ + \\ + e^{-f\subtext{z}{exp}} & \text{if $z_i \ge \subtext{z}{exp}$}. + \end{cases} +$$ + +For the `layered` and `layered_exponential` profiles the equivalent horizontal hydraulic +conductivity $\SIb{K_h}{m d^{-1}}$ is calculated for water table height $\SIb{h = z_t-z_i}{m}$ +and lateral subsurface flow is calculated as follows: + +$$ + Q = K_h h \tan(\beta) w, +$$ + +and celerity $c$ is given by: + +$$ + c = \frac{K_h \tan(\beta)}{\theta_s-\theta_r}. +$$ + +The kinematic wave equation for lateral subsurface flow is solved iteratively using Newton's +method. + +::: {.callout-note} +For the lateral subsurface flow kinematic wave the model timestep is not adjusted. For certain +model timestep and model grid size combinations this may result in loss of accuracy. +::: + +## Multi-Threading +The kinematic wave calculations for surface - and subsurface flow routing can be executed in +parallel using multiple threads. In the model section of the TOML file, a minimum stream order +can be provided to define subbasins for the river (default is 6) and land domain (default is +5). Subbasins are created at all confluences where each branch has a minimal stream order. +Based on the subbasins a directed acyclic graph is created that controls the order of execution +and which subbasins can run in parallel. + +```toml +[model] +min_streamorder_river = 5 # minimum stream order to delineate subbasins for river domain, default is 6 +min_streamorder_land = 4 # minimum stream order to delineate subbasins for land domain, default is 5 +``` + +## Subcatchment flow +Normally the the kinematic wave is continuous throughout the model. By using the `pits` entry +in the model and input sections of the TOML file all flow is at the subcatchment only (upstream +of the pit locations, defined by the netCDF variable `wflow_pits` in the example below) and no +flow is transferred from one subcatchment to another. This can be convenient when connecting +the result of the model to a water allocation model such as Ribasim. + +```toml +[input] +# these are not directly part of the model +pits = "wflow_pits" + +[model] +pits = true +``` + +## Limitations +The kinematic wave approach for channel, overland and lateral subsurface flow, assumes that the +topography controls water flow mostly. This assumption holds for steep terrain, but in less +steep terrain the hydraulic gradient is likely not equal to the surface slope (subsurface +flow), or pressure differences and inertial momentum cannot be neglected (channel and overland +flow). In addition, while the kinematic wave equations are solved with a nonlinear scheme using +Newton's method (Chow, 1988), other model equations are solved through a simple explicit +scheme. In summary the following limitations apply: + ++ Channel flow, and to a lesser degree overland flow, may be unrealistic in terrain that is not + steep, and where pressure forces and inertial momentum are important. ++ The lateral movement of subsurface flow may be very wrong in terrain that is not steep. + +## External inflows +External inflows, for example water supply or abstractions, can be added to the kinematic wave +via the `inflow` variable. For this, the user can supply a 2D map of the inflow, as a cyclic +parameter or as part of forcing (see also [Input +section](../../user_guide/required_files.qmd)). These inflows are added or abstracted from the +upstream inflow `qin` before running the kinematic wave to solve the impact on resulting `q`. +In case of a negative inflow (abstractions), a minimum of zero is applied to the upstream flow +`qin`. + +## References ++ Chow, V., Maidment, D. and Mays, L., 1988, Applied Hydrology. McGraw-Hill Book Company, + New York. diff --git a/docs/model_docs/lateral/local-inertial.qmd b/docs/model_docs/lateral/local-inertial.qmd new file mode 100644 index 000000000..00987d27e --- /dev/null +++ b/docs/model_docs/lateral/local-inertial.qmd @@ -0,0 +1,186 @@ +--- +title: Local inertial +--- + +## River and floodplain routing +The local inertial approximation of shallow water flow neglects only the convective +acceleration term in the Saint-Venant momentum conservation equation. The numerical solution of +the local inertial approximation on a staggered grid is as follows (Bates et al., 2010): + +$$ +Q_{t+\Delta t} = \frac{Q_t - g A_t \Delta t S_t}{(1+g\Delta t n^2 |Q_t| / (R_t^{4/3} A_t))} +$$ + +where $\SIb{Q_{t+\Delta t}}{m^3 s^{-1}}$ is the river flow at time step $t+\Delta t$, +$\SIb{g}{m s^{-2}}$ is acceleration due to gravity, $\SIb{A_t}{m^2}$ is the cross sectional +flow area at the previous time step, $\SIb{R_t}{m}$ is the hydraulic radius at the previous +time step, $\SIb{Q_t}{m^3 s^{-1}}$ is the river flow at the previous time step, $S_t$ is the +water surface slope at the previous time step and $\SIb{n}{m^{-\frac{1}{3}} s}$ is the +Manning's roughness coefficient. + +The momentum equation is applied to each link between two river grid cells, while the +continuity equation over $\Delta t$ is applied to each river cell: + +$$ +h^{t+\Delta t} = h^t + \Delta t \frac{\subtext{Q^{t+\Delta t}}{src} - \subtext{Q^{t+\Delta t}}{dst}}{A} +$$ + +where $\SIb{h^{t+\Delta t}}{m}$ is the water depthat time step $t+\Delta t$, $\SIb{h^t}{m}$ is +the water depth at the previous time step, $\SIb{A}{m^2}$ is the river area and +$\SIb{\subtext{Q}{src}}{m^3 s^{-1}}$ and $\SIb{\subtext{Q}{dst}}{m^3 s^{-1}}$ represent river +flow at the upstream and downstream link of the river cell, respectively. + +The model time step $\Delta t$ for the local inertial model is estimated based on the +Courant-Friedrichs-Lewy condition (Bates et al., 2010): + +$$ +\Delta t = \alpha \min_i\left(\frac{\Delta x_i}{\sqrt{gh_i}}\right) +$$ + +where $\sqrt{gh_i}$ is the wave celerity for river cell $i$ , $\SIb{\Delta x_i}{m}$ is the +river length for river cell $i$ and $\alpha$ is a coefficient (typically between $0.2$ and +$0.7$) to enhance the stability of the simulation. + +In the TOML file the following properties related to the local inertial model can be provided +for the `sbm` and `sbm_gwf` model types: + +```toml +[model] +river_routing = "local-inertial" # default is "kinematic-wave" +inertial_flow_alpha = 0.5 # alpha coefficient for model stability (default = 0.7) +froude_limit = true # default is true, limit flow to subcritical-critical according to Froude number +h_thresh = 0.1 # water depth [m] threshold for calculating flow between cells (default = 1e-03) +floodplain_1d = true # include 1D floodplain schematization (default = false) +``` + +Two optional constant boundary conditions `riverlength_bc` and `riverdepth_bc` can be provided +at a river outlet node (or multiple river outlet nodes) through the model parameter netCDF +file, as follows: + +```toml +[input.lateral.river] +riverlength_bc = "riverlength_bc" # optional river length [m], default = 1e04 +riverdepth_bc = "riverdepth_bc" # optional river depth [m], default = 0.0 +``` +These boundary conditions are copied to a ghost node (downstream of the river outlet node) in +the code. + +The optional 1D floodplain schematization is based on provided flood volumes as a function of +flood depth (per flood depth interval) for each river cell. Wflow calculates from these flood +volumes a rectangular floodplain profile for each flood depth interval. Routing is done +separately for the river channel and floodplain. + +The momentum equation is most stable for low slope environments, and to keep the simulation +stable for (partly) steep environments the `froude_limit` option is set to true by default. +This setting limits flow conditions to subcritical-critical conditions based on the Froude +number ($\le 1$), similar to Coulthard et al. (2013) in the CAESAR-LISFLOOD model and Adams et +al. (2017) in the Landlab v1.0 OverlandFlow component. The froude number $\mathrm{Fr}$ on a +link is calculated as follows: + +$$ + \mathrm{Fr} = \frac{u}{\sqrt{gh_f}} +$$ + +where $\sqrt{gh_f}$ is the wave celerity on a link and $u$ is the water velocity on a link. If +the water velocity from the local inertial model is causing the Froude number to be greater +than $1.0$ , the water velocity (and flow) is reduced in order to maintain a Froude number of +$1.0$. + +The downstream boundary condition basically simulates a zero water depth boundary condition at +a set distance, as follows. For the downstream boundary condition (ghost point) the river +width, river bed elevation and Manning's roughness coefficient are copied from the upstream +river cell. The river length $\SIb{}{m}$ of the boundary cell can be set through the TOML file +with `riverlength_bc`, and has a default value of $\SI{10}{km}$. The water depth at the +boundary cell is fixed at $\SI{0.0}{m}$. + +Simplified [reservoir and lake](./waterbodies.qmd) models can be included as part of the local +inertial model for river flow (1D) and river and overland flow combined (see next section). +Reservoir and lake models are included as a boundary point with zero water depth for both river +and overland flow. For river flow the reservoir or lake model replaces the local inertial model +at the reservoir or lake location, and $Q$ is set by the outflow from the reservoir or lake. +Overland flow at a reservoir or lake location is not allowed to or from the downstream river +grid cell. + +## Overland flow (2D) +For the simulation of 2D overland flow on a staggered grid the numerical scheme proposed by de +Almeida et al. (2012) is adopted. The explicit solution for the estimation of water discharge +between two cells in the x-direction is of the following form (following the notation of +Almeida et al. (2012)): + +$$ +\begin{split} +Q_{i-1/2}^{n+1} = \frac{\left[ \theta Q_{i-1/2}^{n} +\frac{(1-\theta)}{2}(Q_{(i-3/2)}^{n} + +Q_{(i+1/2)}^{n})\right]- g h_f \frac{\Delta t}{\Delta x} (\eta^n_i - \eta^n_{i-1}) \Delta y}{1+g\Delta t n^2 |Q_{i-1/2}^{n}|/(h_f^{7/3} \Delta y)} +\end{split} +$$ + +where subscripts $i$ and $n$ refer to space and time indices, respectively. Subscript +$i-\frac{1}{2}$ is to the link between node $i$ and $i-1$, subscript $i+\frac{1}{2}$ is the +link between node $i$ and node $i+1$, and subscript $i-\frac{3}{2}$ is the link between node +$i-1$ and node $i-2$. $\SIb{Q}{m^3 s^{-1}}$ is the water discharge, $\SIb{\eta}{m}$ is the +water surface elevation, $\SIb{h_f}{m}$ is the water depth between cells, +$\SIb{n}{m^{-\frac{1}{3}} s}$ is the Manning's roughness coefficient, $\SIb{g}{m s^{-2}}$ is +acceleration due to gravity, $\SIb{\Delta t}{s}$ is the adaptive model time step, $\SIb{\Delta +x}{m}$ is the distance between two cells and $\SIb{\Delta y}{m}$ is the flow width. Below the +staggered grid and variables of the numerical solution in the x-direction, based on Almeida et +al. (2012): + +![](../../images/numerical_scheme_almeida.png) + +The overland flow local inertial approach is used in combination with the local inertial river +routing. This is a similar to the modelling approach of Neal et al. (2012), where the hydraulic +model LISFLOOD-FP was extended with a subgrid channel model. For the subgrid channel, Neal et +al. (2012) make use of a D4 (four direction) scheme, while here a D8 (eight direction) scheme +is used, in combination with the D4 scheme for 2D overland flow. + +In the TOML file the following properties related to the local inertial model with 1D river +routing and 2D overland flow can be provided for the `sbm` model type: + +```toml +[model] +land_routing = "local-inertial" # default is kinematic-wave +river_routing = "local-inertial" # default is kinematic-wave +inertial_flow_alpha = 0.5 # alpha coefficient for model stability (default = 0.7) +froude_limit = true # default is true, limit flow to subcritical-critical according to Froude number +h_thresh = 0.1 # water depth [m] threshold for calculating flow between cells (default = 1e-03) +``` + +The properties `inertial_flow_alpha`, `froude_limit` and `h_thresh` apply to 1D river routing +as well as 2D overland flow. The properties `inertial_flow_alpha` and `froude_limit`, and the +adaptive model time step $\Delta t$ are explained in more detail in the [River and floodplain +routing](#river-and-floodplain-routing) section of the local inertial model. + +## Inflow +External water (supply/abstraction) `inflow` $\SIb{}{m^3 s^{-1}}$ can be added to the local +inertial model for river flow (1D) and river and overland flow combined (1D-2D), as a cyclic +parameter or as part of forcing (see also [Input +section](../../user_guide/required_files.qmd)). + +## Abstractions +Abstractions from the river through the variable `abstraction` $\SIb{}{m^3 s^{-1}}$ are +possible when water demand and allocation is computed. The variable `abstraction` is set from +the water demand and allocation module each time step. Abstractions are subtracted as part of +the continuity equation of the local inertial model. + +## Multi-Threading +The local inertial model for river flow (1D) and river and overland flow combined (1D-2D) can +be executed in parallel using multiple threads. + +## References ++ Adams, J. M., Gasparini, N. M., Hobley, D. E. J., Tucker, G. E., Hutton, E. W. H., + Nudurupati, S. S., and Istanbulluoglu, E., 2017, The Landlab v1.0 OverlandFlow component: a + Python tool for computing shallow-water flow across watersheds, Geosci. Model Dev., 10, + 1645–1663, . ++ de Almeida, G. A. M., P. Bates, J. E. Freer, and M. Souvignet, 2012, Improving the stability + of a simple formulation of the shallow water equations for 2-D flood modeling, Water Resour. + Res., 48, W05528, . ++ Bates, P. D., M. S. Horritt, and T. J. Fewtrell, 2010, A simple inertial formulation of the + shallow water equations for efficient two-dimensional flood inundation modelling, J. Hydrol., + 387, 33–45, . ++ Coulthard, T. J., Neal, J. C., Bates, P. D., Ramirez, J., de Almeida, G. A. M., and Hancock, + G. R., 2013, Integrating the LISFLOOD-FP 2- D hydrodynamic model with the CAESAR model: + implications for modelling landscape evolution, Earth Surf. Proc. Land., 38, 1897–1906, + . ++ Neal, J., G. Schumann, and P. Bates (2012), A subgrid channel model for simulating river + hydraulics and floodplaininundation over large and data sparse areas, Water Resour.Res., 48, + W11506, . diff --git a/docs/model_docs/lateral/sediment_flux.qmd b/docs/model_docs/lateral/sediment_flux.qmd new file mode 100644 index 000000000..a733b98cc --- /dev/null +++ b/docs/model_docs/lateral/sediment_flux.qmd @@ -0,0 +1,466 @@ +--- +title: Sediment flux +--- + +Both the inland and river sediment model take into account sediment flux or transport of +sediment in water, either in overland flow or in the stream flow. These two transport are +distinguished in two different structures. + +## Inland Sediment Model + +### Sediment Flux in overland flow +Once the amount of soil detached by both rainfall and overland flow has been estimated, it has +then to be routed and delivered to the river network. Inland routing in sediment models is +usually done by comparing the amount of detached sediment with the transport capacity of the +flow, which is the maximum amount of sediment that the flow can carry downslope. There are +several existing formulas available in the literature. For a wide range of slopes and for +overland flow, the Govers equation (1990) seems the most appropriate choice (Hessel et al, +2007). However, as the wflow\_sediment model was developed to be linked to water quality +issues, the Yalin transport equation was chosen as it can handle particle differentiation +(Govers equation can still be used if wflow\_sediment is used to only model inland processes +with no particle differentiation). For land cells, wflow\_sediment assumes that erosion can +mobilize 5 classes of sediment: + +- Clay (mean diameter of $\SI{2}{\mu m}$) +- Silt (mean diameter of $\SI{10}{\mu m}$) +- Sand (mean diameter of $\SI{200}{\mu m}$) +- Small aggregates (mean diameter of $\SI{30}{\mu m}$) +- Large aggregates (mean diameter of $\SI{50}{\mu m}$). + +$$ +\begin{gathered} + \mathrm{PSA} = \mathrm{SAN} (1-\mathrm{CLA})^{2.4} \\ + \mathrm{PSI} = 0.13\mathrm{SIL}\\ + \mathrm{PCL} = 0.20\mathrm{CLA} \\ + + \mathrm{SAG} = + \begin{align*} + \begin{cases} + 2.0\mathrm{CLA} &\text{ if }\quad \mathrm{CLA} < 0.25 \\ + 0.28(\mathrm{CLA}-0.25)+0.5 &\text{ if }\quad 0.25 \leq \mathrm{CLA} \leq 0.5 \\ + 0.57 &\text{ if }\quad \mathrm{CLA} > 0.5 + \end{cases} + \end{align*} \\ + + \mathrm{LAG} = 1 - \mathrm{PSA} - \mathrm{PSI} - \mathrm{PCL} - \mathrm{SAG} +\end{gathered} +$$ + +where $\mathrm{CLA}$, $\mathrm{SIL}$ and $\mathrm{SAN}$ are the primary clay, silt, sand +fractions of the topsoil and $\mathrm{PCL}$, $\mathrm{PSI}$, $\mathrm{PSA}$, $\mathrm{SAG}$ and +$\mathrm{LAG}$ are the clay, silt, sand, small and large aggregates fractions of the detached +sediment respectively. The transport capacity of the flow using Yalin's equation with particle +differentiation, developed by Foster (1982), is: +$$ + \mathrm{TC}_i = (P_e)_i (S_g)_i \, \rho_w \, g \, d_i V_* +$$ +where $\mathrm{TC}_i$ is the transport capacity of the flow for the particle class $i$, +$(P_e)_i$ is the effective number of particles of class $i$, $\SIb{(S_g)_i}{kg m^{-3}}$ is the +specific gravity for the particle class $i$, $\SIb{\rho_w}{kg m^{-3}}$ is the mass density of +the fluid, $\SIb{g}{m s^{-2}}$ is the acceleration due to gravity, $\SIb{d_i}{m}$ is the +diameter of the particle of class $i$ and $V_* = \SIb{(g R S)^{0.5}}{m s^{-1}}$ is the shear +velocity of the flow with $S$ the slope gradient and $\SIb{R}{m}$ the hydraulic radius of the +flow. The detached sediment are then routed down slope until the river network using the +`accucapacityflux`, `accupacitystate` functions depending on the transport capacity from Yalin. + +The choice of transport capacity method for the overland flow is set up in the model section of +the TOML: +```toml +[model] +landtransportmethod = "yalinpart" # Overland flow transport capacity method: ["yalinpart", "govers", "yalin"] +``` +Note that the "govers" and "yalin" equations can only assess total transport capacity of the +flow and can therefore not be used in combination with the river part of the sediment model. + +## River Sediment Model + +Sediment dynamics in rivers can be described by the same three processes on land: erosion, +deposition and transport. The difference is that channel flow is much higher, deeper and +permanent compared to overland flow. In channels, erosion is the direct removal of sediments +from the river bed or bank (lateral erosion). Sediments are transported in the river either by +rolling, sliding and silting (bed load transport) or via turbulent flow in the higher water +column (suspended load transport). The type of transport is determined by the river bed shear +stress. As sediment particles have a higher density than water, they can also be deposited on +the river bed according to their settling velocity compared to the flow velocity. In addition to +regular deposition in the river, lakes, reservoirs and floodplains represents additional major +sediment settling pools. + +Complete models of sediment dynamics based on hydrology and not on hydraulics or hydrodynamics +are much rarer than for soil loss and inland dynamics. The simpler models such as the SWAT +default sediment river model uses again the transport capacity of the flow to determine if there +is erosion or deposition (Neitsch et al., 2011). A more physics-based approach (Partheniades, +1965) to determine river erosion is used by Liu et al. (2018) and in the new SWAT's approach +developed by Narasimhan et al. (2017). For wflow\_sediment, the new physics-based model of SWAT +was chosen for transport and erosion as it enables the use of parameter estimation for erosion +of bed and bank of the channel and separates the suspended from the bed loads. + +![Overview of the different processes for a river cell in wflow\_sediment.](../../images/river-scheme.png) + +Running the river model is an option of the wflow\_sediment model and is enabled using the TOML +file. By default it is `false`: +```toml +[model] +runrivermodel = true +``` + +### Sediment inputs in a river cell +The first part of the river model assesses how much detached sediment are in the river cell at +the beginning of the timestep $t$. Sources of detached sediment are sediments coming from land +erosion, estimated with the soil loss part of wflow_sediment model, the sediment coming from +upstream river cells and the detached sediment that were left in the cell at the end of the +previous timestep ``(t-1)``: +$$ + (\subtext{\mathrm{sed}}{in})_t = (\subtext{\mathrm{sed}}{land})_t + \mathrm{upstream}\left[(\subtext{\text{sed}}{out})_{t-1}\right] + (\subtext{\text{sed}}{riv})_{t-1} +$$ + +### River transport and erosion +Once the amount of sediment inputs at the beginning of the timestep is known, the model then +estimates transport, and river erosion if there is a deficit of sediments. Transport in the +river system is estimated via a transport capacity formula. There are several transport +capacity formulas available in wflow_sediment, some requiring calibration and some not. +Choosing a transport capacity equation depends on the river characteristics (some equation are +more suited for narrow or wider rivers), and on the reliability of the required river +parameters (such as slope, width or mean particle diameter of the river channel). Several river +transport capacity are available and the choice is set up in the model section of the TOML: +```toml +[model] +rivtransportmethod = "bagnold" # River flow transport capacity method: ["bagnold", "engelund", "yang", "kodatie", "molinas"] +``` + +**Simplified Bagnold** + +Originally more valid for intermediate to large rivers, this simplified version of the Bagnold +equation relates sediment transport to flow velocity with two simple calibration parameters +(Neitsch et al, 2011): +$$ +C_{\max} = \subtext{c}{sp} \left( \dfrac{\mathrm{prf} Q}{h W} \right)^{\subtext{\mathrm{sp}}{exp}} +$$ + +where $\SIb{C_{\max}}{kg L^{-1}}$ (or $\SIb{}{ton m^{-1}}$) is the sediment concentration, +$\SIb{Q}{m^3 s^{-1}}$ is the surface runoff in the river cell, $\SIb{h}{m}$ is the river water +level, $\SIb{W}{m}$ is the river width and $\subtext{c}{sp}$, $\mathrm{prf}$ and +$\subtext{\mathrm{sp}}{exp}$ are calibration parameters. The $\mathrm{prf}$ coefficient is +usually used to deduce the peak velocity of the flow, but for simplification in +`wflow_sediment`, the equation was simplified to only get two parameters to calibrate: +$\subtext{\mathrm{sp}}{exp}$ and $\subtext{c}{Bagnold} = \subtext{c}{sp} \, +\mathrm{prf}^{\subtext{\mathrm{sp}}{exp}}$. The coefficient $\subtext{\mathrm{sp}}{exp}$ +usually varies between $1$ and $2$ while $\mathrm{prf}$ and $\subtext{c}{sp}$ have a wider +range of variation. The table below summarizes ranges and values of the three Bagnold +coefficients used by other studies: + +Table: Range of the simplified Bagnold coefficients (and calibrated value) + +| Study | River | $\mathrm{prf}$ range | $\subtext{c}{sp}$ range | $\subtext{\mathrm{sp}}{exp}$ range | +|:----- | ----- | ------------- | ---------------- | ------------------ | +| Vigiak 2015 | Danube | 0.5-2 (/) | 0.0001-0.01 (0.003-0.006) | 1-2 (1.4) | +| Vigiak 2017 | Danube | / | 0.0001-0.01 (0.0015) | 1-2 (1.4) | +| Abbaspour 2007 | Thur (CH) | 0.2-0.25 (/) | 0.001-0.002 (/) | 0.35-1.47 (/) | +| Oeurng 2011 | Save (FR) | 0-2 (0.58) | 0.0001-0.01 (0.01) | 1-2 (2) | + +**Engelund and Hansen** This transport capacity is not present in SWAT but used in many models +such as Delft3D-WAQ, Engelund and Hansen calculates the total sediment load as (Engelund and +Hansen, 1967): +$$ + C_w = 0.05 \left( \dfrac{\rho_{s}}{\rho_{s} - \rho} \right) \left( \dfrac{u S}{\sqrt{\left( \dfrac{\rho_{s}}{\rho_{s} - \rho} \right) g D_{50}}} \right) \theta^{1/2} +$$ +where $C_w$ is the sediment concentration by weight, $\SIb{\rho}{g m^{-3}}$ and $\SIb{\rho_{s}}{g m^{-3}}$ are the +fluid and sediment density (here respectively equal to $\SI{1000}{g m^{-3}}$ and $\SI{2650}{g +m^{-3}}$), $\SIb{u}{m s^{-1}}$ is the water mean velocity, $S$ is the river slope, $g$ is the +acceleration due to gravity, $\SIb{D_{50}}{m}$ is the river mean diameter and $\theta$ is the +Shields parameter. + +**Kodatie** Kodatie (1999) developed the power relationships from Posada (1995) using field +data and linear optimization so that they would be applicable for a wider range of riverbed +sediment size. The resulting equation, for a rectangular channel, is (Neitsch et al, 2011): +$$ + C_{\max} = \left( \dfrac{a u^{b} h^{c} S^{d}}{\subtext{V}{in}} \right) W +$$ +where $\SIb{\subtext{V}{in}}{m^3}$ in the volume of water entering the river cell +during the timestep and $a$, $b$, $c$ and $d$ are coefficients depending on the riverbed +sediment size. Values of these coefficients are summarized in the table below. + +Table: Range of the simplified Bagnold coefficients (and calibrated value) + +| River sediment diameter | a | b | c | d | +|:------------------------|---|---|---|---| +| $D_{50} \leq \SI{0.05}{mm}$ | 281.4 | 2.622 | 0.182 | 0 | +| $\SI{0.05}{mm} < D_{50} \leq \SI{0.25}{mm}$ | 2 829.6 | 3.646 | 0.406 | 0.412 | +| $\SI{0.25}{mm} < D_{50} \leq \SI{2.0}{mm}$ | 2 123.4 | 3.300 | 0.468 | 0.613 | +| $D_{50} > \SI{2.0}{mm}$ | 431 884.8 | 1.000 | 1.000 | 2.000 | + +**Yang** Yang (1996) developed a set of two equations giving transport of sediments for +sand-bed or gravel-bed rivers. The sand equation ($D_{50} < \SI{2.0}{mm}$) is: +$$ + \log\left(C_{ppm}\right) = 5.435 - 0.286\log\left(\frac{\omega_{s,50}D_{50}}{\nu}\right)-0.457\log\left(\frac{u_*}{\omega_{s,50}}\right) \\ + +\left(1.799-0.409\log\left(\frac{\omega_{s,50}D_{50}}{\nu}\right)-0.314\log\left(\frac{u_*}{\omega_{s,50}}\right)\right)\log\left(\frac{uS}{\omega_{s,50}}-\frac{u_{cr}S}{\omega_{s,50}}\right) +$$ +And the gravel equation ($\SI{2.0}{mm} \leq D_{50} < \SI{10.0}{mm}$) is: +$$ + \log\left(C_{ppm}\right) = 6.681 - 0.633\log\left(\frac{\omega_{s,50}D_{50}}{\nu}\right)-4.816\log\left(\frac{u_*}{\omega_{s,50}}\right) \\ + +\left(2.784-0.305\log\left(\frac{\omega_{s,50}D_{50}}{\nu}\right)-0.282\log\left(\frac{u_*}{\omega_{s,50}}\right)\right)\log\left(\frac{uS}{\omega_{s,50}}-\frac{u_{cr}S}{\omega_{s,50}}\right) +$$ +where $C_{ppm}$ is sediment concentration in parts per million by weight, +$\SIb{\omega_{s,50}}{m s^{-1}}$ is the settling velocity of a particle with the median riverbed +diameter estimated with Stokes, $\SIb{\nu}{m^2 s^{-1}}$ is the kinematic viscosity of the +fluid, $\SIb{u_*}{m s^{-1}}$ is the shear velocity where $u_* = \sqrt{gR_{H}S}$ with $R_{H}$ +the hydraulic radius of the river and $\SIb{u_{cr}}{m s^{-1}}$ is the critical velocity +(equation can be found in Hessel, 2007). + +**Molinas and Wu** The Molinas and Wu (2001) transport equation was developed for large +sand-bed rivers based on the universal stream power $\psi$. The corresponding equation is +(Neitsch et al, 2011): +$$ + C_{w} = \dfrac{1430 (0.86+\sqrt{\psi}) \psi^{1.5}}{0.016+\psi} 10^{-6} +$$ +where $\psi$ is the universal stream power given by: +$$ + \psi = \dfrac{\psi^{3}}{\left(\dfrac{\rho_{s}}{\rho}-1\right) g h \omega_{s,50} \left[ \log_{10}\left(\dfrac{h}{D_{50}}\right)\right]^{2}} +$$ + +Once the maximum concentration $C_{\max}$ is established with one of the above transport +formula, the model then determines if there is erosion of the river bed and bank. In order to +do that, the difference $sed_{ex}$ between the maximum amount of sediment estimated with +transport ($\mathrm{sed}_{\max} = C_{\max} \subtext{V}{in}$) and the sediment inputs to the +river cell ($\subtext{\mathrm{sed}}{in}$ calculated above) is calculated. If too much sediment +is coming in and $\subtext{\mathrm{sed}}{ex}$ is negative, then there is no river bed and bank +erosion. And if the river has not reach its maximum transport capacity, then erosion of the +river happens. + +First, the sediments stored in the cell from deposition in previous timesteps +$\subtext{\mathrm{sed}}{stor}$ are eroded from clay to gravel. If this amount is not enough to +cover $\subtext{\mathrm{sed}}{ex}$, then erosion of the local river bed and bank material +starts. + +Instead of just setting river erosion amount to just cover the remaining difference +$\subtext{\mathrm{sed}}{exeff}$ between $\subtext{\mathrm{sed}}{ex}$ and +$\subtext{\mathrm{sed}}{stor}$, actual erosion potential is adjusted using river +characteristics and is separated between the bed and bank of the river using the physics-based +approach of Knight (1984). + +The bed and bank of the river are supposed to only be able to erode a maximum amount of their +material ``E_{R,\mathrm{bed}}`` for the bed and ``E_{R,\mathrm{bank}}`` for the river bank. For +a rectangular channel, assuming it is meandering and thus only one bank is prone to erosion, +they are calculated from the equations (Neitsch et al, 2011): +$$ +\begin{gathered} + E_{R,\mathrm{bed}} = k_{d,\mathrm{bed}} \left( \tau_{e,\mathrm{bed}} - \tau_{cr,\mathrm{bed}} \right) 10^{-6} L W \rho_{b, \mathrm{bed}} \Delta t \\ + E_{R,\mathrm{bank}} = k_{d,\mathrm{bank}} \left( \tau_{e,\mathrm{bank}} - \tau_{cr,\mathrm{bank}} \right) 10^{-6} L h \rho_{b, \mathrm{bank}} \Delta t +\end{gathered} +$$ +where $\SIb{E_R}{ton}$ is the potential bed/bank erosion rates, $\SIb{k_d}{cm^3 N^{-1}, +s^{-1}}$ is the erodibility of the bed/bank material, $\SIb{\tau_e}{N m^{-2}}$ is the effective +shear stress from the flow on the bed/bank, $\SIb{\tau_{cr}}{N m^{-2}}$ is the critical shear +stress for erosion to happen, $\SIb{L}{m}$, $\SIb{W}{m}$ and $\SIb{h}{m}$ are the channel +length, width and water height, $\SIb{\rho_{b}}{g cm^{-3}}$ is the bulk density of the bed/bank +of the river and $\SIb{\Delta t}{s}$ is the model timestep. + +In wflow_sediment, the erodibility of the bed/bank are approximated using the formula from +Hanson and Simon (2001): +$$ + k_d=0.2 \tau_{cr}^{-0.5} +$$ +Normally erodibilities are evaluated using jet test in the field and there are several reviews +and some adjustments possible to this equation (Simon et al, 2011). However, to avoid too heavy +calibration and for the scale considered, this equation is supposed to be efficient enough. The +critical shear stress $\tau_{cr}$ is evaluated differently for the bed and bank. For the bed, +the most common formula from Shields initiation of movement is used. For the bank, a more +recent approach from Julian and Torres (2006) is used : +$$ + \tau_{cr,\mathrm{bank}} = (0.1+0.1779 SC+0.0028 SC^{2}-2.34 10^{-5} SC^{3}) C_{ch} +$$ +where $SC$ is the percent clay and silt content of the river bank and $C_{ch}$ is a coefficient +taking into account the positive impact of vegetation on erosion reduction. This coefficient is +then dependent on the land use and classical values are shown in the table below. These values +where then adapted for use with the GlobCover land use map. Percent of clay and silt (along +with sand and gravel) for the channel is estimated from the river median particle diameter +assuming the same values as SWAT shown in the table below. Median particle diameter is here +estimated depending on the Strahler river order. The higher the order, the smaller the diameter +is. As the median diameter is only used in wflow_sediment for the estimation of the river +bed/bank sediment composition, this supposition should be enough. Actual refined data or +calibration may however be needed if the median diameter is also required for the transport +formula. In a similar way, the bulk densities of river bed and bank are also just assumed to be +of respectively $\SI{1.5}{g cm^{-3}}$ and $\SI{1.4}{g cm^{-3}}$. + +Table: Classical values of the channel cover vegetation coefficient (Julian and Torres, 2006) + +| Bank vegetation | $C_{ch}$ | +|:---- | ---- | +| None | 1.00 | +| Grassy | 1.97 | +| Sparse trees | 5.40 | +| Dense trees | 19.20 | + +Table: Composition of the river bed/bank depending on the median diameter $\SIb{d_{50}}{\mu m}$ +(Neitsch et al, 2011) + +|Sediment Fraction | $\leq$ 5 | 5 to 50 | 50 to 2000 | $>$ 2000 | +| ---- | ---- | ---- | ---- | ---- | +| Sand | 0.15 | 0.15 | 0.65 | 0.15 | +| Silt | 0.15 | 0.65 | 0.15 | 0.15 | +| Clay | 0.65 | 0.15 | 0.15 | 0.05 | +| Gravel | 0.05 | 0.05 | 0.05 | 0.65 | + +Then, the repartition of the flow shear stress is refined into the effective shear stress and +the bed and bank of the river using the equations developed by Knight (1984) for a rectangular +channel: +$$ +\begin{gathered} + \tau_{e,\mathrm{bed}} = \rho g R_{H} S \left(1 - \dfrac{SF_{\mathrm{bank}}}{100}\right) \left(1+\dfrac{2h}{W}\right) \\ + \tau_{e,\mathrm{bank}} = \rho g R_{H} S \left( SF_{\mathrm{bank}}\right) \left(1+\dfrac{W}{2h}\right) +\end{gathered} +$$ +where $\rho g$ is the fluid specific weight ($\SI{9800}{N m^{-3}}$ for water), $\SIb{R_H}{m}$ +is the hydraulic radius of the channel, $\SIb{h}{m}$ and $\SIb{W}{m}$ are the water level and +river width. $SF_{\mathrm{bank}}$ is the proportion of shear stress acting on the bank (%) and +is estimated from (Knight, 1984): +$$ + \mathrm{SF}_{\mathrm{bank}} = \exp \left( -3.230 \log_{10}\left(\dfrac{W}{h}+3\right)+6.146 \right) +$$ +Finally the relative erosion potential of the bank and bed of the river is calculated by: +$$ +\begin{gathered} + \mathrm{RTE}_{\mathrm{bed}} = \dfrac{E_{R,\mathrm{bed}}}{E_{R,\mathrm{bed}}+E_{R,\mathrm{bank}}} \\ + \mathrm{RTE}_{\mathrm{bank}} = 1 - RTE_{\mathrm{bed}} +\end{gathered} +$$ +And the final actual eroded amount for the bed and bank is the maximum between $\mathrm{RTE} +\subtext{\mathrm{sed}}{exeff}$ and the erosion potential $E_R$. Total eroded amount of sediment +$\subtext{\mathrm{sed}}{erod}$ is then the sum of the eroded sediment coming from the storage +of previously deposited sediment and the river bed/bank erosion. + +### River deposition +As sediments have a higher density than water, moving sediments in water can be deposited in +the river bed. The deposition process depends on the mass of the sediment, but also on flow +characteristics such as velocity. In wflow_sediment, as in SWAT, deposition is modelled with +Einstein's equation (Neitsch et al, 2011): +$$ + \subtext{P}{dep}=\left(1-\dfrac{1}{e^{x}}\right)100 +$$ +where $\subtext{P}{dep}$ is the percentage of sediments that is deposited on the river bed and +x is a parameter calculated with: +$$ + x = \dfrac{1.055 L \omega_{s}}{u h} +$$ +where $\SIb{L}{m}$ and $\SIb{h}{m}$ are channel length and water height, $\SIb{\omega_s}{m +s^{-1}}$ is the particle settling velocity calculated with Stokes' formula and $\SIb{u}{m +s^{-1}}$ is the mean flow velocity. The calculated percentage is then subtracted from the +amount of sediment input and eroded river sediment for each particle size class +($\subtext{\mathrm{sed}}{dep} = \subtext{P}{dep}/100 (\subtext{\mathrm{sed}}{in} + +\subtext{\mathrm{sed}}{erod})$). Resulting deposited sediment are then stored in the river bed +and can be re-mobilized in future time steps by erosion. + +### Mass balance and sediment concentration +Finally after estimating inputs, deposition and erosion with the transport capacity of the +flow, the amount of sediment actually leaving the river cell to go downstream is estimated +using: +$$ + \subtext{\mathrm{sed}}{out} = (\subtext{\mathrm{sed}}{in} + \subtext{\mathrm{sed}}{erod} - \subtext{\mathrm{sed}}{dep}) \dfrac{\subtext{V}{out}}{V} +$$ + +where $\SIb{\subtext{\mathrm{sed}}{out}}{ton}$ is the amount of sediment leaving the river cell +(tons), $\SIb{\subtext{\mathrm{sed}}{in}}{ton}$ is the amount of sediment coming into the river +cell (storage from previous timestep, land erosion and sediment flux from upstream river +cells), $\SIb{\subtext{\mathrm{sed}}{erod}}{ton}$ is the amount of sediment coming from river +erosion, $\SIb{\subtext{\mathrm{sed}}{dep}}{ton}$ is the amount of deposited sediments, +$\SIb{\subtext{V}{out}}{m^3}$ is the volume of water leaving the river cell (surface runoff $Q$ +times timestep $\Delta t$) and $\SIb{V}{m^3}$ is the total volume of water in the river cell +($\subtext{V}{out}$ plus storage $h W L$). + +A mass balance is then used to calculate the amount of sediment remaining in the cell at the +end of the timestep $(\subtext{\mathrm{sed}}{riv})_t$: +$$ + (\subtext{\mathrm{sed}}{riv})_t = (\subtext{\mathrm{sed}}{riv})_{t-1} + (\subtext{\mathrm{sed}}{land})_t + \mathrm{upstream}\left[(\subtext{\mathrm{sed}}{out})_{t-1}\right] + (\subtext{\mathrm{sed}}{erod})_t - (\subtext{\mathrm{sed}}{dep})_t - (\subtext{\mathrm{sed}}{out})_t +$$ + +### Lake and reservoir modelling +Apart from land and river, the hydrologic `wflow_sbm` model also handles lakes and reservoirs +modelling. In `wflow_sbm`, lakes and large reservoirs are modelled using a 1D bucket model at +the cell corresponding to the outlet. For the other cells belonging to the lake/reservoir which +are not the outlet, processes such as precipitation and evaporation are filtered out and +shifted to the outlet cell. `wflow_sediment` handles the lakes and reservoirs in the same way. +If a cell belongs to a lake/reservoir and is not the outlet then the model assumes that no +erosion/deposition of sediments is happening and the sediments are only all transported to the +lake/reservoir outlet. Once the sediments reach the outlet, then sediments are deposited in the +lake/reservoir according to Camp's model (1945) (Verstraeten et al, 2000): +$$ + \mathrm{TE} = \dfrac{\omega_s}{u_{cr,\mathrm{res}}} = \dfrac{\subtext{A}{res}}{\subtext{Q}{out,res}} \omega_s +$$ + +where $\mathrm{TE}$ is the trapping efficiency of the lake/reservoir (or the fraction of +particles trapped), $\SIb{\omega_{s}}{m s^{-1}}$ is the particle velocity from Stokes, +$\SIb{\subtext{u}{cr,res}}{m s^{-1}}$ is the reservoir's critical settling velocity which is +equal to the reservoir's outflow $\SIb{\subtext{Q}{out,res}}{m^3 s^{-1}}$ divided by the +reservoir's surface area $\SIb{\subtext{A}{res}}{m^2}$. + +For reservoirs, coarse sediment particles from the bed load are also assumed to be trapped by +the dam structure. This adding trapping is taken into account with a reservoir trapping +efficiency coefficient for large particles (between $0$ and $1$). Depending on the type of the +dam, all bed load particles are trapped (`restrapefficiency = 1.0`, for example for a gravity +dam) or only partly (for example for run-of-the-river dams). + +Lake and reservoir modelling is enabled in the model section of the TOML and require the extra +following input arguments: + +```toml +[model] +doreservoir = true +dolake = false + +[input.vertical] +# Reservoir +resareas = "wflow_reservoirareas" +# Lake +lakeareas = "wflow_lakeareas" + +[input.lateral.river] +# Reservoir +resarea = "ResSimpleArea" +restrapefficiency = "ResTrapEff" +resareas = "wflow_reservoirareas" +reslocs = "wflow_reservoirlocs" +# Lake +lakearea = "LakeArea" +lakeareas = "wflow_lakeareas" +lakelocs = "wflow_lakelocs" +``` + +Note that in the inland part, lake and reservoir coverage are used to filter erosion and +transport in overland flow. + +## References ++ K.C. Abbaspour, J. Yang, I. Maximov, R. Siber, K. Bogner, J. Mieleitner, J. Zobrist, and + R.Srinivasan. Modelling hydrology and water quality in the pre-alpine/alpine Thur watershed + using SWAT. Journal of Hydrology, 333(2-4):413-430, 2007. 10.1016/j.jhydrol.2006.09.014 ++ P. Borrelli, M. Märker, P. Panagos, and B. Schütt. Modeling soil erosion and river sediment + yield for an intermountain drainage basin of the Central Apennines, Italy. Catena, 114:45-58, + 2014. 10.1016/j.catena.2013.10.007 ++ F. Engelund and E. Hansen. A monograph on sediment transport in alluvial streams. Technical + University of Denmark 0stervoldgade 10, Copenhagen K., 1967. ++ G. Govers. Empirical relationships for the transport capacity of overland flow. IAHS + Publication, (January 1990):45-63 ST, 1990. ++ G.J Hanson and A Simon. Erodibility of cohesive streambeds in the loess area of the + midwestern USA. Hydrological Processes, 15(May 1999):23-38, 2001. ++ R Hessel and V Jetten. Suitability of transport equations in modelling soil erosion for a + small Loess Plateau catchment. Engineering Geology, 91(1):56-71, 2007. + 10.1016/j.enggeo.2006.12.013 ++ J.P Julian, and R. Torres. Hydraulic erosion of cohesive riverbanks. Geomorphology, + 76:193-206, 2006. 10.1016/j.geomorph.2005.11.003 ++ D.W. Knight, J.D. Demetriou, and M.E. Hamed. Boundary Shear in Smooth Rectangular Channels. + J. Hydraul. Eng., 110(4):405-422, 1984. 10.1061/(ASCE)0733-9429(1987)113:1(120) ++ S.L Neitsch, J.G Arnold, J.R Kiniry, and J.R Williams. SWAT Theoretical Documentation Version + 2009. Texas Water Resources Institute, pages 1-647, 2011. 10.1016/j.scitotenv.2015.11.063 ++ C. Oeurng, S. Sauvage, and J.M. Sanchez-Perez. Assessment of hydrology, sediment and + particulate organic carbon yield in a large agricultural catchment using the SWAT model. + Journal of Hydrology, 401:145-153, 2011. 10.1016/j.hydrol.2011.02.017 ++ A. Simon, N. Pollen-Bankhead, and R.E Thomas. Development and application of a deterministic + bank stability and toe erosion model for stream restoration. Geophysical Monograph Series, + 194:453-474, 2011. 10.1029/2010GM001006 ++ G. Verstraeten and J. Poesen. Estimating trap efficiency of small reservoirs and ponds: + methods and implications for the assessment of sediment yield. Progress in Physical + Geography, 24(2):219-251, 2000. 10.1177/030913330002400204 ++ O. Vigiak, A. Malago, F. Bouraoui, M. Vanmaercke, and J. Poesen. Adapting SWAT hillslope + erosion model to predict sediment concentrations and yields in large Basins. Science of the + Total Environment, 538:855-875, 2015. 10.1016/j.scitotenv.2015.08.095 ++ O. Vigiak, A. Malago, F. Bouraoui, M. Vanmaercke, F. Obreja, J. Poesen, H. Habersack, J. + Feher, and S. Groselj. Modelling sediment fluxes in the Danube River Basin with SWAT. Science + of the Total Environment, 2017. 10.1016/j.scitotenv.2017.04.236 diff --git a/docs/model_docs/lateral/waterbodies.qmd b/docs/model_docs/lateral/waterbodies.qmd new file mode 100644 index 000000000..4c472c9c3 --- /dev/null +++ b/docs/model_docs/lateral/waterbodies.qmd @@ -0,0 +1,203 @@ +--- +title: Reservoirs and Lakes +--- + +Simplified reservoirs and lakes models can be included as part of the river network. + +## Reservoirs +Simple reservoirs can be included within the river routing by supplying the following reservoir +parameters: + ++ `locs` - Outlet of the reservoirs in which each reservoir has a unique id ++ `area` - Surface area of the reservoirs $\SIb{}{m^2}$ ++ `areas` - Reservoir coverage ++ `targetfullfrac` - Target fraction full (of max storage) for the reservoir: number between + 0 and 1 ++ `targetminfrac` - Target minimum full fraction (of max storage). Number between 0 and 1 ++ `maxvolume` - Maximum reservoir storage (above which water is spilled) $\SIb{}{m^3}$ ++ `demand` - Minimum (environmental) flow requirement downstream of the reservoir $\SIb{}{m^3 s^{-1}}$ ++ `maxrelease` - Maximum $Q$ that can be released if below spillway $\SIb{}{m^3 s^{-1}}$ + +By default the reservoirs are not included in the model. To include them put the following +lines in the TOML file of the model: + +```toml +[model] +reservoirs = true +``` +Finally there is a mapping required between external and internal parameter names in the TOML +file, with below an example: + +```toml +[input] + +[input.lateral.river.reservoir] +area = "ResSimpleArea" +areas = "wflow_reservoirareas" +demand = "ResDemand" +locs = "wflow_reservoirlocs" +maxrelease = "ResMaxRelease" +maxvolume = "ResMaxVolume" +targetfullfrac = "ResTargetFullFrac" +targetminfrac = "ResTargetMinFrac" +``` +### Lakes (unregulated and regulated) +Lakes are modelled using a mass balance approach: + +$$ + \dfrac{S(t + \Delta t)}{\Delta t} = \dfrac{S(t)}{\Delta t} + \subtext{Q}{in} + \dfrac{(P-E) A}{\Delta t} - \subtext{Q}{out} +$$ + +where $\SIb{S}{m^3}$ is lake storage, $\SIb{\Delta t}{s}$ is the model timestep, +$\SIb{\subtext{Q}{in}}{m^3 s^{-1}}$ is the sum of inflows (river, overland and lateral +subsurface flow), $\SIb{\subtext{Q}{out}}{m^3 s^{-1}}$ is the lake outflow at the outlet, +$\SIb{P}{m}$ is precipitation, $\SIb{E}{m}$ is lake evaporation and $\SIb{A}{m^2}$ is the lake +surface area. + +![Lake schematization.](../../images/lake.png) + +Most of the variables in this equation are already known or coming from previous timestep, +apart from $S(t+ \Delta t)$ and $\subtext{Q}{out}$ which can both be linked to the water level +$H$ in the lake using a storage curve $S = f(H)$ and a rating curve $Q = f(H)$. In wflow, +several options are available to select storage and rating curves, and in most cases, the mass +balance is then solved by linearization and iteration or using the Modified Puls Approach from +Maniak (Burek et al., 2013). Storage curves in wflow can either: + ++ Come from the interpolation of field data linking volume and lake height, ++ Be computed from the simple relationship $S = A H$. + +Rating curves in wflow can either: + ++ Come from the interpolation of field data linking lake outflow and water height, also + appropriate for regulated lakes/ dams, ++ Be computed from a rating curve of the form $\subtext{Q}{out} = \alpha (H-H_0)^\beta$, where + $H_{0}$ is the minimum water level under which the outflow is zero. Usual values for $\beta$ + are $\frac{3}{2}$ for a rectangular weir or $2$ for a parabolic weir (Bos, 1989). + +### Modified Puls Approach +The Modified Puls Approach is a resolution method of the lake balance that uses an explicit +relationship between storage and outflow. Storage is assumed to be equal to $A H$ and the +rating curve for a parabolic weir ($\beta = 2$): + +$$ + S = A H = A (h + H_{0}) = A \sqrt{\frac{Q}{\alpha}} + A H_0 +$$ + +Inserting this equation in the mass balance gives: + +$$ + \dfrac{A}{\Delta t} \sqrt{\frac{Q}{\alpha}} + Q = \dfrac{S(t)}{\Delta t} + \subtext{Q}{in} + + A\dfrac{P-E}{\Delta t} - \dfrac{A H_0}{\Delta t} = \mathrm{SI} - \dfrac{A H_0}{\Delta t} +$$ + +The solution for $Q$ is then: + +$$ + Q = + \begin{cases} + \begin{align*} + \frac{1}{4}\left(-\mathrm{LF} + \sqrt{\mathrm{LF}^{2} + 4 \left(\mathrm{SI} - \dfrac{A H_0}{\Delta t} \right)} + \right)^2 &\text{ if }\quad \mathrm{SI} > \dfrac{A H_0}{\Delta t} \\ + 0 &\text{ if }\quad \mathrm{SI} \leq \dfrac{A H_0}{\Delta t} + \end{align*} + \end{cases} +$$ + +where + +$$ + \mathrm{LF} = \dfrac{A}{\Delta t \sqrt{\alpha}}. +$$ + +### Lake parameters +Lakes can be included within the kinematic wave river routing in wflow, by supplying the +following parameters: + ++ `area` - Surface area of the lakes [m$^2$] ++ `areas` - Coverage of the lakes ++ `locs` - Outlet of the lakes in which each lake has a unique id ++ `linkedlakelocs` - Outlet of linked (downstream) lakes (unique id) ++ `waterlevel` - Lake water level [m], used to reinitiate lake model ++ `threshold` - Water level threshold $H_{0}$ under which outflow is zero [m] ++ `storfunc` - Type of lake storage curve ; 1 for $S = AH$ (default) and 2 for $S = f(H)$ from + lake data and interpolation ++ `outflowfunc` - Type of lake rating curve ; 1 for $Q = f(H)$ from lake data and + interpolation, 2 for general $Q = b(H - H_{0})^{e}$ and 3 in the case of Puls Approach + $Q = b(H - H_{0})^{2}$ (default) ++ `b` - Rating curve coefficient ++ `e` - Rating curve exponent + +By default, the lakes are not included in the model. To include them, put the following line in +the TOML file of the model: + +```toml +[model] +lakes = true +``` +There is also a mapping required between external and internal parameter names in the TOML +file, with below an example: + +```toml +[input] + +[input.lateral.river.lake] +area = "lake_area" +areas = "wflow_lakeareas" +b = "lake_b" +e = "lake_e" +locs = "wflow_lakelocs" +outflowfunc = "lake_outflowfunc" +storfunc = "lake_storfunc" +threshold = "lake_threshold" +waterlevel = "lake_waterlevel" +``` + +### Additional settings +Storage and rating curves from field measurement can be supplied to wflow via CSV files +supplied in the same folder of the TOML file. Naming of the files uses the ID of the lakes +where data are available and is of the form `lake_sh_1.csv` and `lake_hq_1.csv` for +respectively the storage and rating curves of lake with ID 1. + +The storage curve is stored in a CSV file with lake level $\SIb{}{m}$ in the first column `H` +and corresponding lake storage $\SIb{}{m^3}$ in the second column `S`: + +```bash +H, S +392.21, 0 +393.21, 430202000 +393.71, 649959000 +394.21, 869719000 +``` + +The rating curve uses level and discharge data depending on the Julian day of the year (JDOY), +and can be also used for regulated lakes/ dams. The first line contains `H` for the first +column. The other lines contain the water level and the corresponding discharges for the +different JDOY (1-365), see also the example below, that shows part of a CSV file (first 4 +Julian days). The volume above the maximum water level of the rating curve is assumed to flow +instantaneously out of the lake (overflow). + +```bash +H +394, 43, 43, 43, 43 +394.01, 44.838, 44.838, 44.838, 44.838 +394.02, 46.671, 46.671, 46.671, 46.671 +394.03, 48.509, 48.509, 48.509, 48.509 +394.04, 50.347, 50.347, 50.347, 50.347 +394.05, 52.179, 52.179, 52.179, 52.179 +``` + +Linked lakes: In some cases, lakes can be linked and return flow can be allowed from the +downstream to the upstream lake. The linked lakes are defined in the `linkedlakelocs` parameter +that represent the downstream lake location ID, at the grid cell of the upstream lake location. + +::: {.callout-note} +In every file, level units are meters [m] above lake bottom and not meters above sea level [m +asl]. Especially with storage/rating curves coming from data, please be careful and convert +units if needed. +::: + +## References ++ Bos M.G., 1989. Discharge measurement structures. Third revised edition, International + Institute for Land Reclamation and Improvement ILRI, Wageningen, The Netherlands. ++ Burek P., Van der Knijf J.M., Ad de Roo, 2013. LISFLOOD – Distributed Water Balance and flood + Simulation Model – Revised User Manual. DOI: http://dx.doi.org/10.2788/24719. \ No newline at end of file diff --git a/docs/src/model_docs/model_configurations.md b/docs/model_docs/model_configurations.qmd similarity index 63% rename from docs/src/model_docs/model_configurations.md rename to docs/model_docs/model_configurations.qmd index 074082107..5fa436500 100644 --- a/docs/src/model_docs/model_configurations.md +++ b/docs/model_docs/model_configurations.qmd @@ -1,14 +1,35 @@ -# Model configurations +--- +title: Model configurations +--- + +There are several model configurations supported by wflow. These model configurations require +slightly different input requirements, yet the general structure is similar for each model. A +wflow model configuration consists of a `vertical` [SBM](./vertical/sbm.qmd) concept in combination +with `lateral` concepts that control how water is routed for example over the land or river +domain. For the wflow\_sbm model different model configurations are possible. The following +model configurations are supported in wflow: + + - wflow\_sbm: + - SBM + kinematic wave for subsurface and surface flow + - SBM + kinematic wave for subsurface and overland flow + local inertial river (+ + optional floodplain) + - SBM + kinematic wave for subsurface flow + local inertial river (1D) and land (2D) + - SBM + groundwater flow + kinematic wave for surface flow + - wflow\_sediment as post processing of wflow\_sbm output + +Below, some explanation will be given on how to prepare a basic wflow\_sbm model. Example data +for other model configurations is provided in the section with [sample +data](../getting_started/download_example_models.qmd). ## wflow\_sbm Wflow\_sbm represents hydrological models derived from the CQflow model (Köhler et al., 2006) -that have the [SBM](@ref vert_sbm) vertical concept in common, but can have different +that have the [SBM](./vertical/sbm.qmd) vertical concept in common, but can have different lateral concepts that control how water is routed for example over the land or river domain. -The soil part of SBM is largely based on the Topog\_SBM model but has had considerable -changes over time. Topog\_SBM is specifically designed to simulate fast runoff processes in -small catchments while the wflow\_sbm model can be applied more widely. The main differences are -for the vertical concept SBM of wflow\_sbm: +The soil part of SBM is largely based on the Topog\_SBM model but has had considerable changes +over time. Topog\_SBM is specifically designed to simulate fast runoff processes in small +catchments while the wflow\_sbm model can be applied more widely. The main differences are for +the vertical concept SBM of wflow\_sbm: - The unsaturated zone can be split-up in different layers - The addition of evapotranspiration losses @@ -17,32 +38,33 @@ for the vertical concept SBM of wflow\_sbm: The water demand and allocation computations are supported by the wflow\_sbm model configurations: -- [SBM + Kinematic wave](@ref config_sbm) -- [SBM + Groundwater flow](@ref config_sbm_gwf) -- [SBM + Local inertial river](@ref config_sbm_gwf_lie_river) -- [SBM + Local inertial river (1D) and land (2D)](@ref config_sbm_gwf_lie_river_land) + +- SBM + Kinematic wave +- SBM + Groundwater flow +- SBM + Local inertial river +- SBM + Local inertial river (1D) and land (2D) The vertical SBM concept is explained in more detail in the following section [SBM vertical -concept](@ref vert_sbm). +concept](./vertical/sbm.qmd). -Topog\_SBM uses an element network based on contour lines and trajectories for water -routing. Wflow\_sbm models differ in how the lateral components river, land, and subsurface -are solved. Below the different wflow\_sbm model configurations are described. +Topog\_SBM uses an element network based on contour lines and trajectories for water routing. +Wflow\_sbm models differ in how the lateral components river, land, and subsurface are solved. +Below the different wflow\_sbm model configurations are described. -### [SBM + Kinematic wave](@id config_sbm) -For the lateral components of this wflow\_sbm model water is routed over a D8 network, and -the kinematic wave approach is used for river, overland and lateral subsurface flow. This is -described in more detail in the section [Kinematic wave](@ref kin_wave). +### SBM + Kinematic wave +For the lateral components of this wflow\_sbm model water is routed over a D8 network, and the +kinematic wave approach is used for river, overland and lateral subsurface flow. This is +described in more detail in the section [Kinematic wave](./lateral/kinwave.qmd). An overview of the different processes and fluxes in the wflow_sbm model with the kinematic wave approach for river, overland and lateral subsurface flow: -![wflow_sbm model](../images/wflow_sbm_soil.png) +![Conceptual overview of the wflow_sbm model](../images/wflow_sbm_soil.png) -Below the mapping for this wflow\_sbm model (type `sbm`) to the vertical SBM concept -(instance of `struct SBM`) and the different lateral concepts is presented. For an -explanation about the type parameters between curly braces after the `struct` name see the -section on the model parameters. +Below the mapping for this wflow\_sbm model (type `sbm`) to the vertical SBM concept (instance +of `struct SBM`) and the different lateral concepts is presented. For an explanation about the +type parameters between curly braces after the `struct` name see the section on the model +parameters. ```julia vertical => struct SBM{T,N,M} @@ -53,11 +75,11 @@ lateral.river.lake => struct NaturalLake{T} # optional lateral.river.reservoir => struct SimpleReservoir{T} # optional ``` -### [SBM + Groundwater flow](@id config_sbm_gwf) +### SBM + Groundwater flow For river and overland flow the kinematic wave approach over a D8 network is used for this wflow\_sbm model. For the subsurface domain, an unconfined aquifer with groundwater flow in four directions (adjacent cells) is used. This is described in more detail in the section -[Groundwater flow](@ref lateral_gwf). +[Groundwater flow](./lateral/gwf.qmd). ```toml [model] @@ -75,7 +97,8 @@ gwf_f.value = 3.0 ``` Below the mapping for this wflow\_sbm model (type `sbm_gwf`) to the vertical SBM concept (instance of `struct SBM`) and the different lateral concepts. For an explanation about the -type parameters between curly braces after the `struct` name see the section on model parameters. +type parameters between curly braces after the `struct` name see the section on model +parameters. ```julia vertical => struct SBM{T,N,M} @@ -89,11 +112,11 @@ lateral.river.lake => struct NaturalLake{T} # optional lateral.river.reservoir => struct SimpleReservoir{T} # optional ``` -### [SBM + Local inertial river](@id config_sbm_gwf_lie_river) -By default the model types `sbm` and `sbm_gwf` use the kinematic wave approach for river -flow. There is also the option to use the local inertial model for river flow with an -optional 1D floodplain schematization (routing is done separately for the river channel and -floodplain), by providing the following in the TOML file: +### SBM + Local inertial river +By default the model types `sbm` and `sbm_gwf` use the kinematic wave approach for river flow. +There is also the option to use the local inertial model for river flow with an optional 1D +floodplain schematization (routing is done separately for the river channel and floodplain), by +providing the following in the TOML file: ```toml [model] @@ -101,15 +124,15 @@ river_routing = "local-inertial" # optional, default is "kinematic-wave" floodplain_1d = true # optional, default is false ``` -Only the mapping for the river component changes, as shown below. For an explanation about -the type parameters between curly braces after the `struct` name see the section on the model +Only the mapping for the river component changes, as shown below. For an explanation about the +type parameters between curly braces after the `struct` name see the section on the model parameters. ```julia lateral.river => struct ShallowWaterRiver{T,R,L} ``` -### [SBM + Local inertial river (1D) and land (2D)](@id config_sbm_gwf_lie_river_land) +### SBM + Local inertial river (1D) and land (2D) By default the model types `sbm` and `sbm_gwf` use the kinematic wave approach for river and overland flow. There is also the option to use the local inertial model for 1D river and 2D overland flow, by providing the following in the TOML file: @@ -119,9 +142,9 @@ overland flow, by providing the following in the TOML file: river_routing = "local-inertial" land_routing = "local-inertial" ``` -The mapping for the river and land component changes, as shown below. For an explanation -about the type parameters between curly braces after the `struct` name see the section on -the model parameters. +The mapping for the river and land component changes, as shown below. For an explanation about +the type parameters between curly braces after the `struct` name see the section on the model +parameters. ```julia lateral.river => struct ShallowWaterRiver{T,R,L} @@ -129,39 +152,41 @@ lateral.land => struct ShallowWaterLand{T} ``` The local inertial approach is described in more detail in the section [Local inertial -model](@ref local_inertial). +model](./lateral/local-inertial.qmd). -## [wflow\_sediment](@id config_sediment) +## wflow\_sediment The processes and fate of many particles and pollutants impacting water quality at the catchment level are intricately linked to the processes governing sediment dynamics. Both nutrients such as phosphorus, carbon or other pollutants such as metals are influenced by sediment properties in processes such as mobilization, flocculation or deposition. To better assert and model water quality in inland systems, a better comprehension and modelling of -sediment sources and fate in the river is needed at a spatial and time scale relevant to -such issues. +sediment sources and fate in the river is needed at a spatial and time scale relevant to such +issues. The wflow\_sediment model was developed to answer such issues. It is a distributed physics-based model, based on the distributed hydrologic wflow\_sbm model. It is able to -simulate both land and in-stream processes, and relies on available global datasets, -parameter estimation and small calibration effort. +simulate both land and in-stream processes, and relies on available global datasets, parameter +estimation and small calibration effort. In order to model the exports of terrestrial sediment to the coast through the Land Ocean Aquatic Continuum or LOAC (inland waters network such as streams, lakes...), two different modelling parts were considered. The first part, called the inland sediment model, is the -modelling and estimation of soil loss and sediment yield to the river system by land -erosion, separated into vertical [Soil Erosion](@ref) processes and lateral [Sediment Flux -in overland flow](@ref). The second part, called the [River Sediment Model](@ref) is the -transport and processes of the sediment in the river system. The two parts together -constitute the wflow\_sediment model. +modelling and estimation of soil loss and sediment yield to the river system by land erosion, +separated into vertical [Soil Erosion](./vertical/sediment.qmd#soil-erosion) processes and +lateral [Sediment Flux in overland +flow](./lateral/sediment_flux.qmd#sediment-flux-in-overland-flow). The second part, called the +[River Sediment Model](./lateral/sediment_flux.qmd#river-sediment-model) is the transport and +processes of the sediment in the river system. The two parts together constitute the +wflow\_sediment model. Overview of the concepts of the wflow\_sediment model: ![wflow_sediment](../images/wflow_sediment.png) ### Configuration -As sediment generation and transport processes are linked to the hydrology and water flows, -the inputs to the wflow\_sediment model come directly from a hydrological model. The -required dynamic inputs to run wflow\_sediment are: +As sediment generation and transport processes are linked to the hydrology and water flows, the +inputs to the wflow\_sediment model come directly from a hydrological model. The required +dynamic inputs to run wflow\_sediment are: - Precipitation (can also come from the hydrological forcing data), - Land runoff (overland flow) from the kinematic wave, diff --git a/docs/src/model_docs/params_lateral.md b/docs/model_docs/parameters_lateral.qmd similarity index 55% rename from docs/src/model_docs/params_lateral.md rename to docs/model_docs/parameters_lateral.qmd index b2321b674..e5913806c 100644 --- a/docs/src/model_docs/params_lateral.md +++ b/docs/model_docs/parameters_lateral.qmd @@ -1,229 +1,154 @@ -# [Parameters lateral concepts](@id params_lat) +--- +title: Lateral concepts +--- ## Kinematic wave ### Surface flow -The Table below shows the parameters (fields) of struct `SurfaceFlowRiver` used for river -flow, including a description of these parameters, the unit, and default value if -applicable. The parameters in bold represent model parameters that can be set through static -input data (netCDF), and can be listed in the TOML configuration file under -`[input.lateral.river]` to map the internal model parameter to the external netCDF variable. -The input parameter `slope` (listed under `[input.lateral.river]`) is not equal to the -internal model parameter `sl`, and is listed in the Table below between parentheses. - -| parameter | description | unit | default | -|:--------------- | ------------------| ----- | -------- | +The Table below shows the parameters (fields) of struct `SurfaceFlowRiver` used for river flow, +including a description of these parameters, the unit, and default value if applicable. The +parameters in bold represent model parameters that can be set through static input data +(netCDF), and can be listed in the TOML configuration file under `[input.lateral.river]` to map +the internal model parameter to the external netCDF variable. The input parameter `slope` +(listed under `[input.lateral.river]`) is not equal to the internal model parameter `sl`, and +is listed in the Table below between parentheses. + +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | | `beta` | constant in Manning's equation | - | - | -| **`sl`** (`slope`) | slope | m m``^{-1}``| - | -| **`n`** | Manning's roughness | s m``^{-\frac{1}{3}}``| 0.036 | +| **`sl`** (`slope`) | slope | m m$^{-1}$| - | +| **`n`** | Manning's roughness | s m$^{-\frac{1}{3}}$| 0.036 | | **`dl`** | length | m | - | -| `q` | discharge | m``^3`` s``^{-1}``| - | -| `qin` | inflow from upstream cells | m``^3`` s``^{-1}``| - | -| `q_av` | average discharge | m``^3`` s``^{-1}``| - | -| `qlat` | lateral inflow per unit length | m``^2`` s``^{-1}``| - | -| `inwater` | lateral inflow | m``^3`` s``^{-1}``| - | -| **`inflow`** | external inflow (abstraction/supply/demand) | m``^3`` s``^{-1}``| 0.0 | -| `inflow_wb` | inflow waterbody (lake or reservoir model) from land part | m``^3`` s``^{-1}``| 0.0 | -| `abstraction` | abstraction (computed as part of water demand and allocation) | m``^3`` s``^{-1}``| 0.0 | -| `volume` | kinematic wave volume |m``^3``| - | +| `q` | discharge | m$^3$ s$^{-1}$| - | +| `qin` | inflow from upstream cells | m$^3$ s$^{-1}$| - | +| `q_av` | average discharge | m$^3$ s$^{-1}$| - | +| `qlat` | lateral inflow per unit length | m$^2$ s$^{-1}$| - | +| `inwater` | lateral inflow | m$^3$ s$^{-1}$| - | +| **`inflow`** | external inflow (abstraction/supply/demand) | m$^3$ s$^{-1}$| 0.0 | +| `inflow_wb` | inflow waterbody (lake or reservoir model) from land part | m$^3$ s$^{-1}$| 0.0 | +| `abstraction` | abstraction (computed as part of water demand and allocation) | m$^3$ s$^{-1}$| 0.0 | +| `volume` | kinematic wave volume |m$^3$| - | | `h` | water level | m | - | | `h_av` | average water level | m | - | | **`bankfull_depth`** | bankfull river depth | m | 1.0 | | `dt` | model time step | s | - | | `its` | number of fixed iterations | - | - | | **`width`** | width | m | - | -| `alpha_pow` | used in the power part of ``\alpha`` | - | - | -| `alpha_term` | term used in computation of ``\alpha`` | - | - | -| `alpha` | constant in momentum equation ``A = \alpha Q^{\beta}`` | s``^{\frac{3}{5}}`` m``^{\frac{1}{5}}`` | - | -| `cel` | celerity of kinematic wave | m s``^{-1}`` | - | +| `alpha_pow` | used in the power part of $\alpha$ | - | - | +| `alpha_term` | term used in computation of $\alpha$ | - | - | +| `alpha` | constant in momentum equation $A = \alpha Q^{\beta}$ | s$^{\frac{3}{5}}$ m$^{\frac{1}{5}}$ | - | +| `cel` | celerity of kinematic wave | m s$^{-1}$ | - | | `reservoir_index` | map cell to 0 (no reservoir) or i (pick reservoir i in reservoir field) | - | - | | `lake_index` | map cell to 0 (no lake) or i (pick lake i in lake field) | - | - | | `reservoir` | an array of reservoir models `SimpleReservoir` | - | - | | `lake` | an array of lake models `Lake` | - | - | | `allocation`| water allocation of type `AllocationRiver` | - | - | | `kinwave_it` | boolean for kinematic wave iterations | - | false | +: {.striped .hover} The Table below shows the parameters (fields) of struct `SurfaceFlowLand` used for overland -flow, including a description of these parameters, the unit, and default value if -applicable. The parameters in bold represent model parameters that can be set through static -input data (netCDF), and can be listed in the TOML configuration file under -`[input.lateral.land]` to map the internal model parameter to the external netCDF variable. -The input parameter `slope` (listed under `[input.lateral.land]`) is not equal to the -internal model parameter `sl`, and is listed in the Table below between parentheses. - -| parameter | description | unit | default | -|:--------------- | ------------------| ----- | -------- | +flow, including a description of these parameters, the unit, and default value if applicable. +The parameters in bold represent model parameters that can be set through static input data +(netCDF), and can be listed in the TOML configuration file under `[input.lateral.land]` to map +the internal model parameter to the external netCDF variable. The input parameter `slope` +(listed under `[input.lateral.land]`) is not equal to the internal model parameter `sl`, and is +listed in the Table below between parentheses. + +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | | `beta` | constant in Manning's equation | - | - | -| **`sl`** (`slope`) | slope | m m``^{-1}``| - | -| **`n`** | Manning's roughness | s m``^{-\frac{1}{3}}``| 0.072 | +| **`sl`** (`slope`) | slope | m m$^{-1}$| - | +| **`n`** | Manning's roughness | s m$^{-\frac{1}{3}}$| 0.072 | | `dl` | length | m | - | -| `q` | discharge | m``^3`` s``^{-1}``| - | -| `qin` | inflow from upstream cells | m``^3`` s``^{-1}``| - | -| `q_av` | average discharge | m``^3`` s``^{-1}``| - | -| `qlat` | lateral inflow per unit length | m``^2`` s``^{-1}``| - | -| `inwater` | lateral inflow | m``^3`` s``^{-1}``| - | -| `volume` | kinematic wave volume |m``^3``| - | +| `q` | discharge | m$^3$ s$^{-1}$| - | +| `qin` | inflow from upstream cells | m$^3$ s$^{-1}$| - | +| `q_av` | average discharge | m$^3$ s$^{-1}$| - | +| `qlat` | lateral inflow per unit length | m$^2$ s$^{-1}$| - | +| `inwater` | lateral inflow | m$^3$ s$^{-1}$| - | +| `volume` | kinematic wave volume |m$^3$| - | | `h` | water level | m | - | | `h_av` | average water level | m | - | | `dt` | model time step | s | - | | `its` | number of fixed iterations | - | - | | `width` | width | m | - | -| `alpha_pow` | used in the power part of ``\alpha`` | - | - | -| `alpha_term` | term used in computation of ``\alpha`` | - | - | -| `alpha` | constant in momentum equation ``A = \alpha Q^{\beta}`` | s``^{\frac{3}{5}}`` m``^{\frac{1}{5}}`` | - | -| `cel` | celerity of kinematic wave | m s``^{-1}`` | - | -| `to_river` | part of overland flow that flows to the river | m``^3`` s``^{-1}`` | - | +| `alpha_pow` | used in the power part of $\alpha$ | - | - | +| `alpha_term` | term used in computation of $\alpha$ | - | - | +| `alpha` | constant in momentum equation $A = \alpha Q^{\beta}$ | s$^{\frac{3}{5}}$ m$^{\frac{1}{5}}$ | - | +| `cel` | celerity of kinematic wave | m s$^{-1}$ | - | +| `to_river` | part of overland flow that flows to the river | m$^3$ s$^{-1}$ | - | | `kinwave_it` | boolean for kinematic wave iterations | - | false | +: {.striped .hover} -### [Reservoirs](@id reservoir_params) -The Table below shows the parameters (fields) of struct `SimpleReservoir`, including a -description of these parameters, the unit, and default value if applicable. The parameters -in bold represent model parameters that can be set through static input data (netCDF), and -can be listed in the TOML configuration file under `[input.lateral.river.reservoir]`, to map -the internal model parameter to the external netCDF variable. - -Two parameters reservoir coverage `areas` and the outlet of reservoirs (unique id) `locs` -that are not part of the `SimpleReservoir` struct are also required, and can be set as -follows through the TOML file: - -```toml -[input.lateral.river.reservoir] -areas = "wflow_reservoirareas" -locs = "wflow_reservoirlocs" -``` - -| parameter | description | unit | default | -|:---------------| --------------- | ---------------------- | ----- | -| **`area`** | area | m``^2`` | - | -| **`demand`** | minimum (environmental) flow requirement downstream of the reservoir | m``^3`` s``^{-1}``| - | -| **`maxrelease`** | maximum amount that can be released if below spillway | m``^3`` s``^{-1}`` | - | -| **`maxvolume`** | maximum storage (above which water is spilled) | m``^3`` | - | -| **`targetfullfrac`** | target fraction full (of max storage)| - | - | -| **`targetminfrac`** | target minimum full fraction (of max storage) | - | - | -| `demandrelease`| minimum (environmental) flow released from reservoir | m``^3`` s``^{-1}``| - | -| `dt` | model time step | s | - | -| `volume` | volume | m``^3`` | - | -| `inflow` | total inflow into reservoir | m``^3`` | - | -| `outflow` | outflow of reservoir | m``^3`` s``^{-1}`` | - | -| `totaloutflow` | total outflow of reservoir | m``^3`` | - | -| `percfull` | fraction full (of max storage) | - | - | -| `precipitation` | average precipitation for reservoir area | mm Δt⁻¹ | - | -| `evaporation` | average potential evaporation for reservoir area | mm Δt⁻¹ | - | -| `actevap` | average actual evaporation for lake area | mm Δt⁻¹ | - | - -### [Lakes](@id lake_params) -The Table below shows the parameters (fields) of struct `Lake`, including a description of -these parameters, the unit, and default value if applicable. The parameters in bold -represent model parameters that can be set through static input data (netCDF), and can be -listed in the TOML configuration file under `[input.lateral.river.lake]`, to map the -internal model parameter to the external netCDF variable. - -Two parameters lake coverage `areas` and the outlet of lakes (unique id) `locs` that are not -part of the `Lake` struct are also required, and can be set as follows through the -TOML file: - -```toml -[input.lateral.river.lake] -areas = "wflow_lakeareas" -locs = "wflow_lakelocs" -``` - -The input parameter `linkedlakelocs` (listed under `[input.lateral.river.lake]`) is not -equal to the internal model parameter `lowerlake_ind`, and is listed in the Table below -between parentheses. - -| parameter | description | unit | default | -|:---------------| --------------- | ---------------------- | ----- | -| **`area`** | area| m``^2`` | - | -| **`b`** | Rating curve coefficient | - | - | -| **`e`** | Rating curve exponent | - | - | -| **`outflowfunc`** | type of lake rating curve | - | - | -| **`storfunc`** | type of lake storage curve| - | - | -| **`threshold`** | water level threshold ``H_0`` below that level outflow is zero | m | - | -| **`waterlevel`** | waterlevel ``H`` of lake | m | - | -| **`lowerlake_ind`** (`linkedlakelocs`) | Index of lower lake (linked lakes) | - | 0 | -| **`sh`** | data for storage curve | - | - | -| **`hq`** | data rating curve | - | - | -| `dt` | model time step | s | - | -| `inflow` | total inflow to the lake | m``^3`` | - | -| `storage` | storage lake | m``^3`` | - | -| `maxstorage`| maximum storage lake with rating curve type 1 | m``^3`` | - | -| `outflow` | outflow lake | m``^3`` s``^{-1}`` | - | -| `totaloutflow` | total outflow lake | m``^3`` | - | -| `precipitation` | average precipitation for lake area | mm Δt⁻¹ | - | -| `evaporation` | average potential evaporation for lake area | mm Δt⁻¹ | - | -| `actevap` | average actual evaporation for lake area | mm Δt⁻¹ | - | - -### [Lateral subsurface flow](@id params_ssf) -The Table below shows the parameters (fields) of struct `LateralSSF`, including a -description of these parameters, the unit, and default value if applicable. The parameters -in bold represent model parameters that can be set through static input data (netCDF). The -soil related parameters `f`, `soilthickness`, `z_exp`, `theta_s` and `theta_r` are derived from the -vertical `SBM` concept (including unit conversion for `f`, `z_exp` and `soilthickness`), and -can be listed in the TOML configuration file under `[input.vertical]`, to map the internal -model parameter to the external netCDF variable. The internal slope model parameter `slope` is -set through the TOML file as follows: +### Lateral subsurface flow +The Table below shows the parameters (fields) of struct `LateralSSF`, including a description +of these parameters, the unit, and default value if applicable. The parameters in bold +represent model parameters that can be set through static input data (netCDF). The soil related +parameters `f`, `soilthickness`, `z_exp`, `theta_s` and `theta_r` are derived from the vertical +`SBM` concept (including unit conversion for `f`, `z_exp` and `soilthickness`), and can be +listed in the TOML configuration file under `[input.vertical]`, to map the internal model +parameter to the external netCDF variable. The internal slope model parameter `slope` is set +through the TOML file as follows: ```toml [input.lateral.land] slope = "Slope" ``` -The parameter `kh_0` is computed by multiplying the vertical hydraulic conductivity at the -soil surface `kv_0` (including unit conversion) of the vertical `SBM` concept with the -internal parameter `khfrac` \[-\] (default value of 1.0). The internal model parameter -`khfrac` is set through the TOML file as follows: +The parameter `kh_0` is computed by multiplying the vertical hydraulic conductivity at the soil +surface `kv_0` (including unit conversion) of the vertical `SBM` concept with the internal +parameter `khfrac` \[-\] (default value of 1.0). The internal model parameter `khfrac` is set +through the TOML file as follows: ```toml [input.lateral.subsurface] ksathorfrac = "KsatHorFrac" ``` -The `khfrac` parameter compensates for anisotropy, small scale `kv_0` measurements (soil -core) that do not represent larger scale hydraulic conductivity, and smaller flow length -scales (hillslope) in reality, not represented by the model resolution. +The `khfrac` parameter compensates for anisotropy, small scale `kv_0` measurements (soil core) +that do not represent larger scale hydraulic conductivity, and smaller flow length scales +(hillslope) in reality, not represented by the model resolution. -For the vertical [SBM](@ref params_sbm) concept different vertical hydraulic conductivity -depth profiles are possible, and these also determine which `LateralSSF` parameters are used -including the input requirements for the computation of lateral subsurface flow. For the -`exponential` profile the model parameters `kh_0` and `f` are used. For the +For the vertical [SBM](./parameters_vertical.qmd#sbm) concept different vertical hydraulic +conductivity depth profiles are possible, and these also determine which `LateralSSF` +parameters are used including the input requirements for the computation of lateral subsurface +flow. For the `exponential` profile the model parameters `kh_0` and `f` are used. For the `exponential_constant` profile `kh_0` and `f` are used, and `z_exp` is required as part of -`[input.vertical]`. For the `layered` profile, `SBM` model parameter `kv` is used, and for -the `layered_exponential` profile `kv` is used and `z_exp` is required as part of +`[input.vertical]`. For the `layered` profile, `SBM` model parameter `kv` is used, and for the +`layered_exponential` profile `kv` is used and `z_exp` is required as part of `[input.vertical]`. -| parameter | description | unit | default | -|:---------------| --------------- | ---------------------- | ----- | -| `kh_0` | horizontal hydraulic conductivity at soil surface | m d``^{-1}`` | 3.0 | -| **`f`** | a scaling parameter (controls exponential decline of `kh_0`) | m``^{-1}`` | 1.0 | -| `kh` | horizontal hydraulic conductivity | m d``^{-1}`` | - | +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | +| `kh_0` | horizontal hydraulic conductivity at soil surface | m d$^{-1}$ | 3.0 | +| **`f`** | a scaling parameter (controls exponential decline of `kh_0`) | m$^{-1}$ | 1.0 | +| `kh` | horizontal hydraulic conductivity | m d$^{-1}$ | - | | **`khfrac`** (`ksathorfrac`) | a muliplication factor applied to vertical hydraulic conductivity `kv` | - | 100.0 | | **`soilthickness`** | soil thickness | m | 2.0 | | **`theta_s`** | saturated water content (porosity) | - | 0.6 | | **`theta_r`** | residual water content | - | 0.01 | | `dt` | model time step | d | - | -| **`slope`** | slope | m m``^{-1}`` | - | +| **`slope`** | slope | m m$^{-1}$ | - | | `dl` | drain length | m | - | | `dw` | drain width | m | - | | `zi` | pseudo-water table depth (top of the saturated zone) | m | - | | **`z_exp`** | depth from soil surface for which exponential decline of `kh_0` is valid | m | - | | `exfiltwater` | exfiltration (groundwater above surface level, saturated excess conditions) | m Δt⁻¹ | - | -| `recharge` | net recharge to saturated store | m``^2`` Δt⁻¹ | - | -| `ssf` | subsurface flow | m``^3`` d``{-1}`` | - | -| `ssfin` | inflow from upstream cells | m``^3`` d``{-1}`` | - | -| `ssfmax` | maximum subsurface flow | m``^2`` d``{-1}`` | - | -| `to_river` | part of subsurface flow that flows to the river | m``^3`` d``{-1}`` | - | -| `volume` | subsurface water volume | m``^3`` | - | +| `recharge` | net recharge to saturated store | m$^2$ Δt⁻¹ | - | +| `ssf` | subsurface flow | m$^3$ d${-1}$ | - | +| `ssfin` | inflow from upstream cells | m$^3$ d${-1}$ | - | +| `ssfmax` | maximum subsurface flow | m$^2$ d${-1}$ | - | +| `to_river` | part of subsurface flow that flows to the river | m$^3$ d${-1}$ | - | +| `volume` | subsurface water volume | m$^3$ | - | ## Local inertial -### [River flow](@id local-inertial_river_params) +### River flow The Table below shows the parameters (fields) of struct `ShallowWaterRiver`, including a -description of these parameters, the unit, and default value if applicable. The parameters -in bold represent model parameters that can be set through static input data (netCDF), and -can be listed in the TOML configuration file under `[input.lateral.river]`, to map the -internal model parameter to the external netCDF variable. The parameter river bed elevation -`zb` is based on the bankfull elevation and depth input data: +description of these parameters, the unit, and default value if applicable. The parameters in +bold represent model parameters that can be set through static input data (netCDF), and can be +listed in the TOML configuration file under `[input.lateral.river]`, to map the internal model +parameter to the external netCDF variable. The parameter river bed elevation `zb` is based on +the bankfull elevation and depth input data: ```toml [input.lateral.river] @@ -234,15 +159,15 @@ bankfull_depth = "RiverDepth" When floodplain routing (parameter `floodplain`) is included as part of local inertial river flow, parameter `q_av` represents the total average discharge of the river channel and floodplain routing, and parameter `q_channel_av` represents average river channel discharge. -Otherwise parameters `q_av` and `q_channel_av` represent both average river channel -discharge (are equal). +Otherwise parameters `q_av` and `q_channel_av` represent both average river channel discharge +(are equal). The input parameter `n` (listed under `[input.lateral.river]`) is not equal to the internal model parameter `mannings_n`, and is listed in the Table below between parentheses. -| parameter | description | unit | default | -|:--------------- | ------------------| ------- | ------ | -| **`mannings_n`** (`n`) | Manning's roughness | s m``^{-\frac{1}{3}}`` | 0.036 | +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | +| **`mannings_n`** (`n`) | Manning's roughness | s m$^{-\frac{1}{3}}$ | 0.036 | | **`width`** | river width | m | - | | `zb` | river bed elevation | m | - | | **`length`** | river length | m | - | @@ -250,15 +175,15 @@ model parameter `mannings_n`, and is listed in the Table below between parenthes | `ne` | number of edges/links | - | - | | `active_n` | active nodes | - | - | | `active_e` | active edges | - | - | -| `g` | acceleration due to gravity | m s``^{-2}`` | - | +| `g` | acceleration due to gravity | m s$^{-2}$ | - | | `alpha` | stability coefficient (Bates et al., 2010) | - | 0.7 | | `h_thresh` | depth threshold for calculating flow | m | 0.001 | | `dt` | model time step | s | - | -| `q` | river discharge (subgrid channel) | m``^3`` s``^{-1}`` | - | -| `q_av` | average river channel (+ floodplain) discharge | m``^3`` s``^{-1}`` | - | -| `q_channel_av` | average river channel discharge | m``^3`` s``^{-1}`` | - | +| `q` | river discharge (subgrid channel) | m$^3$ s$^{-1}$ | - | +| `q_av` | average river channel (+ floodplain) discharge | m$^3$ s$^{-1}$ | - | +| `q_channel_av` | average river channel discharge | m$^3$ s$^{-1}$ | - | | `zb_max` | maximum channel bed elevation | m | - | -| `mannings_n_sq` | Manning's roughness squared at edge/link | (s m``^{-\frac{1}{3}}``)``^2`` | - | +| `mannings_n_sq` | Manning's roughness squared at edge/link | (s m$^{-\frac{1}{3}}$)$^2$ | - | | `h` | water depth | m | - | | `zs_max` | maximum water elevation | m | - | | `zs_src` | water elevation of source node of edge | m | - | @@ -269,15 +194,15 @@ model parameter `mannings_n`, and is listed in the Table below between parenthes | `dl_at_link` | river length at edge/link | m | - | | `width` | river width | m | - | | `width_at_link` | river width at edge/link | m | - | -| `a` | flow area at edge/link | m``^2`` | - | +| `a` | flow area at edge/link | m$^2$ | - | | `r` | hydraulic radius at edge/link | m | - | -| `volume` | river volume | m``^3`` | - | -| `error` | error volume | m``^3`` | - | -| `inwater` | lateral inflow | m``^3`` s``^{-1}`` | - | -| **`inflow`** | external inflow (abstraction/supply/demand) | m``^3`` s``^{-1}``| 0.0 | -| `abstraction` | abstraction (computed as part of water demand and allocation) | m``^3`` s``^{-1}``| 0.0 | -| `inflow_wb` | inflow waterbody (lake or reservoir model) from land part | m``^3`` s``^{-1}``| 0.0 | -| `bankfull_volume` | bankfull volume | m``^3`` | - | +| `volume` | river volume | m$^3$ | - | +| `error` | error volume | m$^3$ | - | +| `inwater` | lateral inflow | m$^3$ s$^{-1}$ | - | +| **`inflow`** | external inflow (abstraction/supply/demand) | m$^3$ s$^{-1}$| 0.0 | +| `abstraction` | abstraction (computed as part of water demand and allocation) | m$^3$ s$^{-1}$| 0.0 | +| `inflow_wb` | inflow waterbody (lake or reservoir model) from land part | m$^3$ s$^{-1}$| 0.0 | +| `bankfull_volume` | bankfull volume | m$^3$ | - | | **`bankfull_depth`** | bankfull depth | m | - | | `froude_limit` | if true a check is performed if froude number > 1.0 (algorithm is modified) | - | - | | `reservoir_index` | river cell index with a reservoir | - | - | @@ -287,44 +212,47 @@ model parameter `mannings_n`, and is listed in the Table below between parenthes | `lake` | an array of lake models `Lake` | - | - | | `allocation`| optional water allocation of type `AllocationRiver` | - | - | | `floodplain` | optional 1D floodplain routing `FloodPlain` | - | - | +: {.striped .hover} -### [1D floodplain](@id local-inertial_floodplain_params) +### 1D floodplain The Table below shows the parameters (fields) of struct `FloodPlain` (part of struct -`ShallowWaterRiver`), including a description of these parameters, the unit, and default -value if applicable. The parameters in bold represent model parameters that can be set -through static input data (netCDF), and can be listed in the TOML configuration file under -`[input.lateral.river.floodplain]`, to map the internal model parameter to the external -netCDF variable. The input parameter `n` (listed under `[input.lateral.river.floodplain]`) -is not equal to the internal model parameter `mannings_n`, and is listed in the Table below -between parentheses. +`ShallowWaterRiver`), including a description of these parameters, the unit, and default value +if applicable. The parameters in bold represent model parameters that can be set through static +input data (netCDF), and can be listed in the TOML configuration file under +`[input.lateral.river.floodplain]`, to map the internal model parameter to the external netCDF +variable. The input parameter `n` (listed under `[input.lateral.river.floodplain]`) is not +equal to the internal model parameter `mannings_n`, and is listed in the Table below between +parentheses. -| parameter | description | unit | default | -|:--------------- | ------------------| ----- | -------- | +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | | **`profile`** | Floodplain profile `FloodPlainProfile` | | | -| **`mannings_n`** (`n`) | Manning's roughness for the floodplain | s m``^{-\frac{1}{3}}`` | 0.072 | -| `mannings_n_sq` | Manning's roughness squared at edge/link | (s m``^{-\frac{1}{3}}``)``^2`` | - | -| `volume` | flood volume | m``^3`` | - | +| **`mannings_n`** (`n`) | Manning's roughness for the floodplain | s m$^{-\frac{1}{3}}$ | 0.072 | +| `mannings_n_sq` | Manning's roughness squared at edge/link | (s m$^{-\frac{1}{3}}$)$^2$ | - | +| `volume` | flood volume | m$^3$ | - | | `h` | flood depth | m | - | | `h_av` | average flood depth | m | - | -| `error` | | error volume | m``^3`` | - | -| `a` | flow area at edge/link | m``^2`` | - | +| `error` | | error volume | m$^3$ | - | +| `a` | flow area at edge/link | m$^2$ | - | | `r` | hydraulic radius at edge/link | m | - | | `hf` | flood depth at edge/link | m | - | | `zb_max` | maximum bankfull elevation at edge | m | - | -| `q0` | discharge at previous time step| m``^3`` s``^{-1}`` | - | -| `q` | discharge | m``^3`` s``^{-1}`` | - | -| `q_av` | average discharge | m``^3`` s``^{-1}`` | - | +| `q0` | discharge at previous time step| m$^3$ s$^{-1}$ | - | +| `q` | discharge | m$^3$ s$^{-1}$ | - | +| `q_av` | average discharge | m$^3$ s$^{-1}$ | - | | `hf_index` | index with `hf` above depth threshold | - | - | +: {.striped .hover} The floodplain profile `FloodPlainProfile` contains the following parameters: -| parameter | description | unit | default | -|:--------------- | ------------------| ----- | -------- | +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | | **`depth`** (`flood_depth`) | flood depths | m | - | -| **`volume`** | cumulative flood volume (per flood depth) | m``^3`` | - | +| **`volume`** | cumulative flood volume (per flood depth) | m$^3$ | - | | `width` | cumulative floodplain width (per flood depth) | m | - | -| `a` | cumulative floodplain flow area (per flood depth) | m``^2`` | - | +| `a` | cumulative floodplain flow area (per flood depth) | m$^2$ | - | | `p` | cumulative floodplain wetted perimeter (per flood depth) | m | - | +: {.striped .hover} The floodplain volumes (per flood `depth` interval) can be set as follows through the TOML file: @@ -337,61 +265,144 @@ volume = "floodplain_volume" The input parameter `flood_depth` (dimension of floodplain `volume`) is not equal to the internal model parameter `depth`, and is listed in the Table below between parentheses. -### [Overland flow](@id local-inertial_land_params) +### Overland flow The Table below shows the parameters (fields) of struct `ShallowWaterLand`, including a -description of these parameters, the unit, and default value if applicable. The parameters -in bold represent model parameters that can be set through static input data (netCDF), and -can be listed in the TOML configuration file under `[input.lateral.land]`, to map the -internal model parameter to the external netCDF variable. +description of these parameters, the unit, and default value if applicable. The parameters in +bold represent model parameters that can be set through static input data (netCDF), and can be +listed in the TOML configuration file under `[input.lateral.land]`, to map the internal model +parameter to the external netCDF variable. -The mannings roughness (for the computation of `mannings_n_sq`) should be provided as -follows in the TOML file: +The mannings roughness (for the computation of `mannings_n_sq`) should be provided as follows +in the TOML file: ```toml [input.lateral.land] n = "n_land" # mannings roughness ``` + The input parameter `elevation` (listed under `[input.lateral.land]`) is not equal to the internal model parameter `z`, and is listed in the Table below between parentheses. -| parameter | description | unit | default | -|:--------------- | ------------------| ----- | -------- | +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | | `n` | number of cells | - | - | | `xl`| cell length x direction | m | - | | `yl`| cell length y direction | m | - | | `xwidth`| effective flow width x direction (floodplain) | m | - | | `ywidth`| effective flow width y direction (floodplain) | m | - | -| `g` | acceleration due to gravity | m s``^{-2}`` | - | +| `g` | acceleration due to gravity | m s$^{-2}$ | - | | `theta` | weighting factor (de Almeida et al., 2012) | - | 0.8 | | `alpha` | stability coefficient (Bates et al., 2010) | - | 0.7 | | `h_thresh` | depth threshold for calculating flow | m | 0.001 | | `dt` | model time step| s | - | -| `qy0` | flow in y direction at previous time step| m``^3`` s``^{-1}`` | - | -| `qx0` | flow in x direction at previous time step| m``^3`` s``^{-1}`` | - | -| `qx` | flow in x direction | m``^3`` s``^{-1}`` | - | -| `qy` | flow in y direction | m``^3`` s``^{-1}`` | - | +| `qy0` | flow in y direction at previous time step| m$^3$ s$^{-1}$ | - | +| `qx0` | flow in x direction at previous time step| m$^3$ s$^{-1}$ | - | +| `qx` | flow in x direction | m$^3$ s$^{-1}$ | - | +| `qy` | flow in y direction | m$^3$ s$^{-1}$ | - | | `zx_max` | maximum cell elevation (x direction) | m | - | | `zy_max` | maximum cell elevation (y direction) | m | - | -| `mannings_n_sq` | Manning's roughness squared | s m``^{-\frac{1}{3}}`` | based on 0.072 | -| `volume` | total volume of cell (including river volume for river cells) | m``^3`` | - | -| `error` | error volume | m``^3`` | - | -| `runoff` | runoff from hydrological model | m``^3`` s``^{-1}`` | - | +| `mannings_n_sq` | Manning's roughness squared | s m$^{-\frac{1}{3}}$ | based on 0.072 | +| `volume` | total volume of cell (including river volume for river cells) | m$^3$ | - | +| `error` | error volume | m$^3$ | - | +| `runoff` | runoff from hydrological model | m$^3$ s$^{-1}$ | - | | `h` | water depth of cell | m | - | | **`z`** (`elevation`) | elevation of cell | m | - | | `froude_limit` | if true a check is performed if froude number > 1.0 (algorithm is modified)| - | - | | `rivercells` | river cells| - | - | | `h_av` | average water depth| m | - | +## Water bodies + +### Reservoirs +The Table below shows the parameters (fields) of struct `SimpleReservoir`, including a +description of these parameters, the unit, and default value if applicable. The parameters in +bold represent model parameters that can be set through static input data (netCDF), and can be +listed in the TOML configuration file under `[input.lateral.river.reservoir]`, to map the +internal model parameter to the external netCDF variable. + +Two parameters reservoir coverage `areas` and the outlet of reservoirs (unique id) `locs` that +are not part of the `SimpleReservoir` struct are also required, and can be set as follows +through the TOML file: + +```toml +[input.lateral.river.reservoir] +areas = "wflow_reservoirareas" +locs = "wflow_reservoirlocs" +``` + +| parameter | description | unit | default | +|:---------------| --------------- | ---------------------- | ----- | +| **`area`** | area | m``^2`` | - | +| **`demand`** | minimum (environmental) flow requirement downstream of the reservoir | m``^3`` s``^{-1}``| - | +| **`maxrelease`** | maximum amount that can be released if below spillway | m``^3`` s``^{-1}`` | - | +| **`maxvolume`** | maximum storage (above which water is spilled) | m``^3`` | - | +| **`targetfullfrac`** | target fraction full (of max storage)| - | - | +| **`targetminfrac`** | target minimum full fraction (of max storage) | - | - | +| `demandrelease`| minimum (environmental) flow released from reservoir | m``^3`` s``^{-1}``| - | +| `dt` | model time step | s | - | +| `volume` | volume | m``^3`` | - | +| `inflow` | total inflow into reservoir | m``^3`` | - | +| `outflow` | outflow of reservoir | m``^3`` s``^{-1}`` | - | +| `totaloutflow` | total outflow of reservoir | m``^3`` | - | +| `percfull` | fraction full (of max storage) | - | - | +| `precipitation` | average precipitation for reservoir area | mm Δt⁻¹ | - | +| `evaporation` | average potential evaporation for reservoir area | mm Δt⁻¹ | - | +| `actevap` | average actual evaporation for lake area | mm Δt⁻¹ | - | + +### Lakes +The Table below shows the parameters (fields) of struct `Lake`, including a description of +these parameters, the unit, and default value if applicable. The parameters in bold +represent model parameters that can be set through static input data (netCDF), and can be +listed in the TOML configuration file under `[input.lateral.river.lake]`, to map the +internal model parameter to the external netCDF variable. + +Two parameters lake coverage `areas` and the outlet of lakes (unique id) `locs` that are not +part of the `Lake` struct are also required, and can be set as follows through the +TOML file: + +```toml +[input.lateral.river.lake] +areas = "wflow_lakeareas" +locs = "wflow_lakelocs" +``` + +The input parameter `linkedlakelocs` (listed under `[input.lateral.river.lake]`) is not +equal to the internal model parameter `lowerlake_ind`, and is listed in the Table below +between parentheses. + +| parameter | description | unit | default | +|:---------------| --------------- | ---------------------- | ----- | +| **`area`** | area| m``^2`` | - | +| **`b`** | Rating curve coefficient | - | - | +| **`e`** | Rating curve exponent | - | - | +| **`outflowfunc`** | type of lake rating curve | - | - | +| **`storfunc`** | type of lake storage curve| - | - | +| **`threshold`** | water level threshold ``H_0`` below that level outflow is zero | m | - | +| **`waterlevel`** | waterlevel ``H`` of lake | m | - | +| **`lowerlake_ind`** (`linkedlakelocs`) | Index of lower lake (linked lakes) | - | 0 | +| **`sh`** | data for storage curve | - | - | +| **`hq`** | data rating curve | - | - | +| `dt` | model time step | s | - | +| `inflow` | total inflow to the lake | m``^3`` | - | +| `storage` | storage lake | m``^3`` | - | +| `maxstorage`| maximum storage lake with rating curve type 1 | m``^3`` | - | +| `outflow` | outflow lake | m``^3`` s``^{-1}`` | - | +| `totaloutflow` | total outflow lake | m``^3`` | - | +| `precipitation` | average precipitation for lake area | mm Δt⁻¹ | - | +| `evaporation` | average potential evaporation for lake area | mm Δt⁻¹ | - | +| `actevap` | average actual evaporation for lake area | mm Δt⁻¹ | - | + + ## Water allocation river The Table below shows the parameters (fields) of struct `AllocationRiver`, used when water -demand and allocation is computed (optional), including a description of these parameters, -the unit, and default value if applicable. +demand and allocation is computed (optional), including a description of these parameters, the +unit, and default value if applicable. | parameter | description | unit | default | |:--------------- | ------------------| ----- | -------- | | `act_surfacewater_abst` | actual surface water abstraction | mm Δt⁻¹ | - | -| `act_surfacewater_abst_vol`| actual surface water abstraction | m``^3`` Δt⁻¹ | - | -| `available_surfacewater`| available surface water | m``^3`` | - | +| `act_surfacewater_abst_vol`| actual surface water abstraction | m$^3$ Δt⁻¹ | - | +| `available_surfacewater`| available surface water | m$^3$ | - | | `nonirri_returnflow`| return flow from non-irrigation (industry, domestic and livestock) | mm Δt⁻¹ | - | ## Groundwater flow @@ -401,27 +412,28 @@ The Table below shows the parameters (fields) of struct `ConfinedAquifer`, inclu description of these parameters, the unit, and default value if applicable. Struct `ConfinedAquifer` is not (yet) part of a wflow model. -| parameter | description | unit | default | -|:--------------- | ------------------| ----- | -------| -| `k` | horizontal conductivity | m d``^{-1}``s | - | -| `storativity` | storativity | m m``^{-1}`` | - | -| `specific_storage` | specific storage | m``^{-1}`` | - | +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | +| `k` | horizontal conductivity | m d$^{-1}$s | - | +| `storativity` | storativity | m m$^{-1}$ | - | +| `specific_storage` | specific storage | m$^{-1}$ | - | | `top` | top groundwater layers | m | - | | `bottom` | bottom groundwater layers | m | - | -| `area` | cell area | m``^2`` | - | +| `area` | cell area | m$^2$ | - | | `head` | groundwater head | m | - | -| `conductance` | conductance | m``^2`` d``^{-1}`` | - | +| `conductance` | conductance | m$^2$ d$^{-1}$ | - | +: {.striped .hover} ### Unconfined aquifer The Table below shows the parameters (fields) of struct `UnconfinedAquifer`, including a -description of these parameters, the unit, and default value if applicable. The parameters -in bold represent model parameters that can be set through static input data (netCDF), and -can be listed in the TOML configuration file under `[input.lateral.subsurface]`, to map the -internal model parameter to the external netCDF variable. For some input parameters the -parameter listed under `[input.lateral.subsurface]` is not equal to the internal model -parameter, these are listed in the Table below between parentheses after the internal model -parameter. The `top` parameter is provided by the external parameter `altitude` as part of -the static input data and set as follows through the TOML file: +description of these parameters, the unit, and default value if applicable. The parameters in +bold represent model parameters that can be set through static input data (netCDF), and can be +listed in the TOML configuration file under `[input.lateral.subsurface]`, to map the internal +model parameter to the external netCDF variable. For some input parameters the parameter listed +under `[input.lateral.subsurface]` is not equal to the internal model parameter, these are +listed in the Table below between parentheses after the internal model parameter. The `top` +parameter is provided by the external parameter `altitude` as part of the static input data and +set as follows through the TOML file: ```toml [input] @@ -429,102 +441,107 @@ the static input data and set as follows through the TOML file: altitude = "wflow_dem" ``` -The input parameter `conductivity` (listed under `[input.lateral.subsurface]`) is not equal -to the internal model parameter `kh_0`, and is listed in the Table below between parentheses. +The input parameter `conductivity` (listed under `[input.lateral.subsurface]`) is not equal to +the internal model parameter `kh_0`, and is listed in the Table below between parentheses. -| parameter | description | unit | default | -|:--------------- | ------------------| ----- | -------| -| **`kh_0`** (`conductivity`) | horizontal conductivity | m d``^{-1}``s | - | -| **`specific_yield`** | specific yield | m m``^{-1}`` | - | +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | +| **`kh_0`** (`conductivity`) | horizontal conductivity | m d$^{-1}$s | - | +| **`specific_yield`** | specific yield | m m$^{-1}$ | - | | **`top`** (`altitude`) | top groundwater layer | m | - | | `bottom` | bottom groundwater layer | m | - | -| `area` | cell area | m``^2`` | - | +| `area` | cell area | m$^2$ | - | | `head` | groundwater head | m | - | -| `conductance` | conductance | m``^2`` d``^{-1}`` | - | +| `conductance` | conductance | m$^2$ d$^{-1}$ | - | | `f` | factor controlling the reduction of reference horizontal conductivity | - | 3.0 | +: {.striped .hover} ### Constant Head -The Table below shows the parameters (fields) of struct `ConstantHead`, including a -description of these parameters, the unit, and default value if applicable. The parameters -in bold represent model parameters that can be set through static input data (netCDF), and -can be listed in the TOML configuration file under `[input.lateral.subsurface]`, to map the -internal model parameter to the external netCDF variable. The input parameter -`constant_head` (listed under `[input.lateral.subsurface]`) is not equal to the internal -model parameter `head`, and is listed in the Table below between parentheses. - -| parameter | description | unit | default | -|:--------------- | ------------------| ----- | --------- | +The Table below shows the parameters (fields) of struct `ConstantHead`, including a description +of these parameters, the unit, and default value if applicable. The parameters in bold +represent model parameters that can be set through static input data (netCDF), and can be +listed in the TOML configuration file under `[input.lateral.subsurface]`, to map the internal +model parameter to the external netCDF variable. The input parameter `constant_head` (listed +under `[input.lateral.subsurface]`) is not equal to the internal model parameter `head`, and is +listed in the Table below between parentheses. + +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | | **`head`** (`constant_head`) | groundwater head | m | - | | `index` | constant head cell index | - | - | +: {.striped .hover} ### Boundary conditions -#### [River](@id gwf_river_params) +#### River The Table below shows the parameters (fields) of struct `River`, including a description of -these parameters, the unit, and default value if applicable. The parameters in bold -represent model parameters that can be set through static input data (netCDF), and can be -listed in the TOML configuration file under `[input.lateral.subsurface]`, to map the -internal model parameter to the external netCDF variable. The input parameter `river_bottom` -(listed under `[input.lateral.subsurface]`) is not equal to the internal model parameter -`bottom`, and is listed in the Table below between parentheses. - -| parameter | description | unit | default | -|:--------------- | ------------------| ----- | -------| +these parameters, the unit, and default value if applicable. The parameters in bold represent +model parameters that can be set through static input data (netCDF), and can be listed in the +TOML configuration file under `[input.lateral.subsurface]`, to map the internal model parameter +to the external netCDF variable. The input parameter `river_bottom` (listed under +`[input.lateral.subsurface]`) is not equal to the internal model parameter `bottom`, and is +listed in the Table below between parentheses. + +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | | `stage` | river stage | m | - | -| **`infiltration_conductance`** | river bed infiltration conductance | m``^2`` day``^{-1}`` m``^2`` day``^{-1}``| - | -| **`exfiltration_conductance`** | river bed exfiltration conductance | m``^2`` day``^{-1}`` | - | +| **`infiltration_conductance`** | river bed infiltration conductance | m$^2$ day$^{-1}$ m$^2$ day$^{-1}$| - | +| **`exfiltration_conductance`** | river bed exfiltration conductance | m$^2$ day$^{-1}$ | - | | **`bottom`** (`river_bottom`) | river bottom elevation | m | - | | `index` | river cell index | - | - | -| `flux` | exchange flux (river to aquifer) | m``^3`` d``^{-1}`` | - | - -#### [Drainage](@id gwf_drainage_params) -The Table below shows the parameters (fields) of struct `Drainage`, including a description -of these parameters, the unit, and default value if applicable. The parameters in bold -represent model parameters that can be set through static input data (netCDF), and can be -listed in the TOML configuration file under `[input.lateral.subsurface]`, to map the -internal model parameter to the external netCDF variable. For some input parameters the -parameter listed under `[input.lateral.subsurface]` is not equal to the internal model -parameter, these are listed in the Table below between parentheses after the internal model -parameter. - -| parameter | description | unit | default | -|:--------------- | ------------------| ----- | -------| +| `flux` | exchange flux (river to aquifer) | m$^3$ d$^{-1}$ | - | +: {.striped .hover} + +#### Drainage +The Table below shows the parameters (fields) of struct `Drainage`, including a description of +these parameters, the unit, and default value if applicable. The parameters in bold represent +model parameters that can be set through static input data (netCDF), and can be listed in the +TOML configuration file under `[input.lateral.subsurface]`, to map the internal model parameter +to the external netCDF variable. For some input parameters the parameter listed under +`[input.lateral.subsurface]` is not equal to the internal model parameter, these are listed in +the Table below between parentheses after the internal model parameter. + +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | | **`elevation`** (`drain_elevation`) | drain elevation | m | - | -| **`conductance`** (`drain_conductance`) | drain conductance | m``^2`` day``^{-1}`` | - | +| **`conductance`** (`drain_conductance`) | drain conductance | m$^2$ day$^{-1}$ | - | | **`index`** (`drain`) | drain cell index | - | - | -| `flux` | exchange flux (drains to aquifer) | m``^3`` day``^{-1}`` | - | +| `flux` | exchange flux (drains to aquifer) | m$^3$ day$^{-1}$ | - | +: {.striped .hover} -#### [Recharge](@id gwf_recharge_params) -The Table below shows the parameters (fields) of struct `Recharge`, including a description -of these parameters, the unit, and default value if applicable. +#### Recharge +The Table below shows the parameters (fields) of struct `Recharge`, including a description of +these parameters, the unit, and default value if applicable. -| parameter | description | unit | default | -|:--------------- | ------------------| ----- | ---- | -| `rate` | recharge rate | m``^3`` day``^{-1}`` | - | +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | +| `rate` | recharge rate | m$^3$ day$^{-1}$ | - | | `index` | recharge cell index | - | - | -| `flux` | recharge flux | m``^3`` day``^{-1}`` | - | +| `flux` | recharge flux | m$^3$ day$^{-1}$ | - | +: {.striped .hover} -#### [Head boundary](@id gwf_headboundary_params) -The Table below shows the parameters (fields) of struct `HeadBoundary`, including a -description of these parameters, the unit, and default value if applicable. +#### Head boundary +The Table below shows the parameters (fields) of struct `HeadBoundary`, including a description +of these parameters, the unit, and default value if applicable. -| parameter | description | unit | default | -|:--------------- | ------------------| ----- | ---- | +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | | `head` | head | m | - | -| `conductance` | conductance of the head boundary | m``^2`` day``^{-1}`` | - | +| `conductance` | conductance of the head boundary | m$^2$ day$^{-1}$ | - | | `index` | head boundary cell index | - | - | -| `flux` | conductance of the head boundary | m``^3`` day``^{-1}`` | - | - +| `flux` | conductance of the head boundary | m$^3$ day$^{-1}$ | - | +: {.striped .hover} -#### [Well boundary](@id well_boundary_params) +#### Well boundary The Table below shows the parameters (fields) of struct `Well`, including a description of these parameters, the unit, and default value if applicable. -| input parameter | description | unit | default | -|:--------------- | ------------------| ----- | ---- | -| `volumetric_rate` | volumetric well rate | m``^3`` d``^{-1}`` | - | +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | +| `volumetric_rate` | volumetric well rate | m$^3$ d$^{-1}$ | - | | `index` | well index | - | - | -| `flux` | actual well flux | m``^3`` day``^{-1}`` | - | +| `flux` | actual well flux | m$^3$ day$^{-1}$ | - | +: {.striped .hover} ## Sediment @@ -532,67 +549,68 @@ these parameters, the unit, and default value if applicable. The Table below shows the parameters (fields) of struct `OverlandFlowSediment`, including a description of these parameters, the unit, and default value if applicable. -| parameter | description | unit | default | -|:---------------| --------------- | ---------------------- | ------- | +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | | `n` | number of cells | - | - | | `rivcell` | river cells | - | - | -| `soilloss` | total eroded soil | ton Δt``^{-1}`` | - | -| `erosclay` | eroded soil for particle class clay | ton Δt``^{-1}`` | - | -| `erossilt` | eroded soil for particle class silt | ton Δt``^{-1}`` | - | -| `erossand` | eroded soil for particle class sand | ton Δt``^{-1}`` | - | -| `erossagg` | eroded soil for particle class small aggregates | ton Δt``^{-1}`` | - | -| `eroslagg` | eroded soil for particle class large aggregates | ton Δt``^{-1}`` | - | -| `TCsed` | total transport capacity of overland flow | ton Δt``^{-1}`` | - | -| `TCclay` | transport capacity of overland flow for particle class clay | ton Δt``^{-1}`` | - | -| `TCsilt` | transport capacity of overland flow for particle class silt | ton Δt``^{-1}`` | - | -| `TCsand` | transport capacity of overland flow for particle class sand | ton Δt``^{-1}`` | - | -| `TCsagg` | transport capacity of overland flow for particle class small aggregates | ton Δt``^{-1}`` | - | -| `TClagg` | transport capacity of overland flow for particle class large aggregates | ton Δt``^{-1}`` | - | -| `inlandsed` | sediment reaching the river with overland flow | ton Δt``^{-1}`` | - | -| `inlandclay` | sediment with particle class clay reaching the river with overland flow | ton Δt``^{-1}`` | - | -| `inlandsilt` | sediment with particle class silt reaching the river with overland flow | ton Δt``^{-1}`` | - | -| `inlandsand` | sediment with particle class sand reaching the river with overland flow | ton Δt``^{-1}`` | - | -| `inlandsagg` | sediment with particle class small aggregates reaching the river with overland flow | ton Δt``^{-1}`` | - | -| `inlandlagg` | sediment with particle class large aggregates reaching the river with overland flow | ton Δt``^{-1}`` | - | +| `soilloss` | total eroded soil | ton Δt$^{-1}$ | - | +| `erosclay` | eroded soil for particle class clay | ton Δt$^{-1}$ | - | +| `erossilt` | eroded soil for particle class silt | ton Δt$^{-1}$ | - | +| `erossand` | eroded soil for particle class sand | ton Δt$^{-1}$ | - | +| `erossagg` | eroded soil for particle class small aggregates | ton Δt$^{-1}$ | - | +| `eroslagg` | eroded soil for particle class large aggregates | ton Δt$^{-1}$ | - | +| `TCsed` | total transport capacity of overland flow | ton Δt$^{-1}$ | - | +| `TCclay` | transport capacity of overland flow for particle class clay | ton Δt$^{-1}$ | - | +| `TCsilt` | transport capacity of overland flow for particle class silt | ton Δt$^{-1}$ | - | +| `TCsand` | transport capacity of overland flow for particle class sand | ton Δt$^{-1}$ | - | +| `TCsagg` | transport capacity of overland flow for particle class small aggregates | ton Δt$^{-1}$ | - | +| `TClagg` | transport capacity of overland flow for particle class large aggregates | ton Δt$^{-1}$ | - | +| `inlandsed` | sediment reaching the river with overland flow | ton Δt$^{-1}$ | - | +| `inlandclay` | sediment with particle class clay reaching the river with overland flow | ton Δt$^{-1}$ | - | +| `inlandsilt` | sediment with particle class silt reaching the river with overland flow | ton Δt$^{-1}$ | - | +| `inlandsand` | sediment with particle class sand reaching the river with overland flow | ton Δt$^{-1}$ | - | +| `inlandsagg` | sediment with particle class small aggregates reaching the river with overland flow | ton Δt$^{-1}$ | - | +| `inlandlagg` | sediment with particle class large aggregates reaching the river with overland flow | ton Δt$^{-1}$ | - | +: {.striped .hover} ### River flow -The Table below shows external parameters that can be set through static input data -(netCDF), and can be listed in the TOML configuration file under `[input.lateral.river]`. -These external parameters are not part of struct `RiverSediment`, but used to calculate -parameters of struct `RiverSediment`. +The Table below shows external parameters that can be set through static input data (netCDF), +and can be listed in the TOML configuration file under `[input.lateral.river]`. These external +parameters are not part of struct `RiverSediment`, but used to calculate parameters of struct +`RiverSediment`. -| external parameter | description | unit | default | -|:---------------| --------------- | ---------------------- | ----- | +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | | `reslocs` | reservoir location (outlet) | - | - | | `resareas` | reservoir coverage | - | - | -| `resarea` | reservoir area | - | m``^2`` | +| `resarea` | reservoir area | - | m$^2$ | | `restrapeff` | reservoir trapping efficiency coefficient | - | - | | `lakelocs` | lake location (outlet) | - | - | | `lakeareas` | lake coverage | - | - | -| `lakearea` | lake area | - | m``^2`` | - | - +| `lakearea` | lake area | - | m$^2$ | - | +: {.striped .hover} The Table below shows the parameters (fields) of struct `RiverSediment`, including a -description of these parameters, the unit, and default value if applicable. The parameters -in bold represent model parameters that can be set through static and forcing input data -(netCDF), and can be listed in the TOML configuration file under `[input.lateral.river]`, to -map the internal model parameter to the external netCDF variable. For some input parameters -the parameter listed under `[input.lateral.river]` is not equal to the internal model -parameter, these are listed in the Table below between parentheses after the internal model -parameter. For example, internal model parameter `sl` is mapped as follows in the TOML file -to the external netCDF variable `RiverSlope`: +description of these parameters, the unit, and default value if applicable. The parameters in +bold represent model parameters that can be set through static and forcing input data (netCDF), +and can be listed in the TOML configuration file under `[input.lateral.river]`, to map the +internal model parameter to the external netCDF variable. For some input parameters the +parameter listed under `[input.lateral.river]` is not equal to the internal model parameter, +these are listed in the Table below between parentheses after the internal model parameter. For +example, internal model parameter `sl` is mapped as follows in the TOML file to the external +netCDF variable `RiverSlope`: ```toml [input.vertical] slope = "RiverSlope" ``` -| parameter | description | unit | default | -|:---------------| --------------- | ---------------------- | ----- | +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | | **`dl`** (`length`) | river length | m | - | | **`width`** | river width | m | - | | **`sl`** (`slope`) | river slope | - | - | -| **`rhos`** (`rhosed`) | density of sediment | kg m``^{-3}1`` | 2650.0 | +| **`rhos`** (`rhosed`) | density of sediment | kg m$^{-3}1$ | 2650.0 | | **`dmclay`** | median diameter particle size class clay | mm | 2.0 | | **`dmsilt`** | median diameter particle size class silt | mm| 10.0 | | **`dmsand`** | median diameter particle size class sand | mm | 200.0 | @@ -615,18 +633,18 @@ slope = "RiverSlope" | `bk` | Kodatie coefficient `b` | - | - | | `ck` | Kodatie coefficient `c` | - | - | | `dk` | Kodatie coefficient `d` | - | - | -| `kdbank` | bank erodibilty | m``^3`` N``^{-1}`` s``^{-1}`` | - | -| `kdbed` | bed erodibility | m``^3`` N``^{-1}`` s``^{-1}`` | - | -| `TCrbank` | critical bed bank shear stress | m``^3`` N``^{-2}`` | - | -| `TCrbed` | critical bed shear stress | m``^3`` N``^{-2}`` | - | +| `kdbank` | bank erodibilty | m$^3$ N$^{-1}$ s$^{-1}$ | - | +| `kdbed` | bed erodibility | m$^3$ N$^{-1}$ s$^{-1}$ | - | +| `TCrbank` | critical bed bank shear stress | m$^3$ N$^{-2}$ | - | +| `TCrbed` | critical bed shear stress | m$^3$ N$^{-2}$ | - | | **`h_riv`** | river water level | m| - | -| **`q_riv`** | river discharge | m``^3`` s``^{-1}`` | - | -| `inlandclay` | sediment input with particle class clay from land erosion | t Δt``^{-1}`` | - | -| `inlandsilt` | sediment input with particle class silt from land erosion | t Δt``^{-1}`` | - | -| `inlandsand` | sediment input with particle class sand from land erosion | t Δt``^{-1}`` | - | -| `inlandsagg` | sediment input with particle class small aggregates from land erosion | t Δt``^{-1}`` | - | -| `inlandlagg` | sediment input with particle class large aggregates from land erosion | t Δt``^{-1}`` | - | -| `inlandsed` | sediment input from land erosion | t Δt``^{-1}`` | - | +| **`q_riv`** | river discharge | m$^3$ s$^{-1}$ | - | +| `inlandclay` | sediment input with particle class clay from land erosion | t Δt$^{-1}$ | - | +| `inlandsilt` | sediment input with particle class silt from land erosion | t Δt$^{-1}$ | - | +| `inlandsand` | sediment input with particle class sand from land erosion | t Δt$^{-1}$ | - | +| `inlandsagg` | sediment input with particle class small aggregates from land erosion | t Δt$^{-1}$ | - | +| `inlandlagg` | sediment input with particle class large aggregates from land erosion | t Δt$^{-1}$ | - | +| `inlandsed` | sediment input from land erosion | t Δt$^{-1}$ | - | | `sedload` | sediment left in the cell | t | - | | `clayload` | sediment with particle class clay left in the cell | t | - | | `siltload` | sediment with particle class silt left in the cell | t | - | @@ -634,30 +652,31 @@ slope = "RiverSlope" | `saggload` | sediment with particle class small aggregates left in the cell | t | - | | `laggload` | sediment with particle class large aggregates in the cell | t | - | | `gravload` | sediment with particle class gravel left in the cell | t | - | -| `sedstore` | sediment stored on the river bed after deposition | t Δt``^{-1}``| - | -| `claystore` | sediment with particle class clay stored on the river bed after deposition | t Δt``^{-1}`` | - | -| `siltstore` | sediment with particle class silt stored on the river bed after deposition | t Δt``^{-1}`` | - | -| `sandstore` | sediment with particle class sand stored on the river bed after deposition | t Δt``^{-1}`` | - | -| `saggstore` | sediment with particle class small aggregates stored on the river bed after deposition | t Δt``^{-1}`` | - | -| `laggstore` | sediment with particle class large aggregates stored on the river bed after deposition | t Δt``^{-1}`` | - | -| `gravstore` | sediment with particle class gravel stored on the river bed after deposition | t Δt``^{-1}``| - | -| `outsed` | sediment flux | t Δt``^{-1}``| - | -| `outclay` | sediment with particle class clay flux | t Δt``^{-1}``| - | -| `outsilt` | sediment with particle class silt | t Δt``^{-1}``| - | -| `outsand` | sediment with particle class sand | t Δt``^{-1}``| - | -| `outsagg` | sediment with particle class small aggregates | t Δt``^{-1}``| - | -| `outlagg` | sediment with particle class large aggregates | t Δt``^{-1}``| - | -| `outgrav` | sediment with particle class gravel | t Δt``^{-1}``| - | -| `Sedconc` | total sediment concentration (`SSconc` + `Bedconc`) | g m``^{-3}``| - | -| `SSconc` | suspended load concentration | g m``^{-3}``| - | -| `Bedconc` | bed load concentration | g m``^{-3}``| - | -| `maxsed` | river transport capacity | t Δt``^{-1}``| - | -| `erodsed` | total eroded sediment | t Δt``^{-1}``| - | -| `erodsedbank` | eroded bank sediment | t Δt``^{-1}``| - | -| `erodsedbed` | eroded bed sediment | t Δt``^{-1}``| - | -| `depsed` | deposited sediment | t Δt``^{-1}``| - | -| `insed` | sediment input flux | t Δt``^{-1}``| - | +| `sedstore` | sediment stored on the river bed after deposition | t Δt$^{-1}$| - | +| `claystore` | sediment with particle class clay stored on the river bed after deposition | t Δt$^{-1}$ | - | +| `siltstore` | sediment with particle class silt stored on the river bed after deposition | t Δt$^{-1}$ | - | +| `sandstore` | sediment with particle class sand stored on the river bed after deposition | t Δt$^{-1}$ | - | +| `saggstore` | sediment with particle class small aggregates stored on the river bed after deposition | t Δt$^{-1}$ | - | +| `laggstore` | sediment with particle class large aggregates stored on the river bed after deposition | t Δt$^{-1}$ | - | +| `gravstore` | sediment with particle class gravel stored on the river bed after deposition | t Δt$^{-1}$| - | +| `outsed` | sediment flux | t Δt$^{-1}$| - | +| `outclay` | sediment with particle class clay flux | t Δt$^{-1}$| - | +| `outsilt` | sediment with particle class silt | t Δt$^{-1}$| - | +| `outsand` | sediment with particle class sand | t Δt$^{-1}$| - | +| `outsagg` | sediment with particle class small aggregates | t Δt$^{-1}$| - | +| `outlagg` | sediment with particle class large aggregates | t Δt$^{-1}$| - | +| `outgrav` | sediment with particle class gravel | t Δt$^{-1}$| - | +| `Sedconc` | total sediment concentration (`SSconc` + `Bedconc`) | g m$^{-3}$| - | +| `SSconc` | suspended load concentration | g m$^{-3}$| - | +| `Bedconc` | bed load concentration | g m$^{-3}$| - | +| `maxsed` | river transport capacity | t Δt$^{-1}$| - | +| `erodsed` | total eroded sediment | t Δt$^{-1}$| - | +| `erodsedbank` | eroded bank sediment | t Δt$^{-1}$| - | +| `erodsedbed` | eroded bed sediment | t Δt$^{-1}$| - | +| `depsed` | deposited sediment | t Δt$^{-1}$| - | +| `insed` | sediment input flux | t Δt$^{-1}$| - | | `wbcover` | waterbody coverage | - | - | | `wblocs` | waterbody locations | - | - | -| `wbarea` | waterbody area | m``^2`` | - | +| `wbarea` | waterbody area | m$^2$ | - | | `wbtrap` | waterbody trapping efficiency coefficient | - | - | +: {.striped .hover} diff --git a/docs/src/model_docs/params_vertical.md b/docs/model_docs/parameters_vertical.qmd similarity index 65% rename from docs/src/model_docs/params_vertical.md rename to docs/model_docs/parameters_vertical.qmd index 0202719cd..1c320d9ce 100644 --- a/docs/src/model_docs/params_vertical.md +++ b/docs/model_docs/parameters_vertical.qmd @@ -1,24 +1,25 @@ -# [Parameters vertical concepts](@id params_vert) +--- +title: Vertical concepts +--- -## [SBM](@id params_sbm) -The Table below shows the parameters (fields) of struct `SBM`, including a description of -these parameters, the unit, and default value if applicable. The parameters in bold -represent model parameters that can be set through static and forcing input data (netCDF), -and can be listed in the TOML configuration file under `[input.vertical]`, to map the -internal model parameter to the external netCDF variable. For some input parameters the -parameter listed under `[input.vertical]` is not equal to the internal model parameter, -these are listed in the Table below between parentheses after the internal model parameter. -For example, internal model parameter `sl` is mapped as follows in the TOML file to the -external netCDF variable `Sl`: +## SBM +The Table below shows the parameters (fields) of struct `SBM`, including a description of these +parameters, the unit, and default value if applicable. The parameters in bold represent model +parameters that can be set through static and forcing input data (netCDF), and can be listed in +the TOML configuration file under `[input.vertical]`, to map the internal model parameter to +the external netCDF variable. For some input parameters the parameter listed under +`[input.vertical]` is not equal to the internal model parameter, these are listed in the Table +below between parentheses after the internal model parameter. For example, internal model +parameter `sl` is mapped as follows in the TOML file to the external netCDF variable `Sl`: ```toml [input.vertical] specific_leaf = "Sl" ``` -Different [vertical hydraulic conductivity depth profiles](@ref soil): `exponential` -(default), `exponential_constant`, `layered` and `layered_exponential` can be provided -through the TOML file. Below an example for the `exponential_constant` profile: +Different [vertical hydraulic conductivity depth profiles](./vertical/sbm.qmd#soil-processes): +`exponential` (default), `exponential_constant`, `layered` and `layered_exponential` can be +provided through the TOML file. Below an example for the `exponential_constant` profile: ```toml [input.vertical] @@ -27,12 +28,12 @@ ksat_profile = "exponential_constant" For the `exponential` profile the input parameters `kv_0` and `f` are used. For the `exponential_constant` profile `kv_0` and `f` are used, and `z_exp` is required as input. For -the `layered` profile, input parameter `kv` is used, and for the `layered_exponential` -profile `kv` is used and `z_layered` is required as input. +the `layered` profile, input parameter `kv` is used, and for the `layered_exponential` profile +`kv` is used and `z_layered` is required as input. -| parameter | description | unit | default | -|:---------------| --------------- | ---------------------- | ----- | -| **`cfmax`** | degree-day factor | mm ᵒC``^{-1}`` Δt``^{-1}`` | 3.75653 mm ᵒC``^{-1}`` day``^{-1}`` | +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | +| **`cfmax`** | degree-day factor | mm ᵒC$^{-1}$ Δt$^{-1}$ | 3.75653 mm ᵒC$^{-1}$ day$^{-1}$ | | **`tt`** | threshold temperature for snowfall| ᵒC | 0.0 | | **`tti`** | threshold temperature interval length | ᵒC | 1.0 | | **`ttm`** | threshold temperature for snowmelt | ᵒC | 0.0 | @@ -40,22 +41,22 @@ profile `kv` is used and `z_layered` is required as input. | **`w_soil`** | soil temperature smooth factor | - | 0.1125 | | **`cf_soil`** | controls soil infiltration reduction factor when soil is frozen | - | 0.038 | | **`g_tt`** | threshold temperature for snowfall above glacier | ᵒC| 0.0 | -| **`g_cfmax`** | Degree-day factor for glacier | mm ᵒC``^{-1}`` Δt``^{-1}``| 3.0 mm ᵒC``^{-1}`` day``^{-1}`` | -| **`g_sifrac`** | fraction of the snowpack on top of the glacier converted into ice | Δt``^{-1}`` | 0.001 day``^{-1}`` | +| **`g_cfmax`** | Degree-day factor for glacier | mm ᵒC$^{-1}$ Δt$^{-1}$| 3.0 mm ᵒC$^{-1}$ day$^{-1}$ | +| **`g_sifrac`** | fraction of the snowpack on top of the glacier converted into ice | Δt$^{-1}$ | 0.001 day$^{-1}$ | | **`glacierfrac`** | fraction covered by a glacier | - | 0.0 | | **`glacierstore`** | water within the glacier | mm | 5500.0 | | **`theta_s`** | saturated water content (porosity) | - | 0.6 | | **`theta_r`** | residual water content | - | 0.01 | -| **`kv_0`** | Vertical hydraulic conductivity at soil surface | mm Δt``^{-1}`` | 3000.0 mm day``^{-1}``| -| **`kv`** | Vertical hydraulic conductivity per soil layer | mm Δt``^{-1}`` | 1000.0 mm day``^{-1}``| -| **`f`** | scaling parameter (controls exponential decline of `kv_0`) | mm``^{-1}`` | 0.001 | +| **`kv_0`** | Vertical hydraulic conductivity at soil surface | mm Δt$^{-1}$ | 3000.0 mm day$^{-1}$| +| **`kv`** | Vertical hydraulic conductivity per soil layer | mm Δt$^{-1}$ | 1000.0 mm day$^{-1}$| +| **`f`** | scaling parameter (controls exponential decline of `kv_0`) | mm$^{-1}$ | 0.001 | | **`z_exp`** | Depth from soil surface for which exponential decline of `kv_0` is valid | mm | - | | **`z_layered`** | Depth from soil surface for which layered profile (of `layered_exponential`) is valid | mm | - | | **`hb`** | air entry pressure of soil (Brooks-Corey) | cm | -10.0 | | **`soilthickness`** | soil thickness | mm | 2000.0 | -| **`infiltcappath`** | infiltration capacity of the compacted areas | mm Δt``^{-1}`` | 10.0 mm day``^{-1}`` | -| **`infiltcapsoil`** | soil infiltration capacity | mm Δt``^{-1}`` | 100.0 mm day``^{-1}``| -| **`maxleakage`** | maximum leakage from saturated zone | mm Δt``^{-1}`` | 0.0 mm day``^{-1}``| +| **`infiltcappath`** | infiltration capacity of the compacted areas | mm Δt$^{-1}$ | 10.0 mm day$^{-1}$ | +| **`infiltcapsoil`** | soil infiltration capacity | mm Δt$^{-1}$ | 100.0 mm day$^{-1}$| +| **`maxleakage`** | maximum leakage from saturated zone | mm Δt$^{-1}$ | 0.0 mm day$^{-1}$| | **`c`** | Brooks-Corey power coefficient for each soil layer | - | 10.0 | | **`kvfrac`** | multiplication factor applied to kv_z (vertical flow) | - | 1.0 | | **`waterfrac`** | fraction of open water (excluding rivers) | - | 0.0 | @@ -87,57 +88,57 @@ profile `kv` is used and `z_layered` is required as input. | `riverfrac` | fraction of river | - | - | | `act_thickl` | thickness of soil layers | mm | - | | `sumlayers` | cumulative sum of soil layers thickness, starting at soil surface | mm | - | -| `stemflow`| stemflow | mm Δt``^{-1}`` | - | -| `throughfall`| throughfall | mm Δt``^{-1}`` | - | +| `stemflow`| stemflow | mm Δt$^{-1}$ | - | +| `throughfall`| throughfall | mm Δt$^{-1}$ | - | | `ustorelayerdepth`| amount of water in the unsaturated store, per layer | mm | - | | `satwaterdepth`| saturated store | mm | - | | `zi`| pseudo-water table depth (top of the saturated zone) | mm | - | | `soilwatercapacity`| soilwater capacity | mm | - | | `canopystorage`| canopy storage | mm | - | -|**`precipitation`** | precipitation | mm Δt``^{-1}``| - | +|**`precipitation`** | precipitation | mm Δt$^{-1}$| - | | **`temperature`** | temperature | ᵒC | - | -| **`potential_evaporation`** | potential reference evapotranspiration | mm Δt``^{-1}`` | - | -| `pottrans` | interception subtracted from potential evapotranspiration | mm Δt``^{-1}`` | - | -| `transpiration` | transpiration | mm Δt``^{-1}`` | - | -| `ae_ustore` | actual evaporation from unsaturated store | mm Δt``^{-1}`` | - | -| `interception` | interception loss by evaporation | mm Δt``^{-1}`` | - | -| `soilevap` | total soil evaporation from unsaturated and saturated store | mm Δt``^{-1}`` | - | -| `soilevapsat` | soil evaporation from saturated store | mm Δt``^{-1}`` | - | -| `actcapflux` | actual capillary rise | mm Δt``^{-1}`` | - | -| `actevapsat` | actual transpiration from saturated store | mm Δt``^{-1}`` | - | -| `actevap` | total actual evapotranspiration | mm Δt``^{-1}`` | - | -| `runoff_river` | runoff from river based on `riverfrac` | mm Δt``^{-1}`` | - | -| `runoff_land` | runoff from land based on `waterfrac` | mm Δt``^{-1}`` | - | -| `ae_openw_l` | actual evaporation from open water (land) | mm Δt``^{-1}`` | - | -| `ae_openw_r` | actual evaporation from river | mm Δt``^{-1}`` | - | -| `net_runoff_river` | net runoff from river (`runoff_river` - `ae_openw_r`) | mm Δt``^{-1}`` | - | -| `avail_forinfilt` | water available for infiltration | mm Δt``^{-1}`` | - | -| `actinfilt` | actual infiltration into the unsaturated zone | mm Δt``^{-1}`` | - | -| `actinfiltsoil` | actual infiltration into non-compacted fraction | mm Δt``^{-1}`` | - | -| `actinfiltpath` | actual infiltration into compacted fraction | mm Δt``^{-1}`` | - | -| `infiltsoilpath` | infiltration into the unsaturated zone | mm Δt``^{-1}`` | - | -| `infiltexcess` | infiltration excess water | mm Δt``^{-1}`` | - | -| `excesswater` | water that cannot infiltrate due to saturated soil (saturation excess) | mm Δt``^{-1}`` | - | -| `exfiltsatwater` | water exfiltrating during saturation excess conditions | mm Δt``^{-1}`` | - | -| `exfiltustore` | water exfiltrating from unsaturated store because of change in water table | mm Δt``^{-1}`` | - | -| `excesswatersoil` | excess water for non-compacted fraction | mm Δt``^{-1}`` | - | -| `excesswaterpath` | excess water for compacted fraction | mm Δt``^{-1}`` | - | -| `runoff` | total surface runoff from infiltration and saturation excess | mm Δt``^{-1}`` | - | -| `net_runoff` | net surface runoff (`runoff` - `ae_openw_l`) | mm Δt``^{-1}`` | - | +| **`potential_evaporation`** | potential reference evapotranspiration | mm Δt$^{-1}$ | - | +| `pottrans` | interception subtracted from potential evapotranspiration | mm Δt$^{-1}$ | - | +| `transpiration` | transpiration | mm Δt$^{-1}$ | - | +| `ae_ustore` | actual evaporation from unsaturated store | mm Δt$^{-1}$ | - | +| `interception` | interception loss by evaporation | mm Δt$^{-1}$ | - | +| `soilevap` | total soil evaporation from unsaturated and saturated store | mm Δt$^{-1}$ | - | +| `soilevapsat` | soil evaporation from saturated store | mm Δt$^{-1}$ | - | +| `actcapflux` | actual capillary rise | mm Δt$^{-1}$ | - | +| `actevapsat` | actual transpiration from saturated store | mm Δt$^{-1}$ | - | +| `actevap` | total actual evapotranspiration | mm Δt$^{-1}$ | - | +| `runoff_river` | runoff from river based on `riverfrac` | mm Δt$^{-1}$ | - | +| `runoff_land` | runoff from land based on `waterfrac` | mm Δt$^{-1}$ | - | +| `ae_openw_l` | actual evaporation from open water (land) | mm Δt$^{-1}$ | - | +| `ae_openw_r` | actual evaporation from river | mm Δt$^{-1}$ | - | +| `net_runoff_river` | net runoff from river (`runoff_river` - `ae_openw_r`) | mm Δt$^{-1}$ | - | +| `avail_forinfilt` | water available for infiltration | mm Δt$^{-1}$ | - | +| `actinfilt` | actual infiltration into the unsaturated zone | mm Δt$^{-1}$ | - | +| `actinfiltsoil` | actual infiltration into non-compacted fraction | mm Δt$^{-1}$ | - | +| `actinfiltpath` | actual infiltration into compacted fraction | mm Δt$^{-1}$ | - | +| `infiltsoilpath` | infiltration into the unsaturated zone | mm Δt$^{-1}$ | - | +| `infiltexcess` | infiltration excess water | mm Δt$^{-1}$ | - | +| `excesswater` | water that cannot infiltrate due to saturated soil (saturation excess) | mm Δt$^{-1}$ | - | +| `exfiltsatwater` | water exfiltrating during saturation excess conditions | mm Δt$^{-1}$ | - | +| `exfiltustore` | water exfiltrating from unsaturated store because of change in water table | mm Δt$^{-1}$ | - | +| `excesswatersoil` | excess water for non-compacted fraction | mm Δt$^{-1}$ | - | +| `excesswaterpath` | excess water for compacted fraction | mm Δt$^{-1}$ | - | +| `runoff` | total surface runoff from infiltration and saturation excess | mm Δt$^{-1}$ | - | +| `net_runoff` | net surface runoff (`runoff` - `ae_openw_l`) | mm Δt$^{-1}$ | - | | `vwc` | volumetric water content per soil layer (including `theta_r` and saturated zone) | - | - | | `vwc_perc` | volumetric water content per soil layer (including `theta_r` and saturated zone) | % | - | | `rootstore` | root water storage in unsaturated and saturated zone (excluding `theta_r`) | mm| - | | `vwc_root` | volumetric water content in root zone (including `theta_r` and saturated zone) | -| - | | `vwc_percroot` | volumetric water content in root zone (including `theta_r` and saturated zone) | % | - | | `ustoredepth` | total amount of available water in the unsaturated zone | mm | - | -| `transfer` | downward flux from unsaturated to saturated zone | mm Δt``^{-1}`` | - | -| `recharge` | net recharge to saturated zone | mm Δt``^{-1}`` | - | -| `actleakage` | actual leakage from saturated store | mm Δt``^{-1}`` | - | +| `transfer` | downward flux from unsaturated to saturated zone | mm Δt$^{-1}$ | - | +| `recharge` | net recharge to saturated zone | mm Δt$^{-1}$ | - | +| `actleakage` | actual leakage from saturated store | mm Δt$^{-1}$ | - | | `snow` | snow storage | mm | - | | `snowwater` | liquid water content in the snow pack | mm | - | -| `rainfallplusmelt` | snowmelt + precipitation as rainfall | mm Δt``^{-1}`` | - | +| `rainfallplusmelt` | snowmelt + precipitation as rainfall | mm Δt$^{-1}$ | - | | `tsoil` | top soil temperature | ᵒC | - | -| **`leaf_area_index`** | leaf area index | m``^2`` m``{-2}`` | - | +| **`leaf_area_index`** | leaf area index | m$^2$ m$^{-2}$ | - | | `waterlevel_land` | water level land | mm | - | | `waterlevel_river` | water level river | mm | - | | `total_storage` | total water storage (excluding floodplains, lakes and reservoirs) | mm | - | @@ -147,38 +148,117 @@ profile `kv` is used and `z_layered` is required as input. | `livestock` | optional livestock water demand of type `NonIrrigationDemand` | - | - | | `industry` | optional industry water demand of type `NonIrrigationDemand` | - | - | | `allocation` | optional water allocation of type `AllocationLand` | - | - | +: {.striped .hover} + +## Water demand and allocation + +### Paddy +The Table below shows the parameters (fields) of struct `Paddy`, including a description of +these parameters, the unit, and default value if applicable. The parameters in bold represent +model parameters that can be set through static and forcing input data (netCDF), and can be +listed in the TOML configuration file under `[input.vertical.paddy]`, to map the internal model +parameter to the external netCDF variable. + +| parameter | description | unit | default | +|:---------------| --------------- | ---------------------- | ----- | +| `demand_gross` | irrigation gross demand | mm Δt$^{-1}$ | - | +| **`irrigation_efficiency`** | irrigation efficiency | - | - | +| **`maximum_irrigation_rate`** | maximum irrigation rate | mm Δt$^{-1}$ | 25.0 mm day$^{-1}$ | +| **`irrigation_areas`** | irrigation areas | - | - | +| **`irrigation_trigger`** | irrigation on or off (boolean) | - | - | +| **`h_min`** | minimum required water depth in the irrigated paddy fields | mm | 20.0 | +| **`h_opt`** | optimal water depth in the irrigated paddy fields | mm | 50.0 | +| **`h_max`** | water depth when paddy field starts spilling water (overflow) | mm | 80.0 | +| `h` | actual water depth in paddy field | mm | - | + +### Non-paddy +The Table below shows the parameters (fields) of struct `NonPaddy`, including a description of +these parameters, the unit, and default value if applicable. The parameters in bold represent +model parameters that can be set through static and forcing input data (netCDF), and can be +listed in the TOML configuration file under `[input.vertical.nonpaddy]`, to map the internal +model parameter to the external netCDF variable. + +| parameter | description | unit | default | +|:---------------| --------------- | ---------------------- | ----- | +| `demand_gross` | irrigation gross demand | mm Δt$^{-1}$ | - | +| **`irrigation_efficiency`** | irrigation efficiency | - | - | +| **`maximum_irrigation_rate`** | maximum irrigation rate | mm Δt$^{-1}$ | 25.0 mm day$^{-1}$| +| **`irrigation_areas`** | irrigation areas | - | - | +| **`irrigation_trigger`** | irrigation on or off (boolean) | - | - | -## [Sediment](@id params_sediment) +### Non-irrigation (industry, domestic and livestock) +The Table below shows the parameters (fields) of struct `NonIrrigationDemand`, including a +description of these parameters, the unit, and default value if applicable. The parameters in +bold represent model parameters that can be set through static and forcing input data (netCDF). +These parameters can be listed for the sectors industry, domestic and livestock, in the TOML +configuration file under `[input.vertical.industry]`, `[input.vertical.domestic]` and +`[input.vertical.livestock]`, to map the internal model parameter to the external netCDF +variable. + +| parameter | description | unit | default | +|:---------------| --------------- | ---------------------- | ----- | +| **`demand_gross`** | gross industry water demand | mm Δt$^{-1}$ | 0.0 | +| **`demand_net`** | net industry water demand | mm Δt$^{-1}$ | 0.0 | +| `returnflow_fraction` | return flow fraction | - | - | +| `returnflow` | return flow | mm Δt$^{-1}$ | - | -The Table below shows external parameters that can be set through static input data -(netCDF), and can be listed in the TOML configuration file under `[input.vertical]`. These -external parameters are not part of struct `LandSediment`, but used to calculate parameters -of struct `LandSediment`. +### Water allocation land +The Table below shows the parameters (fields) of struct `AllocationLand`, including a +description of these parameters, the unit, and default value if applicable. The parameters in +bold represent model parameters that can be set through static and forcing input data (netCDF), +and can be listed in the TOML configuration file under `[input.vertical.allocation]`, to map +the internal model parameter to the external netCDF variable. -| external parameter | description | unit | default | +| parameter | description | unit | default | |:---------------| --------------- | ---------------------- | ----- | +| `irri_demand_gross` | irrigation gross demand | mm Δt$^{-1}$ | - | +| `nonirri_demand_gross` | non-irrigation gross demand | mm Δt$^{-1}$ | - | +| `total_gross_demand` | total gross demand | mm Δt$^{-1}$ | - | +| **`frac_sw_used`** | fraction surface water used | - | 1.0 | +| **`areas`** | allocation areas | - | 1 | +| `surfacewater_demand` | demand from surface water | mm Δt$^{-1}$ | - | +| `surfacewater_alloc` | allocation from surface water | mm Δt$^{-1}$ | - | +| `act_groundwater_abst` | actual groundwater abstraction | mm Δt$^{-1}$ | - | +| `act_groundwater_abst_vol` | actual groundwater abstraction | m$^3$ Δt$^{-1}$ | - | +| `available_groundwater` | available groundwater | m$^3$ | - | +| `groundwater_demand` | groundwater_demand |mm Δt$^{-1}$ | - | +| `groundwater_alloc` | allocation from groundwater |mm Δt$^{-1}$ | - | +| `irri_alloc` | allocated water for irrigation |mm Δt$^{-1}$ | - | +| `nonirri_alloc` | allocated water for non-irrigation |mm Δt$^{-1}$ | - | +| `total_alloc` | total allocated water |mm Δt$^{-1}$ | - | +| `nonirri_returnflow` | return flow from non-irrigation |mm Δt$^{-1}$ | - | + +## Sediment + +The Table below shows external parameters that can be set through static input data (netCDF), +and can be listed in the TOML configuration file under `[input.vertical]`. These external +parameters are not part of struct `LandSediment`, but used to calculate parameters of struct +`LandSediment`. + +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | | `pclay` | percentage clay | % | 0.1 | | `psilt` | percentage silt | % | 0.1 | | `resareas` | reservoir coverage | - | - | | `lakeareas` | lake coverage | - | - | +: {.striped .hover} -The Table below shows the parameters (fields) of struct `LandSediment`, including a -description of these parameters, the unit, and default value if applicable. The parameters -in bold represent model parameters that can be set through static and forcing input data -(netCDF), and can be listed in the TOML configuration file under `[input.vertical]`, to map -the internal model parameter to the external netCDF variable. For some input parameters the -parameter listed under `[input.vertical]` is not equal to the internal model parameter, -these are listed in the Table below between parentheses after the internal model parameter. -For example, internal model parameter `sl` is mapped as follows in the TOML file to the -external netCDF variable `Sl`: +The Table below shows the parameters (fields) of struct `LandSediment`, including a description +of these parameters, the unit, and default value if applicable. The parameters in bold +represent model parameters that can be set through static and forcing input data (netCDF), and +can be listed in the TOML configuration file under `[input.vertical]`, to map the internal +model parameter to the external netCDF variable. For some input parameters the parameter listed +under `[input.vertical]` is not equal to the internal model parameter, these are listed in the +Table below between parentheses after the internal model parameter. For example, internal model +parameter `sl` is mapped as follows in the TOML file to the external netCDF variable `Sl`: ```toml [input.vertical] specific_leaf = "Sl" ``` -| parameter | description | unit | default | -|:---------------| --------------- | ---------------------- | ----- | +| Parameter | Description | Unit | Default | +|:----| -------- | ---- | ---- | | **`canopyheight`** | canopy height | m | 3.0 | | **`erosk`** | coefficient for EUROSEM rainfall erosion | - | 0.6 | | **`erosspl`** | exponent for EUROSEM rainfall erosion | - | 2.0 | @@ -197,25 +277,25 @@ specific_leaf = "Sl" | **`dmsand`** | median diameter particle size class sand | µm | 200.0 | | **`dmsagg`** | median diameter particle size class small aggregates | µm | 30.0 | | **`dmlagg`** | median diameter particle size class large aggregates | µm | 500.0 | -| **`rhos`** (`rhosed`) | density of sediment | kg m``^{-3}1`` | 2650.0 | +| **`rhos`** (`rhosed`) | density of sediment | kg m$^{-3}1$ | 2650.0 | | `n` | number of cells | - | - | | `yl` | length of cells in y direction | m | - | | `xl` | length of cells in x direction | m | - | | `riverfrac` | fraction of river | - | - | | `wbcover` | waterbody coverage | - | - | | **`h_land`** | depth of overland flow | m | - | -| **`interception`** | canopy interception | mm Δt``^{-1}`` | - | -| **`precipitation`** | precipitation | mm Δt``^{-1}`` | - | -| **`q_land`** | overland flow | m``^3`` s``^{-1}`` | - | -| `sedspl` | sediment eroded by rainfall | ton Δt``^{-1}`` | - | -| `sedov` | sediment eroded by overland flow | ton Δt``^{-1}`` | - | -| `soilloss` | total eroded soil | ton Δt``^{-1}`` | - | -| `erosclay` | eroded soil for particle class clay | ton Δt``^{-1}`` | - | -| `erossilt` | eroded soil for particle class silt | ton Δt``^{-1}`` | - | -| `erossand` | eroded soil for particle class sand | ton Δt``^{-1}`` | - | -| `erossagg` | eroded soil for particle class small aggregates | ton Δt``^{-1}`` | - | -| `eroslagg` | eroded soil for particle class large aggregates | ton Δt``^{-1}`` | - | -| **`leaf_area_index`** | leaf area index | m``^2`` m``^{-2}`` | - | +| **`interception`** | canopy interception | mm Δt$^{-1}$ | - | +| **`precipitation`** | precipitation | mm Δt$^{-1}$ | - | +| **`q_land`** | overland flow | m$^3$ s$^{-1}$ | - | +| `sedspl` | sediment eroded by rainfall | ton Δt$^{-1}$ | - | +| `sedov` | sediment eroded by overland flow | ton Δt$^{-1}$ | - | +| `soilloss` | total eroded soil | ton Δt$^{-1}$ | - | +| `erosclay` | eroded soil for particle class clay | ton Δt$^{-1}$ | - | +| `erossilt` | eroded soil for particle class silt | ton Δt$^{-1}$ | - | +| `erossand` | eroded soil for particle class sand | ton Δt$^{-1}$ | - | +| `erossagg` | eroded soil for particle class small aggregates | ton Δt$^{-1}$ | - | +| `eroslagg` | eroded soil for particle class large aggregates | ton Δt$^{-1}$ | - | +| **`leaf_area_index`** | leaf area index | m$^2$ m$^{-2}$ | - | | `dl` | drain length | m | - | | `dw` | flow width | m | - | | `cGovers` | Govers transport capacity coefficient | - | - | @@ -227,88 +307,10 @@ specific_leaf = "Sl" | `fsagg` | fraction of particle class small aggregates | - | - | | `flagg` | fraction of particle class large aggregates | - | - | | `rivcell` | river cells | - | - | -| `TCsed` | total transport capacity of overland flow | ton Δt``^{-1}`` | - | -| `TCclay` | transport capacity of overland flow for particle class clay | ton Δt``^{-1}``| - | -| `TCsilt` | transport capacity of overland flow for particle class silt | ton Δt``^{-1}`` | - | -| `TCsand` | transport capacity of overland flow for particle class sand | ton Δt``^{-1}`` | - | -| `TCsagg` | transport capacity of overland flow for particle class small aggregates | ton Δt``^{-1}`` | - | -| `TClagg` | transport capacity of overland flow for particle class large aggregates | ton Δt``^{-1}`` | - | - -## Water demand and allocation - -### Paddy -The Table below shows the parameters (fields) of struct `Paddy`, including a description of -these parameters, the unit, and default value if applicable. The parameters in bold -represent model parameters that can be set through static and forcing input data (netCDF), -and can be listed in the TOML configuration file under `[input.vertical.paddy]`, to map the -internal model parameter to the external netCDF variable. - -| parameter | description | unit | default | -|:---------------| --------------- | ---------------------- | ----- | -| `demand_gross` | irrigation gross demand | mm Δt``^{-1}`` | - | -| **`irrigation_efficiency`** | irrigation efficiency | - | - | -| **`maximum_irrigation_rate`** | maximum irrigation rate | mm Δt``^{-1}`` | 25.0 mm day``^{-1}`` | -| **`irrigation_areas`** | irrigation areas | - | - | -| **`irrigation_trigger`** | irrigation on or off (boolean) | - | - | -| **`h_min`** | minimum required water depth in the irrigated paddy fields | mm | 20.0 | -| **`h_opt`** | optimal water depth in the irrigated paddy fields | mm | 50.0 | -| **`h_max`** | water depth when paddy field starts spilling water (overflow) | mm | 80.0 | -| `h` | actual water depth in paddy field | mm | - | - -### Non-paddy -The Table below shows the parameters (fields) of struct `NonPaddy`, including a description -of these parameters, the unit, and default value if applicable. The parameters in bold -represent model parameters that can be set through static and forcing input data (netCDF), -and can be listed in the TOML configuration file under `[input.vertical.nonpaddy]`, to map -the internal model parameter to the external netCDF variable. - -| parameter | description | unit | default | -|:---------------| --------------- | ---------------------- | ----- | -| `demand_gross` | irrigation gross demand | mm Δt``^{-1}`` | - | -| **`irrigation_efficiency`** | irrigation efficiency | - | - | -| **`maximum_irrigation_rate`** | maximum irrigation rate | mm Δt``^{-1}`` | 25.0 mm day``^{-1}``| -| **`irrigation_areas`** | irrigation areas | - | - | -| **`irrigation_trigger`** | irrigation on or off (boolean) | - | - | - -### Non-irrigation (industry, domestic and livestock) -The Table below shows the parameters (fields) of struct `NonIrrigationDemand`, including a -description of these parameters, the unit, and default value if applicable. The parameters -in bold represent model parameters that can be set through static and forcing input data -(netCDF). These parameters can be listed for the sectors industry, domestic and livestock, -in the TOML configuration file under `[input.vertical.industry]`, -`[input.vertical.domestic]` and `[input.vertical.livestock]`, to map the internal model -parameter to the external netCDF variable. - -| parameter | description | unit | default | -|:---------------| --------------- | ---------------------- | ----- | -| **`demand_gross`** | gross industry water demand | mm Δt``^{-1}`` | 0.0 | -| **`demand_net`** | net industry water demand | mm Δt``^{-1}`` | 0.0 | -| `returnflow_fraction` | return flow fraction | - | - | -| `returnflow` | return flow | mm Δt``^{-1}`` | - | - -### Water allocation land -The Table below shows the parameters (fields) of struct `AllocationLand`, including a -description of these parameters, the unit, and default value if applicable. The parameters -in bold represent model parameters that can be set through static and forcing input data -(netCDF), and can be listed in the TOML configuration file under -`[input.vertical.allocation]`, to map the internal model parameter to the external netCDF -variable. - -| parameter | description | unit | default | -|:---------------| --------------- | ---------------------- | ----- | -| `irri_demand_gross` | irrigation gross demand | mm Δt``^{-1}`` | - | -| `nonirri_demand_gross` | non-irrigation gross demand | mm Δt``^{-1}`` | - | -| `total_gross_demand` | total gross demand | mm Δt``^{-1}`` | - | -| **`frac_sw_used`** | fraction surface water used | - | 1.0 | -| **`areas`** | allocation areas | - | 1 | -| `surfacewater_demand` | demand from surface water | mm Δt``^{-1}`` | - | -| `surfacewater_alloc` | allocation from surface water | mm Δt``^{-1}`` | - | -| `act_groundwater_abst` | actual groundwater abstraction | mm Δt``^{-1}`` | - | -| `act_groundwater_abst_vol` | actual groundwater abstraction | m``^3`` Δt``^{-1}`` | - | -| `available_groundwater` | available groundwater | m``^3`` | - | -| `groundwater_demand` | groundwater_demand |mm Δt``^{-1}`` | - | -| `groundwater_alloc` | allocation from groundwater |mm Δt``^{-1}`` | - | -| `irri_alloc` | allocated water for irrigation |mm Δt``^{-1}`` | - | -| `nonirri_alloc` | allocated water for non-irrigation |mm Δt``^{-1}`` | - | -| `total_alloc` | total allocated water |mm Δt``^{-1}`` | - | -| `nonirri_returnflow` | return flow from non-irrigation |mm Δt``^{-1}`` | - | \ No newline at end of file +| `TCsed` | total transport capacity of overland flow | ton Δt$^{-1}$ | - | +| `TCclay` | transport capacity of overland flow for particle class clay | ton Δt$^{-1}$| - | +| `TCsilt` | transport capacity of overland flow for particle class silt | ton Δt$^{-1}$ | - | +| `TCsand` | transport capacity of overland flow for particle class sand | ton Δt$^{-1}$ | - | +| `TCsagg` | transport capacity of overland flow for particle class small aggregates | ton Δt$^{-1}$ | - | +| `TClagg` | transport capacity of overland flow for particle class large aggregates | ton Δt$^{-1}$ | - | +: {.striped .hover} \ No newline at end of file diff --git a/docs/model_docs/vertical/sbm.qmd b/docs/model_docs/vertical/sbm.qmd new file mode 100644 index 000000000..2d0953319 --- /dev/null +++ b/docs/model_docs/vertical/sbm.qmd @@ -0,0 +1,819 @@ +--- +title: SBM +engine: julia +--- + +## Introduction +The SBM vertical concept has its roots in the `Topog_SBM` model but has had considerable +changes over time. The main differences are: + +- The unsaturated zone can be split-up in different layers +- The addition of evapotranspiration losses +- The addition of a capillary rise + +The sections below describe the working of the SBM vertical concept in more detail. + +## Precipitation +The division between solid and liquid precipitation (snowfall and rainfall, respectively) is +performed based on the air temperature. If the temperature is below a threshold temperature +(`tt`), precipitation will fall as snow. An interval parameter (`tti`) defines the range over +which precipitation is partly falling as snow, and partly as rain. Snowfall is added to the +snowpack, where it is subject to melting and refreezing (see the section on [snow and +glaciers](./shared_processes.qmd#snow-and-glaciers)). The amount of rainfall is subject to +[interception](#rainfall-interception), and ultimately becomes available for +[evaporation](#evaporation) and/or [soil processes](#soil-processes). + +![Division between snow and precipitation based on the threshold temperature](../../images/snowfall.png) + + + + + +## Rainfall interception + +Two different interception models are available: the analytical Gash model, and the modified +Rutter model. The simulation timestep defines which interception model is used, where daily (or +larger) timesteps use the Gash model, and timesteps smaller than daily use the modified Rutter +model. + +### The analytical (Gash) model (Gash, 1979) +The analytical model of rainfall interception is based on Rutter's numerical model. +Simplifications allow the model to be applied on a daily basis, although a storm-based approach +will yield better results in situations with more than one storm per day. The amount of water +needed to completely saturate the canopy is defined as: + +$$ + P'=\frac{-\overline{R}S}{\overline{E}_{w}}\log\left[1-\frac{\overline{E}_{w}}{\overline{R}}(1-p-p_{t})^{-1}\right] +$$ + +where $\overline{R}$ is the average precipitation intensity on a saturated canopy and +$\overline{E}_{w}$ the average evaporation from the wet canopy and with the vegetation +parameters $S$, $p$ and $p_t$ as defined previously. The model uses a series of expressions to +calculate the interception loss during different phases of a storm. An analytical integration +of the total evaporation and rainfall under saturated canopy conditions is performed for each +storm to determine average values of $\overline{E}_{w}$ and $\overline{R}$. The total +evaporation from the canopy (the total interception loss) is calculated as the sum of the +components listed in the table below. Interception losses from the stems are calculated for +days with $P\geq S_{t}/p_{t}$. $p_t$ and $S_t$ are small and neglected. + +Table: Formulation of the components of interception loss according to Gash: + +| Components | Interception loss | +| -------- | ---- | +| For $m$ small storms ($P_{g}<{P'}_{g}$) | $(1-p-p_{t})\sum_{j=1}^{m}P_{g,j}$ | +| Wetting up the canopy in $n$ large storms ($P_{g}\geq{P'}_{g}$) | $n(1-p-p_{t}){P'}_{g}-nS$ | +| Evaporation from saturated canopy during rainfall | $\overline{E}/\overline{R}\sum_{j=1}^{n}(P_{g,j}-{P'}_{g})$| +| Evaporation after rainfall ceases for $n$ large storms | $nS$ | +| Evaporation from trunks in $q$ storms that fill the trunk storage | $qS_{t}$ | +| Evaporation from trunks in $m+n-q$ storms that do not fill the trunk storage | $p_{t}\sum_{j=1}^{m+n-q}P_{g,j}$ | + +In applying the analytical model, saturated conditions are assumed to occur when the hourly +rainfall exceeds a certain threshold. Often a threshold of 0.5 mm/hr is used. $\overline{R}$ is +calculated for all hours when the rainfall exceeds the threshold to give an estimate of the +mean rainfall rate onto a saturated canopy. + +Gash (1979) has shown that in a regression of interception loss on rainfall (on a storm basis) +the regression coefficient should equal to $\overline{E}_w/\overline{R}$. Assuming that neither +$\overline{E}_w$ nor $\overline{R}$ vary considerably in time, $\overline{E}_w$ can be +estimated in this way from $\overline{R}$ in the absence of above-canopy climatic observations. +Values derived in this way generally tend to be (much) higher than those calculated with the +penman-monteith equation. + +### The modified rutter model +For sub daily timesteps the interception is calculated using a simplification of the Rutter +model. The simplified model is solved explicitly and does not take drainage from the canopy +into account. The amount of stemflow is taken as a fraction (`0.1 * canopygapfraction`) of the +precipitation. Throughfall equals to the amount of water that cannot be stored by the canopy, +plus the rainfall that is not captured by the canopy. Water can evaporate from the canopy +storage, taken as the minimum between potential evaporation and the current storage. The +"left-over" potential evaporation (if any) is returned as output. + +```@docs +Wflow.rainfall_interception_modrut +``` + +### Interception parameters from LAI +The SBM concept can determine the interception parameters from leaf area index (LAI) +climatology. In order to switch this on you must define this cyclic parameter in the TOML file, +the parameter is read from `path_static`, as follows: + +```toml +[input] +path_forcing = "data/forcing-moselle.nc" +path_static = "data/staticmaps-moselle.nc" + +cyclic = ["vertical.leaf_area_index"] +``` +Furthermore, these additional parameters are required: ++ Specific leaf storage (`sl` ``\SIb{}{mm}``) ++ Storage woody part of vegetation (`swood` ``\SIb{}{mm}``) ++ Extinction coefficient (`kext` ``\SIb{}{-}``) + +Here it is assumed that `cmax` ``\SIb{}{mm}`` (leaves) (canopy storage capacity for the leaves +only) relates linearly with LAI (c.f. Van Dijk and Bruijnzeel 2001). This is done via the `sl`. +`sl` can be determined through a lookup table with land cover based on literature (Pitman 1989, +Lui 1998). Next the `cmax` (leaves) is determined using: + +$$ + c_{\max}(\mathrm{leaves}) = \mathrm{sl} \cdot \mathrm{LAI} +$$ + +To get to total storage (`cmax`) the woody part of the vegetation also needs to be added. As +for `sl`, the storage of the woody part `swood` can also be related to land cover (lookup +table). + +The canopy gap fraction is determined using the extinction coefficient `kext` (van Dijk and +Bruijnzeel 2001): + +$$ + \mathrm{canopygapfraction} = \exp(-\subtext{k}{ext} \cdot \mathrm{LAI}) +$$ + +The extinction coefficient `kext` can be related to land cover. + +## Evaporation + +The wflow\_sbm model assumes the input to be potential reference evapotranspiration. A crop +coefficient (`kc`, set to 1 by default) is used to convert the potential evapotranspiration +rate of a reference crop fully covering the soil to the potential evapotranspiration rate of +vegetation (natural and agricultural) fully covering the soil. The crop coefficient `kc` of +wflow\_sbm is used for a surface completely covered by vegetation, and does not include the +effect of growing stages of vegetation and soil cover. These effects are handled separately +through the use of the canopy gap fraction. + +It is assumed that the potential evaporation rate of intercepted water by vegetation is equal +to the potential evapotranspiration rate of vegetation (fully covering the soil) multiplied by +the canopy fraction. The potential evapotranspiration rate left over after interception is +available for transpiration. For potential open water evaporation (river and water bodies) the +potential reference evapotranspiration rate is used (multipled by the river fraction +`riverfrac`, and open water fraction `waterfrac`). Also for potential soil evaporation the +potential reference evapotranspiration rate is used, multiplied by the canopy gap fraction +corrected by the sum of total water fraction (`riverfrac` and `waterfrac`) and the fraction +covered by a glacier (`glacierfrac`). + +### Bare soil evaporation + +If there is only one soil layer present in the wflow\_sbm model, the bare soil evaporation is +scaled according to the wetness of the soil layer. The fraction of bare soil is assumed to be +equal to the fraction not covered by the canopy (`canopygapfraction`) corrected by the total +water fraction. When the soil is fully saturated, evaporation is set to equal the potential +reference evaporation. When the soil is not fully saturated, actual evaporation decreases +linearly with decreasing soil moisture values, as indicated by the figure below. + +![Evaporation reduction as function of available soil moisture](../../images/soil_evap.png) + + + +When more soil layers are present, soil evaporation is only provided from the upper soil layer, +and soil evaporation is split in evaporation from the unsaturated store and evaporation from +the saturated store. Water is first evaporated from the unsaturated store. The remaining +potential soil evaporation can be used for evaporation from the saturated store, but only when +the water table is present in the upper soil layer. Both the evaporation from the unsaturated +store and the evaporation from the saturated store are limited by the minimum of the remaining +potential soil evaporation and the available water in the unsaturated/saturated zone of the +upper soil layer. Also for multiple soil layers, the evaporation (both unsaturated and +saturated) decreases linearly with decreasing water availability. + +### Transpiration + +The maximum possible root water extraction rate for each soil layer is determined by +partitioning the potential transpiration rate ``T_p`` based on the fraction of the total root +length (`rootfraction` ``\SIb{}{-}``) in each soil layer. A root water uptake reduction model +is used to calculate a reduction coefficient as a function of soil water pressure, that may +reduce the maximum possible root water extraction rate. The root water uptake reduction model +is based on the concept proposed by Feddes et al. (1978). This concept defines a reduction +coefficient ``\SIb{\alpha}{-}`` as a function of soil water pressure (``\SIb{h}{cm}``). Four +different levels of ``h`` are defined: `h1`, `h2`, `h3` and `h4`. `h1` represents anoxic +moisture conditions, `h2` represents field capacity, `h3` represents the point of critical soil +moisture content (onset of drought stress), and `h4` represents the wilting point. The value of +`h3` is a function of the potential transpiration rate, between ``\SIb{1}{mm d^{-1}}`` and +``\SIb{5}{mm d^{-1}}``. If ``T_p \le \SIb{1}{mm d^{-1}}``, `h3` is set equal to `h3_low` (input +model parameter). If ``T_p \ge \SIb{5}{mm d^{-1}}``, `h3` is set equal to `h3_high` (input +model parameter). For ``T_p`` values between ``\SIb{1}{mm d^{-1}}`` and ``\SIb{5}{mm d^{-1}}``, +the value of `h3` is linearly related to ``T_p`` (between `h3_low` and `h3_high`). Besides +model parameters `h3_high` and `h3_low`, the critical pressure heads `h1`, `h2` and `h4` can be +defined as input to the model. + +The current soil water pressure is determined following the concept defined by Brooks and Corey +(1964): + +$$ + \frac{\theta-\theta_r}{\theta_s-\theta_r} = \min\left\{1, \left(\frac{h_b}{h}\right)^\lambda\right\} +$$ + +where $\SIb{h}{cm}$ is the pressure head, $\SIb{h_b}{cm}$ is the air entry pressure head, and +$\theta$, $\theta_s$, $\theta_r$ and $\lambda$ as previously defined. + +Whenever the current soil water pressure drops below `h4`, the root water uptake is set to +zero. The root water uptake is at ideal conditions whenever the soil water pressure is above +`h3`, with a linear transition between `h3` and `h4`. The assumption that very wet conditions +do not affect root water uptake too much is probably generally applicable to natural +vegetation. For crops this assumption is not valid and in this case root water uptake above +`h1` should be set to zero (oxygen deficit) and between `h1` and `h2` root water uptake is +limited. This is possible by setting the input model parameter `alpha_h1` at 0 (default is 1). + +![Root water uptake reduction coefficient as a function of soil water pressure](../../images/soil_rootwateruptake.png) + + + +The maximum allowed root water extraction from each soil layer in the unsaturated zone is +determined based on the fraction of each soil layer in the unsaturated zone that is above the +rooting depth (`availcap`) and the unsaturated storage `usld`, see conceptual figure below. +This is implemented using the following code (`i` refers to the index of the vector that +contains all active cells within the spatial model domain and `k` refers to the soil layer +(from top to bottom) in the unsaturated zone): + +```julia + # availcap is fraction of soil layer containing roots + # if `ust` is `true`, the whole unsaturated store is available for transpiration + if ust + availcap = usld[k] * 0.99 + else + availcap = + min(1.0, max(0.0, (sbm.rootingdepth[i] - sbm.sumlayers[i][k]) / usl[k])) + end + maxextr = usld[k] * availcap +``` + + +![Conceptual overview of how maxextr depends on rooting depth and water table depth](../../images/soil_unsatevap.png) + + + + + +::: {.callout-note} +When `whole_ust_available` is set to true in the TOML file, almost the complete unsaturated +storage (99%) is available for transpiration, independent of the `rootingdepth`. + +```toml +[model] +whole_ust_available = true +``` +::: + +The computation of transpiration from the saturated store depends on the water table depth, +rooting depth, the reduction coefficient $\alpha$, the fraction of wet roots and the +`rootfraction` below the water table. The fraction of wet roots is determined using a sigmoid +fuction (see figure below). The parameter `rootdistpar` defines the sharpness of the transition +between fully wet and fully dry roots. If the water table depth is equal to or lower than the +rooting depth, the remaining potential transpiration is used based on the potential +transpiration and actual transpiration in the unsaturated zone. The remaining potential +transpiration is multiplied by the wet roots fraction and the reduction coefficient (and +limited by the available water in saturated zone) to get the transpiration from the saturated +part of the soil. If the water table depth intersects the rooting depth, the potential +transpiration is multiplied by the remaining `rootfraction` (below the water table), wet roots +fraction and the reduction coefficient (and limited by the available water in saturated zone) +to get the transpiration from the saturated part of the soil. This is implemented using the +following code (`i` refers to the index of the vector that contains all active cells within the +spatial model domain): + +```julia +# transpiration from saturated store +wetroots = scurve(sbm.zi[i], sbm.rootingdepth[i], Float(1.0), sbm.rootdistpar[i]) +alpha = rwu_reduction_feddes( + Float(0.0), + sbm.h1[i], + sbm.h2[i], + sbm.h3[i], + sbm.h4[i], + sbm.alpha_h1[i], +) +# include remaining root fraction if rooting depth is below water table zi +if sbm.zi[i] >= sbm.rootingdepth[i] + f_roots = wetroots + restevap = sbm.pottrans[i] - actevapustore +else + f_roots = wetroots * (1.0 - rootfraction_unsat) + restevap = sbm.pottrans[i] +end +actevapsat = min(restevap * f_roots * alpha, satwaterdepth) +satwaterdepth = satwaterdepth - actevapsat +``` + +![Amount of wet roots and the effect of the rootdistpar parameter](../../images/soil_wetroots.png) + + + +## Snow and glaciers + +The snow and glacier model is described in [Snow and +glaciers](./shared_processes.qmd#snow-and-glaciers). Both options can be enabled by specifying +the following in the TOML file: + +```toml +[model] +snow = true +glacier = true +``` + +## Soil processes + +### The SBM soil water accounting scheme + +A detailed description of the `Topog_SBM` model has been given by Vertessy (1999). Briefly: the +soil is considered as a bucket with a certain depth ($\SIb{z_t}{mm}$), divided into a saturated +store ($\SIb{S}{mm}$) and an unsaturated store ($\SIb{U}{mm}$). The top of the $S$ store forms +a pseudo-water table at depth $\SIb{z_{i}}{mm}$ such that the value of $S$ at any time is given +by: + +$$ + S=(z_t-z_i)(\theta_s-\theta_r) +$$ + +where $\SIb{\theta_{s}}{-}$ and $\SIb{\theta_{r}}{-}$ are the saturated and residual soil water +contents, respectively. + +The unsaturated store $U$ is subdivided into storage ($\SIb{U_s}{mm}$) and deficit +($\SIb{U_d}{m}$): + +$$ + U_d=(\theta_s-\theta_r)z_i-U\\ + U_s=U-U_d +$$ + +The saturation deficit ($\SIb{S_d}{mm}$) for the soil profile as a whole is defined as: + +$$ + S_d=(\theta_s-\theta_r)z_t-S +$$ + +All infiltrating water that enters the $U$ store first. The unsaturated layer can be split-up +in different layers, by providing the thickness $\SIb{}{mm}$ of the layers in the TOML file. +The following example specifies three layers (from top to bottom) of 100, 300 and 800 mm: + +```toml +[model] +thicknesslayers = [100, 300, 800] +``` + +The code checks for each grid cell the specified layers against the `soilthickness` +$\SIb{}{mm}$, and adds or removes (partly) layer(s) based on the `soilthickness`. + +Assuming a unit head gradient, the transfer of water ($\SIb{\mathrm{st}}{mm t^{-1}}$) from a +$\SIb{U}{mm}$ store layer is controlled by the saturated hydraulic conductivity +$\SIb{\subtext{K}{sat}}{mm t^{-1}}$ at depth $\SIb{z}{mm}$ (bottom layer) or $\SIb{z_i}{mm}$, +the effective saturation degree of the layer, and a Brooks-Corey power coefficient (parameter +$c$) based on the pore size distribution index $\lambda$ (Brooks and Corey, 1964): + +$$ +\begin{gathered} + \mathrm{st}=\subtext{K}{sat}\left(\frac{\theta-\theta_r}{\theta_s-\theta_r}\right)^c\\ + c=\frac{2+3\lambda}{\lambda} +\end{gathered} +$$ + +Here $\SIb{}{mm t^{-1}}$ denotes milimeter per time step. + +When the unsaturated layer is not split-up into different layers, it is possible to use the +original `Topog\_SBM` vertical transfer formulation, by specifying in the TOML file: + +```toml +[model] +transfermethod = true +``` + +The transfer of water from the $\SIb{U}{mm}$ store to the $\SIb{S}{mm}$ store ($\SIb{st}{mm +t^{-1}}$) is in that case controlled by the saturated hydraulic conductivity +$\SIb{\subtext{K}{sat}}{mm s^{-1}}$ at depth $\SIb{z_i}{mm}$ and the ratio between +$\SIb{U}{mm}$ and $\SIb{S_d}{mm}$: + +$$ + \mathrm{st}=\subtext{K}{sat}\frac{U_s}{S_d} +$$ + +Four different saturated hydraulic conductivity depth profiles (`ksat_profile`) are available +and a `ksat_profile` can be specified in the TOML file as follows: + +```toml +[input.vertical] +ksat_profile = "exponential_constant" # optional, one of ("exponential", "exponential_constant", "layered", "layered_exponential"), default is "exponential" +``` + +Soil measurements are often available for about the upper $\SI{1.5-2}{m}$ of the soil column to +estimate the saturated hydraulic conductivity, while these measurements are often lacking for +soil depths beyond $\SI{1.5-2}{m}$. These different profiles allow to extent the saturated +hydraulic conductivity profile based on measurements (either an exponential fit or hydraulic +conductivity value per soil layer) with an exponential or constant profile. By default, with +`ksat_profile` "exponential", the saturated hydraulic conductivity $\SIb{\subtext{K}{sat}}{mm +t^{-1}}$ declines with soil depth $\SIb{z}{mm}$ in the model according to: + +$$ + \subtext{K}{sat} = K_0 e^{-fz}, +$$ + +where $\SIb{K_0}{mm s^{-1}}$ is the saturated hydraulic conductivity at the soil surface and +$\SIb{f}{mm^{-1}}$ is a scaling parameter. + +The plot below shows the relation between soil depth $z$ and saturated hydraulic conductivity +$\subtext{K}{sat}$ for different values of $f$. + +```{julia} +# | code-fold: true +using Printf +using CairoMakie + +let + fig = Figure(resolution=(800, 400)) + ax = Axis(fig[1, 1], xlabel=L"K_\mathrm{sat}\;[\mathrm{mm/day}]", ylabel=L"-z\;[\mathrm{mm}]") + + z = 0:5.0:1000 + ksat = 100.0 + f = 0.6 ./ collect(50:150.0:800) + + for fi in f + lines!(ax, ksat .* exp.(-fi .* z), -z, label=@sprintf("%.2e", fi)) + end + + Legend(fig[1, 2], ax, L"f") + fig +end +``` + +With `ksat_profile` "exponential\_constant", $\subtext{K}{sat}$ declines exponentially with +soil depth $\SIb{z}{mm}$ until $\SIb{\subtext{z}{mm}}{mm}$ below the soil surface, and stays +constant at and beyond soil depth $\subtext{z}{exp}$: + +$$ + \subtext{K}{sat} = \begin{cases} + K_0e^{-fz} & \text{if $z < \subtext{z}{exp}$}\\ + K_0e^{-f\subtext{z}{exp}} & \text{if $z \ge \subtext{z}{exp}$}. + \end{cases} +$$ + +It is also possible to provide a $\subtext{K}{sat}$ value per soil layer by specifying +`ksat_profile` "layered", these $\subtext{K}{sat}$ values are used directly to compute the +vertical transfer of water between soil layers and to the saturated store $S$. Finally, with +the `ksat_profile` "layered\_exponential" a $\subtext{K}{sat}$ value per soil layer is used +until depth $\subtext{z}{layered}$ below the soil surface, and beyond $\subtext{z}{layered}$ an +exponential decline of $\subtext{K}{sat}$ (of the soil layer with bottom +$\subtext{z}{layered}$) controlled by $f$ occurs. The different available `ksat_profle` options +are schematized in the figure below where the blue line represents the $\subtext{K}{sat}$ +value. + +![Overview of available `ksat_profile` options, for a soil column with five layers](../../images/sbm_ksat_profiles.png) + +### Infiltration + +The water available for infiltration is taken as the rainfall including meltwater. Infiltration +is determined separately for the compacted and non-compacted areas, as these have different +infiltration capacities. Naturally, only the water that can be stored in the soil can +infiltrate. If not all water can infiltrate, this is added as excess water to the runoff +routing scheme. + +The infiltrating water is split in two parts, the part that falls on compacted areas and the +part that falls on non-compacted areas. The maximum amount of water that can infiltrate in +these areas is calculated by taking the minimum of the maximum infiltration rate +(`infiltcapsoil` $\SIb{}{mm t^{-1}}$ for non-compacted areas and `infiltcappath` $\SIb{}{mm +t^{-1}}$ for compacted areas) and the amount of water available for infiltration +`avail_forinfilt` $\SIb{}{mm t^{-1}}$. The water that can actually infiltrate `infiltsoilpath` +$\SIb{}{mm t^{-1}}$ is calculated by taking the minimum of the total maximum infiltration rate +(compacted and non-compacted areas) and the remaining storage capacity. + +Infiltration excess occurs when the infiltration capacity is smaller then the throughfall and +stemflow rate. This amount of water (`infiltexcess` $\SIb{}{mm t^{-1}}$) becomes overland flow +(infiltration excess overland flow). Saturation excess occurs when the (upper) soil becomes +saturated and water cannot infiltrate anymore. This amount of water `excesswater` $\SIb{}{mm +t^{-1}}$ becomes overland flow (saturation excess overland flow). + +#### Infiltration in frozen soils + +If snow processes are modelled, the infiltration capacity is reduced when the soil is frozen +(or near freezing point). A infiltration correction factor is defined as a S-curve with the +shape as defined below. A parameter (`cf_soil`) defines the base factor of infiltration when +the soil is frozen. The soil temperature is calculated based on the soil temperature on the +previous timestep, and the temperature difference between air and soil temperature weighted +with a factor (`w_soil`, which defaults to 0.1125). + +The near surface soil temperature is modelled using a simple equation (Wigmosta et al., 2009): + +$$ +T_s^t = T_s^{t-1} + w (T_a - T_s^{t-1}) +$$ +where $\SIb{T_s^{t}}{\degree C}$ is the near-surface soil temperature at time $t$, +$\SIb{T_a}{\degree C}$ is air temperature and $\SIb{w}{-}$ is a weighting coefficient +determined through calibration (default is 0.1125 for daily timesteps). + +A reduction factor (`cf_soil` $\SIb{}{-}$, default is 0.038) is applied to the maximum +infiltration rate (`infiltcapsoil` and `infiltcappath`), when the following model settings are +specified in the TOML file: + +```toml +[model] +soilinfreduction = true +snow = true +``` + +If `soilinfreduction` is set to `false`, water is allowed to infiltrate the soil, even if the +soil is frozen. + +A S-curve (see plot below) is used to make a smooth transition (a c-factor ($c$) of 8.0 is +used): + +$$ +\begin{gathered} + b = \frac{1.0}{1.0 - \subtext{\mathrm{cf}}{soil}}\\ + \mathrm{soilinfredu} = \frac{1.0}{b + \exp(-c (T_s - a))} + \subtext{\mathrm{cf}}{soil}\\ + a = 0.0\\ + c = 8.0 +\end{gathered} +$$ + +![Infiltration correction factor as a function of soil temperature](../../images/soil_frozeninfilt.png) + + + +### Capillary rise + +The actual capillary rise `actcapflux` $\SIb{}{mm t^{-1}}$ is determined using the following +approach: first the saturated hydraulic conductivity `ksat` $\SIb{}{mm t^{-1}}$ is determined +at the water table $z_i$; next a potential capillary rise `maxcapflux` $\SIb{}{mm t^{-1}}$ is +determined from the minimum of `ksat`, actual transpiration `actevapustore` $\SIb{}{mm t^{-1}}$ +taken from the $U$ store, available water in the $S$ store (`satwaterdepth` $\SIb{}{mm}$) and +the deficit of the $U$ store (`ustorecapacity` $\SIb{}{mm}$), as shown by the following code +block: + +```julia +maxcapflux = max(0.0, min(ksat, actevapustore, ustorecapacity, satwaterdepth)) +``` + +Then the potential rise `maxcapflux` is scaled using the water table depth `zi`, a maximum +water depth `cap_hmax` $\SIb{}{mm}$ beyond which capillary rise ceases and a coefficient +`cap_n` $\SIb{}{-}$, as follows in the code block below (`i` refers to the index of the vector +that contains all active cells within the spatial model domain): + +```julia +if sbm.zi[i] > rootingdepth + capflux = + maxcapflux * pow( + 1.0 - min(sbm.zi[i], sbm.cap_hmax[i]) / (sbm.cap_hmax[i]), + sbm.cap_n[i], + ) +else + capflux = 0.0 +end +``` + +If the roots reach the water table (`rootingdepth` $\ge$ `sbm.zi`), `capflux` is set to zero. + +Finally, the capillary rise `capflux` is limited by the unsaturated store deficit (one or +multiple layers), calculated as follows in the code block below (`i` refers to the index of the +vector that contains all active cells within the spatial model domain, and `k` refers to the +layer position): + +```julia +usl[k] * (sbm.theta_s[i] - sbm.theta_r[i]) - usld[k] +``` + +where `usl` $\SIb{}{mm}$ is the unsaturated layer thickness, `usld` is the `ustorelayerdepth` +$\SIb{}{mm}$ (amount of water in the unsaturated layer), and $\theta_s$ and $\theta_r$ as +previously defined. + +The calculation of the actual capillary rise `actcapflux` is as follows in the code block below +(`i` refers to the index of the vector that contains all active cells within the spatial model +domain, and `k` refers to the layer position): + +```julia +actcapflux = 0.0 +netcapflux = capflux +for k = n_usl:-1:1 + toadd = + min(netcapflux, max(usl[k] * (sbm.theta_s[i] - sbm.theta_r[i]) - usld[k], 0.0)) + usld = setindex(usld, usld[k] + toadd, k) + netcapflux = netcapflux - toadd + actcapflux = actcapflux + toadd +end +``` + +In case of multiple unsaturated layers (`n_usl` $>$ 1), the calculation of the actual capillary +rise starts at the lowest unsaturated layer while keeping track of the remaining capillary rise +`netcapflux` $\SIb{}{mm t^{-1}}$. + +### Leakage + +If the `maxleakage` $\SIb{}{mm day^{-1}}$ input model parameter is set > 0, water is lost from +the saturated zone and runs out of the model. + +## Open water + +Part of the water available for infiltration is diverted to the open water, based on the +fractions of river and lakes of each grid cell. The amount of evaporation from open water is +assumed to be equal to potential evaporation (if sufficient water is available). + +## Non-irrigation +Non-irrigation water demand and allocation computations are supported for the sectors domestic, +industry and livestock. These computations can be enabled by specifying the following in the +TOML file: + +```toml +[model.water_demand] +domestic = true +industry = true +livestock = true +``` + +For these non-irrigation sectors the gross demand ($d_\mathrm{gross}$ $\SIb{}{mm t^{-1}}$) and +net demand ($d_\mathrm{net}$ $\SIb{}{mm t^{-1}}$) are provided to the model (input through +cyclic or forcing data). Gross demand represents the total demand and hence the total +abstraction from surface water or groundwater when sufficient water is available. Net demand +represents water consumption. The portion of total abstracted water that is not consumed is +returned as surface water. The return flow fraction ($f_\mathrm{return}$ [-]) is calculated as +follows: + +$$ + \subtext{f}{return} = 1.0 - \frac{\subtext{d}{net}}{\subtext{d}{gross}}, +$$ +and used to calculate the return flow rate (water abstracted from surface water or groundwater +but not consumed). For grid cells containing a river the return flow is directly returned to +the river routing component, otherwise the return flow is returned to the overland flow routing +component. + +## Non-paddy irrigation +Non-paddy (other crops than flooded rice) water demand and allocation computations are +supported. These computations can be enabled by specifying the following in the TOML file: + +```toml +[model.water_demand] +nonpaddy = true +``` +Irrigation is applied during the growing season (when input parameter `irrigation_trigger` +$\SIb{}{-}$ is `true` (or `on`)) and when water depletion exceeds the readily available water: + +$$ + (\subtext{U}{field} - \subtext{U}{a}) \ge (\subtext{U}{field} - \subtext{U}{h3}) +$$ +where $\SIb{\subtext{U}{field}}{mm}$ is the unsaturated store in the root zone at field +capacity (defined at a soil water pressure head of $\SI{-100}{cm}$), $\SIb{\subtext{U}{a}}{mm}$ +is the actual unsaturated store in the root zone and $\SIb{\subtext{U}{h3}}{mm}$ is the +unsaturated store in the root zone at the critical soil water pressure head `h3`, below this +pressure head reduction of root water uptake starts due to drought stress. The net irrigation +demand $\SIb{}{mm t^{-1}}$ is the irrigation rate that brings the root zone back to field +capacity, limited by the soil infiltration capacity $\SIb{}{mm t^{-1}}$, assuming that farmers +do not apply an irrigation rate higher than the soil infiltration capacity. To account for +limited irrigation efficiency the net irrigation demand is divided by the irrigation efficiency +for non-paddy crops (`irrigation_efficiency` $\SIb{}{-}$, default is $1.0$), resulting in gross +irrigation demand $\SIb{}{mm t^{-1}}$. Finally, the gross irrigation demand is limited by the +maximum irrigation rate (`maximum_irrigation_rate` $\SIb{}{mm t^{-1}}$, default is +$\SI{25}{mm\;day-1}$). If the maximum irrigation rate is applied, irrigation continues at +subsequent time steps until field capacity is reached. Irrigation is added to the `SBM` +variable `avail_forinfilt` $\SIb{}{mm t^{-1}}$, the amount of water available for infiltration. + +## Paddy irrigation +Paddy (flooded rice) water demand and allocation computations are supported. These computations +can be enabled by specifying the following in the TOML file: + +```toml +[model.water_demand] +paddy = true +``` +Irrigation is applied during the growing season (when input parameter `irrigation_trigger` +$\SIb{}{-}$ is `true` (or `on`)) and when the paddy water depth `h` $\SIb{}{mm}$ reaches below +the minimum water depth `h_min` $\SIb{}{mm}$ (see also the figure below). The net irrigation +demand [mm t$^{-1}$] is the irrigation rate required to reach the optimal paddy water depth +`h_opt` $\SIb{}{mm}$, an approach similar to Xie and Cui (2011). To account for limited +irrigation efficiency the net irrigation demand is divided by the irrigation efficiency for +paddy fields (`irrigation_efficiency` $\SIb{}{-}$, default is 1.0), resulting in gross +irrigation demand $\SIb{}{mm t^{-1}}$. Finally, the gross irrigation demand is limited by the +maximum irrigation rate (`maximum_irrigation_rate` $\SIb{}{mm t^{-1}}$, default is $\SIb{25}{mm +d^{-1}}$). If the maximum irrigation rate is applied, irrigation continues at subsequent time +steps until the optimal paddy water depth `h_opt` is reached. Irrigation is added to the `SBM` +variable `avail_forinfilt` $\SIb{}{mm t^{-1}}$, the amount of water available for infiltration. +When the paddy water depth `h` exceeds `h_max` $\SIb{}{mm}$ runoff occurs, and this amount is +added to the runoff routing scheme for overland flow. The figure below shows a typical vertical +soil profile of a puddled rice soil with a muddy layer of about 15 cm (in this case represented +by two soil layers of 5 cm and 10 cm thickness), a plow soil layer of 5 cm with relative low +permeability (vertical hydraulic conductivity $k_v$ of about $\SI{5}{mm d^{-1}}$), and a +non-puddled soil below the plow soil layer. The low vertical hydraulic conductivity of the plow +soil layer can be realized by making use of the parameter `kvfrac` $\SIb{}{-}$, a +multiplication factor applied to the vertical hydraulic conductivity at soil depth +$\SIb{z}{mm}$. + +![paddy_profile](../../images/paddy_profile.png) + +*Schematic diagram of a paddy field with water balance components and soil profile* + +## Water withdrawal and allocation +For the water withdrawal the total gross demand is computed (sum over the irrigation and +non-irrigation water demand sectors), in case sufficient water is available the water +withdrawal is equal to the total gross demand. In case of insufficient water availability, the +water withdrawal is scaled down to the available water, and allocation is then proportional to +the gross demand per sector (industry, domestic, livestock and irrigation). Water can be +abstracted from the following sources: + +- surface water from rivers (max 80% of total available water) +- reservoirs and lakes (max 98% of total available water) +- groundwater (max 75% of total available water) + +The model parameter `frac_sw_used` (fraction surface water used, default is 1.0) determines how +much water is supplied by available surface water and groundwater. + +### Local +First, surface water abstraction (excluding reservoir and lake locations) is computed to +satisfy local (same grid cell) water demand. The available surface water volume is limited by a +fixed scaling factor of $0.8$ to prevent rivers from completely drying out. It is assumed that +the water demand cannot be satisfied completely from local surface water and groundwater. The +next step is to satisfy the remaining water demand for allocation `areas` $\SIb{}{-}$, +described in the next sub-section. + +### Allocation areas +For allocation areas the water demand $\SIb{\subtext{V}{sw, demand}}{m^3}$ and availability +$\SIb{\subtext{V}{sw, availabilty}}{m^3}$ are summed (including reservoir and lake locations +limited by a fixed scaling factor of $0.98$), and the total surface water abstraction is then: + +$$ + \subtext{V}{sw, abstraction} = \min (\subtext{V}{sw, demand}, \subtext{V}{sw, availabilty}) +$$ +The fraction of available surface water that can be abstracted +$\SIb{\subtext{f}{sw,abstraction}}{-}$ at the allocation area level is then: + +$$ + \subtext{f}{sw, abstraction} = \frac{\subtext{V}{sw, abstraction}}{\subtext{V}{sw, available}} +$$ +This fraction is applied to the remaining available surface water of each river cell (including +lake and reservoir locations) to compute surface water abstraction at each river cell and to +update the local surface water abstraction. + +The fraction of water demand that can be satisfied by available surface water +$\SIb{\subtext{f}{sw, allocation}}{-}$ at the allocation area level is then: + +$$ + \subtext{f}{sw, allocation} = \frac{\subtext{V}{sw, abstraction}}{\subtext{V}{sw, demand}} +$$ +This fraction is applied to the remaining surface water demand of each land cell to compute the +allocated surface water to each land cell. + +Then groundwater abstraction is computed to satisfy the remaining local water demand, where +groundwater abstraction is limited by a fixed scaling factor of $0.75$ applied to the +groundwater volume. Finally, for allocation `areas` the water demand +$\SIb{\subtext{V}{gw,demand}}{m^3}$ and availability $\SIb{\subtext{V}{gw, availabilty}}{m^3}$ +are summed, and the total groundwater abstraction is then: + +$$ + \subtext{V}{gw, abstraction} = \min(\subtext{V}{gw, demand}, \subtext{V}{gw, availabilty}) +$$ +The fraction of available groundwater that can be abstracted at allocation area level +$\SIb{\subtext{f}{gw, abstraction}}{-}$ at the allocation area level is then: + +$$ + \subtext{f}{gw, abstraction} = \frac{\subtext{V}{gw, abstraction}}{\subtext{V}{gw, available}} +$$ +This fraction is applied to the remaining available groundwater of each land cell to compute +groundwater abstraction and to update the local groundwater abstraction. + +The fraction of water demand that can be satisfied by available groundwater +$\SIb{\subtext{f}{gw,allocation}}{-}$ at the allocation area level is then: + +$$ + \subtext{f}{gw, allocation} = \frac{\subtext{V}{gw, abstraction}}{\subtext{V}{gw, demand}} +$$ +This fraction is applied to the remaining groundwater demand of each land cell to compute the +allocated groundwater to each land cell. + +### Abstractions +Groundwater abstraction is implemented by subtracting this amount from the `recharge` variable +of the lateral subsurface flow component (kinematic wave) or the recharge `rate` of the +groundwater flow module. Surface water `abstraction` $\SIb{}{m^3 s^{-1}}$ is divided by the +flow length `dl` $\SIb{}{m}$ and subtracted from the lateral inflow of kinematic wave routing +scheme for river flow. For the local inertial routing scheme (river and optional floodplain +routing), the surface water `abstraction` $\SIb{}{m^3 s^{-1}}$ is subtracted as part of the +continuity equation of the local inertial model. For reservoir and lake locations surface water +is abstracted (`act_surfacewater_abst_vol` $\SIb{}{m^3 s^{-1}}$) from the reservoir `volume` +$\SIb{}{m^3}$ and lake `storage` $\SIb{}{m^3}$ respectively, with a subsequent update of the +lake `waterlevel` $\SIb{}{m}$. + +## References ++ Brooks, R. H., and Corey, A. T., 1964, Hydraulic properties of porous media, Hydrology Papers + 3, Colorado State University, Fort Collins, 27 p. ++ Feddes, R.A., Kowalik, P.J. and Zaradny, H., 1978, Simulation of field water use and crop + yield, Pudoc, Wageningen, Simulation Monographs. ++ Gash, J. H. C., 1979, An analytical model of rainfall interception by forests, Q. J. Roy. + Meteor. Soc., 105, 43–55, doi:1026 10.1002/qj.497105443041027. ++ Liu, S., 1998, Estimation of rainfall storage capacity in the canopies of cypress wetlands + and slash pine uplands in North-Central Florida, J. Hydr., 207, 32–41, doi: + 10.1016/S0022-1694(98)00115-2. ++ Pitman, J., 1989, Rainfall interception by bracken in open habitats—relations between leaf + area, canopy storage and drainage rate, J. Hydr. 105, 317–334, doi: + 10.1016/0022-1694(89)90111-X. ++ Van Dijk, A. I. J. M., and Bruijnzeel, L. A., 2001, Modelling rainfall interception by + vegetation of variable density using an adapted analytical model, Part 2, Model validation + for a tropical upland mixed cropping system, J. Hydr., 247, 239–262. ++ Vertessy, R., and Elsenbeer, H., 1999, Distributed modeling of storm flow generation in an + amazonian rain forest catchment: effects of model parameterization, Water Resour. Res., 35, + 2173–2187. doi: 10.1029/1999WR9000511257. ++ Wigmosta, M. S., Lane, L. J., Tagestad, J. D., and Coleman A. M., 2009, Hydrologic and + erosion models to assess land use and management practices affecting soil erosion, J. Hydrol. + Eng., 14, 27-41. ++ Xie, X. and Cui, Y., 2011, Development and test of SWAT for modeling hydrological processes + in irrigation districts with paddy rice, J. Hydrol., 396, pp. 61-71. diff --git a/docs/model_docs/vertical/sediment.qmd b/docs/model_docs/vertical/sediment.qmd new file mode 100644 index 000000000..690a80d1d --- /dev/null +++ b/docs/model_docs/vertical/sediment.qmd @@ -0,0 +1,224 @@ +--- +title: Sediment +--- + +Over the land, soil erosion, also called soil loss, is closely linked to the water cycle. The +main processes governing sediment generation are splash erosion from rain droplets, and sheet +and rill erosion from the shear stress caused by overland flow. The intensity of soil erosion +by rain or flow depends on the land and soil characteristics such as slope, land use or soil +type. Once soil is eroded, the detached particles can be transported downslope by overland flow. +Along the transport pathways, soil particles can also be deposited due to a low flow velocity, +a change of topography in depressions, footslopes or valley bottoms, and/or can be filtered and +stopped by a change in vegetation such as field boundaries. + +The inland part of the sediment gathers these different processes, separated in a vertical +structure for the soil loss and lateral structure for the transport in overland flow. + +![Overview of the different processes for a land cell in wflow\_sediment.](../../images/soilloss-scheme.png) + +## Soil Erosion +The first process to consider in sediment dynamics is the generation of sediments by land +erosion. The main processes behind soil loss are rainfall erosion and overland flow erosion. In +order to model such processes at a fine time and space scale, physics-based models such as +ANSWERS and EUROSEM were chosen here. + +The choice of rainfall erosion method is set up in the model section of the TOML: +```toml +[model] +rainerosmethod = "answers" # Rainfall erosion equation: ["answers", "eurosem"] +``` + +### Rainfall erosion +In wflow\_sediment, rainfall erosion can both be modelled using EUROSEM or ANSWERS equation. +The main difference between the models is that EUROSEM uses a more physics-based approach based +on the kinetic energy of the rain drops impacting the soil (Morgan et al, 1998), while ANSWERS +is more empirical and uses parameters from the USLE model (Beasley et al, 1991). + +In EUROSEM, rainfall erosion is modelled according to rainfall intensity and its kinetic energy +when it reaches the soil according to equations developed by Brandt (1990). As the intensity of +the rain kinetic energy depends on the length of the fall, rainfall intercepted by vegetation +will then be reduced compared to direct throughfall. The kinetic energy of direct throughfall +is estimated by (Morgan et al, 1998): +$$ + \subtext{\mathrm{KE}}{direct} = 8.95 + 8.44\,\log_{10}(R_i) +$$ + +where $\SIb{\subtext{\mathrm{KE}}{direct}}{J m^{-2} mm^{-1}}$ is the kinetic energy of direct +throughfall and $\SIb{R_i}{mm h^{-1}}$ is rainfall intensity. If the rainfall is intercepted by +vegetation and falls as leaf drainage, its kinetic energy is then reduced according to (Brandt, +1990): +$$ + \subtext{\mathrm{KE}}{leaf} = 15.8\,\sqrt{H_p} - 5.87 +$$ +where $\SIb{\subtext{\mathrm{KE}}{leaf}}{J m^{-2} mm^{-1}}$ is kinetic energy of leaf drainage +and $\SIb{H_p}{m}$ is the effective canopy height (half of plant height). Canopy height can be +derived from the global map from Simard & al. (2011) or by user input depending on the land +use. + +Kinetic energies from both direct throughfall and leaf drainage are then multiplied by the +respective depths of direct throughfall and leaf drainage (mm) and added to get the total +rainfall kinetic energy $\mathrm{KE}$. The soil detached by rainfall $\SIb{D_R}{g m^{-2}}$ is +then: +$$ + D_R = k\,\mathrm{KE}\,e^{-\varphi h} +$$ +where $\SIb{k}{g J^{-1}}$ is an index of the detachability of the soil, $\SIb{\mathrm{KE}}{J +m^{-2}}$ is the total rainfall kinetic energy, $\SIb{h}{m}$ is the surface runoff depth on the +soil and $\varphi$ is an exponent varying between $0.9$ and $3.1$ used to reduce rainfall +impact if the soil is already covered by water. As a simplification, Torri (1987) has shown +that a value of $2.0$ for $\varphi$ is representative enough for a wide range of soil +conditions. The detachability of the soil $k$ depends on the soil texture (proportion of clay, +silt and sand content) and corresponding values are defined in EUROSEM user guide (Morgan et +al, 1998). As a simplification, in `wflow_sediment`, the mean value of the detachability shown +in the table below are used. Soil texture can for example be derived from the topsoil clay and +silt content from SoilGrids (Hengl et al, 2017). + +Table: Mean detachability of soil depending on its texture (Morgan et al, 1998). + +| Texture (USDA system) | Mean detachability $\SIb{k}{g J^{-1}}$ | +|:--------------------- | ------------------------------ | +| Clay | 2.0 | +| Clay Loam | 1.7 | +| Silt | 1.2 | +| Silt Loam | 1.5 | +| Loam | 2.0 | +| Sandy Loam | 2.6 | +| Loamy Sand | 3.0 | +| Fine Sand | 3.5 | +| Sand | 1.9 | + +Rainfall erosion is handled differently in ANSWERS. There, the impacts of vegetation and soil +properties are handled through the USLE coefficients in the equation (Beasley et al, 1991): +$$ + D_R = 0.108 \, \subtext{C}{USLE} \, \subtext{K}{USLE} \, A_i \, R_i^2 +$$ +where $\SIb{D_R}{kg min^{-1}}$ is the soil detachment by rainfall, $\subtext{C}{USLE}$ is the +soil cover-management factor from the USLE equation, $\subtext{K}{USLE}$ is the soil +erodibility factor from the USLE equation, $\SIb{A_i}{m^2}$ is the area of the cell and +$\SIb{R_i}{mm\;min^{-1}}$ is the rainfall intensity. There are several methods available to +estimate the $C$ and $K$ factors from the USLE. They can come from user input maps, for example +maps resulting from Panagos & al.'s recent studies for Europe (Panagos et al, 2015) (Ballabio +et al, 2016). To get an estimate of the $C$ factor globally, the other method is to estimate +$C$ values for the different land use type in from global land cover maps (e.g. GlobCover). An +example is given for the global land cover map GlobCover, summed up in the table below, the +values come from a literature study including Panagos et al.'s review (2015), Gericke & al. +(2015), Mansoor & al. (2013), Chadli et al. (2016), de Vente et al. (2009), Borrelli et al. +(2014), Yang et al. (2003) and Bosco et al. (2015). + +The other methods to estimate the USLE $K$ factor are to use either topsoil composition or +topsoil geometric mean diameter. $K$ estimation from topsoil composition is estimated with the +equation developed in the EPIC model (Williams et al, 1983): +$$ +\begin{gathered} + \subtext{K}{USLE} = \left[ 0.2 + 0.3\exp\left(-0.0256\;\mathrm{SAN}\frac{(1-\mathrm{SIL})}{100}\right) \right] + \left(\frac{\mathrm{SIL}}{\mathrm{CLA}+\mathrm{SIL}}\right)^{0.3} \\ + \left(1-\frac{0.25\;\mathrm{OC}}{\mathrm{OC}+e^{3.72-2.95\;\mathrm{OC}}}\right)\left(1-\frac{0.75\;\mathrm{SN}}{\mathrm{SN}+e^{-5.51+22.9\;\mathrm{SN}}}\right) +\end{gathered} +$$ +where $\SIb{\mathrm{CLA}}{\%}$, $\SIb{\mathrm{SIL}}{\%}$, $\SIb{\mathrm{SAN}}{\%}$ are +respectively the clay, silt and sand fractions of the topsoil, $\SIb{OC}{\%}$ is the topsoil +organic carbon content and $\mathrm{SN} = 1-\mathrm{SAN}/100$. These soil parameters can be +derived for example from the SoilGrids dataset. The $K$ factor can also be estimated from the +soil mean geometric diameter using the formulation from the RUSLE guide by Renard & al. (1997): +$$ + \subtext{K}{USLE} = 0.0034 + 0.0405\exp\left(-\dfrac{1}{2}\left(\dfrac{\log_{10}(D_g)+1.659}{0.7101}\right)^2\right) +$$ +where $D_g$ is the soil geometric mean diameter (mm) estimated from topsoil clay, silt, sand +fraction. + +Table: Estimation of USLE C factor per Globcover land use type + +| GlobCover Value | Globcover label | $\subtext{C}{USLE}$ | +|:--------------- | --------------- | ------------ | +| 11 | Post-flooding or irrigated croplands (or aquatic) | 0.2 | +| 14 | Rainfed croplands | 0.35 | +| 20 | Mosaic cropland (50-70%) vegetation (grassland/shrubland/forest) (20-50%) | 0.27 | +| 30 | Mosaic vegetation (grassland/shrubland/forest) (50-70%) / cropland (20-50%) | 0.25 | +| 40 | Closed to open (>15%) broadleaved evergreen or semi-deciduous forest (>5m) | 0.0065 | +| 50 | Closed (>40%) broadleaved deciduous forest (>5m) | 0.001 | +| 60 | Open (15-40%) broadleaved deciduous forest/woodland (>5m) | 0.01 | +| 70 | Closed (>40%) needleleaved evergreen forest (>5m) | 0.001 | +| 90 | Open (15-40%) needleleaved deciduous or evergreen forest (>5m) | 0.01 | +| 100 | Closed to open (>15%) mixed broadleaved and needleleaved forest (>5m) | 0.02 | +| 110 | Mosaic forest or shrubland (50-70%) / grassland (20-50%) | 0.015 | +| 120 | Mosaic grassland (50-70%) / forest or shrubland (20-50%) | 0.03 | +| 130 | Closed to open (>15%) (broadleaved or needleleaved, evergreen or deciduous) shrubland (<5m) | 0.035 | +| 140 | Closed to open (>15%) herbaceous vegetation (grassland, savannas or lichens/mosses) | 0.05 | +| 150 | Sparse (<15%) vegetation | 0.35 | +| 160 | Closed to open (>15%) broadleaved forest regularly flooded (semi-permanently or temporarily) - Fresh or brackish water | 0.001 | +| 170 | Closed (>40%) broadleaved forest or shrubland permanently flooded - Saline or brackish water | 0.0005 | +| 180 | Closed to open (>15%) grassland or woody vegetation on regularly flooded or waterlogged soil - Fresh, brackish or saline water | 0.04 | +| 190 | Artificial surfaces and associated areas (Urban areas >50%) | 0.0 | +| 200 | Bare areas | 0.0 | +| 210 | Water bodies | 0.0 | +| 220 | Permanent snow and ice | 0.0 | +| 230 | No data (burnt areas, clouds,…) | 0.0 | + +### Overland flow erosion + +Overland flow (or surface runoff) erosion is induced by the strength of the shear stress of the +surface water on the soil. As in rainfall erosion, the effect of the flow shear stress can be +reduced by the soil vegetation or by the soil properties. In wflow_sediment, soil detachment by +overland flow is modelled as in ANSWERS with (Beasley et al, 1991): +$$ + D_G = 0.90 \, \subtext{C}{USLE} \, \subtext{K}{USLE} \, A_i \, S \, q +$$ +where $\SIb{D_F}{kg\;min^{-1}}$ is soil detachment by flow, $\subtext{C}{USLE}$ and +$\subtext{K}{USLE}$ are the USLE cover and soil erodibility factors, $\SIb{A_i}{m^2}$ is the +cell area, $S$ is the slope gradient and $\SIb{q}{m^2 min^{-1}}$ is the overland flow rate per +unit width. The USLE $C$ and $K$ factors can be estimated with the same methods as for rainfall +erosion and here the slope gradient is obtained from the sinus rather than the tangent of the +slope angle. + +## Delivery to the river system +Once soil is detached, it can be transported by overland flow and reach the river system. This +process is described in [Sediment Flux in overland +flow](../lateral/sediment_flux.qmd#sediment-flux-in-overland-flow). + +## References ++ D.B Beasley and L.F Huggins. ANSWERS - Users Manual. Technical report, EPA, 1991. ++ P. Borrelli, M. Märker, P. Panagos, and B. Schütt. Modeling soil erosion and river sediment + yield for an intermountain drainage basin of the Central Apennines, Italy. Catena, 114:45-58, + 2014. 10.1016/j.catena.2013.10.007 ++ C. Bosco, D. De Rigo, O. Dewitte, J. Poesen, and P. Panagos. Modelling soil erosion at + European scale: Towards harmonization and reproducibility. Natural Hazards and Earth System + Sciences, 15(2):225-245, 2015. 10.5194/nhess-15-225-2015 ++ C.J Brandt. Simulation of the size distribution and erosivity of raindrops and throughfall + drops. Earth Surface Processes and Landforms, 15(8):687-698, dec 1990. ++ K. Chadli. Estimation of soil loss using RUSLE model for Sebou watershed (Morocco). Modeling + Earth Systems and Environment, 2(2):51, 2016. 10.1007/s40808-016-0105-y ++ G R Foster. Modeling the erosion process. Hydrologic modeling of small watersheds, pages + 295-380, 1982. ++ A. Gericke. Soil loss estimation and empirical relationships for sediment delivery ratios of + European river catchments. International Journal of River Basin Management, 2015. + 10.1080/15715124.2014.1003302 ++ L.D.K. Mansoor, M.D. Matlock, E.C. Cummings, and L.L. Nalley. Quantifying and mapping + multiple ecosystem services change in West Africa. Agriculture, Ecosystems and Environment, + 165:6-18, 2013. 10.1016/j.agee.2012.12.001 ++ Q Morgan, J.N Smith, R.E Govers, G Poesen, J.W.A Auerswald, K Chisci, G Torri, D Styczen, and + M E Folly. The European soil erosion model (EUROSEM): documentation and user guide. Technical + report, 1998. ++ S.L Neitsch, J.G Arnold, J.R Kiniry, and J.R Williams. SWAT Theoretical Documentation Version + 2009. Texas Water Resources Institute, pages 1-647, 2011. 10.1016/j.scitotenv.2015.11.063 ++ P. Panagos, P. Borrelli, K. Meusburger, C. Alewell, E. Lugato, and L. Montanarella. + Estimating the soil erosion cover-management factor at the European scale. Land Use Policy, + 48:38-50, 2015. 10.1016/j.landusepol.2015.05.021 ++ K Renard, Gr Foster, Ga Weesies, Dk McCool, and Dc Yoder. Predicting soil erosion by water: a + guide to conservation planning with the Revised Universal Soil Loss Equation (RUSLE). + Washington, 1997. ++ D. Torri, M. Sfalanga, and M. Del Sette. Splash detachment: Runoff depth and soil cohesion. + Catena, 14(1-3):149-155, 1987. 10.1016/S0341-8162(87)80013-9 ++ J. de Vente, J. Poesen, G. Govers, and C. Boix-Fayos. The implications of data selection for + regional erosion and sediment yield modelling. Earth Surface Processes and Landforms, + 34(15):1994-2007, 2009. 10.1002/esp.1884 ++ G. Verstraeten and J. Poesen. Estimating trap efficiency of small reservoirs and ponds: + methods and implications for the assessment of sediment yield. Progress in Physical + Geography, 24(2):219-251, 2000. 10.1177/030913330002400204 ++ O. Vigiak, A. Malago, F. Bouraoui, M. Vanmaercke, and J. Poesen. Adapting SWAT hillslope + erosion model to predict sediment concentrations and yields in large Basins. Science of the + Total Environment, 538:855-875, 2015. 10.1016/j.scitotenv.2015.08.095 ++ J.R. Williams, K.G. Renard, and P.T. Dyke. EPIC A new method for assessing erosion's effect + on soil productivity. Journal of Soil and Water Conservation, 38(5):381-383, 1983. ++ D. Yang, S. Kanae, T. Oki, T. Koike, and K. Musiake. Global potential soil erosion with + reference to land use and climate changes. Hydrological Processes, 17(14):2913-2928, 2003. + 10.1002/hyp.1441 diff --git a/docs/model_docs/vertical/shared_processes.qmd b/docs/model_docs/vertical/shared_processes.qmd new file mode 100644 index 000000000..cb7aa77a2 --- /dev/null +++ b/docs/model_docs/vertical/shared_processes.qmd @@ -0,0 +1,184 @@ +--- +title: Shared processes +--- + +## Snow and glaciers + +### Snow modelling + +If the air temperature, $T_a$, is below a user-defined threshold `tt` $\SIb{}{\degree C}$ +precipitation occurs as snowfall, whereas it occurs as rainfall if $T_a ≥ \mathrm{tt}$. A +another parameter `tti` defines how precipitation can occur partly as rain or snowfall (see the +figure below). If precipitation occurs as snowfall, it is added to the dry snow component +within the snow pack. Otherwise it ends up in the free water reservoir, which represents the +liquid water content of the snow pack. Between the two components of the snow pack, +interactions take place, either through snow melt (if temperatures are above a threshold `tt`) +or through snow refreezing (if temperatures are below threshold `tt`). + +The respective rates of snow melt and refreezing are: + +$$ +\begin{align*} + Q_m &=& \subtext{\mathrm{cf}}{max}(T_a−\mathrm{tt})\, &&T_a > \mathrm{tt} \\ + Q_r &=& \subtext{\mathrm{cf}}{max} \, \mathrm{cf}_r(\mathrm{tt}−T_a) &&T_a < \mathrm{tt} +\end{align*} +$$ + +where $Q_m$ is the rate of snow melt, $Q_r$ is the rate of snow refreezing, and +$\SIb{\subtext{\mathrm{cf}}{max}}{mm\;(\degree C)^{-1} day^{-1}}$ and $\mathrm{cf}_r$ are user +defined model parameters (the melting factor and the refreezing factor respectively). + +The fraction of liquid water in the snow pack is at most equal to a user defined fraction, +`whc`, of the water equivalent of the dry snow content. If the liquid water concentration +exceeds `whc`, either through snow melt or incoming rainfall, the surplus water (`rainfall`) +becomes available for infiltration into the soil: + +```julia +snowwater = snowwater - refreezing # free water content in snow +maxsnowwater = snow * whc # max water in the snow +snowwater = snowwater + snowmelt + rainfall # add all water and potentially supersaturate the snowpack +rainfall = max(snowwater - maxsnowwater, 0.0) # rain + surplus snowwater +``` + +![Snowmelt and refreezing rates as a function of temperature (for set melting and refreezing factors)](../../images/snowmelt.png) + + + +### Glacier modelling + +Glacier processes can be modelled if the snow model is enabled. Glacier modelling is very +similar to snow modelling and considers two main processes: glacier build-up from snow turning +into firn/ice (using the HBV-light model) and glacier melt (using a temperature degree-day +model). + +The definition of glacier boundaries and initial volume is defined by two parameters. The +parameter `glacierfrac` gives the fraction of each grid cell covered by a glacier as a number +between zero and one. The state parameter `glacierstore` gives the amount of water (in mm w.e.) +within the glaciers at each grid cell. Because the glacier store (`glacierstore`) cannot be +initialized by running thFe model for a couple of years, a default initial state should be +supplied by adding this parameter to the input static file. The required glacier data can be +prepared from available glacier datasets. + +First, a fixed fraction of the snowpack on top of the glacier is converted into ice for each +timestep and added to the `glacierstore` using the HBV-light model (Seibert et al., 2018). This +fraction `g_sifrac` typically ranges from $0.001$ to $0.006$. + +Then, when the snowpack on top of the glacier is almost all melted (snow cover $< +\SI{10}{mm}$), glacier melt is enabled and estimated with a degree-day model. If the air +temperature, $T_a$, is below a certain threshold `g_tt` ($\SIb{}{\degree C}$) precipitation +occurs as snowfall, whereas it occurs as rainfall if $T_a ≥$ `g_tt`. + +With this the rate of glacier melt in mm is estimated as: + +$$ +Q_m = \subtext{g}{cfmax}(T_a − \subtext{g}{tt})\, ; \, T_a > \subtext{g}{tt} +$$ + +where $Q_m$ is the rate of glacier melt and $\SIb{\subtext{g}{cfmax}}{mm (\degree +C)^{-1}day^{-1}}$ is the melting factor. Parameter `g_tt` can be taken as equal to the snow +`tt` parameter. Values of the melting factor `g_cfmax` normally varies from one glacier to +another and some values are reported in the literature. `g_cfmax` can also be estimated by +multiplying snow `cfmax` by a factor between 1 and 2, to take into account the higher albedo of +ice compared to snow. + +## Rainfall interception +Both the Gash and Rutter models are available to estimate rainfall interception by the +vegetation. The selection of an interception model depends on the simulation timestep. + +### The analytical (Gash) model +The analytical model of rainfall interception is based on Rutter's numerical model. The +simplifications that introduced allow the model to be applied on a daily basis, although a +storm-based approach will yield better results in situations with more than one storm per day. +The amount of water needed to completely saturate the canopy is defined as: + +$$ +P'=\frac{-\overline{R}S}{\overline{E}_w}\log\left[1-\frac{\overline{E}_w}{\overline{R}}(1-p-p_t)^{-1}\right] +$$ + +where $\overline{R}$ is the average precipitation intensity on a saturated canopy and +$\overline{E}_{w}$ the average evaporation from the wet canopy and with the vegetation +parameters $S$, $p$ and $p_t$ as defined previously. The model uses a series of expressions to +calculate the interception loss during different phases of a storm. An analytical integration +of the total evaporation and rainfall under saturated canopy conditions is then done for each +storm to determine average values of $\overline{E}_{w}$ and $\overline{R}$. The total +evaporation from the canopy (the total interception loss) is calculated as the sum of the +components listed in the table below. Interception losses from the stems are calculated for +days with $P\geq S_{t}/p_{t}$. $p_t$ and $S_t$ are small and neglected. + +Table: Formulation of the components of interception loss according to Gash: + +| Components | Interception loss | +|:----------- | ----------------- | +| For $m$ small storms ($P_g<{P'}_g$) | $(1-p-p_t)\sum_{j=1}^m P_{g,j}$ | +| Wetting up the canopy in $n$ large storms ($P_g\geq{P'}_g$) | $n(1-p-p_{t}){P'}_g-nS$ | +| Evaporation from saturated canopy during rainfall | $\overline{E}/\overline{R}\sum_{j=1}^n(P_{g,j}-{P'}_g)$| +| Evaporation after rainfall ceases for $n$ large storms | $nS$ | +| Evaporation from trunks in $q$ storms that fill the trunk storage | $qS_t$ | +| Evaporation from trunks in $m+n-q$ storms that do not fill the trunk storage | $p_t\sum_{j=1}^{m+n-q}P_{g,j}$ | + +In applying the analytical model, saturated conditions are assumed to occur when the hourly +rainfall exceeds a certain threshold. Often a threshold of 0.5 mm/hr is used. $\overline{R}$ is +calculated for all hours when the rainfall exceeds the threshold to give an estimate of the +mean rainfall rate onto a saturated canopy. + +Gash (1979) has shown that in a regression of interception loss on rainfall (on a storm basis) +the regression coefficient should equal to $\overline{E}_w/\overline{R}$. Assuming that neither +$\overline{E}_w$ nor $\overline{R}$ vary considerably in time, $\overline{E}_w$ can be +estimated in this way from $\overline{R}$ in the absence of above-canopy climatic observations. +Values derived in this way generally tend to be (much) higher than those calculated with the +penman-monteith equation. + +### The modified rutter model +For sub daily timesteps the interception is calculated using a simplification of the Rutter +model. The simplified model is solved explicitly and does not take drainage from the canopy +into account. + +```@docs +Wflow.rainfall_interception_modrut +``` + +### Interception parameters from LAI +The SBM concept can determine the interception parameters from leaf area index (LAI) +climatology. In order to switch this on you must define this cyclic parameter in the TOML file, +the parameter is read from `path_static`, as follows: + +```toml +[input] +path_forcing = "data/forcing-moselle.nc" +path_static = "data/staticmaps-moselle.nc" + +cyclic = ["vertical.leaf_area_index"] +``` + +Furthermore these additional parameters are required: ++ Specific leaf storage (`sl` $\SIb{}{mm}$) ++ Storage woody part of vegetation (`swood` $\SIb{}{mm}$) ++ Extinction coefficient (`kext` $\SIb{}{-}$) + +Here it is assumed that `cmax` $\SIb{}{mm}$ (leaves) (canopy storage capacity for the leaves +only) relates linearly with LAI (c.f. Van Dijk and Bruijnzeel 2001). This done via the `sl`. +`sl` can be determined through a lookup table with land cover based on literature (Pitman 1989, +Lui 1998). Next the `cmax` (leaves) is determined using: + +$$ + \mathrm{cmax}(\mathrm{leaves}) = \mathrm{sl} \cdot \mathrm{LAI} +$$ + +To get to total storage (`cmax`) the woody part of the vegetation also needs to be added. As +for `sl`, the storage of the woody part `swood` can also be related to land cover (lookup +table). + +The canopy gap fraction is determined using the extinction coefficient `kext` (van Dijk and +Bruijnzeel 2001): + +$$ + \mathrm{canopygapfraction} = \exp(-\subtext{k}{ext} \cdot \mathrm{LAI}) +$$ + +The extinction coefficient `kext` can be related to land cover. + +## References ++ Seibert, J., Vis, M. J. P., Kohn, I., Weiler, M., and Stahl, K., 2018, Technical note: + Representing glacier geometry changes in a semi-distributed hydrological model, Hydrol. Earth + Syst. Sci., 22, 2211–2224, https://doi.org/10.5194/hess-22-2211-2018. diff --git a/docs/src/index.md b/docs/src/index.md deleted file mode 100644 index eba809525..000000000 --- a/docs/src/index.md +++ /dev/null @@ -1,35 +0,0 @@ -```@meta -CurrentModule = Wflow -``` - -# About wflow - -Wflow is Deltares' solution for modelling hydrological processes, allowing users to account -for precipitation, interception, snow accumulation and melt, evapotranspiration, soil water, -surface water, groundwater recharge, and water demand and allocation in a fully distributed -environment. Successfully applied worldwide for analyzing flood hazards, drought, climate -change impacts and land use changes, wflow is growing to be a leader in hydrology solutions. -Wflow is conceived as a framework, within which multiple distributed model concepts are -available, which maximizes the use of open earth observation data, making it the -hydrological model of choice for data scarce environments. Based on gridded topography, -soil, land use and climate data, wflow calculates all hydrological fluxes at any given grid -cell in the model at a given time step. - -Wflow was born out of the creation of Deltares in 2008, when a strategic review identified -the need for a distributed hydrological model to allow the simulation of flows at the -catchment scale. With the intention being to encourage greater scientific collaboration. -For this reason: - - * Wflow is free and open source software. - * Wflow is easily coupled with other models and software applications. - * Contribution to the wflow code development is encouraged. - -From 2021 the [wflow code](https://github.com/Deltares/Wflow.jl) is distributed under the -[MIT License](https://github.com/Deltares/Wflow.jl/blob/master/LICENSE). Wflow is also -available as a [compiled executable](https://download.deltares.nl/en/download/wflow/) under -the Deltares terms and conditions. The wflow computational engine is built in the -[Julia](https://julialang.org/) language, a high-performance computing language. -Wflow does not include a graphical user interface and is designed for maximum user -flexibility. Prior to 2021, wflow was developed in Python on top of the PCRaster Python -extension. The Python version is [still available](https://github.com/openstreams/wflow), -but not actively developed. diff --git a/docs/src/intro/use_cases.md b/docs/src/intro/use_cases.md deleted file mode 100644 index 196c7ff66..000000000 --- a/docs/src/intro/use_cases.md +++ /dev/null @@ -1,82 +0,0 @@ -# Case studies - -## [Wflow models for the Meuse and Rhine](@id case_rws) - -Reliable hydrological models for the Rhine and the Meuse river basins are necessary for -short-term forecasting of river flows and long-term predictions for strategic water -management planning. In collaboration with Rijkswaterstaat, Deltares is developing a new -line of models for the Rhine and the Meuse basins. The models will be used for forecasting -and to estimate the impact of climate change on water resources and extreme streamflow. In -the model development, we aim to improve hydrological predictions by including relevant -processes in the model schematization. The modularity of the wflow framework is ideal for -this as we can easily evaluate the combination of different vertical and lateral model -components. For example, the local inertial routing for river and overland flow enables us -to consider retention of water in the floodplains, which is likely to improve extreme -streamflow predictions. - -![fig_case_rws](../images/case_rhine_meuse.png) - -## [Operational flood forecasting in Australia](@id case_flifs) - -In Australia, there was a need for high-resolution, fast and accurate rainfall-runoff models -to provide boundary conditions for a fast and detailed flood inundation model (SFINCS). The -domain of the flood model covers the entire North and East Coast of Australia. Although -many gauging stations are available to provide real-time information, many rivers are not -covered. For these locations, wflow\_sbm models are used to provide this real-time -information. Additionally, these models are used to provide projections for potential future -scenarios. Using the HydroMT library, all wflow\_sbm models were automatically built. The -high level of flexibility in spatial and temporal resolution, combined with the physics-based nature -of the concept, makes Wflow\_sbm particularly suitable for ungauged basins. Furthermore, the -model is detailed and computationally efficient enough for coupling with the fast -flood inundation model SFINCS. - -![fig_case_flifs](../images/case_flifs_1.png) - -The results of this proof of concept are very promising. Technically, we were able to -quickly set up the wflow\_sbm models, couple them to the flood inundation models (SFINCS), and -run the models operationally under the Delft-FEWS platform. Model validation was conducted -for two basins by comparing the results of Wflow\_sbm against observations and the -results of calibrated URBS models. This validation demonstrated that the uncalibrated Wflow\_sbm -model results were already quite satisfactory, especially given the complex nature of these -basins, which include several small and large reservoirs. We could also show the potential -for further calibration by adjusting the KsatHorFrac parameter. - -Reference: De Kleermaeker, S., Leijnse, T., Morales, Y., Druery, C., Maguire, S., -2022. Developing a real-time data and modelling framework for operational flood inundation - forecasting in Australia. In Hydrology & Water Resources Symposium 2022 (HWRS 2022): - The Past, the Present, the Future. Engineers Australia. - https://search.informit.org/doi/10.3316/informit.916755150845355 - -![fig_case_flifs](../images/case_flifs_2.png) - -## [Simulating plastic transport in Thailand](@id case_mfa) - -For the Pollution Control Board of the Government of Thailand and the World Bank, we -supported a material flow analysis of plastics in Thailand using wflow. Plastic pollution -is a growing global issue. Plastic waste enters rivers and is transported to the ocean -where it persists and threatens the health of the ocean, seas and coasts. The initial -movement of plastic waste is in many cases triggered by runoff from (heavy) rainfall and -transported by water flow towards small streams and rivers. Therefore there is strong -relation to rainfall-runoff processes, which can be modeled using high-resolution -rainfall-runoff models. - -In this study we applied the wflow\_sbm model in combination with a fate-and-transport and -water quality model (DelWaq) to simulate the movement of plastics through five large river -basins and on three island and coastal zones (Krabi, Phuket, and Ko Samui; see screenshot of the -model below) in Thailand. Together with our partners Panya Consultants and HII, we were able -to identify hotspots of plastic pollution, estimate how much plastic waste would end up in the Gulf of -Thailand and recommend priority areas for reducing plastic waste reaching the sea. - -![fig_case_mfa](../images/case_mfa_1.png) - -The wflow\_sbm models for the five large basins were calibrated. The presence of large dams and -reservoirs complicated calibration, but with the input for the dam operation, -the model performance for these basins could be largely improved. The figure below shows the -calibrated model results for the Chao Phraya, just upstream of Bangkok. The input from the -hydrological wflow\_sbm model was used as input for the fate and transport model to assess -the amount of plastic transported to the ocean. - -![fig_case_mfa](../images/case_mfa_3.png) - -Link to World Bank report: -[https://www.worldbank.org/en/country/thailand/publication/plastic-waste-material-flow-analysis-for-thailand](https://www.worldbank.org/en/country/thailand/publication/plastic-waste-material-flow-analysis-for-thailand) diff --git a/docs/src/model_docs/intro.md b/docs/src/model_docs/intro.md deleted file mode 100644 index f30172251..000000000 --- a/docs/src/model_docs/intro.md +++ /dev/null @@ -1,16 +0,0 @@ -# About the model documentation - -As opposed to the user guide, which describes the steps needed to build and apply a model in -the software, this section explains the different model concepts that are available within -the modelling framework of wflow. Descriptions are given regarding the model concepts with -links to the original scientific papers which explain the concepts in more detail. The model -parameters which influence the processes are also shown, using inline code blocks. An -overview of all model parameters is also provided for easy reference, including their short -names, long descriptions and their units (see [parameters vertical concepts](@ref -params_vert) and [parameters lateral concepts](@ref params_lat)). - -## Division between vertical and lateral - -In the documentation we talk of `vertical` and `lateral` concepts. These are components in -the model that describe the vertical movement of water in each model grid cell and the -lateral movement of water across grid cells. diff --git a/docs/src/model_docs/lateral/gwf.md b/docs/src/model_docs/lateral/gwf.md deleted file mode 100644 index 8f932c8a0..000000000 --- a/docs/src/model_docs/lateral/gwf.md +++ /dev/null @@ -1,268 +0,0 @@ -# [Groundwater flow](@id lateral_gwf) - -Single layer groundwater flow requires the four following components, and each is described in more detail below: - -+ aquifer -+ connectivity -+ constanthead -+ boundaries - -## Aquifer types -Groundwater flow can occur either in a confined or unconfined aquifer. Confined aquifers are -overlain by a poorly permeable confining layer (e.g. clay). No air can get in to fill the -pore space so that the aquifer always remains fully saturated. For a confined aquifer, water -will always flow along the complete height ``H`` [m] over the aquifer and transmissivity -``kH`` [m``^2`` d``^{-1}``] is a constant (``k`` [m d``^{-1}``] is the horizontal hydraulic -conductivity). Specific storage is the amount of water an aquifer releases per unit change in -hydraulic head, per unit volume of aquifer, as the aquifer and the groundwater itself is -compressed. Its value is much smaller than specific yield, between 1e-5 (stiff) and 0.01 -(weak). - -The upper boundary of an unconfined aquifer is the water table (the phreatic -surface). Specific yield (or drainable porosity) represents the volumetric fraction the -aquifer will yield when all water drains and the pore volume is filled by air instead. -Specific yield will vary roughly between 0.05 (clay) and 0.45 (peat) (Johnson, 1967). - -Groundwater flow is solved forward in time and central in space. The vertically averaged -governing equation for an inhomogeneous and isotropic aquifer in one dimension can be -written as: - -```math - S \frac{\phi}{\delta t} = \frac{\delta}{\delta x} (kH \frac{\phi}{\delta x}) + Q -``` - -where ``S`` [m m``^{-1}``] is storativity (or specific yield), ``\phi`` [m] is hydraulic -head, ``t`` is time, ``k`` [m t``^{-1}``] is horizontal hydraulic conductivity, ``H`` [m] is -the (saturated) aquifer height: groundwater level - aquifer bottom elevation and ``Q`` [m -t``^{-1}``] represents fluxes from boundary conditions (e.g. recharge or abstraction), see -also [Aquifer boundary conditions](@ref). - -The simplest finite difference formulation is forward in time, central in space, and can be -written as: - -```math - S_i \frac{(\phi_{i}^{t+1} - \phi_i^{t})}{\Delta t} = -C_{i-1} (\phi_{i-1} - \phi_i) - C_i (\phi_{i+1} - \phi_i) + Q_ᵢ -``` - -where ``_i`` is the cell index, ``^t`` is time, ``\Delta t`` is the step size, ``C_{i-1}`` -is the the intercell conductance between cell ``i-1`` and ``i`` and ``C_i`` is the intercell -conductance between cell ``i`` and ``i+1``. The connection data between cells is stored as -part of the `Connectivity` struct, see also [Connectivity](@ref) for more information. - -Conductance ``C`` is defined as: - -```math - C = \frac{kH w}{l} -``` - -where ``w`` [m] is the width of the cell to cell connection, and ``l`` [m] is the length of -the cell to cell connection. ``k`` and ``H`` may both vary in space; intercell conductance -is therefore an average using the properties of two cells. For the calculation of the -intercell conductance ``C`` the harmonic mean is used (see also Goode and Appel, 1992), here -between cell index ``i`` and cell index ``i+1``, in the ``x`` direction: - -```math - C_i = w \frac{(k_iH_i\cdot k_{i+1}H_{i+1})}{(k_iH_i \cdot l_{i+1} + k_{i+1}H_{i+1} \cdot l_i)} -``` - -where ``H`` [m] is the aquifer top - aquifer bottom, and ``k``, ``l_i`` is the length in -cell ``i`` (``0.5 \Delta x_i``), ``l_{i+1}`` is the length in cell ``i+1`` (``0.5 \Delta -x_{i+1}``) and ``w`` as previously defined. For an unconfined aquifer the intercell -conductance is scaled by using the "upstream saturated fraction" as the MODFLOW -documentation calls it. In this approach, the saturated thickness of a cell-to-cell is -approximated using the cell with the highest head. This results in a consistent -overestimation of the saturated thickness, but it avoids complexities related with cell -drying and rewetting, such as having to define a "wetting threshold" or a "wetting factor". -See also the documentation for MODFLOW-NWT (Niswonger et al., 2011) or MODFLOW6 (Langevin et -al., 2017) for more background information. For more background on drying and rewetting, see -for example McDonald et al. (1991). - -For the finite difference formulation, there is only one unknown, ``\phi_i^{t+1}``. -Reshuffling terms: - -```math -\phi_i^{t+1} = \phi_i^t + (C_{i-1} (\phi_i - \phi_{i-1}) + C_i (\phi_{i+1} - \phi_i) + Q_i) \frac{Δt}{S_i} -``` - -This can be generalized to two dimensions, for both regular and irregular cell connectivity. -Finally, a stable time step size can be computed given the forward-in-time, central in space -scheme, based on the following criterion from Chu and Willis (1984): - -```math -\frac{\Delta t k H}{(\Delta x \Delta y S)} \le \frac{1}{4} -``` -where ``\Delta t`` [d] is the stable time step size, ``\Delta x`` [m] is the cell length in -the ``x`` direction and ``\Delta y`` [m] is the cell length in the ``y`` direction, ``k`` is -the horizontal hydraulic conductivity [m``^2`` d``^{-1}``] and ``H`` [m] is the saturated -thickness of the aquifer. For each cell ``\frac{(\Delta x \Delta y S)}{k H}`` is -calculated, the minimum of these values is determined, and multiplied by ``\frac{1}{4}``, to -get the stable time step size. - -For more details about the finite difference formulation and the stable time step size -criterion we refer to the paper of Chu and Willis (1984). - -Boundary conditions can be classified into three categories: - -+ specified head (Dirichlet) -+ specified flux (Neumann) -+ head-dependent flux (Robin) - -Neumann and Robin conditions are implemented by adding to or subtracting from a net (lumped) -cell flux. Dirichlet conditions are special cased, since they cannot (easily) be implemented -via the flux, but the head is set directly instead. - -## Connectivity -The connectivity between cells is defined as follows. - -```@docs -Wflow.Connectivity -``` - - -## Constant head -Dirichlet boundary conditions can be specified through the field `constanthead` (type -`ConstantHead`) of the `GroundwaterFlow` struct. - -```julia -@get_units struct ConstantHead{T} - head::Vector{T} | "m" - index::Vector{Int} | "-" -end -``` - -For the model `SBM + Groundwater flow` this boundary condition is optional, and if used -should be specified in the TOML file as follows (see also -[sbm\_gwf\_config.toml](https://github.com/Deltares/Wflow.jl/blob/master/test/sbm_gwf_config.toml)): - -```toml -[model] -constanthead = true -``` - -## Aquifer boundary conditions - -### River -The flux between river and aquifer is calculated using Darcy's law following the approach in -MODFLOW: - -```math - Q_{riv} = \Bigg\lbrace{C_{i} \,\text{min}(h_{riv} - B_{riv}, h_{riv} - \phi), \,h_{riv} > \phi \atop C_{e} (h_{riv} - \phi) , \,h_{riv} \leq \phi} -``` -where ``Q_{riv}`` is the exchange flux from river to aquifer [L``^3`` T``^{-1}``], ``C_i`` -[L``^2`` T``^{-1}``] is the river bed infiltration conductance, ``C_e`` [L``^2`` T``^{-1}``] -is the river bed exfiltration conductance, ``B_{riv}`` the bottom of the river bed [L], -``h_{riv}`` is the river stage [L] and ``\phi`` is the hydraulic head in the river cell [L]. - -The Table in the Groundwater flow [river boundary condition](@ref gwf_river_params) section -of the Model parameters provides the parameters of the struct `River`. Parameters that can -be set directly from the static input data (netCDF) are marked in this Table. - -The exchange flux (river to aquifer) ``Q_{riv}`` is an output variable (field `flux` of the -`River` struct), and is used to update the total flux in a river cell. For the model `SBM + -Groundwater flow`, the water level `h` [m] of the river kinematic wave in combination with -the river `bottom` is used to update the `stage` field of the `River` struct each time step. - -### Drainage -The flux from drains to the aquifer is calculated as follows: - -```math -Q_{drain} = C_{drain} \text{min}(0, h_{drain} - \phi) -``` - -where ``Q_{drain}`` is the exchange flux from drains to aquifer [L``^3`` T``^{-1}``], -``C_{drain}`` [L``^2`` T``^{-1}``] is the drain conductance, ``h_{drain}`` is the drain -elevation [L] and ``\phi`` is the hydraulic head in the cell with drainage [L]. - -The Table in the Groundwater flow [drainage boundary condition](@ref gwf_drainage_params) -section of the Model parameters provides the parameters of the struct `Drainage`. Parameters -that can be set directly from the static input data (netCDF) are marked in this Table. - -The exchange flux (drains to aquifer) ``Q_{drain}`` is an output variable (field `flux` of -struct `Drainage`), and is used to update the total flux in a cell with drains. For the -model `SBM + Groundwater flow` this boundary condition is optional, and if used should be -specified in the TOML file as follows (see also -[sbm\_gwf\_config.toml](https://github.com/Deltares/Wflow.jl/blob/master/test/sbm_gwf_config.toml)): - -```toml -[model] -drains = true -``` - -### Recharge -The recharge flux ``Q_{r}`` to the aquifer is calculated as follows: - -```math -Q_{r} = R \, A -``` -with ``R`` the recharge rate [L T``^{-1}``] and ``A`` the area [L``^2`` ] of the aquifer -cell. - -The Table in the Groundwater flow [recharge boundary condition](@ref gwf_recharge_params) -section of the Model parameters section provides the parameters of the struct `Recharge`. -Parameters that can be set directly from the static input data (netCDF) are marked in this -Table. - -The recharge flux ``Q_r`` is an output variable (field `flux` of struct `Recharge`), and is -used to update the total flux in a cell where recharge occurs. For the model `SBM + -Groundwater flow`, the recharge rate from the vertical SBM concept `recharge` [mm] is used -to update the `rate` field of the `Recharge` struct each time step. The `rate` field is -multiplied by the `area` field of the aquifer. - -### Head boundary -This boundary is a fixed head with time (not affected by the model stresses over time)) -outside of the model domain, and is generally used to avoid an unnecessary extension of the -model domain to the location of the fixed boundary (for example a large lake). The flux from -the boundary ``Q_{hb}`` [L``^3`` T``^{-1}``] is calculated as follows: - -```math -Q_{hb} = C_{hb} (\phi_{hb} - \phi) -``` -with ``C_{hb}`` the conductance of the head boundary [L``^2`` T``^{-1}``], ``\phi_{hb}`` the -head [L] of the head boundary and ``\phi`` the head of the aquifer cell. - -The Table in the Groundwater flow [head boundary condition](@ref gwf_headboundary_params) -section of the Model parameters provides the parameters of the struct `HeadBoundary`. - -The head boundary flux ``Q_{hb}`` is an output variable (field `flux` of struct -`HeadBoundary`), and is used to update the total flux in a cell where this type of boundary -occurs. The parameter Head ``\phi_{hb}`` can be specified as a fixed or time dependent -value. - -!!! note - This boundary is not (yet) part of the model `SBM + Groundwater flow`. - -### Well boundary -A volumetric well rate [L``^3`` T``^{-1}``] can be specified as a boundary condition. - -The Table in the [well boundary condition](@ref well_boundary_params) section of the Model -parameters provides the parameters of the struct `Well`. - -The volumetric well rate ``Q_{well}`` can be can be specified as a fixed or time dependent -value. If a cell is dry, the actual well flux `flux` is set to zero (see also the last note -on this page). - -!!! note - This boundary is not (yet) part of the model `SBM + Groundwater flow`. - -!!! note - For an unconfined aquifer the boundary fluxes are checked, in case of a dry aquifer cell - a negative flux is not allowed. - -## References -+ Chu, W. S., & Willis, R. (1984). An explicit finite difference model for unconfined - aquifers. Groundwater, 22(6), 728-734. -+ Goode, D. J., & Appel, C. A. (1992). Finite-Difference Interblock Transmissivity for - Unconfined Aquifers and for Aquifers having Smoothly Varying Transmissivity Water-resources - investigations report, 92, 4124. -+ Johnson, A. I. (1967), Specific yield: compilation of specific yields for various - materials, Water Supply Paper 1662-D, Washington, D.C.: U.S. Government Printing Office, - p. 74, doi:10.3133/wsp1662D. -+ Langevin, C.D., Hughes, J.D., Banta, E.R., Niswonger, R.G., Panday, Sorab, and Provost, - A.M., 2017, Documentation for the MODFLOW 6 Groundwater Flow Model: U.S. Geological Survey - Techniques and Methods, book 6, chap. A55, 197 p., https://doi.org/10.3133/tm6A55. -+ McDonald, M.G., Harbaugh, A.W., Orr, B.R., and Ackerman, D.J., 1991, A method of - converting no-flow cells to variable-head cells for the U.S. Geological Survey modular - finite-difference groundwater flow model: U.S. Geological Survey Open-File Report 91-536, - 99 p. -+ Niswonger, R.G., Panday, Sorab, and Ibaraki, Motomu, 2011, MODFLOW-NWT, A Newton - formulation for MODFLOW-2005: U.S. Geological Survey Techniques and Methods 6-A37, 44 p. \ No newline at end of file diff --git a/docs/src/model_docs/lateral/kinwave.md b/docs/src/model_docs/lateral/kinwave.md deleted file mode 100644 index d0e744e73..000000000 --- a/docs/src/model_docs/lateral/kinwave.md +++ /dev/null @@ -1,186 +0,0 @@ -# [Kinematic wave] (@id kin_wave) - -## Surface routing -The main flow routing scheme available in Wflow.jl is the kinematic wave approach for -channel and overland flow, assuming that the topography controls water flow mostly. The -kinematic wave equations are (Chow, 1988): -```math - \dfrac{dQ}{dx} + \dfrac{dA}{dt} = q \\~\\ - A = \alpha Q^{\beta} -``` -These equations can then be combined as a function of streamflow only: -```math - \dfrac{dQ}{dx} + \alpha \beta Q^{\beta - 1} \dfrac{dQ}{dt} = q -``` -where ``Q`` is the surface runoff in the kinematic wave [m``^3``/s], ``x`` is the length of -the runoff pathway [m], ``A`` is the cross-section area of the runoff pathway [m``^{2}``], -``t`` is the integration timestep [s] and ``\alpha`` and ``\beta`` are coefficients. - -These equations are solved with a nonlinear scheme using Newton's method and can also be -iterated depending on the model space and time resolution. By default, the iterations are -performed until a stable solution is reached (``\epsilon < 10^{-12}``). For larger models, -the number of iterations can also be fixed for to a specific sub-timestep (in seconds) for -both overland and channel flows to improve simulation time. To enable (fixed or not) -iterations of the kinematic wave the following lines can be inserted in the TOML file of the -model: - -```toml -[model] -# Enable iterations of the kinematic wave -kin_wave_iteration = true -# Fixed sub-timestep for iterations of channel flow (river cells) -kw_river_tstep = 900 -# Fixed sub-timestep for iterations of overland flow (land cells) -kw_land_tstep = 3600 -``` - -The ``\alpha`` parameter of the kinematic wave is fixed. To estimate the wetted perimeter -for the calculation of the ``\alpha`` parameter a bankfull river depth map (default value -is 1.0 m) for the river can be provided as follows: - -```toml -[input.lateral.river] -bankfull_depth = "wflow_riverdepth" -``` - -The wetted perimeter of the river is based on half bankfull river depth. For the land part the -wetted perimeter is based on the flow width. - -Simplified [reservoir and lake](@ref reservoir_lake) models can be included as part of the -river kinematic wave network. - -## Inflow -External water (supply/abstraction) `inflow` [m``^3`` s``^{-1}``] can be added to the -kinematic wave for surface water routing, as a cyclic parameter or as part of forcing (see -also [Input section](@ref)). - -## Abstractions -Abstractions from the river through the variable `abstraction` [m``^3`` s``{-1}``] are -possible when water demand and allocation is computed. The variable `abstraction` is set -from the water demand and allocation module each time step. The `abstraction` is divided by -the length of the runoff pathway and subtracted from the lateral inflow of the kinematic -wave routing scheme for river flow. - -## Subsurface flow routing -In the SBM model the kinematic wave approach is used to route subsurface flow laterally. -Different vertical hydraulic conductivity depth profiles are possible as part of the -vertical [SBM](@ref soil) concept, and these profiles (after unit conversion) are also used -to compute lateral subsurface flow. The following profiles (see [SBM](@ref soil) for a -detailed description) are available: -- `exponential` (default) -- `exponential_constant` -- `layered` -- `layered_exponential` -For the profiles `exponential` and `exponential_constant`, the saturated store ``S`` is -drained laterally by saturated downslope subsurface flow for a slope with width ``w`` [m] -according to: -```math - Q = \begin{cases} - \frac{K_0\tan(\beta)}{f}\left(e^{(-fz_{i})}-e^{(-fz_\mathrm{exp})}\right) w + - K_0e^{(-fz_\mathrm{exp})}(z_t-z_\mathrm{exp})\tan(\beta) w & \text{if $z_i < z_\mathrm{exp}$}\\ - \\ - K_0e^{(-fz_\mathrm{exp})}(z_t - z_i)\tan(\beta) w & \text{if $z_i \ge z_\mathrm{exp}$}, - \end{cases} -``` -where ``\beta`` is element slope angle, ``Q`` is subsurface flow [m``^{3}`` d``^{-1}``], -``K_0`` is the saturated hydraulic conductivity at the soil surface [m d``^{-1}``], ``z_i`` -is the water table depth [m], ``z_{t}`` is the total soil depth [m], ``f`` is a scaling -parameter [m``^{-1}``] that controls the decrease of ``K_0`` with depth and -``z_\mathrm{exp}`` [m] is the depth from soil surface for which the exponential decline of -``K_0`` is valid. For the `exponential` profile, ``z_\mathrm{exp}`` is equal to ``z_t``. - -Combining with the following continuity equation: -```math - (\theta_s-\theta_r)w\frac{\partial h}{\partial t} = -\frac{\partial Q}{\partial x} + wr -``` -where ``h`` is the water table height [m], ``x`` is the distance downslope [m], and ``r`` is -the net input rate [m d``^{-1}``] to the saturated store. Substituting for ``h -(\frac{\partial Q}{\partial h})``, gives: -```math - \frac{\partial Q}{\partial t} = -c\frac{\partial Q}{\partial x} + cwr -``` - -where celerity ``c`` is calculated as follows: -```math - c = \begin{cases} - \frac{K_0e^{(-fz_{i})}\tan(\beta)}{(\theta_s-\theta_r)} - + \frac{K_0e^{(-fz_\mathrm{exp})}\tan(\beta)}{(\theta_s-\theta_r)} & \text{if $z_i < z_\mathrm{exp}$}\\ - \\ - \frac{K_0e^{(-fz_\mathrm{exp})}\tan(\beta)}{(\theta_s-\theta_r)} & \text{if $z_i \ge z_\mathrm{exp}$}. - \end{cases} -``` - -For the `layered` and `layered_exponential` profiles the equivalent horizontal hydraulic -conductivity ``K_h`` [m d``^{-1}``] is calculated for water table height ``h = z_t-z_i`` -[m], and lateral subsurface flow is calculated as follows: -```math - Q = K_h h \tan(\beta) w, -``` -and celerity ``c`` is given by: -```math - c = \frac{K_h \tan(\beta)}{(\theta_s-\theta_r)}. -``` - -The kinematic wave equation for lateral subsurface flow is solved iteratively using Newton's -method. - -!!! note - For the lateral subsurface flow kinematic wave the model timestep is not adjusted. - For certain model timestep and model grid size combinations this may result in loss of - accuracy. - -## Multi-Threading -The kinematic wave calculations for surface - and subsurface flow routing can be executed in -parallel using multiple threads. In the model section of the TOML file, a minimum stream -order can be provided to define subbasins for the river (default is 6) and land domain -(default is 5). Subbasins are created at all confluences where each branch has a minimal -stream order. Based on the subbasins a directed acyclic graph is created that controls the -order of execution and which subbasins can run in parallel. - -```toml -[model] -min_streamorder_river = 5 # minimum stream order to delineate subbasins for river domain, default is 6 -min_streamorder_land = 4 # minimum stream order to delineate subbasins for land domain, default is 5 -``` - -## Subcatchment flow -Normally the the kinematic wave is continuous throughout the model. By using the `pits` -entry in the model and input sections of the TOML file all flow is at the subcatchment only -(upstream of the pit locations, defined by the netCDF variable `wflow_pits` in the example -below) and no flow is transferred from one subcatchment to another. This can be convenient -when connecting the result of the model to a water allocation model such as Ribasim. - -```toml -[input] -# these are not directly part of the model -pits = "wflow_pits" - -[model] -pits = true -``` - -## Limitations -The kinematic wave approach for channel, overland and lateral subsurface flow, assumes that -the topography controls water flow mostly. This assumption holds for steep terrain, but in -less steep terrain the hydraulic gradient is likely not equal to the surface slope -(subsurface flow), or pressure differences and inertial momentum cannot be neglected -(channel and overland flow). In addition, while the kinematic wave equations are solved -with a nonlinear scheme using Newton's method (Chow, 1988), other model equations are solved -through a simple explicit scheme. In summary the following limitations apply: - -+ Channel flow, and to a lesser degree overland flow, may be unrealistic in terrain that is - not steep, and where pressure forces and inertial momentum are important. - -+ The lateral movement of subsurface flow may be very wrong in terrain that is not steep. - -## External inflows -External inflows, for example water supply or abstractions, can be added to the kinematic -wave via the `inflow` variable. For this, the user can supply a 2D map of the inflow, as a -cyclic parameter or as part of forcing (see also [Input section](@ref)). These inflows are -added or abstracted from the upstream inflow `qin` before running the kinematic wave to -solve the impact on resulting `q`. In case of a negative inflow (abstractions), a minimum of -zero is applied to the upstream flow `qin`. - -## References -+ Chow, V., Maidment, D. and Mays, L., 1988, Applied Hydrology. McGraw-Hill Book Company, - New York. diff --git a/docs/src/model_docs/lateral/local-inertial.md b/docs/src/model_docs/lateral/local-inertial.md deleted file mode 100644 index ed320c754..000000000 --- a/docs/src/model_docs/lateral/local-inertial.md +++ /dev/null @@ -1,176 +0,0 @@ -# [Local inertial] (@id local_inertial) - -## River and floodplain routing -The local inertial approximation of shallow water flow neglects only the convective -acceleration term in the Saint-Venant momentum conservation equation. The numerical solution -of the local inertial approximation on a staggered grid is as follows (Bates et al., 2010): - -```math -Q_{t+\Delta t} = \frac{Q_t - g A_t \Delta t S_t}{(1+g\Delta t n^2 |Q_t| / (R_t^{4/3} A_t))} -``` -where ``Q_{t+\Delta t}`` is the river flow [m``^3``/s] at time step ``t+\Delta t``, ``g`` is -acceleration due to gravity [m/s``^2``], ``A_t`` is the cross sectional flow area at the -previous time step, ``R_t`` is the hydraulic radius at the previous time step, ``Q_t`` is -the river flow [m``^3``/s] at the previous time step, ``S_t`` is the water surface slope at -the previous time step and ``n`` is the Manning's roughness coefficient [m``^{-1/3}`` s]. - -The momentum equation is applied to each link between two river grid cells, while the -continuity equation over ``\Delta t`` is applied to each river cell: - -```math -h^{t+\Delta t} = h^t + \Delta t \frac{Q^{t+\Delta t}_{src} - Q^{t+\Delta t}_{dst}}{A} -``` -where ``h^{t+\Delta t}`` is the water depth [m] at time step ``t+\Delta t``, ``h^t`` is the -water depth [m] at the previous time step, ``A`` is the river area [m``^2``] and ``Q_{src}`` -and ``Q_{dst}`` represent river flow [m``^3``/s] at the upstream and downstream link of the -river cell, respectively. - -The model time step ``\Delta t`` for the local inertial model is estimated based on the -Courant-Friedrichs-Lewy condition (Bates et al., 2010): - -```math -\Delta t = min(\alpha \frac{\Delta x_i}{\sqrt{(gh_i)}}) -``` - -where ``\sqrt{(gh_i)}`` is the wave celerity for river cell ``i`` , ``\Delta x_i`` is the -river length [m] for river cell ``i`` and ``\alpha`` is a coefficient (typically between 0.2 -and 0.7) to enhance the stability of the simulation. - -In the TOML file the following properties related to the local inertial model can be -provided for the `sbm` and `sbm_gwf` model types: - -```toml -[model] -river_routing = "local-inertial" # default is "kinematic-wave" -inertial_flow_alpha = 0.5 # alpha coefficient for model stability (default = 0.7) -froude_limit = true # default is true, limit flow to subcritical-critical according to Froude number -h_thresh = 0.1 # water depth [m] threshold for calculating flow between cells (default = 1e-03) -floodplain_1d = true # include 1D floodplain schematization (default = false) -``` -Two optional constant boundary conditions `riverlength_bc` and `riverdepth_bc` can be -provided at a river outlet node (or multiple river outlet nodes) through the model parameter -netCDF file, as follows: -```toml -[input.lateral.river] -riverlength_bc = "riverlength_bc" # optional river length [m], default = 1e04 -riverdepth_bc = "riverdepth_bc" # optional river depth [m], default = 0.0 -``` -These boundary conditions are copied to a ghost node (downstream of the river outlet node) -in the code. - -The optional 1D floodplain schematization is based on provided flood volumes as a function -of flood depth (per flood depth interval) for each river cell. Wflow calculates from these -flood volumes a rectangular floodplain profile for each flood depth interval. Routing is -done separately for the river channel and floodplain. - -The momentum equation is most stable for low slope environments, and to keep the simulation -stable for (partly) steep environments the `froude_limit` option is set to true by default. -This setting limits flow conditions to subcritical-critical conditions based on the Froude -number ($\le 1$), similar to Coulthard et al. (2013) in the CAESAR-LISFLOOD model and Adams -et al. (2017) in the Landlab v1.0 OverlandFlow component. The froude number ``Fr`` on a link -is calculated as follows: - -```math - Fr = \frac{u}{\sqrt{(gh_f)}} -``` - -where ``\sqrt{(gh_f)}`` is the wave celerity on a link and ``u`` is the water velocity on a -link. If the water velocity from the local inertial model is causing the Froude number to be -greater than 1.0, the water velocity (and flow) is reduced in order to maintain a Froude -number of 1.0. - -The downstream boundary condition basically simulates a zero water depth boundary condition -at a set distance, as follows. For the downstream boundary condition (ghost point) the river -width, river bed elevation and Manning's roughness coefficient are copied from the upstream -river cell. The river length [m] of the boundary cell can be set through the TOML file with -`riverlength_bc`, and has a default value of 10 km. The water depth at the boundary cell is -fixed at 0.0 m. - -Simplified [reservoir and lake](@ref reservoir_lake) models can be included as part of the -local inertial model for river flow (1D) and river and overland flow combined (see next -section). Reservoir and lake models are included as a boundary point with zero water depth -for both river and overland flow. For river flow the reservoir or lake model replaces the -local inertial model at the reservoir or lake location, and ``Q`` is set by the outflow from -the reservoir or lake. Overland flow at a reservoir or lake location is not allowed to or -from the downstream river grid cell. - -## Overland flow (2D) -For the simulation of 2D overland flow on a staggered grid the numerical scheme proposed by -de Almeida et al. (2012) is adopted. The explicit solution for the estimation of water -discharge between two cells in the x-direction is of the following form (following the -notation of Almeida et al. (2012)): - -```math -Q_{i-1/2}^{n+1} = \frac{\left[ \theta Q_{i-1/2}^{n} +\frac{(1-\theta)}{2}(Q_{(i-3/2)}^{n} + \\ - Q_{(i+1/2)}^{n})\right]- g h_f \frac{\Delta t}{\Delta x} (\eta^n_i - \eta^n_{i-1}) \Delta y}{1+g\Delta t \\ - n^2 |Q_{i-1/2}^{n}|/(h_f^{7/3} \Delta y)} -``` - -where subscripts ``i`` and ``n`` refer to space and time indices, respectively. Subscript -``i-1/2`` is to the link between node ``i`` and ``i-1``, subscript ``i+1/2`` is the link -between node ``i`` and node ``i+1``, and subscript ``i-3/2`` is the link between node ``i-1`` -and node ``i-2``. ``Q`` is the water discharge [m``^3`` s``^{-1}``], ``\eta`` is the water -surface elevation [m], ``h_f`` [m] is the water depth between cells, ``n`` is the Manning's -roughness coefficient [m``^{-1/3}`` s], ``g`` is acceleration due to gravity [m/s``^2``], -``\Delta t`` [s] is the adaptive model time step, ``\Delta x`` [m] is the distance between -two cells and ``\Delta y`` [m] is the flow width. Below the staggered grid and variables of -the numerical solution in the x-direction, based on Almeida et al. (2012): - -![numerical_scheme_almeida](../../images/numerical_scheme_almeida.png) - -The overland flow local inertial approach is used in combination with the local inertial -river routing. This is a similar to the modelling approach of Neal et al. (2012), where the -hydraulic model LISFLOOD-FP was extended with a subgrid channel model. For the subgrid -channel, Neal et al. (2012) make use of a D4 (four direction) scheme, while here a D8 (eight -direction) scheme is used, in combination with the D4 scheme for 2D overland flow. - -In the TOML file the following properties related to the local inertial model with 1D river -routing and 2D overland flow can be provided for the `sbm` model type: - -```toml -[model] -land_routing = "local-inertial" # default is kinematic-wave -river_routing = "local-inertial" # default is kinematic-wave -inertial_flow_alpha = 0.5 # alpha coefficient for model stability (default = 0.7) -froude_limit = true # default is true, limit flow to subcritical-critical according to Froude number -h_thresh = 0.1 # water depth [m] threshold for calculating flow between cells (default = 1e-03) -``` - -The properties `inertial_flow_alpha`, `froude_limit` and `h_thresh` apply to 1D river -routing as well as 2D overland flow. The properties `inertial_flow_alpha` and -`froude_limit`, and the adaptive model time step ``\Delta t`` are explained in more detail -in the [River and floodplain routing](@ref) section of the local inertial model. - -## Inflow -External water (supply/abstraction) `inflow` [m``^3`` s``^{-1}``] can be added to the local -inertial model for river flow (1D) and river and overland flow combined (1D-2D), as a cyclic -parameter or as part of forcing (see also [Input section](@ref)). - -## Abstractions -Abstractions from the river through the variable `abstraction` [m``^3`` s``{-1}``] are -possible when water demand and allocation is computed. The variable `abstraction` is set -from the water demand and allocation module each time step. Abstractions are subtracted as -part of the continuity equation of the local inertial model. - -## Multi-Threading -The local inertial model for river flow (1D) and river and overland flow combined (1D-2D) -can be executed in parallel using multiple threads. - -## References -+ Adams, J. M., Gasparini, N. M., Hobley, D. E. J., Tucker, G. E., Hutton, E. W. H., - Nudurupati, S. S., and Istanbulluoglu, E., 2017, The Landlab v1.0 OverlandFlow component: - a Python tool for computing shallow-water flow across watersheds, Geosci. Model Dev., 10, - 1645–1663, . -+ de Almeida, G. A. M., P. Bates, J. E. Freer, and M. Souvignet, 2012, Improving the - stability of a simple formulation of the shallow water equations for 2-D flood modeling, - Water Resour. Res., 48, W05528, . -+ Bates, P. D., M. S. Horritt, and T. J. Fewtrell, 2010, A simple inertial formulation of - the shallow water equations for efficient two-dimensional flood inundation modelling, J. - Hydrol., 387, 33–45, . -+ Coulthard, T. J., Neal, J. C., Bates, P. D., Ramirez, J., de Almeida, G. A. M., and - Hancock, G. R., 2013, Integrating the LISFLOOD-FP 2- D hydrodynamic model with the CAESAR - model: implications for modelling landscape evolution, Earth Surf. Proc. Land., 38, - 1897–1906, . -+ Neal, J., G. Schumann, and P. Bates (2012), A subgrid channel model for simulating river - hydraulics and floodplaininundation over large and data sparse areas, Water Resour.Res., - 48, W11506, . diff --git a/docs/src/model_docs/lateral/sediment_flux.md b/docs/src/model_docs/lateral/sediment_flux.md deleted file mode 100644 index 9a123070e..000000000 --- a/docs/src/model_docs/lateral/sediment_flux.md +++ /dev/null @@ -1,442 +0,0 @@ -# Sediment flux - -Both the inland and river sediment model take into account sediment flux or transport of -sediment in water, either in overland flow or in the stream flow. These two transport are -distinguished in two different structures. - -## Inland Sediment Model - -### Sediment Flux in overland flow -Once the amount of soil detached by both rainfall and overland flow has been estimated, it -has then to be routed and delivered to the river network. Inland routing in sediment models -is usually done by comparing the amount of detached sediment with the transport capacity of -the flow, which is the maximum amount of sediment that the flow can carry downslope. There -are several existing formulas available in the literature. For a wide range of slopes and for -overland flow, the Govers equation (1990) seems the most appropriate choice (Hessel et al, -2007). However, as the wflow\_sediment model was developed to be linked to water quality -issues, the Yalin transport equation was chosen as it can handle particle differentiation -(Govers equation can still be used if wflow\_sediment is used to only model inland processes -with no particle differentiation). For land cells, wflow\_sediment assumes that erosion can -mobilize 5 classes of sediment: - -- Clay (mean diameter of 2 ``\mu``m) -- Silt (mean diameter of 10 ``\mu``m) -- Sand (mean diameter of 200 ``\mu``m) -- Small aggregates (mean diameter of 30 ``\mu``m) -- Large aggregates (mean diameter of 500 ``\mu``m). - -```math - PSA = SAN (1-CLA)^{2.4} \\ - PSI = 0.13SIL\\ - PCL = 0.20CLA \\ - SAG = 2.0CLA \, ; \, CLA < 0.25 \\ - SAG = 0.28(CLA-0.25)+0.5 \, ; \, 0.25 \leq CLA \leq 0.5 \\ - SAG = 0.57 \, ; \, CLA > 0.5 \\ - LAG = 1 - PSA - PSI - PCL - SAG -``` - -where ``CLA``, ``SIL`` and ``SAN`` are the primary clay, silt, sand fractions of the topsoil -and ``PCL``, ``PSI``, ``PSA``, ``SAG`` and ``LAG`` are the clay, silt, sand, small and large -aggregates fractions of the detached sediment respectively. The transport capacity of the -flow using Yalin's equation with particle differentiation, developed by Foster (1982), is: -```math - TC_{i} = (P_{e})_{i} (S_{g})_{i} \, \rho_{w} \, g \, d_{i} V_{*} -``` -where ``TC_{i}`` is the transport capacity of the flow for the particle class i, -``(P_{e})_{i}`` is the effective number of particles of class i, ``(S_{g})_{i}`` is the -specific gravity for the particle class i (kg m``^{-3}``), ``\rho_{w}`` is the mass density -of the fluid (kg m``^{-3}``), ``g`` is the acceleration due to gravity (m s``^{-2}``), -``d_{i}`` is the diameter of the particle of class i (m) and ``V_{*}=(g R S)^{0.5}`` is the -shear velocity of the flow (m s``^{-1}``) with ``S`` the slope gradient and ``R`` the -hydraulic radius of the flow (m). The detached sediment are then routed downslope until the -river network using the accucapacityflux, accupacitystate functions depending on the -transport capacity from Yalin. - -The choice of transport capacity method for the overland flow is set up in the model section -of the TOML: -```toml -[model] -landtransportmethod = "yalinpart" # Overland flow transport capacity method: ["yalinpart", "govers", "yalin"] -``` -Note that the "govers" and "yalin" equations can only assess total transport capacity of the -flow and can therefore not be used in combination with the river part of the sediment model. - -## River Sediment Model - -Sediment dynamics in rivers can be described by the same three processes on -land: erosion, deposition and transport. The difference is that channel flow is much higher, -deeper and permanent compared to overland flow. In channels, erosion is the direct removal of -sediments from the river bed or bank (lateral erosion). Sediments are transported in the -river either by rolling, sliding and silting (bed load transport) or via turbulent flow in -the higher water column (suspended load transport). The type of transport is determined by -the river bed shear stress. As sediment particles have a higher density than water, they can -also be deposited on the river bed according to their settling velocity compared to the flow -velocity. In addition to regular deposition in the river, lakes, reservoirs and floodplains -represents additional major sediment settling pools. - -Complete models of sediment dynamics based on hydrology and not on hydraulics or hydrodynamics -are much rarer than for soil loss and inland dynamics. The simpler models such as the SWAT -default sediment river model uses again the transport capacity of the flow to determine if -there is erosion or deposition (Neitsch et al., 2011). A more physics-based approach -(Partheniades, 1965) to determine river erosion is used by Liu et al. (2018) and in the new -SWAT's approach developed by Narasimhan et al. (2017). For wflow\_sediment, the new -physics-based model of SWAT was chosen for transport and erosion as it enables the use of -parameter estimation for erosion of bed and bank of the channel and separates the suspended -from the bed loads. - -Overview of the different processes for a river cell in wflow\_sediment. - -![sediment_instream](../../images/river-scheme.png) - -Running the river model is an option of the wflow\_sediment model and is enabled using the -TOML file. By default it is `false`: -```toml -[model] -runrivermodel = true -``` - -### Sediment inputs in a river cell -The first part of the river model assesses how much detached sediment are in the river cell -at the beginning of the timestep ``t``. Sources of detached sediment are sediments coming -from land erosion, estimated with the soil loss part of wflow_sediment model, the sediment -coming from upstream river cells and the detached sediment that were left in the cell at the -end of the previous timestep ``(t-1)``: -```math - (sed_{in})_{t} = (sed_{land})_{t} + upstream\left[(sed_{out})_{t-1}\right] + (sed_{riv})_{t-1} -``` - -### River transport and erosion -Once the amount of sediment inputs at the beginning of the timestep is known, the model then -estimates transport, and river erosion if there is a deficit of sediments. Transport in the -river system is estimated via a transport capacity formula. There are several transport -capacity formulas available in wflow_sediment, some requiring calibration and some not. -Choosing a transport capacity equation depends on the river characteristics (some equation -are more suited for narrow or wider rivers), and on the reliability of the required river -parameters (such as slope, width or mean particle diameter of the river channel). Several -river transport capacity are available and the choice is set up in the model section of the -TOML: -```toml -[model] -rivtransportmethod = "bagnold" # River flow transport capacity method: ["bagnold", "engelund", "yang", "kodatie", "molinas"] -``` - -**Simplified Bagnold** - -Originally more valid for intermediate to large rivers, this simplified version of the -Bagnold equation relates sediment transport to flow velocity with two simple calibration -parameters (Neitsch et al, 2011): -```math -C_{max} = c_{sp} \left( \dfrac{prf Q}{h W} \right) ^{sp_{exp}} -``` -where ``C_{max}`` is the sediment concentration (ton m``^{-3}`` or kg/L), ``Q`` is the -surface runoff in the river cell (m``^{3}``s``^{-1}``), ``h`` is the river water level (m), -``W`` is the river width (m) and ``c_{sp}``, ``prf`` and ``sp_{exp}`` are calibration -parameters. The ``prf`` coefficient is usually used to deduce the peak velocity of the flow, -but for simplification in wflow\_sediment, the equation was simplified to only get two -parameters to calibrate: ``sp_{exp}`` and ``c_{Bagnold} = c_{sp} \, prf^{sp_{exp}}``. The -coefficient ``sp_{exp}`` usually varies between 1 and 2 while ``prf`` and ``c_{sp}`` have a -wider range of variation. The table below summarizes ranges and values of the three Bagnold -coefficients used by other studies: - -Table: Range of the simplified Bagnold coefficients (and calibrated value) - -| Study | River | ``prf`` range | ``c_{sp}`` range | ``sp_{exp}`` range | -|:----- | ----- | ------------- | ---------------- | ------------------ | -| Vigiak 2015 | Danube | 0.5-2 (/) | 0.0001-0.01 (0.003-0.006) | 1-2 (1.4) | -| Vigiak 2017 | Danube | / | 0.0001-0.01 (0.0015) | 1-2 (1.4) | -| Abbaspour 2007 | Thur (CH) | 0.2-0.25 (/) | 0.001-0.002 (/) | 0.35-1.47 (/) | -| Oeurng 2011 | Save (FR) | 0-2 (0.58) | 0.0001-0.01 (0.01) | 1-2 (2) | - -**Engelund and Hansen** This transport capacity is not present in SWAT but used in many -models such as Delft3D-WAQ, Engelund and Hansen calculates the total sediment load as -(Engelund and Hansen, 1967): -```math - C_{w} = 0.05 \left( \dfrac{\rho_{s}}{\rho_{s} - \rho} \right) \left( \dfrac{u S}{\sqrt{\left( \dfrac{\rho_{s}}{\rho_{s} - \rho} \right) g D_{50}}} \right) \theta^{1/2} -``` -where ``C_{w}`` is the sediment concentration by weight, ``\rho`` and ``\rho_{s}`` are the -fluid and sediment density (here equal to 1000 and 2650 g m``^{-3}``), ``u`` is the water -mean velocity (m s``^{-1}``), ``S`` is the river slope, ``g`` is the acceleration due to gravity, -``D_{50}`` is the river mean diameter (m) and ``\theta`` is the Shields parameter. - -**Kodatie** Kodatie (1999) developed the power relationships from Posada (1995) using field -data and linear optimization so that they would be applicable for a wider range of riverbed -sediment size. The resulting equation, for a rectangular channel, is (Neitsch et al, 2011): -```math - C_{max} = \left( \dfrac{a u^{b} h^{c} S^{d}}{V_{in}} \right) W -``` -where ``V_{in}`` in the volume of water entering the river cell -during the timestep (m``^{3}``) and ``a``, ``b``, ``c`` and ``d`` are coefficients depending -on the riverbed sediment size. Values of these coefficients are summarized in the table -below. - -Table: Range of the simplified Bagnold coefficients (and calibrated value) - -| River sediment diameter | a | b | c | d | -|:------------------------|---|---|---|---| -| ``D_{50} \leq`` 0.05mm | 281.4 | 2.622 | 0.182 | 0 | -| 0.05 ``< D_{50} \leq`` 0.25mm | 2 829.6 | 3.646 | 0.406 | 0.412 | -| 0.25 ``< D_{50} \leq`` 2mm | 2 123.4 | 3.300 | 0.468 | 0.613 | -| ``D_{50} >`` 2mm | 431 884.8 | 1.000 | 1.000 | 2.000 | - -**Yang** Yang (1996) developed a set of two equations giving transport of sediments for -sand-bed or gravel-bed rivers. The sand equation (``D_{50} < 2mm``) is: -```math - log\left(C_{ppm}\right) = 5.435 - 0.286log\frac{\omega_{s,50}D_{50}}{\nu}-0.457log\frac{u_{*}}{\omega_{s,50}} \\ - +\left(1.799-0.409log\frac{\omega_{s,50}D_{50}}{\nu}-0.314log\frac{u_{*}}{\omega_{s,50}}\right)log\left(\frac{uS}{\omega_{s,50}}-\frac{u_{cr}S}{\omega_{s,50}}\right) -``` -And the gravel equation (``2 \leq D_{50} < 10 mm``) is: -```math - log\left(C_{ppm}\right) = 6.681 - 0.633log\frac{\omega_{s,50}D_{50}}{\nu}-4.816log\frac{u_{*}}{\omega_{s,50}} \\ - +\left(2.784-0.305log\frac{\omega_{s,50}D_{50}}{\nu}-0.282log\frac{u_{*}}{\omega_{s,50}}\right)log\left(\frac{uS}{\omega_{s,50}}-\frac{u_{cr}S}{\omega_{s,50}}\right) -``` -where ``C_{ppm}`` is sediment concentration in parts per million by weight, -``\omega_{s,50}`` is the settling velocity of a particle with the median riverbed diameter -estimated with Stokes (m s``^{-1}``), ``\nu`` is the kinematic viscosity of the fluid -(m``^{2}``s``^{-1}``), ``u_{*}`` is the shear velocity (``\sqrt{gR_{H}S}`` in m s``^{-1}`` -with ``R_{H}`` the hydraulic radius of the river) and ``u_{cr}`` is the critical velocity -(m/s, equation can be found in Hessel, 2007). - -**Molinas and Wu** The Molinas and Wu (2001) transport equation was developed for large -sand-bed rivers based on the universal stream power ``\psi``. The corresponding equation is -(Neitsch et al, 2011): -```math - C_{w} = \dfrac{1430 (0.86+\sqrt{\psi}) \psi^{1.5}}{0.016+\psi} 10^{-6} -``` -where ``\psi`` is the universal stream power given by: -```math - \psi = \dfrac{\psi^{3}}{\left(\dfrac{\rho_{s}}{\rho}-1\right) g h \omega_{s,50} \left[ log_{10}\left(\dfrac{h}{D_{50}}\right)\right]^{2}} -``` - -Once the maximum concentration ``C_{max}`` is established with one of the above transport -formula, the model then determines if there is erosion of the river bed and bank. In order -to do that, the difference ``sed_{ex}`` between the maximum amount of sediment estimated -with transport (``sed_{max} = C_{max} V_{in}``) and the sediment inputs to the river cell -(``sed_{in}`` calculated above) is calculated. If too much sediment is coming in and -``sed_{ex}`` is negative, then there is no river bed and bank erosion. And if the river has -not reach its maximum transport capacity, then erosion of the river happens. - -First, the sediments stored in the cell from deposition in previous timesteps ``sed_{stor}`` -are eroded from clay to gravel. If this amount is not enough to cover ``sed_{ex}``, then -erosion of the local river bed and bank material starts. - -Instead of just setting river erosion amount to just cover the remaining difference -``sed_{exeff}`` between ``sed_{ex}`` and ``sed_{stor}``, actual erosion potential is -adjusted using river characteristics and is separated between the bed and bank of the river -using the physics-based approach of Knight (1984). - -The bed and bank of the river are supposed to only be able to erode a maximum amount of -their material ``E_{R,bed}`` for the bed and ``E_{R,bank}`` for the river bank. For a -rectangular channel, assuming it is meandering and thus only one bank is prone to erosion, -they are calculated from the equations (Neitsch et al, 2011): -```math - E_{R,bed} = k_{d,bed} \left( \tau_{e,bed} - \tau_{cr,bed} \right) 10^{-6} L W \rho_{b, bed} \Delta t \\~\\ - E_{R,bank} = k_{d,bank} \left( \tau_{e,bank} - \tau_{cr,bank} \right) 10^{-6} L h \rho_{b, bank} \Delta t -``` -where ``E_{R}`` is the potential bed/bank erosion rates (tons), ``k_{d}`` is the erodibility -of the bed/bank material (cm``^{3}`` N``^{-1}`` s``^{-1}``), ``\tau_{e}`` is the effective -shear stress from the flow on the bed/bank (N m``^{-2}``), ``\tau_{cr}`` is the critical -shear stress for erosion to happen (N m``^{-2}``), ``L``, ``W`` and ``h`` are the channel -length, width and water height (m), ``\rho_{b}`` is the bulk density of the bed/bank of the -river (g cm``^{-3}``) and ``\Delta t`` is the model timestep (s). - -In wflow_sediment, the erodibility of the bed/bank are approximated using the formula from -Hanson and Simon (2001): -```math - k_{d}=0.2 \tau_{cr}^{-0.5} -``` -Normally erodibilities are evaluated using jet test in the field and there are several -reviews and some adjustments possible to this equation (Simon et al, 2011). However, to -avoid too heavy calibration and for the scale considered, this equation is supposed to be -efficient enough. The critical shear stress ``\tau_{cr}`` is evaluated differently for the -bed and bank. For the bed, the most common formula from Shields initiation of movement is -used. For the bank, a more recent approach from Julian and Torres (2006) is used : -```math - \tau_{cr,bank} = (0.1+0.1779 SC+0.0028 SC^{2}-2.34 10^{-5} SC^{3}) C_{ch} -``` -where ``SC`` is the percent clay and silt content of the river bank and ``C_{ch}`` is a -coefficient taking into account the positive impact of vegetation on erosion reduction. This -coefficient is then dependent on the land use and classical values are shown in the table -below. These values where then adapted for use with the GlobCover land use map. Percent of -clay and silt (along with sand and gravel) for the channel is estimated from the river -median particle diameter assuming the same values as SWAT shown in the table below. Median -particle diameter is here estimated depending on the Strahler river order. The higher the -order, the smaller the diameter is. As the median diameter is only used in wflow_sediment -for the estimation of the river bed/bank sediment composition, this supposition should be -enough. Actual refined data or calibration may however be needed if the median diameter is -also required for the transport formula. In a similar way, the bulk densities of river bed -and bank are also just assumed to be of respectively 1.5 and 1.4 g cm``^{-3}``. - -Table: Classical values of the channel cover vegetation coefficient (Julian and Torres, 2006) - -| Bank vegetation | ``C_{ch}`` | -|:--------------- | ---------- | -| None | 1.00 | -| Grassy | 1.97 | -| Sparse trees | 5.40 | -| Dense trees | 19.20 | - -Table : Composition of the river bed/bank depending on the median diameter ``d_{50}`` -\[``\mu``m\] (Neitsch et al, 2011) - -|Sediment Fraction | ``\leq`` 5 | 5 to 50 | 50 to 2000 | ``>``2000 | -|:-------------------| ---------- | ------- | ---------- | --------- | -| Sand | 0.15 | 0.15 | 0.65 | 0.15 | -| Silt | 0.15 | 0.65 | 0.15 | 0.15 | -| Clay | 0.65 | 0.15 | 0.15 | 0.05 | -| Gravel | 0.05 | 0.05 | 0.05 | 0.65 | - -Then, the repartition of the flow shear stress is refined into the effective shear stress -and the bed and bank of the river using the equations developed by Knight (1984) for a -rectangular channel: -```math - \tau_{e,bed} = \rho g R_{H} S \left(1 - \dfrac{SF_{bank}}{100}\right) \left(1+\dfrac{2h}{W}\right) \\~\\ - \tau_{e,bank} = \rho g R_{H} S \left( SF_{bank}\right) \left(1+\dfrac{W}{2h}\right) -``` -where ``\rho g`` is the fluid specific weight (9800 N m``^{-3}`` for water), ``R_{H}`` is the -hydraulic radius of the channel (m), ``h`` and ``W`` are the water level and river width -(m). ``SF_{bank}`` is the proportion of shear stress acting on the bank (%) and is estimated -from (Knight, 1984): -```math - SF_{bank} = exp \left( -3.230 log_{10}\left(\dfrac{W}{h}+3\right)+6.146 \right) -``` -Finally the relative erosion potential of the bank and bed of the river is calculated by: -```math - RTE_{bed} = \dfrac{E_{R,bed}}{E_{R,bed}+E_{R,bank}} \\~\\ - RTE_{bank} = 1 - RTE_{bed} -``` -And the final actual eroded amount for the bed and bank is the maximum between ``RTE -sed_{exeff}`` and the erosion potential ``E_{R}``. Total eroded amount of sediment -``sed_{erod}`` is then the sum of the eroded sediment coming from the storage of previously -deposited sediment and the river bed/bank erosion. - -### River deposition -As sediments have a higher density than water, moving sediments in water can be deposited in -the river bed. The deposition process depends on the mass of the sediment, but also on flow -characteristics such as velocity. In wflow_sediment, as in SWAT, deposition is modelled with -Einstein's equation (Neitsch et al, 2011): -```math - P_{dep}=\left(1-\dfrac{1}{e^{x}}\right)100 -``` -where ``P_{dep}`` is the percentage of sediments that is deposited on the river bed and x is -a parameter calculated with: -```math - x = \dfrac{1.055 L \omega_{s}}{u h} -``` -where ``L`` and ``h`` are channel length and water height (m), ``\omega_{s}`` is the -particle settling velocity calculated with Stokes formula (m s``^{-1}``) and ``u`` is the -mean flow velocity (m s``^{-1}``). The calculated percentage is then subtracted from the -amount of sediment input and eroded river sediment for each particle size class (``sed_{dep} -= P_{dep}/100 (sed_{in} + sed_{erod})``). Resulting deposited sediment are then stored in -the river bed and can be re-mobilized in future time steps by erosion. - -### Mass balance and sediment concentration -Finally after estimating inputs, deposition and erosion with the transport capacity of the -flow, the amount of sediment actually leaving the river cell to go downstream is estimated -using: -```math - sed_{out} = (sed_{in} + sed_{erod} - sed_{dep}) \dfrac{V_{out}}{V} -``` -where ``sed_{out}`` is the amount of sediment leaving the river cell (tons), ``sed_{in}`` is -the amount of sediment coming into the river cell (storage from previous timestep, land -erosion and sediment flux from upstream river cells in tons), ``sed_{erod}`` is the amount -of sediment coming from river erosion (tons), ``sed_{dep}`` is the amount of deposited -sediments (tons), ``V_{out}`` is the volume of water leaving the river cell (surface runoff -``Q`` times timestep ``\Delta t`` in m``^{3}``) and ``V`` is the total volume of water in -the river cell (``V_{out}`` plus storage ``h W L`` in m``^{3}``). - -A mass balance is then used to calculate the amount of sediment remaining in the cell at the -end of the timestep ``(sed_{riv})_{t}``: -```math - (sed_{riv})_{t} = (sed_{riv})_{t-1} + (sed_{land})_{t} + upstream\left[(sed_{out})_{t-1}\right] + (sed_{erod})_{t} - (sed_{dep})_{t} - (sed_{out})_{t} -``` - -### Lake and reservoir modelling -Apart from land and river, the hydrologic wflow\_sbm model also handles lakes and reservoirs -modelling. In wflow\_sbm, lakes and large reservoirs are modelled using a 1D bucket model at -the cell corresponding to the outlet. For the other cells belonging to the lake/reservoir -which are not the outlet, processes such as precipitation and evaporation are filtered out -and shifted to the outlet cell. wflow\_sediment handles the lakes and reservoirs in the same way. If a -cell belongs to a lake/reservoir and is not the outlet then the model assumes that no -erosion/deposition of sediments is happening and the sediments are only all transported to -the lake/reservoir outlet. Once the sediments reach the outlet, then sediments are deposited -in the lake/reservoir according to Camp's model (1945) (Verstraeten et al, 2000): -```math - TE = \dfrac{\omega_{s}}{u_{cr,res}} = \dfrac{A_{res}}{Q_{out,res}} \omega_{s} -``` -where ``TE`` is the trapping efficiency of the lake/reservoir (or the fraction of particles -trapped), ``\omega_{s}`` is the particle velocity from Stokes (m s``^{-1}``), ``u_{cr,res}`` -is the reservoir's critical settling velocity (m/s) which is equal to the reservoir's -outflow ``Q_{out,res}`` (m``^{3}`` s``^{-1}``) divided by the reservoir's surface area -``A_{res}`` (m``^{2}``). - -For reservoirs, coarse sediment particles from the bed load are also assumed to be trapped by the -dam structure. This adding trapping is taken into account with a reservoir trapping efficiency coefficient -for large particles (between 0 and 1). Depending on the type of the dam, all bed load particles are trapped -(restrapefficiency =1.0, for example for a gravity dam) or only partly (for example for run-of-the-river dams). - -Lake and reservoir modelling is enabled in the model section of the TOML and require the -extra following input arguments: -```toml -[model] -doreservoir = true -dolake = false - -[input.vertical] -# Reservoir -resareas = "wflow_reservoirareas" -# Lake -lakeareas = "wflow_lakeareas" - -[input.lateral.river] -# Reservoir -resarea = "ResSimpleArea" -restrapefficiency = "ResTrapEff" -resareas = "wflow_reservoirareas" -reslocs = "wflow_reservoirlocs" -# Lake -lakearea = "LakeArea" -lakeareas = "wflow_lakeareas" -lakelocs = "wflow_lakelocs" -``` -Note that in the inland part, lake and reservoir coverage are used to filter erosion and -transport in overland flow. - -## References -+ K.C. Abbaspour, J. Yang, I. Maximov, R. Siber, K. Bogner, J. Mieleitner, J. Zobrist, and - R.Srinivasan. Modelling hydrology and water quality in the pre-alpine/alpine Thur - watershed using SWAT. Journal of Hydrology, 333(2-4):413-430, 2007. - 10.1016/j.jhydrol.2006.09.014 -+ P. Borrelli, M. Märker, P. Panagos, and B. Schütt. Modeling soil erosion and river - sediment yield for an intermountain drainage basin of the Central Apennines, Italy. - Catena, 114:45-58, 2014. 10.1016/j.catena.2013.10.007 -+ F. Engelund and E. Hansen. A monograph on sediment transport in alluvial streams. - Technical University of Denmark 0stervoldgade 10, Copenhagen K., 1967. -+ G. Govers. Empirical relationships for the transport capacity of overland flow. IAHS - Publication, (January 1990):45-63 ST, 1990. -+ G.J Hanson and A Simon. Erodibility of cohesive streambeds in the loess area of the - midwestern USA. Hydrological Processes, 15(May 1999):23-38, 2001. -+ R Hessel and V Jetten. Suitability of transport equations in modelling soil erosion for a - small Loess Plateau catchment. Engineering Geology, 91(1):56-71, 2007. - 10.1016/j.enggeo.2006.12.013 -+ J.P Julian, and R. Torres. Hydraulic erosion of cohesive riverbanks. Geomorphology, - 76:193-206, 2006. 10.1016/j.geomorph.2005.11.003 -+ D.W. Knight, J.D. Demetriou, and M.E. Hamed. Boundary Shear in Smooth Rectangular - Channels. J. Hydraul. Eng., 110(4):405-422, 1984. 10.1061/(ASCE)0733-9429(1987)113:1(120) -+ S.L Neitsch, J.G Arnold, J.R Kiniry, and J.R Williams. SWAT Theoretical Documentation - Version 2009. Texas Water Resources Institute, pages 1-647, 2011. - 10.1016/j.scitotenv.2015.11.063 -+ C. Oeurng, S. Sauvage, and J.M. Sanchez-Perez. Assessment of hydrology, sediment and - particulate organic carbon yield in a large agricultural catchment using the SWAT model. - Journal of Hydrology, 401:145-153, 2011. 10.1016/j.hydrol.2011.02.017 -+ A. Simon, N. Pollen-Bankhead, and R.E Thomas. Development and application of a - deterministic bank stability and toe erosion model for stream restoration. Geophysical - Monograph Series, 194:453-474, 2011. 10.1029/2010GM001006 -+ G. Verstraeten and J. Poesen. Estimating trap efficiency of small reservoirs and ponds: - methods and implications for the assessment of sediment yield. Progress in Physical - Geography, 24(2):219-251, 2000. 10.1177/030913330002400204 -+ O. Vigiak, A. Malago, F. Bouraoui, M. Vanmaercke, and J. Poesen. Adapting SWAT hillslope - erosion model to predict sediment concentrations and yields in large Basins. Science of - the Total Environment, 538:855-875, 2015. 10.1016/j.scitotenv.2015.08.095 -+ O. Vigiak, A. Malago, F. Bouraoui, M. Vanmaercke, F. Obreja, J. Poesen, H. Habersack, J. - Feher, and S. Groselj. Modelling sediment fluxes in the Danube River Basin with SWAT. - Science of the Total Environment, 2017. 10.1016/j.scitotenv.2017.04.236 diff --git a/docs/src/model_docs/lateral/waterbodies.md b/docs/src/model_docs/lateral/waterbodies.md deleted file mode 100644 index 335ab2867..000000000 --- a/docs/src/model_docs/lateral/waterbodies.md +++ /dev/null @@ -1,190 +0,0 @@ -# [Reservoirs and Lakes] (@id reservoir_lake) - -Simplified reservoirs and lakes models can be included as part of the river network. - -### Reservoirs -Simple reservoirs can be included within the river routing by supplying the following -reservoir parameters: - -+ `locs` - Outlet of the reservoirs in which each reservoir has a unique id -+ `area` - Surface area of the reservoirs [m``^2``] -+ `areas` - Reservoir coverage -+ `targetfullfrac` - Target fraction full (of max storage) for the reservoir: number between - 0 and 1 -+ `targetminfrac` - Target minimum full fraction (of max storage). Number between 0 and 1 -+ `maxvolume` - Maximum reservoir storage (above which water is spilled) [m``^3``] -+ `demand` - Minimum (environmental) flow requirement downstream of the reservoir [m``^3`` - s``^{-1}``] -+ `maxrelease` - Maximum Q that can be released if below spillway [m``^3`` s``^{-1}``] - -By default the reservoirs are not included in the model. To include them put the following -lines in the TOML file of the model: - -```toml -[model] -reservoirs = true -``` -Finally there is a mapping required between external and internal parameter names in the -TOML file, with below an example: - -```toml -[input] - -[input.lateral.river.reservoir] -area = "ResSimpleArea" -areas = "wflow_reservoirareas" -demand = "ResDemand" -locs = "wflow_reservoirlocs" -maxrelease = "ResMaxRelease" -maxvolume = "ResMaxVolume" -targetfullfrac = "ResTargetFullFrac" -targetminfrac = "ResTargetMinFrac" -``` -### Lakes (unregulated and regulated) -Lakes are modelled using a mass balance approach: - -```math - \dfrac{S(t + \Delta t)}{\Delta t} = \dfrac{S(t)}{\Delta t} + Q_{in} + \dfrac{(P-E) A}{\Delta t} - Q_{out} -``` - -where ``S`` is lake storage [m``^3``], ``\Delta t`` is the model timestep [s], ``Q_{in}`` is -the sum of inflows (river, overland and lateral subsurface flow) [m``^3`` s``^{-1}``], -``Q_{out}`` is the lake outflow at the outlet [m``^3`` s``^{-1}``], ``P`` is precipitation -[m], ``E`` is lake evaporation [m] and ``A`` is the lake surface area [m``^2``]. - -![lake_schematisation](../../images/lake.png) - -*Lake schematization.* - -Most of the variables in this equation are already known or coming from previous timestep, -apart from ``S(t+ \Delta t)`` and ``Q_{out}`` which can both be linked to the water level -``H`` in the lake using a storage curve ``S = f(H)`` and a rating curve ``Q = f(H)``. In -wflow, several options are available to select storage and rating curves, and in most cases, -the mass balance is then solved by linearization and iteration or using the Modified Puls -Approach from Maniak (Burek et al., 2013). Storage curves in wflow can either: - -+ Come from the interpolation of field data linking volume and lake height, -+ Be computed from the simple relationship ``S = A H``. - -Rating curves in wflow can either: - -+ Come from the interpolation of field data linking lake outflow and water height, also appropriate for regulated lakes/ dams, -+ Be computed from a rating curve of the form ``Q_{out} = \alpha {(H-H_{0})}^{\beta}``, - where ``H_{0}`` is the minimum water level under which the outflow is zero. Usual values - for ``\beta`` are 3/2 for a rectangular weir or 2 for a parabolic weir (Bos, 1989). - -### Modified Puls Approach -The Modified Puls Approach is a resolution method of the lake balance that uses an explicit -relationship between storage and outflow. Storage is assumed to be equal to ``A H`` and the -rating curve for a parabolic weir (``\beta = 2``): - -```math - S = A H = A (h + H_{0}) = \dfrac{A}{\sqrt{\alpha}} \sqrt{Q} + A H_{0} -``` - -Inserting this equation in the mass balance gives: - -```math - \dfrac{A}{\Delta t \sqrt{\alpha}} \sqrt{Q} + Q = \dfrac{S(t)}{\Delta t} + Q_{in} + - \dfrac{(P-E) A}{\Delta t} - \dfrac{A H_{0}}{\Delta t} = SI - \dfrac{A H_{0}}{\Delta t} -``` -The solution for Q is then: - -```math - Q = { \left( \dfrac{-LF + \sqrt{LF^{2} + 4 \left( SI - \dfrac{A*H_{0}}{\Delta t} \right)}} - {2} \right) }^{2} \text{for } SI > \dfrac{A H_{0}}{\Delta t} \text{ and where}\\ - LF = \dfrac{A}{\Delta t \sqrt{\alpha}} \\~\\ - Q = 0 \text{ for } SI \leq \dfrac{A*H_{0}}{\Delta t} -``` - -### Lake parameters -Lakes can be included within the kinematic wave river routing in wflow, by supplying the -following parameters: - -+ `area` - Surface area of the lakes [m``^2``] -+ `areas` - Coverage of the lakes -+ `locs` - Outlet of the lakes in which each lake has a unique id -+ `linkedlakelocs` - Outlet of linked (downstream) lakes (unique id) -+ `waterlevel` - Lake water level [m], used to reinitiate lake model -+ `threshold` - Water level threshold ``H_{0}`` under which outflow is zero [m] -+ `storfunc` - Type of lake storage curve ; 1 for ``S = AH`` (default) and 2 for ``S = - f(H)`` from lake data and interpolation -+ `outflowfunc` - Type of lake rating curve ; 1 for ``Q = f(H)`` from lake data and - interpolation, 2 for general ``Q = b(H - H_{0})^{e}`` and 3 in the case of Puls Approach - ``Q = b(H - H_{0})^{2}`` (default) -+ `b` - Rating curve coefficient -+ `e` - Rating curve exponent - -By default, the lakes are not included in the model. To include them, put the following line -in the TOML file of the model: - -```toml -[model] -lakes = true -``` -There is also a mapping required between external and internal parameter names in the TOML -file, with below an example: - -```toml -[input] - -[input.lateral.river.lake] -area = "lake_area" -areas = "wflow_lakeareas" -b = "lake_b" -e = "lake_e" -locs = "wflow_lakelocs" -outflowfunc = "lake_outflowfunc" -storfunc = "lake_storfunc" -threshold = "lake_threshold" -waterlevel = "lake_waterlevel" -``` - -### Additional settings -Storage and rating curves from field measurement can be supplied to wflow via CSV files -supplied in the same folder of the TOML file. Naming of the files uses the ID of the lakes -where data are available and is of the form lake\_sh\_1.csv and lake\_hq\_1.csv for -respectively the storage and rating curves of lake with ID 1. - -The storage curve is stored in a CSV file with lake level [m] in the first column `H` and -corresponding lake storage [m ``^{3}``] in the second column `S`: - -``` -H, S -392.21, 0 -393.21, 430202000 -393.71, 649959000 -394.21, 869719000 -``` - -The rating curve uses level and discharge data depending on the Julian day of the year -(JDOY), and can be also used for regulated lakes/ dams. The first line contains `H` for the -first column. The other lines contain the water level and the corresponding discharges for -the different JDOY (1-365), see also the example below, that shows part of a CSV file (first -4 Julian days). The volume above the maximum water level of the rating curve is assumed to -flow instantaneously out of the lake (overflow). - -``` -H -394, 43, 43, 43, 43 -394.01, 44.838, 44.838, 44.838, 44.838 -394.02, 46.671, 46.671, 46.671, 46.671 -394.03, 48.509, 48.509, 48.509, 48.509 -394.04, 50.347, 50.347, 50.347, 50.347 -394.05, 52.179, 52.179, 52.179, 52.179 -``` -Linked lakes: In some cases, lakes can be linked and return flow can be allowed from the -downstream to the upstream lake. The linked lakes are defined in the `linkedlakelocs` -parameter that represent the downstream lake location ID, at the grid cell of the upstream -lake location. - -!!! note - In every file, level units are meters [m] above lake bottom and not meters above sea - level [m asl]. Especially with storage/rating curves coming from data, please be careful - and convert units if needed. - -## References -+ Bos M.G., 1989. Discharge measurement structures. Third revised edition, International - Institute for Land Reclamation and Improvement ILRI, Wageningen, The Netherlands. -+ Burek P., Van der Knijf J.M., Ad de Roo, 2013. LISFLOOD – Distributed Water Balance and - flood Simulation Model – Revised User Manual. DOI: http://dx.doi.org/10.2788/24719. \ No newline at end of file diff --git a/docs/src/model_docs/shared_concepts.md b/docs/src/model_docs/shared_concepts.md deleted file mode 100644 index 2d8e514c7..000000000 --- a/docs/src/model_docs/shared_concepts.md +++ /dev/null @@ -1,185 +0,0 @@ -# Shared processes - -## [Snow and glaciers](@id snow_and_glac) - -### Snow modelling - -If the air temperature, ``T_a``, is below a user-defined threshold `tt` (``\degree``C) -precipitation occurs as snowfall, whereas it occurs as rainfall if ``Ta ≥ tt``. A another -parameter `tti` defines how precipitation can occur partly as rain or snowfall (see the -figure below). If precipitation occurs as snowfall, it is added to the dry snow component -within the snow pack. Otherwise it ends up in the free water reservoir, which represents the -liquid water content of the snow pack. Between the two components of the snow pack, -interactions take place, either through snow melt (if temperatures are above a threshold -`tt`) or through snow refreezing (if temperatures are below threshold `tt`. - -The respective rates of snow melt and refreezing are: - -```math -Q_m = cfmax(T_a−tt)\, ;\,T_a > tt \\~\\ -Q_r=cfmax \, cfr(tt−T_a)\,;\, Ta < tt -``` - -where ``Q_m`` is the rate of snow melt, ``Q_r`` is the rate of snow refreezing, and -``cfmax`` and ``cfr`` are user defined model parameters (the melting factor -[mm/(``\degree``C day)] and the refreezing factor respectively). - -The fraction of liquid water in the snow pack is at most equal to a user defined fraction, -`whc`, of the water equivalent of the dry snow content. If the liquid water concentration -exceeds `whc`, either through snow melt or incoming rainfall, the surplus water -(`rainfall`) becomes available for infiltration into the soil: - -```julia - snowwater = snowwater - refreezing # free water content in snow - maxsnowwater = snow * whc # max water in the snow - snowwater = snowwater + snowmelt + rainfall # add all water and potentially supersaturate the snowpack - rainfall = max(snowwater - maxsnowwater, 0.0) # rain + surplus snowwater -``` -\ - -![snowmelt](../images/snowmelt.png) - -*Snowmelt and refreezing rates as a function of temperature (for set melting and refreezing factors)* - -```@setup -# Figure created using python: # hide -# https://gist.github.com/JoostBuitink/21dd32e71fd1360117fcd1c532c4fd9d#file-snowmelt_fig-py # hide -``` - -### Glacier modelling - -Glacier processes can be modelled if the snow model is enabled. Glacier modelling is very -similar to snow modelling and considers two main processes: glacier build-up from snow turning -into firn/ice (using the HBV-light model) and glacier melt (using a temperature degree-day -model). - -The definition of glacier boundaries and initial volume is defined by two parameters. The -parameter `glacierfrac` gives the fraction of each grid cell covered by a glacier as a -number between zero and one. The state parameter `glacierstore` gives the amount of water -(in mm w.e.) within the glaciers at each grid cell. Because the glacier store -(`glacierstore`) cannot be initialized by running the model for a couple of years, a default -initial state should be supplied by adding this parameter to the input static file. The -required glacier data can be prepared from available glacier datasets. - -First, a fixed fraction of the snowpack on top of the glacier is converted into ice for each -timestep and added to the `glacierstore` using the HBV-light model (Seibert et al., 2018). -This fraction `g_sifrac` typically ranges from 0.001 to 0.006. - -Then, when the snowpack on top of the glacier is almost all melted (snow cover < 10 mm), -glacier melt is enabled and estimated with a degree-day model. If the air temperature, -``T_a``, is below a certain threshold `g_tt` (``\degree``C) precipitation occurs as -snowfall, whereas it occurs as rainfall if ``T_a ≥`` `g_tt`. - -With this the rate of glacier melt in mm is estimated as: - -```math -Q_m = g\_cfmax(T_a − g\_tt)\, ; \, T_a > g\_tt -``` - -where ``Q_m`` is the rate of glacier melt and ``g\_cfmax`` is the melting factor in -mm/(``\degree``C day). Parameter `g_tt` can be taken as equal to the snow `tt` parameter. -Values of the melting factor `g_cfmax` normally varies from one glacier to another and some -values are reported in the literature. `g_cfmax` can also be estimated by multiplying snow -`cfmax` by a factor between 1 and 2, to take into account the higher albedo of ice compared -to snow. - -## Rainfall interception -Both the Gash and Rutter models are available to estimate rainfall interception by the -vegetation. The selection of an interception model depends on the simulation timestep. - -### The analytical (Gash) model -The analytical model of rainfall interception is based on Rutter's numerical model. The -simplifications that introduced allow the model to be applied on a daily basis, although a -storm-based approach will yield better results in situations with more than one storm per -day. The amount of water needed to completely saturate the canopy is defined as: - -```math -P'=\frac{-\overline{R}S}{\overline{E}_{w}}ln\left[1-\frac{\overline{E}_{w}}{\overline{R}}(1-p-p_{t})^{-1}\right] -``` - -where ``\overline{R}`` is the average precipitation intensity on a saturated canopy and -``\overline{E}_{w}`` the average evaporation from the wet canopy and with the vegetation -parameters ``S``, ``p`` and ``p_t`` as defined previously. The model uses a series of -expressions to calculate the interception loss during different phases of a storm. An -analytical integration of the total evaporation and rainfall under saturated canopy -conditions is then done for each storm to determine average values of ``\overline{E}_{w}`` -and ``\overline{R}``. The total evaporation from the canopy (the total interception loss) is -calculated as the sum of the components listed in the table below. Interception losses from -the stems are calculated for days with ``P\geq S_{t}/p_{t}``. ``p_t`` and ``S_t`` are small -and neglected. - -Table: Formulation of the components of interception loss according to Gash: - -| Components | Interception loss | -|:----------- | ----------------- | -| For ``m`` small storms (``P_{g}<{P'}_{g}``) | ``(1-p-p_{t})\sum_{j=1}^{m}P_{g,j}`` | -| Wetting up the canopy in ``n`` large storms (``P_{g}\geq{P'}_{g}``) | ``n(1-p-p_{t}){P'}_{g}-nS`` | -| Evaporation from saturated canopy during rainfall | ``\overline{E}/\overline{R}\sum_{j=1}^{n}(P_{g,j}-{P'}_{g})``| -| Evaporation after rainfall ceases for ``n`` large storms | ``nS`` | -| Evaporation from trunks in ``q`` storms that fill the trunk storage | ``qS_{t}`` | -| Evaporation from trunks in ``m+n-q`` storms that do not fill the trunk storage | ``p_{t}\sum_{j=1}^{m+n-q}P_{g,j}`` | - -In applying the analytical model, saturated conditions are assumed to occur when the hourly -rainfall exceeds a certain threshold. Often a threshold of 0.5 mm/hr is used. -``\overline{R}`` is calculated for all hours when the rainfall exceeds the threshold to give -an estimate of the mean rainfall rate onto a saturated canopy. - -Gash (1979) has shown that in a regression of interception loss on rainfall (on a storm -basis) the regression coefficient should equal to ``\overline{E}_w/\overline{R}``. Assuming -that neither ``\overline{E}_w`` nor ``\overline{R}`` vary considerably in time, -``\overline{E}_w`` can be estimated in this way from ``\overline{R}`` in the absence of -above-canopy climatic observations. Values derived in this way generally tend to be (much) -higher than those calculated with the penman-monteith equation. - -### The modified rutter model -For sub daily timesteps the interception is calculated using a simplification of the Rutter -model. The simplified model is solved explicitly and does not take drainage from the canopy -into account. - -```@docs -Wflow.rainfall_interception_modrut -``` - -### Interception parameters from LAI -The SBM concept can determine the interception parameters from leaf area index (LAI) -climatology. In order to switch this on you must define this cyclic parameter in the TOML -file, the parameter is read from `path_static`, as follows: - -```toml -[input] -path_forcing = "data/forcing-moselle.nc" -path_static = "data/staticmaps-moselle.nc" - -cyclic = ["vertical.leaf_area_index"] -``` -Furthermore these additional parameters are required: -+ Specific leaf storage (`sl` \[mm\]) -+ Storage woody part of vegetation (`swood` \[mm\]) -+ Extinction coefficient (`kext` \[-\]) - -Here it is assumed that `cmax` \[mm\] (leaves) (canopy storage capacity for the leaves only) -relates linearly with LAI (c.f. Van Dijk and Bruijnzeel 2001). This done via the `sl`. `sl` -can be determined through a lookup table with land cover based on literature (Pitman 1989, -Lui 1998). Next the `cmax` (leaves) is determined using: - -```math - - cmax(leaves) = sl \, LAI -``` -To get to total storage (`cmax`) the woody part of the vegetation also needs to be added. As -for `sl`, the storage of the woody part `swood` can also be related to land cover (lookup -table). - -The canopy gap fraction is determined using the extinction coefficient `kext` (van Dijk and -Bruijnzeel 2001): - -```math - canopygapfraction = exp(-kext \, LAI) -``` - -The extinction coefficient `kext` can be related to land cover. - -## References -+ Seibert, J., Vis, M. J. P., Kohn, I., Weiler, M., and Stahl, K., 2018, Technical note: - Representing glacier geometry changes in a semi-distributed hydrological model, Hydrol. - Earth Syst. Sci., 22, 2211–2224, https://doi.org/10.5194/hess-22-2211-2018. diff --git a/docs/src/model_docs/vertical/sbm.md b/docs/src/model_docs/vertical/sbm.md deleted file mode 100644 index 140728566..000000000 --- a/docs/src/model_docs/vertical/sbm.md +++ /dev/null @@ -1,831 +0,0 @@ -# [SBM](@id vert_sbm) - -## Introduction -The SBM vertical concept has its roots in the Topog\_SBM model but has had considerable -changes over time. The main differences are: - -- The unsaturated zone can be split-up in different layers -- The addition of evapotranspiration losses -- The addition of a capillary rise - -The sections below describe the working of the SBM vertical concept in more detail. - -## Precipitation -The division between solid and liquid precipitation (snowfall and rainfall, respectively) is -performed based on the air temperature. If the temperature is below a threshold temperature -(`tt`), precipitation will fall as snow. An interval parameter (`tti`) defines the range over -which precipitation is partly falling as snow, and partly as rain. Snowfall is added to the -snowpack, where it is subject to melting and refreezing (see the section on [snow and -glaciers](@ref snow)). The amount of rainfall is subject to [interception](@ref -interception), and ultimately becomes available for [evaporation](@ref evap) and/or [soil -processes](@ref soil). - -![snowfall](../../images/snowfall.png) - -*Division between snow and precipitation based on the threshold temperature* - -```@setup -# Figure created using python: # hide -# https://gist.github.com/JoostBuitink/21dd32e71fd1360117fcd1c532c4fd9d#file-snowfall_fig-py # hide -``` - -## [Rainfall interception](@id interception) - -Two different interception models are available: the analytical Gash model, and the modified -Rutter model. The simulation timestep defines which interception model is used, where daily -(or larger) timesteps use the Gash model, and timesteps smaller than daily use the modified -Rutter model. - -### The analytical (Gash) model (Gash, 1979) -The analytical model of rainfall interception is based on Rutter's numerical model. Simplifications -allow the model to be applied on a daily basis, although a -storm-based approach will yield better results in situations with more than one storm per -day. The amount of water needed to completely saturate the canopy is defined as: - -```math -P'=\frac{-\overline{R}S}{\overline{E}_{w}}ln\left[1-\frac{\overline{E}_{w}}{\overline{R}}(1-p-p_{t})^{-1}\right] -``` - -where ``\overline{R}`` is the average precipitation intensity on a saturated canopy and -``\overline{E}_{w}`` the average evaporation from the wet canopy and with the vegetation -parameters ``S``, ``p`` and ``p_t`` as defined previously. The model uses a series of -expressions to calculate the interception loss during different phases of a storm. An -analytical integration of the total evaporation and rainfall under saturated canopy -conditions is performed for each storm to determine average values of ``\overline{E}_{w}`` -and ``\overline{R}``. The total evaporation from the canopy (the total interception loss) is -calculated as the sum of the components listed in the table below. Interception losses from -the stems are calculated for days with ``P\geq S_{t}/p_{t}``. ``p_t`` and ``S_t`` are small -and neglected. - -Table: Formulation of the components of interception loss according to Gash: - -| Components | Interception loss | -|:----------- | ----------------- | -| For ``m`` small storms (``P_{g}<{P'}_{g}``) | ``(1-p-p_{t})\sum_{j=1}^{m}P_{g,j}`` | -| Wetting up the canopy in ``n`` large storms (``P_{g}\geq{P'}_{g}``) | ``n(1-p-p_{t}){P'}_{g}-nS`` | -| Evaporation from saturated canopy during rainfall | ``\overline{E}/\overline{R}\sum_{j=1}^{n}(P_{g,j}-{P'}_{g})``| -| Evaporation after rainfall ceases for ``n`` large storms | ``nS`` | -| Evaporation from trunks in ``q`` storms that fill the trunk storage | ``qS_{t}`` | -| Evaporation from trunks in ``m+n-q`` storms that do not fill the trunk storage | ``p_{t}\sum_{j=1}^{m+n-q}P_{g,j}`` | - -In applying the analytical model, saturated conditions are assumed to occur when the hourly -rainfall exceeds a certain threshold. Often a threshold of 0.5 mm/hr is used. -``\overline{R}`` is calculated for all hours when the rainfall exceeds the threshold to give -an estimate of the mean rainfall rate onto a saturated canopy. - -Gash (1979) has shown that in a regression of interception loss on rainfall (on a storm -basis) the regression coefficient should equal to ``\overline{E}_w/\overline{R}``. Assuming -that neither ``\overline{E}_w`` nor ``\overline{R}`` vary considerably in time, -``\overline{E}_w`` can be estimated in this way from ``\overline{R}`` in the absence of -above-canopy climatic observations. Values derived in this way generally tend to be (much) -higher than those calculated with the penman-monteith equation. - -### The modified rutter model -For sub daily timesteps the interception is calculated using a simplification of the Rutter -model. The simplified model is solved explicitly and does not take drainage from the canopy -into account. The amount of stemflow is taken as a fraction (`0.1 * canopygapfraction`) of -the precipitation. Throughfall equals to the amount of water that cannot be stored by the -canopy, plus the rainfall that is not captured by the canopy. Water can evaporate from the -canopy storage, taken as the minimum between potential evaporation and the current storage. -The "left-over" potential evaporation (if any) is returned as output. - -```@docs -Wflow.rainfall_interception_modrut -``` - -### Interception parameters from LAI -The SBM concept can determine the interception parameters from leaf area index (LAI) -climatology. In order to switch this on you must define this cyclic parameter in the TOML -file, the parameter is read from `path_static`, as follows: - -```toml -[input] -path_forcing = "data/forcing-moselle.nc" -path_static = "data/staticmaps-moselle.nc" - -cyclic = ["vertical.leaf_area_index"] -``` -Furthermore these additional parameters are required: -+ Specific leaf storage (`sl` \[mm\]) -+ Storage woody part of vegetation (`swood` \[mm\]) -+ Extinction coefficient (`kext` \[-\]) - -Here it is assumed that `cmax` \[mm\] (leaves) (canopy storage capacity for the leaves only) -relates linearly with LAI (c.f. Van Dijk and Bruijnzeel 2001). This is done via the `sl`. `sl` -can be determined through a lookup table with land cover based on literature (Pitman 1989, -Lui 1998). Next the `cmax` (leaves) is determined using: - -```math - - cmax(leaves) = sl \, LAI -``` -To get to total storage (`cmax`) the woody part of the vegetation also needs to be added. As -for `sl`, the storage of the woody part `swood` can also be related to land cover (lookup -table). - -The canopy gap fraction is determined using the extinction coefficient `kext` (van Dijk and -Bruijnzeel 2001): - -```math - canopygapfraction = exp(-kext \, LAI) -``` - -The extinction coefficient `kext` can be related to land cover. - -## [Evaporation](@id evap) - -The wflow\_sbm model assumes the input to be potential reference evapotranspiration. A crop -coefficient (`kc`, set to 1 by default) is used to convert the potential evapotranspiration -rate of a reference crop fully covering the soil to the potential evapotranspiration rate of -vegetation (natural and agricultural) fully covering the soil. The crop coefficient `kc` of -wflow\_sbm is used for a surface completely covered by vegetation, and does not include the -effect of growing stages of vegetation and soil cover. These effects are handled separately -through the use of the canopy gap fraction. - -It is assumed that the potential evaporation rate of intercepted water by vegetation is -equal to the potential evapotranspiration rate of vegetation (fully covering the soil) -multiplied by the canopy fraction. The potential evapotranspiration rate left over after -interception is available for transpiration. For potential open water evaporation (river and -water bodies) the potential reference evapotranspiration rate is used (multipled by the -river fraction `riverfrac`, and open water fraction `waterfrac`). Also for potential soil -evaporation the potential reference evapotranspiration rate is used, multiplied by the -canopy gap fraction corrected by the sum of total water fraction (`riverfrac` and -`waterfrac`) and the fraction covered by a glacier (`glacierfrac`). - -### Bare soil evaporation - -If there is only one soil layer present in the wflow\_sbm model, the bare soil evaporation -is scaled according to the wetness of the soil layer. The fraction of bare soil is assumed -to be equal to the fraction not covered by the canopy (`canopygapfraction`) corrected by the -total water fraction. When the soil is fully saturated, evaporation is set to equal the -potential reference evaporation. When the soil is not fully saturated, actual evaporation -decreases linearly with decreasing soil moisture values, as indicated by the figure below. - -![soil_evap](../../images/soil_evap.png) - -*Evaporation reduction as function of available soil moisture* - -```@setup -# Figure created using python: # hide -# https://gist.github.com/JoostBuitink/21dd32e71fd1360117fcd1c532c4fd9d#file-sbm_soil_figs-py # hide -``` - -When more soil layers are present, soil evaporation is only provided from the upper soil -layer, and soil evaporation is split in evaporation from the unsaturated store and -evaporation from the saturated store. Water is first evaporated from the unsaturated store. -The remaining potential soil evaporation can be used for evaporation from the saturated -store, but only when the water table is present in the upper soil layer. Both the -evaporation from the unsaturated store and the evaporation from the saturated store are -limited by the minimum of the remaining potential soil evaporation and the available water -in the unsaturated/saturated zone of the upper soil layer. Also for multiple soil layers, -the evaporation (both unsaturated and saturated) decreases linearly with decreasing water -availability. - -### Transpiration - -The maximum possible root water extraction rate for each soil layer is determined by -partitioning the potential transpiration rate ``T_p`` based on the fraction of the total -root length (`rootfraction` [-]) in each soil layer. A root water uptake reduction model is -used to calculate a reduction coefficient as a function of soil water pressure, that may -reduce the maximum possible root water extraction rate. The root water uptake reduction -model is based on the concept proposed by Feddes et al. (1978). This concept defines a -reduction coefficient ``\alpha`` [-] as a function of soil water pressure (``h`` [cm]). Four -different levels of ``h`` are defined: `h1`, `h2`, `h3` and `h4`. `h1` represents anoxic -moisture conditions, `h2` represents field capacity, `h3` represents the point of critical -soil moisture content (onset of drought stress), and `h4` represents the wilting point. The -value of `h3` is a function of the potential transpiration rate, between 1 and 5 mm -d``^{-1}``. If ``T_p \le 1 \text{ mm d}^{-1}``, `h3` is set equal to `h3_low` (input model -parameter). If ``T_p \ge 5 \text{ mm d}^{-1}``, `h3` is set equal to `h3_high` (input model -parameter). For ``T_p`` values between 1 and 5 mm d``^{-1}``, the value of `h3` is linearly -related to ``T_p`` (between `h3_low` and `h3_high`). Besides model parameters `h3_high` and -`h3_low`, the critical pressure heads `h1`, `h2` and `h4` can be defined as input to the -model. - -The current soil water pressure is determined following the concept defined by Brooks and -Corey (1964): - -```math - \frac{(\theta-\theta_r)}{(\theta_s-\theta_r)} = \Bigg\lbrace{\left(\frac{h_b}{h}\right)^{\lambda}, h > h_b \atop 1 , h \leq h_b} -``` - -where ``h`` is the pressure head [cm], ``h_b`` is the air entry pressure head [cm], and -``\theta``, ``\theta_s``, ``\theta_r`` and ``\lambda`` as previously defined. - -Whenever the current soil water pressure drops below `h4`, the root water uptake is set to -zero. The root water uptake is at ideal conditions whenever the soil water pressure is above -`h3`, with a linear transition between `h3` and `h4`. The assumption that very wet -conditions do not affect root water uptake too much is probably generally applicable to -natural vegetation. For crops this assumption is not valid and in this case root water -uptake above `h1` should be set to zero (oxygen deficit) and between `h1` and `h2` root -water uptake is limited. This is possible by setting the input model parameter `alpha_h1` at -0 (default is 1). - -![soil_rootwateruptake](../../images/soil_rootwateruptake.png) - -*Root water uptake reduction coefficient as a function of soil water pressure* - -```@setup -# Figure created using python: # hide -# https://gist.github.com/JoostBuitink/21dd32e71fd1360117fcd1c532c4fd9d#file-sbm_soil_figs-py # hide -``` - -The maximum allowed root water extraction from each soil layer in the unsaturated zone is -determined based on the fraction of each soil layer in the unsaturated zone that is above -the rooting depth (`availcap`) and the unsaturated storage `usld`, see conceptual figure -below. This is implemented using the following code (`i` refers to the index of the vector -that contains all active cells within the spatial model domain and `k` refers to the soil -layer (from top to bottom) in the unsaturated zone): - -```julia - # availcap is fraction of soil layer containing roots - # if `ust` is `true`, the whole unsaturated store is available for transpiration - if ust - availcap = usld[k] * 0.99 - else - availcap = - min(1.0, max(0.0, (sbm.rootingdepth[i] - sbm.sumlayers[i][k]) / usl[k])) - end - maxextr = usld[k] * availcap -``` - - -![soil_unsatevap](../../images/soil_unsatevap.png) - -*Conceptual overview of how maxextr depends on rooting depth and water table depth* - -```@setup -# Figure created using python: # hide -# https://gist.github.com/JoostBuitink/21dd32e71fd1360117fcd1c532c4fd9d#file-sbm_soil_figs-py # hide -``` - -!!! note - When `whole_ust_available` is set to true in the TOML file, almost the complete - unsaturated storage (99%) is available for transpiration, independent of the - `rootingdepth`. - - ```toml - [model] - whole_ust_available = true - ``` - -The computation of transpiration from the saturated store depends on the water table depth, -rooting depth, the reduction coefficient ``\alpha``, the fraction of wet roots and the -`rootfraction` below the water table. The fraction of wet roots is determined using a -sigmoid fuction (see figure below). The parameter `rootdistpar` defines the sharpness of the -transition between fully wet and fully dry roots. If the water table depth is equal to or -lower than the rooting depth, the remaining potential transpiration is used based on the -potential transpiration and actual transpiration in the unsaturated zone. The remaining -potential transpiration is multiplied by the wet roots fraction and the reduction -coefficient (and limited by the available water in saturated zone) to get the transpiration -from the saturated part of the soil. If the water table depth intersects the rooting depth, -the potential transpiration is multiplied by the remaining `rootfraction` (below the water -table), wet roots fraction and the reduction coefficient (and limited by the available water -in saturated zone) to get the transpiration from the saturated part of the soil. This is -implemented using the following code (`i` refers to the index of the vector that contains -all active cells within the spatial model domain): - -```julia - # transpiration from saturated store - wetroots = scurve(sbm.zi[i], sbm.rootingdepth[i], Float(1.0), sbm.rootdistpar[i]) - alpha = rwu_reduction_feddes( - Float(0.0), - sbm.h1[i], - sbm.h2[i], - sbm.h3[i], - sbm.h4[i], - sbm.alpha_h1[i], - ) - # include remaining root fraction if rooting depth is below water table zi - if sbm.zi[i] >= sbm.rootingdepth[i] - f_roots = wetroots - restevap = sbm.pottrans[i] - actevapustore - else - f_roots = wetroots * (1.0 - rootfraction_unsat) - restevap = sbm.pottrans[i] - end - actevapsat = min(restevap * f_roots * alpha, satwaterdepth) - satwaterdepth = satwaterdepth - actevapsat -``` - -![soil_wetroots](../../images/soil_wetroots.png) - -*Amount of wet roots and the effect of the rootdistpar parameter* - -```@setup -# Figure created using python: # hide -# https://gist.github.com/JoostBuitink/21dd32e71fd1360117fcd1c532c4fd9d#file-sbm_soil_figs-py # hide -``` - -## [Snow and glaciers](@id snow) - -The snow and glacier model is described in [Snow and glaciers](@ref snow_and_glac). Both -options can be enabled by specifying the following in the TOML file: - -```toml -[model] -snow = true -glacier = true -``` - -## [Soil processes](@id soil) - -### The SBM soil water accounting scheme - -A detailed description of the Topog\_SBM model has been given by Vertessy (1999). Briefly: -the soil is considered as a bucket with a certain depth (``z_{t}`` [mm]), divided into a -saturated store (``S`` [mm]) and an unsaturated store (``U`` [mm]). The top of the ``S`` -store forms a pseudo-water table at depth ``z_{i}`` [mm] such that the value of ``S`` at any -time is given by: - -```math - S=(z_{t}-z_{i})(\theta_{s}-\theta_{r}) -``` - -where ``\theta_{s}`` [-] and ``\theta_{r}`` [-] are the saturated and residual soil water -contents, respectively. - -The unsaturated store ``U`` is subdivided into storage (``U_{s}`` [mm]) and deficit -(``U_{d}`` [mm]): - -```math - U_{d}=(\theta_{s}-\theta_{r})z_{i}-U\\ - U_{s}=U-U_{d} -``` - -The saturation deficit (``S_{d}`` [mm]) for the soil profile as a whole is defined as: - -```math - S_{d}=(\theta_{s}-\theta_{r})z_{t}-S -``` - -All infiltrating water that enters the ``U`` store first. The unsaturated layer can be -split-up in different layers, by providing the thickness [mm] of the layers in the TOML -file. The following example specifies three layers (from top to bottom) of 100, 300 and 800 -mm: - -```toml -[model] -thicknesslayers = [100, 300, 800] -``` - -The code checks for each grid cell the specified layers against the `soilthickness` [mm], -and adds or removes (partly) layer(s) based on the `soilthickness`. - -Assuming a unit head gradient, the transfer of water (``st`` [mm t``^{-1}``]) from a ``U`` -[mm] store layer is controlled by the saturated hydraulic conductivity ``K_{sat}`` [mm -t``^{-1}``] at depth ``z`` \[mm\] (bottom layer) or ``z_{i}`` [mm], the effective saturation -degree of the layer, and a Brooks-Corey power coefficient (parameter ``c``) based on the -pore size distribution index ``\lambda`` (Brooks and Corey, 1964): - -```math - st=K_{\mathit{sat}}\left(\frac{\theta-\theta_{r}}{\theta_{s}-\theta_{r}}\right)^{c}\\~\\ - c=\frac{2+3\lambda}{\lambda} -``` - -When the unsaturated layer is not split-up into different layers, it is possible to use the -original Topog\_SBM vertical transfer formulation, by specifying in the TOML file: - -```toml -[model] -transfermethod = true -``` - -The transfer of water from the ``U`` [mm] store to the ``S`` [mm] store (``st`` [mm -t``^{-1}``]) is in that case controlled by the saturated hydraulic conductivity ``K_{sat}`` -[mm t``^{-1}``] at depth ``z_{i}`` [mm] and the ratio between ``U`` [mm] and ``S_{d}`` -[mm]: - -```math - st=K_{\mathit{sat}}\frac{U_{s}}{S_{d}} -``` - -Four different saturated hydraulic conductivity depth profiles (`ksat_profile`) are -available and a `ksat_profile` can be specified in the TOML file as follows: - -```toml -[input.vertical] -ksat_profile = "exponential_constant" # optional, one of ("exponential", "exponential_constant", "layered", "layered_exponential"), default is "exponential" -``` - -Soil measurements are often available for about the upper 1.5-2 m of the soil column to -estimate the saturated hydraulic conductivity, while these measurements are often lacking -for soil depths beyond 1.5-2 m. These different profiles allow to extent the saturated -hydraulic conductivity profile based on measurements (either an exponential fit or hydraulic -conductivity value per soil layer) with an exponential or constant profile. By default, with -`ksat_profile` "exponential", the saturated hydraulic conductivity (``K_{sat}`` [mm -t``^{-1}``]) declines with soil depth (``z`` [mm]) in the model according to: - -```math - K_{sat}=K_{0}e^{(-fz)}, -``` -where ``K_{0}`` [mm t``^{-1}``] is the saturated hydraulic conductivity at the soil surface -and ``f`` is a scaling parameter [mm``^{-1}``]. - -The plot below shows the relation between soil depth ``z`` and saturated hydraulic -conductivity ``K_{sat}`` for different values of ``f``. - -```@setup plot - using Printf - using CairoMakie -``` - -```@example plot - let # hide - fig = Figure(resolution = (800, 400)) # hide - ax = Axis(fig[1, 1], xlabel = "Kₛₐₜ [mm/day]", ylabel = "-z [mm]") # hide - - z = 0:5.0:1000 # hide - ksat = 100.0 # hide - f = 0.6 ./ collect(50:150.0:800) # hide - - for fi in f # hide - lines!(ax, ksat .* exp.(-fi .* z), -z, label = @sprintf("f = %.2e", fi)) # hide - end # hide - - Legend(fig[1, 2], ax, "f") # hide - fig # hide - end # hide -``` - -With `ksat_profile` "exponential\_constant", ``K_{sat}`` declines exponentially with soil -depth ``z`` until ``z_\mathrm{exp}`` [mm] below the soil surface, and stays constant at and -beyond soil depth ``z_\mathrm{exp}``: - -```math - K_{sat} = \begin{cases} - K_{0}e^{(-fz)} & \text{if $z < z_\mathrm{exp}$}\\ - K_{0}e^{(-fz_\mathrm{exp})} & \text{if $z \ge z_\mathrm{exp}$}. - \end{cases} -``` - -It is also possible to provide a ``K_{sat}`` value per soil layer by specifying -`ksat_profile` "layered", these ``K_{sat}`` values are used directly to compute the vertical -transfer of water between soil layers and to the saturated store ``S``. Finally, with the -`ksat_profile` "layered\_exponential" a ``K_{sat}`` value per soil layer is used until depth -``z_\mathrm{layered}`` below the soil surface, and beyond ``z_\mathrm{layered}`` an -exponential decline of ``K_{sat}`` (of the soil layer with bottom ``z_\mathrm{layered}``) -controlled by ``f`` occurs. The different available `ksat_profle` options are schematized in -the figure below where the blue line represents the ``K_{sat}`` value. - -![ksat_profiles](../../images/sbm_ksat_profiles.png) - -*Overview of available `ksat_profile` options, for a soil column with five layers* - -### Infiltration - -The water available for infiltration is taken as the rainfall including meltwater. -Infiltration is determined separately for the compacted and non-compacted areas, as these -have different infiltration capacities. Naturally, only the water that can be stored in the -soil can infiltrate. If not all water can infiltrate, this is added as excess water to the -runoff routing scheme. - -The infiltrating water is split in two parts, the part that falls on compacted areas and the -part that falls on non-compacted areas. The maximum amount of water that can infiltrate in -these areas is calculated by taking the minimum of the maximum infiltration rate -(`infiltcapsoil` [mm t``^{-1}``] for non-compacted areas and `infiltcappath` [mm t``^{-1}``] -for compacted areas) and the amount of water available for infiltration `avail_forinfilt` -[mm t``^{-1}``]. The water that can actually infiltrate `infiltsoilpath` [mm t``^{-1}``] is -calculated by taking the minimum of the total maximum infiltration rate (compacted and -non-compacted areas) and the remaining storage capacity. - -Infiltration excess occurs when the infiltration capacity is smaller then the throughfall -and stemflow rate. This amount of water (`infiltexcess` [mm t``^{-1}``]) becomes overland -flow (infiltration excess overland flow). Saturation excess occurs when the (upper) soil -becomes saturated and water cannot infiltrate anymore. This amount of water `excesswater` -[mm t``^{-1}``] becomes overland flow (saturation excess overland flow). - -#### Infiltration in frozen soils - -If snow processes are modelled, the infiltration capacity is reduced when the soil is frozen -(or near freezing point). A infiltration correction factor is defined as a S-curve with the -shape as defined below. A parameter (`cf_soil`) defines the base factor of infiltration when -the soil is frozen. The soil temperature is calculated based on the soil temperature on the -previous timestep, and the temperature difference between air and soil temperature weighted -with a factor (`w_soil`, which defaults to 0.1125). - -The near surface soil temperature is modelled using a simple equation (Wigmosta et al., -2009): - -```math -T_s^{t} = T_s^{t-1} + w (T_a - T_s^{t-1}) -``` -where ``T_s^{t}`` [``\degree``C] is the near-surface soil temperature at time ``t``, ``T_a`` -[``\degree``C] is air temperature and ``w`` [-] is a weighting coefficient determined -through calibration (default is 0.1125 for daily timesteps). - -A reduction factor (`cf_soil` [-], default is 0.038) is applied to the maximum infiltration -rate (`infiltcapsoil` and `infiltcappath`), when the following model settings are specified -in the TOML file: - -```toml -[model] -soilinfreduction = true -snow = true -``` - -If `soilinfreduction` is set to `false`, water is allowed to infiltrate the soil, even if -the soil is frozen. - -A S-curve (see plot below) is used to make a smooth transition (a c-factor (``c``) of 8.0 is -used): - -```math - b = \frac{1.0}{(1.0 - cf\_soil)}\\~\\ - soilinfredu = \frac{1.0}{b + exp(-c (T_s - a))} + cf\_soil\\~\\ - a = 0.0\\ - c = 8.0 -``` - -![soil_frozeninfilt](../../images/soil_frozeninfilt.png) - -*Infiltration correction factor as a function of soil temperature* - -```@setup -# Figure created using python: # hide -# https://gist.github.com/JoostBuitink/21dd32e71fd1360117fcd1c532c4fd9d#file-sbm_soil_figs-py # hide -``` - - -### Capillary rise - -The actual capillary rise `actcapflux` [mm t``^{-1}``] is determined using the following -approach: first the saturated hydraulic conductivity `ksat` [mm t``^{-1}``] is determined at -the water table ``z_{i}``; next a potential capillary rise `maxcapflux` [mm t``^{-1}``] is -determined from the minimum of `ksat`, actual transpiration `actevapustore` [mm t``^{-1}``] -taken from the ``U`` store, available water in the ``S`` store (`satwaterdepth` [mm]) and -the deficit of the ``U`` store (`ustorecapacity` [mm]), as shown by the following code -block: - -```julia - maxcapflux = max(0.0, min(ksat, actevapustore, ustorecapacity, satwaterdepth)) -``` - -Then the potential rise `maxcapflux` is scaled using the water table depth `zi`, a maximum -water depth `cap_hmax` [mm] beyond which capillary rise ceases and a coefficient `cap_n` -[-], as follows in the code block below (`i` refers to the index of the vector that contains -all active cells within the spatial model domain): - -```julia - if sbm.zi[i] > rootingdepth - capflux = - maxcapflux * pow( - 1.0 - min(sbm.zi[i], sbm.cap_hmax[i]) / (sbm.cap_hmax[i]), - sbm.cap_n[i], - ) - else - capflux = 0.0 - end -``` - -If the roots reach the water table (`rootingdepth` ``\ge`` `sbm.zi`), `capflux` is set to -zero. - -Finally, the capillary rise `capflux` is limited by the unsaturated store deficit (one or -multiple layers), calculated as follows in the code block below (`i` refers to the index of -the vector that contains all active cells within the spatial model domain, and `k` refers to -the layer position): - -```julia - usl[k] * (sbm.theta_s[i] - sbm.theta_r[i]) - usld[k] -``` - -where `usl` [mm] is the unsaturated layer thickness, `usld` is the `ustorelayerdepth` \[mm\] -(amount of water in the unsaturated layer), and ``\theta_{s}`` and ``\theta_{r}`` as -previously defined. - -The calculation of the actual capillary rise `actcapflux` is as follows in the code block -below (`i` refers to the index of the vector that contains all active cells within the -spatial model domain, and `k` refers to the layer position): - -```julia - actcapflux = 0.0 - netcapflux = capflux - for k = n_usl:-1:1 - toadd = - min(netcapflux, max(usl[k] * (sbm.theta_s[i] - sbm.theta_r[i]) - usld[k], 0.0)) - usld = setindex(usld, usld[k] + toadd, k) - netcapflux = netcapflux - toadd - actcapflux = actcapflux + toadd - end -``` - -In case of multiple unsaturated layers (`n_usl` ``>`` 1), the calculation of the actual -capillary rise starts at the lowest unsaturated layer while keeping track of the remaining -capillary rise `netcapflux` [mm t``^{-1}``]. - -### Leakage - -If the `maxleakage` (mm/day) input model parameter is set > 0, water is lost from the -saturated zone and runs out of the model. - -## Open water - -Part of the water available for infiltration is diverted to the open water, based on the -fractions of river and lakes of each grid cell. The amount of evaporation from open water is -assumed to be equal to potential evaporation (if sufficient water is available). - -## Non-irrigation -Non-irrigation water demand and allocation computations are supported for the sectors -domestic, industry and livestock. These computations can be enabled by specifying the -following in the TOML file: - -```toml -[model.water_demand] -domestic = true -industry = true -livestock = true -``` - -For these non-irrigation sectors the gross demand (``d_\mathrm{gross}`` [mm t``^{-1}``]) and -net demand (``d_\mathrm{net}`` [mm t``^{-1}``]) are provided to the model (input through -cyclic or forcing data). Gross demand represents the total demand and hence the total -abstraction from surface water or groundwater when sufficient water is available. Net demand -represents water consumption. The portion of total abstracted water that is not consumed is -returned as surface water. The return flow fraction (``f_\mathrm{return}`` [-]) is -calculated as follows: - -```math - f_\mathrm{return} = 1.0 - \frac{d_\mathrm{net}}{d_\mathrm{gross}}, -``` -and used to calculate the return flow rate (water abstracted from surface water or -groundwater but not consumed). For grid cells containing a river the return flow is directly -returned to the river routing component, otherwise the return flow is returned to the -overland flow routing component. - -## Non-paddy irrigation -Non-paddy (other crops than flooded rice) water demand and allocation computations are -supported. These computations can be enabled by specifying the following in the TOML file: - -```toml -[model.water_demand] -nonpaddy = true -``` -Irrigation is applied during the growing season (when input parameter `irrigation_trigger` -[-] is `true` (or `on`)) and when water depletion exceeds the readily available water: - -```math - (U_\mathrm{field} - U_\mathrm{a}) \ge (U_\mathrm{field} - U_\mathrm{h3}) -``` -where ``U_\mathrm{field}`` \[mm\] is the unsaturated store in the root zone at field -capacity (defined at a soil water pressure head of -100 cm), ``U_\mathrm{a}`` \[mm\] is the -actual unsaturated store in the root zone and ``U_\mathrm{h3}`` \[mm\] is the unsaturated -store in the root zone at the critical soil water pressure head `h3`, below this pressure -head reduction of root water uptake starts due to drought stress. The net irrigation demand -[mm t``^{-1}``] is the irrigation rate that brings the root zone back to field capacity, -limited by the soil infiltration capacity [mm t``^{-1}``], assuming that farmers do not -apply an irrigation rate higher than the soil infiltration capacity. To account for limited -irrigation efficiency the net irrigation demand is divided by the irrigation efficiency for -non-paddy crops (`irrigation_efficiency` [-], default is 1.0), resulting in gross irrigation -demand [mm t``^{-1}``]. Finally, the gross irrigation demand is limited by the maximum -irrigation rate (`maximum_irrigation_rate` [mm t``^{-1}``], default is 25 mm d``^{-1}``). If -the maximum irrigation rate is applied, irrigation continues at subsequent time steps until -field capacity is reached. Irrigation is added to the `SBM` variable `avail_forinfilt` [mm -t``^{-1}``], the amount of water available for infiltration. - -## Paddy irrigation -Paddy (flooded rice) water demand and allocation computations are supported. These -computations can be enabled by specifying the following in the TOML file: - -```toml -[model.water_demand] -paddy = true -``` -Irrigation is applied during the growing season (when input parameter `irrigation_trigger` -[-] is `true` (or `on`)) and when the paddy water depth `h` \[mm\] reaches below the minimum -water depth `h_min` \[mm\] (see also the figure below). The net irrigation demand [mm -t``^{-1}``] is the irrigation rate required to reach the optimal paddy water depth `h_opt` -\[mm\], an approach similar to Xie and Cui (2011). To account for limited irrigation -efficiency the net irrigation demand is divided by the irrigation efficiency for paddy -fields (`irrigation_efficiency` [-], default is 1.0), resulting in gross irrigation demand -[mm t``^{-1}``]. Finally, the gross irrigation demand is limited by the maximum irrigation -rate (`maximum_irrigation_rate` [mm t``^{-1}``], default is 25 mm d``^{-1}``). If the -maximum irrigation rate is applied, irrigation continues at subsequent time steps until the -optimal paddy water depth `h_opt` is reached. Irrigation is added to the `SBM` variable -`avail_forinfilt` [mm t``^{-1}``], the amount of water available for infiltration. When the -paddy water depth `h` exceeds `h_max` \[mm\] runoff occurs, and this amount is added to the -runoff routing scheme for overland flow. The figure below shows a typical vertical soil -profile of a puddled rice soil with a muddy layer of about 15 cm (in this case represented -by two soil layers of 5 cm and 10 cm thickness), a plow soil layer of 5 cm with relative low -permeability (vertical hydraulic conductivity ``k_v`` of about 5 mm d``^{-1}``), and a -non-puddled soil below the plow soil layer. The low vertical hydraulic conductivity of the -plow soil layer can be realized by making use of the parameter `kvfrac` [-], a -multiplication factor applied to the vertical hydraulic conductivity at soil depth ``z`` -[mm]. - -![paddy_profile](../../images/paddy_profile.png) - -*Schematic diagram of a paddy field with water balance components and soil profile* - -## Water withdrawal and allocation -For the water withdrawal the total gross demand is computed (sum over the irrigation and -non-irrigation water demand sectors), in case sufficient water is available the water -withdrawal is equal to the total gross demand. In case of insufficient water availability, -the water withdrawal is scaled down to the available water, and allocation is then -proportional to the gross demand per sector (industry, domestic, livestock and irrigation). -Water can be abstracted from the following sources: - -- surface water from rivers (max 80% of total available water) -- reservoirs and lakes (max 98% of total available water) -- groundwater (max 75% of total available water) - -The model parameter `frac_sw_used` (fraction surface water used, default is 1.0) determines -how much water is supplied by available surface water and groundwater. - -### Local -First, surface water abstraction (excluding reservoir and lake locations) is computed to -satisfy local (same grid cell) water demand. The available surface water volume is limited -by a fixed scaling factor of 0.8 to prevent rivers from completely drying out. It is assumed -that the water demand cannot be satisfied completely from local surface water and -groundwater. The next step is to satisfy the remaining water demand for allocation `areas` -[-], described in the next sub-section. - -### Allocation areas -For allocation areas the water demand ``V_\mathrm{sw, demand}`` [m``^3``] and availability -``V_\mathrm{sw, availabilty}`` [m``^3``] are summed (including reservoir and lake locations -limited by a fixed scaling factor of 0.98), and the total surface water abstraction is then: - -```math - V_\mathrm{sw, abstraction} = \mathrm{min}(V_\mathrm{sw, demand}, V_\mathrm{sw, availabilty}) -``` -The fraction of available surface water that can be abstracted ``f_\mathrm{sw, -abstraction}`` [-] at the allocation area level is then: - -```math - f_\mathrm{sw, abstraction} = \frac{V_\mathrm{sw, abstraction}}{V_\mathrm{sw, available}} -``` -This fraction is applied to the remaining available surface water of each river cell -(including lake and reservoir locations) to compute surface water abstraction at each river -cell and to update the local surface water abstraction. - -The fraction of water demand that can be satisfied by available surface water -``f_\mathrm{sw, allocation}`` [-] at the allocation area level is then: - -```math - f_\mathrm{sw, allocation} = \frac{V_\mathrm{sw, abstraction}}{V_\mathrm{sw, demand}} -``` -This fraction is applied to the remaining surface water demand of each land cell to compute -the allocated surface water to each land cell. - -Then groundwater abstraction is computed to satisfy the remaining local water demand, where -groundwater abstraction is limited by a fixed scaling factor of 0.75 applied to the -groundwater volume. Finally, for allocation `areas` the water demand ``V_\mathrm{gw, -demand}`` [m``^3``] and availability ``V_\mathrm{gw, availabilty}`` [m``^3``] are summed, -and the total groundwater abstraction is then: - -```math - V_\mathrm{gw, abstraction} = \mathrm{min}(V_\mathrm{gw, demand}, V_\mathrm{gw, availabilty}) -``` -The fraction of available groundwater that can be abstracted at allocation area level -``f_\mathrm{gw, abstraction}`` [-] at the allocation area level is then: - -```math - f_\mathrm{gw, abstraction} = \frac{V_\mathrm{gw, abstraction}}{V_\mathrm{gw, available}} -``` -This fraction is applied to the remaining available groundwater of each land cell to compute -groundwater abstraction and to update the local groundwater abstraction. - -The fraction of water demand that can be satisfied by available groundwater ``f_\mathrm{gw, -allocation}`` [-] at the allocation area level is then: - -```math - f_\mathrm{gw, allocation} = \frac{V_\mathrm{gw, abstraction}}{V_\mathrm{gw, demand}} -``` -This fraction is applied to the remaining groundwater demand of each land cell to compute -the allocated groundwater to each land cell. - -### Abstractions -Groundwater abstraction is implemented by subtracting this amount from the `recharge` -variable of the lateral subsurface flow component (kinematic wave) or the recharge `rate` of -the groundwater flow module. Surface water `abstraction` [m``^3`` s``^{-1}``] is divided by -the flow length `dl` [m] and subtracted from the lateral inflow of kinematic wave routing -scheme for river flow. For the local inertial routing scheme (river and optional floodplain -routing), the surface water `abstraction` [m``^3`` s``^{-1}``] is subtracted as part of the -continuity equation of the local inertial model. For reservoir and lake locations surface -water is abstracted (`act_surfacewater_abst_vol` [m``^3`` t``^{-1}``]) from the reservoir -`volume` [m``^3``] and lake `storage` [m``^3``] respectively, with a subsequent update of -the lake `waterlevel` [m]. - -## References -+ Brooks, R. H., and Corey, A. T., 1964, Hydraulic properties of porous media, Hydrology - Papers 3, Colorado State University, Fort Collins, 27 p. -+ Feddes, R.A., Kowalik, P.J. and Zaradny, H., 1978, Simulation of field water use and crop - yield, Pudoc, Wageningen, Simulation Monographs. -+ Gash, J. H. C., 1979, An analytical model of rainfall interception by forests, Q. J. Roy. - Meteor. Soc., 105, 43–55, doi:1026 10.1002/qj.497105443041027. -+ Liu, S., 1998, Estimation of rainfall storage capacity in the canopies of cypress wetlands - and slash pine uplands in North-Central Florida, J. Hydr., 207, 32–41, doi: - 10.1016/S0022-1694(98)00115-2. -+ Pitman, J., 1989, Rainfall interception by bracken in open habitats—relations between leaf - area, canopy storage and drainage rate, J. Hydr. 105, 317–334, doi: - 10.1016/0022-1694(89)90111-X. -+ Van Dijk, A. I. J. M., and Bruijnzeel, L. A., 2001, Modelling rainfall interception by - vegetation of variable density using an adapted analytical model, Part 2, Model validation - for a tropical upland mixed cropping system, J. Hydr., 247, 239–262. -+ Vertessy, R., and Elsenbeer, H., 1999, Distributed modeling of storm flow generation in an - amazonian rain forest catchment: effects of model parameterization, Water Resour. Res., - 35, 2173–2187. doi: 10.1029/1999WR9000511257. -+ Wigmosta, M. S., Lane, L. J., Tagestad, J. D., and Coleman A. M., 2009, Hydrologic and - erosion models to assess land use and management practices affecting soil erosion, J. - Hydrol. Eng., 14, 27-41. -+ Xie, X. and Cui, Y., 2011, Development and test of SWAT for modeling hydrological - processes in irrigation districts with paddy rice, J. Hydrol., 396, pp. 61-71. diff --git a/docs/src/model_docs/vertical/sediment.md b/docs/src/model_docs/vertical/sediment.md deleted file mode 100644 index c18981feb..000000000 --- a/docs/src/model_docs/vertical/sediment.md +++ /dev/null @@ -1,223 +0,0 @@ -# [Sediment](@id vert_sediment) - -Over the land, soil erosion, also called soil loss, is closely linked to the water cycle. -The main processes governing sediment generation are splash erosion from rain droplets, and -sheet and rill erosion from the shear stress caused by overland flow. The intensity of soil -erosion by rain or flow depends on the land and soil characteristics such as slope, land use -or soil type. Once soil is eroded, the detached particles can be transported downslope by -overland flow. Along the transport pathways, soil particles can also be deposited due to a -low flow velocity, a change of topography in depressions, footslopes or valley bottoms, -and/or can be filtered and stopped by a change in vegetation such as field boundaries. - -The inland part of the sediment gathers these different processes, separated in a vertical -structure for the soil loss and lateral structure for the transport in overland flow. - -Overview of the different processes for a land cell in wflow\_sediment. - -![sediment_inland](../../images/soilloss-scheme.png) - -## Soil Erosion -The first process to consider in sediment dynamics is the generation of sediments by land -erosion. The main processes behind soil loss are rainfall erosion and overland flow erosion. -In order to model such processes at a fine time and space scale, physics-based models such -as ANSWERS and EUROSEM were chosen here. - -The choice of rainfall erosion method is set up in the model section of the TOML: -```toml -[model] -rainerosmethod = "answers" # Rainfall erosion equation: ["answers", "eurosem"] -``` - -### Rainfall erosion -In wflow\_sediment, rainfall erosion can both be modelled using EUROSEM or ANSWERS equation. -The main difference between the models is that EUROSEM uses a more physics-based approach -based on the kinetic energy of the rain drops impacting the soil (Morgan et al, 1998), while -ANSWERS is more empirical and uses parameters from the USLE model (Beasley et al, 1991). - -In EUROSEM, rainfall erosion is modelled according to rainfall intensity and its kinetic -energy when it reaches the soil according to equations developed by Brandt (1990). As the -intensity of the rain kinetic energy depends on the length of the fall, rainfall intercepted -by vegetation will then be reduced compared to direct throughfall. The kinetic energy of -direct throughfall is estimated by (Morgan et al, 1998): -```math - KE_{direct} = 8.95 + 8.44\,log_{10}\,R_{i} -``` -where ``KE_{direct}`` is the kinetic energy of direct throughfall (J m``^{-2}`` mm``^{-1}``) and -``R_{i}`` is rainfall intensity (mm h``^{-1}``). If the rainfall is intercepted by -vegetation and falls as leaf drainage, its kinetic energy is then reduced according to -(Brandt, 1990): -```math - KE_{leaf} = 15.8\,H_{p}^{0.5} - 5.87 -``` -where ``KE_{leaf}`` is kinetic energy of leaf drainage (J m``^{-2}`` mm``^{-1}``) and -``H_{p}`` is the effective canopy height (half of plant height in m). Canopy height can be -derived from the global map from Simard & al. (2011) or by user input depending on the land -use. - -Kinetic energies from both direct throughfall and leaf drainage are then multiplied by the -respective depths of direct throughfall and leaf drainage (mm) and added to get the total -rainfall kinetic energy ``KE``. The soil detached by rainfall ``D_{R}`` (g m``^{-2}``) is -then: -```math - D_{R} = k\,KE\,e^{-\varphi h} -``` -where ``k`` is an index of the detachability of the soil (g ``J^{-1}``), ``KE`` is the total -rainfall kinetic energy (J m``^{-2}``), ``h`` is the surface runoff depth on the soil (m) -and ``\varphi`` is an exponent varying between 0.9 and 3.1 used to reduce rainfall impact if -the soil is already covered by water. As a simplification, Torri (1987) has shown that a -value of 2.0 for ``\varphi`` is representative enough for a wide range of soil conditions. -The detachability of the soil ``k`` depends on the soil texture (proportion of clay, silt -and sand content) and corresponding values are defined in EUROSEM user guide (Morgan et al, -1998). As a simplification, in wflow\_sediment, the mean value of the detachability shown in -the table below are used. Soil texture can for example be derived from the topsoil clay and -silt content from SoilGrids (Hengl et al, 2017). - -Table: Mean detachability of soil depending on its texture (Morgan et al, 1998). - -| Texture (USDA system) | Mean detachability ``k`` (g/J) | -|:--------------------- | ------------------------------ | -| Clay | 2.0 | -| Clay Loam | 1.7 | -| Silt | 1.2 | -| Silt Loam | 1.5 | -| Loam | 2.0 | -| Sandy Loam | 2.6 | -| Loamy Sand | 3.0 | -| Fine Sand | 3.5 | -| Sand | 1.9 | - -Rainfall erosion is handled differently in ANSWERS. There, the impacts of vegetation and -soil properties are handled through the USLE coefficients in the equation (Beasley et al, -1991): -```math - D_{R} = 0.108 \, C_{USLE} \, K_{USLE} \, A_{i} \, R_{i}^{2} -``` -where ``D_{R}`` is the soil detachment by rainfall (here in kg min``^{-1}``), ``C_{USLE}`` -is the soil cover-management factor from the USLE equation, ``K_{USLE}`` is the soil -erodibility factor from the USLE equation, ``A_{i}`` is the area of the cell (m``^{2}``) and -``R_{i}`` is the rainfall intensity (here in mm min``^{-1}``). There are several methods -available to estimate the ``C`` and ``K`` factors from the USLE. They can come from user -input maps, for example maps resulting from Panagos & al.'s recent studies for Europe -(Panagos et al, 2015) (Ballabio et al, 2016). To get an estimate of the ``C`` factor -globally, the other method is to estimate ``C`` values for the different land use type in -from global land cover maps (e.g. GlobCover). An example is given for the global land cover -map GlobCover, summed up in the table below, the values come from a literature study -including Panagos et al.'s review (2015), Gericke & al. (2015), Mansoor & al. (2013), Chadli -et al. (2016), de Vente et al. (2009), Borrelli et al. (2014), Yang et al. (2003) and Bosco -et al. (2015). - -The other methods to estimate the USLE ``K`` factor are to use either topsoil composition or -topsoil geometric mean diameter. ``K`` estimation from topsoil composition is estimated with -the equation developed in the EPIC model (Williams et al, 1983): -```math - K_{USLE} = \left\{ 0.2 + 0.3exp\left[-0.0256SAN\frac{(1-SIL)}{100}\right] \right\} - \left(\frac{SIL}{CLA+SIL}\right)^{0.3} \\~\\ - \left(1-\frac{0.25OC}{OC+e^{(3.72-2.95OC)}}\right)\left(1-\frac{0.75SN}{SN+e^{(-5.51+22.9SN)}}\right) -``` -where ``CLA``, ``SIL``, ``SAN`` are respectively the clay, silt and sand fractions of the -topsoil (%), ``OC`` is the topsoil organic carbon content (%) and ``SN`` is ``1-SAN/100``. -These soil parameters can be derived for example from the SoilGrids dataset. The ``K`` -factor can also be estimated from the soil mean geometric diameter using the formulation -from the RUSLE guide by Renard & al. (1997): -```math - K_{USLE} = 0.0034 + 0.0405e^{\left(-\dfrac{1}{2}\left(\dfrac{log_{10}(D_{g})+1.659}{0.7101}\right)^{2}\right)} -``` -where ``D_{g}`` is the soil geometric mean diameter (mm) estimated from topsoil clay, silt, -sand fraction. - -Table: Estimation of USLE C factor per Globcover land use type - -| GlobCover Value | Globcover label | ``C_{USLE}`` | -|:--------------- | --------------- | ------------ | -| 11 | Post-flooding or irrigated croplands (or aquatic) | 0.2 | -| 14 | Rainfed croplands | 0.35 | -| 20 | Mosaic cropland (50-70%) vegetation (grassland/shrubland/forest) (20-50%) | 0.27 | -| 30 | Mosaic vegetation (grassland/shrubland/forest) (50-70%) / cropland (20-50%) | 0.25 | -| 40 | Closed to open (>15%) broadleaved evergreen or semi-deciduous forest (>5m) | 0.0065 | -| 50 | Closed (>40%) broadleaved deciduous forest (>5m) | 0.001 | -| 60 | Open (15-40%) broadleaved deciduous forest/woodland (>5m) | 0.01 | -| 70 | Closed (>40%) needleleaved evergreen forest (>5m) | 0.001 | -| 90 | Open (15-40%) needleleaved deciduous or evergreen forest (>5m) | 0.01 | -| 100 | Closed to open (>15%) mixed broadleaved and needleleaved forest (>5m) | 0.02 | -| 110 | Mosaic forest or shrubland (50-70%) / grassland (20-50%) | 0.015 | -| 120 | Mosaic grassland (50-70%) / forest or shrubland (20-50%) | 0.03 | -| 130 | Closed to open (>15%) (broadleaved or needleleaved, evergreen or deciduous) shrubland (<5m) | 0.035 | -| 140 | Closed to open (>15%) herbaceous vegetation (grassland, savannas or lichens/mosses) | 0.05 | -| 150 | Sparse (<15%) vegetation | 0.35 | -| 160 | Closed to open (>15%) broadleaved forest regularly flooded (semi-permanently or temporarily) - Fresh or brackish water | 0.001 | -| 170 | Closed (>40%) broadleaved forest or shrubland permanently flooded - Saline or brackish water | 0.0005 | -| 180 | Closed to open (>15%) grassland or woody vegetation on regularly flooded or waterlogged soil - Fresh, brackish or saline water | 0.04 | -| 190 | Artificial surfaces and associated areas (Urban areas >50%) | 0.0 | -| 200 | Bare areas | 0.0 | -| 210 | Water bodies | 0.0 | -| 220 | Permanent snow and ice | 0.0 | -| 230 | No data (burnt areas, clouds,…) | 0.0 | - -### Overland flow erosion - -Overland flow (or surface runoff) erosion is induced by the strength of the shear stress of -the surface water on the soil. As in rainfall erosion, the effect of the flow shear stress -can be reduced by the soil vegetation or by the soil properties. In wflow_sediment, soil -detachment by overland flow is modelled as in ANSWERS with (Beasley et al, 1991): -```math - D_{F} = 0.90 \, C_{USLE} \, K_{USLE} \, A_{i} \, S \, q -``` -where ``D_{F}`` is soil detachment by flow (kg min``^{-1}``), ``C_{USLE}`` and ``K_{USLE}`` -are the USLE cover and soil erodibility factors, ``A_{i}`` is the cell area (m``^{2}``), -``S`` is the slope gradient and ``q`` is the overland flow rate per unit width (m``^{2}`` -min``^{-1}``). The USLE ``C`` and ``K`` factors can be estimated with the same methods as -for rainfall erosion and here the slope gradient is obtained from the sinus rather than the -tangent of the slope angle. - -## Delivery to the river system -Once soil is detached, it can be transported by overland flow and reach the river system. -This process is described in [Sediment Flux in overland flow](@ref). - -## References -+ D.B Beasley and L.F Huggins. ANSWERS - Users Manual. Technical report, EPA, 1991. -+ P. Borrelli, M. Märker, P. Panagos, and B. Schütt. Modeling soil erosion and river - sediment yield for an intermountain drainage basin of the Central Apennines, Italy. - Catena, 114:45-58, 2014. 10.1016/j.catena.2013.10.007 -+ C. Bosco, D. De Rigo, O. Dewitte, J. Poesen, and P. Panagos. Modelling soil erosion at - European scale: Towards harmonization and reproducibility. Natural Hazards and Earth - System Sciences, 15(2):225-245, 2015. 10.5194/nhess-15-225-2015 -+ C.J Brandt. Simulation of the size distribution and erosivity of raindrops and throughfall - drops. Earth Surface Processes and Landforms, 15(8):687-698, dec 1990. -+ K. Chadli. Estimation of soil loss using RUSLE model for Sebou watershed (Morocco). - Modeling Earth Systems and Environment, 2(2):51, 2016. 10.1007/s40808-016-0105-y -+ G R Foster. Modeling the erosion process. Hydrologic modeling of small watersheds, pages - 295-380, 1982. -+ A. Gericke. Soil loss estimation and empirical relationships for sediment delivery ratios - of European river catchments. International Journal of River Basin Management, 2015. - 10.1080/15715124.2014.1003302 -+ L.D.K. Mansoor, M.D. Matlock, E.C. Cummings, and L.L. Nalley. Quantifying and mapping - multiple ecosystem services change in West Africa. Agriculture, Ecosystems and - Environment, 165:6-18, 2013. 10.1016/j.agee.2012.12.001 -+ Q Morgan, J.N Smith, R.E Govers, G Poesen, J.W.A Auerswald, K Chisci, G Torri, D Styczen, - and M E Folly. The European soil erosion model (EUROSEM): documentation and user guide. - Technical report, 1998. -+ S.L Neitsch, J.G Arnold, J.R Kiniry, and J.R Williams. SWAT Theoretical Documentation - Version 2009. Texas Water Resources Institute, pages 1-647, 2011. - 10.1016/j.scitotenv.2015.11.063 -+ P. Panagos, P. Borrelli, K. Meusburger, C. Alewell, E. Lugato, and L. Montanarella. - Estimating the soil erosion cover-management factor at the European scale. Land Use - Policy, 48:38-50, 2015. 10.1016/j.landusepol.2015.05.021 -+ K Renard, Gr Foster, Ga Weesies, Dk McCool, and Dc Yoder. Predicting soil erosion by - water: a guide to conservation planning with the Revised Universal Soil Loss Equation - (RUSLE). Washington, 1997. -+ D. Torri, M. Sfalanga, and M. Del Sette. Splash detachment: Runoff depth and soil - cohesion. Catena, 14(1-3):149-155, 1987. 10.1016/S0341-8162(87)80013-9 -+ J. de Vente, J. Poesen, G. Govers, and C. Boix-Fayos. The implications of data selection - for regional erosion and sediment yield modelling. Earth Surface Processes and Landforms, - 34(15):1994-2007, 2009. 10.1002/esp.1884 -+ G. Verstraeten and J. Poesen. Estimating trap efficiency of small reservoirs and ponds: - methods and implications for the assessment of sediment yield. Progress in Physical - Geography, 24(2):219-251, 2000. 10.1177/030913330002400204 -+ O. Vigiak, A. Malago, F. Bouraoui, M. Vanmaercke, and J. Poesen. Adapting SWAT hillslope - erosion model to predict sediment concentrations and yields in large Basins. Science of - the Total Environment, 538:855-875, 2015. 10.1016/j.scitotenv.2015.08.095 -+ J.R. Williams, K.G. Renard, and P.T. Dyke. EPIC A new method for assessing erosion's - effect on soil productivity. Journal of Soil and Water Conservation, 38(5):381-383, 1983. -+ D. Yang, S. Kanae, T. Oki, T. Koike, and K. Musiake. Global potential soil erosion with - reference to land use and climate changes. Hydrological Processes, 17(14):2913-2928, 2003. - 10.1002/hyp.1441 diff --git a/docs/src/user_guide/additional_options.md b/docs/src/user_guide/additional_options.md deleted file mode 100644 index b0a01f8ef..000000000 --- a/docs/src/user_guide/additional_options.md +++ /dev/null @@ -1,345 +0,0 @@ -# Additional wflow options - -## [Starting the model with "warm" states](@id reinit) - -The `state` section in the TOML file provides information on the input file if the model is -initialized with a warm state (`path_input`) and to what file the states are written at the -end of the model run (`path_output`). Please note that the model setting `reinit` needs to -be set to `false` in order to initialize the model with states from the file located at -`path_input`. A mapping between external state names and internal model states is required. -This information is specified for each model component, the `vertical` model and `lateral` -model components. In the example below the `vertical` component represents the SBM concept, -and for the `lateral` components there is a `river` (including optional `reservoir`, `lake` -and `floodplain` components), `land` and `subsurface` domain. The internal model states are -listed on the left side, and the external state names are listed on the right side. Note -that `path_input` is only required when `reinit` is set to false. `path_output` is optional, -an output state file is only written when it is defined. If neither is set, the entire -`state` section can be left out. - -```toml -[model] -reinit = false # cold (reinit = true) or warm state (reinit = false), default is true - -[state] -path_input = "data/instates-moselle.nc" # Location of the file with the input states -path_output = "data/outstates-moselle.nc" # Output location of the states after the model run - -[state.vertical] -satwaterdepth = "satwaterdepth" -snow = "snow" -tsoil = "tsoil" -ustorelayerdepth = "ustorelayerdepth" -canopystorage = "canopystorage" -snowwater = "snowwater" -glacierstore ="glacierstore" - -[state.lateral.river] -q = "q_river" -h = "h_river" -h_av = "h_av_river" - -[state.lateral.river.floodplain] -q = "q_floodplain" -h = "h_floodplain" - -[state.lateral.river.reservoir] -volume = "volume_reservoir" - -[state.lateral.river.lake] -waterlevel = "waterlevel_lake" - -[state.lateral.subsurface] -ssf = "ssf" - -[state.lateral.land] -q = "q_land" -h = "h_land" -h_av = "h_av_land" -``` - -## Enabling snow and glacier processes - -```toml -[model] -snow = true -masswasting = true -glacier = true - -[input.vertical] -tt = "TT" -tti = "TTI" -ttm = "TTM" -water_holding_capacity = "WHC" -glacierstore = "wflow_glacierstore" -glacierfrac = "wflow_glacierfrac" -g_cfmax = "G_Cfmax" -g_tt = "G_TT" -g_sifrac = "G_SIfrac" -``` - -## Enabling reservoirs - -```toml -[model] -reservoirs = true - -[input.lateral.river.reservoir] -area = "ResSimpleArea" -areas = "wflow_reservoirareas" -demand = "ResDemand" -locs = "wflow_reservoirlocs" -maxrelease = "ResMaxRelease" -maxvolume = "ResMaxVolume" -targetfullfrac = "ResTargetFullFrac" -targetminfrac = "ResTargetMinFrac" - -[state.lateral.river.reservoir] -volume = "volume_reservoir" -``` - -## Enabling lakes - -```toml -[model] -lakes = true - -[input.lateral.river.lake] -area = "lake_area" -areas = "wflow_lakeareas" -b = "lake_b" -e = "lake_e" -locs = "wflow_lakelocs" -outflowfunc = "lake_outflowfunc" -storfunc = "lake_storfunc" -threshold = "lake_threshold" -waterlevel = "lake_waterlevel" - -[state.lateral.river.lake] -waterlevel = "waterlevel_lake" -``` - -## Enabling Floodplain routing -As part of the local inertial model for river flow. - -```toml -[model] -floodplain_1d = true - -[input.lateral.river.floodplain] -volume = "floodplain_volume" -n = "floodplain_n" - -[state.lateral.river.floodplain] -q = "q_floodplain" -h = "h_floodplain" -``` - -## Enabling water demand and allocation -The model types `sbm` and `sbm_gwf` support water demand and allocation computations, in -combination with the kinematic wave and local inertial runoff routing scheme for river and -overland flow. - -```toml -# example of water demand and allocation input parameters as cyclic data -[input] -cyclic = ["vertical.domestic.demand_gross", "vertical.domestic.demand_net", -"vertical.industry.demand_gross", "vertical.industry.demand_net", -"vertical.livestock.demand_gross", "vertical.livestock.demand_net", -"vertical.paddy.irrigation_trigger", "vertical.nonpaddy.irrigation_trigger",] - -[model.water_demand] -domestic = true # optional, default is "false" -industry = true # optional, default is "false" -livestock = true # optional, default is "false" -paddy = true # optional, default is "false" -nonpaddy = true # optional, default is "false" - -[input.vertical.allocation] -areas = "allocation_areas" -frac_sw_used = "SurfaceWaterFrac" - -[input.vertical.domestic] -demand_gross = "dom_gross" -demand_net = "dom_net" - -[input.vertical.industry] -demand_gross = "ind_gross" -demand_net = "ind_net" - -[input.vertical.livestock] -demand_gross = "lsk_gross" -demand_net = "lsk_net" - -[input.vertical.paddy] -irrigation_areas = "paddy_irrigation_areas" -irrigation_trigger = "irrigation_trigger" - -[input.vertical.nonpaddy] -irrigation_areas = "nonpaddy_irrigation_areas" -irrigation_trigger = "irrigation_trigger" - -# required if paddy is set to "true" -[state.vertical.paddy] -h = "h_paddy" -``` - -## [Using multithreading] (@id multi_threading) - -### Using wflow in Julia - -Wflow supports multi-threading execution of the wflow\_sbm model that uses the kinematic -wave approach for river, overland and lateral subsurface flow. Both the vertical SBM concept -and the kinematic wave components of this model can run on multiple threads. The optional -[local inertial model for river flow](@ref config_sbm_gwf_lie_river_land) and the optional -[local inertial model for river (1D) and land (2D)](@ref config_sbm_gwf_lie_river_land), -both part of wflow\_sbm, can also run on multiple threads. The threading functionality for -the kinematic wave may also be useful for the wflow\_sbm model [SBM + Groundwater flow](@ref -config_sbm_gwf). The multi-threading functionality in wflow is considered experimental, see -also the following [issue](https://github.com/Deltares/Wflow.jl/issues/139), where an error -was not thrown running code multi-threaded. Because of this we advise to start with running -a wflow model single-threaded (for example during the testing phase of setting up an new -wflow model). - -For information on how to start Julia with multiple threads we refer to [How to start Julia -with multiple -threads](https://docs.julialang.org/en/v1/manual/multi-threading/#Starting-Julia-with-multiple-threads). - -Additionally, when running Julia + wflow via the command line (note that this is different -from the `wflow_cli`), it is possible to define the number of threads via the `-t` flag. -An example where we start Julia with three threads: - -``` -julia -t 3 -e 'using Wflow; Wflow.run()' path/to/config.toml -``` - -### [Using the command line interface](@id cli_multi_threading) - -As explained above, we need to start julia with multiple threads to make use of this -speedup. For `wflow_cli`, the only way to do this is by setting the `JULIA_NUM_THREADS` -environment variable, as explained in [these julia -docs](https://docs.julialang.org/en/v1/manual/multi-threading/#Starting-Julia-with-multiple-threads). - -When a model run starts, among the run information the number of threads that are used is -printed, so `nthreads() = 4` means 4 threads are used, because `JULIA_NUM_THREADS` has been -set to 4. - -## Using the Basic Model Interface - -### Introduction -The [Community Surface Dynamics Modeling System](https://csdms.colorado.edu/wiki/Main_Page) -(CSMDS) has developed the Basic Model Interface (BMI). BMI consists of a set of standard -control and query functions that can be added by a developer to the model code and makes a -model both easier to learn and easier to couple with other software elements. - -For more information see also: - -CSDMS provides specifications for the languages C, C++, Fortran and Python. Wflow, written -in the [Julia programming language](https://julialang.org/), makes use of the following -[Julia specification](https://github.com/Deltares/BasicModelInterface.jl), based on BMI 2.0 -version. - -For the BMI implementation of wflow all grids are defined as [unstructured -grids](https://bmi-spec.readthedocs.io/en/latest/model_grids.html#unstructured-grids), -including the special cases `scalar` and `points`. While the input (forcing and model -parameters) is structured (uniform rectilinear), internally wflow works with one dimensional -arrays based on the active grid cells of the 2D model domain. - -### Configuration -The variables that wflow can exchange through BMI are based on the different model -components and these components should be listed under the `API` section of the TOML -configuration file of the model type. Below an example of this `API` section, that lists the -`vertical` component and different `lateral` components: - -```toml -[API] -components = [ - "vertical", - "lateral.subsurface", - "lateral.land", - "lateral.river", - "lateral.river.reservoir" -] -``` - -See also: -```@docs -Wflow.BMI.initialize -Wflow.BMI.get_input_var_names -``` - -Variables with a third dimension, for example `layer` as part of the vertical `SBM` concept, -are exposed as two-dimensional grids through the wflow BMI implementation. For these -variables the index of this third dimension is required, by adding `[k]` to the variable -name (`k` refers to the index of the third dimension). For example, the variable -`vertical.vwc[1]` refers to the first soil layer of the vertical `SBM` concept. - -### Couple to a groundwater model -For the coupling of wflow\_sbm (SBM + kinematic wave) with a groundwater model (e.g. -MODFLOW) it is possible to run: -- wflow\_sbm in parts from the BMI, and -- to switch off the lateral subsurface flow component of wflow\_sbm. - -The lateral subsurface component of wflow\_sbm is not initialized by wflow when the -`[input.lateral.subsurface]` part of the TOML file is not included. Then from the BMI it is -possible to run first the recharge part of SBM: - -```julia -model = BMI.update(model, run="sbm_until_recharge") -``` -and to exchange recharge and for example river waterlevels to the groundwater model. After -the groundwater model update, and the exchange of groundwater head and for example drain and -river flux to wflow\_sbm, the SBM part that mainly determines exfiltration of water from the -unsaturated store, and the kinematic wave for river - and overland flow can be run as -follows: - -```julia -model = BMI.update(model, run="sbm_after_subsurfaceflow") -``` - -See also: -```@docs -Wflow.BMI.update -``` - -## [Run from Delft-FEWS](@id run_fews) - -Wflow integrates easily as part of an operational system by linking to the -[Delft-FEWS](https://oss.deltares.nl/web/delft-fews/) platform. Delft-FEWS integrates data -and models, and is for example used in many active flood forecasting systems around the -world. - -This can be done without a model adapter that provides the interface between Delft-FEWS and -an external model (or module). This is possible because time information in the TOML -configuration file is optional and Delft-FEWS can import and export netCDF files. When time -information is left out from the TOML configuration file, the `starttime`, `endtime` and -`timestepsecs` (timestep) of the run is extracted from the netCDF forcing file by wflow. - -To indicate that a wflow model runs from Delft-FEWS, the following setting needs to be -specified in the main section of the TOML configuration file: - -```toml -fews_run = true # optional, default value is false -``` - -This ensures that wflow offsets the time handling, to meet the expectations of Delft-FEWS. - -It also uses a different format for the log file such that each log message takes up only -one line. That meets the [General Adapter -logFile](https://publicwiki.deltares.nl/display/FEWSDOC/05+General+Adapter+Module#id-05GeneralAdapterModule-logFile) -expectations, which then can get parsed with these Delft-FEWS log parsing settings: - -``` - - log.txt - * [Error] * - * [Warn] * - * [Info] * - * [Debug] * - -``` - -## Run wflow as a ZMQ Server -It is possible to run wflow as a ZMQ Server, for example for the coupling to the -[OpenDA](https://openda.org/) software for data-assimilation. The code for the wflow ZMQ -Server is not part of the Wflow.jl package, and is located -[here](https://github.com/Deltares/Wflow.jl/tree/master/server). diff --git a/docs/src/user_guide/intro.md b/docs/src/user_guide/intro.md deleted file mode 100644 index 4c815f0a8..000000000 --- a/docs/src/user_guide/intro.md +++ /dev/null @@ -1,13 +0,0 @@ -# About the user guide - -The purpose of this user guide is to describe the steps for installing the wflow Julia -software and setting up a simple model. The guide also includes a step-by-step process for -configuring your model using the TOML file (model settings) and the netCDF gridded datasets. - -Sample data and model setup are also provided for the Moselle River Basin (a major tributary -of the Rhine River), which can be used to explore the model software. The guide covers model -setups for the `wflow\_sbm` and `wflow\_sediment` model concepts. - -Finally, the guide offers information on setting up your own model, including building a -model from scratch or alternatively using Deltares -[HydroMT](https://github.com/Deltares/hydromt) model building tools, which are open source. diff --git a/docs/src/user_guide/model-setup.md b/docs/src/user_guide/model-setup.md deleted file mode 100644 index fccb10638..000000000 --- a/docs/src/user_guide/model-setup.md +++ /dev/null @@ -1,124 +0,0 @@ -# Building a model from scratch - -## Data requirements -The actual data requirements depend on the application of the Model and the Model type. Both -forcing and static data should be provided in netCDF format, with the same grid definition -for forcing and static data. The only exception is storage and rating curves for lakes, that -should be provided in CSV format, see also [Additional settings](@ref). - -* Forcing data: - - Precipitation - - Potential evapotranspiration - - Temperature (optional, only needed for snow and glacier modelling) - -The requirements for static data (including model parameters) depend on the Model type. The -following data is required for all Model types, but not directly part of a Model component: - -+ flow direction data (D8) -+ river map (location of the river) -+ sub-catchment map (model domain) - -For the flow direction (D8) data, the PCRaster `ldd` convention is used, see also [PCRaster -ldd](https://pcraster.geo.uu.nl/pcraster/4.3.1/documentation/pcraster_manual/sphinx/secdatbase.html#ldd-data-type). -An approach to generate `ldd` data is to make use of the Python package -[pyflwdir](https://github.com/Deltares/pyflwdir): - -+ to [upscale existing flow direction - data](https://deltares.github.io/pyflwdir/latest/_examples/upscaling.html) as the 3 arcsec MERIT - Hydro data (Yamazaki et al., 2019) -+ or to [derive flow directions from elevation - data](https://deltares.github.io/pyflwdir/latest/_examples/from_dem.html), - -see also Eilander et al. (2021) for more information. -Pyflwdir is also used by the [hydroMT](@ref) Python package described in the next paragraph. -Another approach to generate `ldd` data is to make use of PCRaster functionality, see for -example -[lddcreate](https://pcraster.geo.uu.nl/pcraster/4.3.1/documentation/pcraster_manual/sphinx/op_lddcreate.html). - -Optionally, but also not directly part of a model component are `gauge` locations, that are -used to extract gridded data from certain locations. - -The different supported model configurations are described in the section [Model -configurations](@ref). Wflow\_sbm models have the vertical concept [SBM](@ref vert_sbm) in -common and input parameters for this component are described in the [SBM](@ref params_sbm) -section of Model parameters. For wflow\_sbm models there are two ways to include subsurface -flow: - -1. The kinematic wave approach (see section [Subsurface flow routing](@ref)) as part of the - `sbm` model type. Parameters that are part of this component are described in the - [Lateral subsurface flow](@ref params_ssf) section of Model parameters. Input parameters - for this component are derived from the SBM vertical concept and the land slope. One - external parameter [`ksathorfrac`](@ref params_ssf) is used to calculate the horizontal - hydraulic conductivity at the soil surface `kh_0`. -2. Groundwater flow (see section [Groundwater flow component](@ref lateral_gwf)) as part of - the `sbm_gwf` model type. For the unconfined aquifer the input parameters are described - in the section [Unconfined aquifer](@ref) of Model parameters. The bottom (`bottom`) of - the groundwater layer is derived from from the `soilthickness` [mm] parameter of `SBM` - and the provided surface elevation `altitude` [m] as part of the static input. The `area` - parameter is derived from the model grid. Parameters that are part of the boundary - conditions of the unconfined aquifer are listed under [Constant Head](@ref) and [Boundary - conditions](@ref) of the Model parameters section. - -Most hydrological model configurations make use of the kinematic wave surface routing (river -flow, overland flow or both) and input data required for the river and overland flow -components is described in [Surface flow](@ref). There is also the option to use the local -inertial model as part of the wflow\_sbm models (model types `sbm` and `sbm_gwf`): -+ for river flow, see also the [Local inertial river and floodplain](@ref - config_sbm_gwf_lie_river) model. -+ for 1D river flow and 2D overland flow combined, see also the [Local inertial river (1D) - and land (2D)](@ref config_sbm_gwf_lie_river_land) model. - -Input parameters for this approach are described in [River flow (local inertial)](@ref -local-inertial_river_params), including the optional 1D [floodplain schematization](@ref -local-inertial_floodplain_params), and [Overland flow (local inertial)](@ref -local-inertial_land_params) of the Model parameters section. - -Reservoirs or lakes can be part of the kinematic wave or local inertial model for river flow -and input parameters are described in [Reservoirs](@ref reservoir_params) and [Lakes](@ref -lake_params). - -The [wflow\_sediment](@ref config_sediment) model configuration consists of the vertical -[Soil Erosion](@ref) concept and the input parameters for this concept are described in the -[Sediment](@ref params_sediment) section of the Model parameters. The parameters of the -lateral [Sediment Flux in overland flow](@ref) concept are described in the [Overland -flow](@ref) section of the Model parameters. Parameters of this component are not directly -set by data from static input. The input parameters of the lateral concept [River Sediment -Model](@ref) are listed in [River flow](@ref) of the Model parameters section. - -The Model parameters section lists all the parameters per Model component and these Tables -can also be used to check which parameters can be part of the output, see also [Output -netCDF section](@ref) and [Output CSV section](@ref). - -Example models can be found in the [Example models section](@ref sample_data). - -## hydroMT -[hydroMT](https://github.com/Deltares/hydromt) is a Python package, developed by Deltares, -to build and analyze hydro models. It provides a generic model api with attributes to -access the model schematization, (dynamic) forcing data, results and states. - -For the following wflow\_sbm model (modeltype `sbm`) configurations: - - [wflow\_sbm + kinematic wave routing](@ref config_sbm) - - [wflow\_sbm + local inertial river and floodplain](@ref config_sbm_gwf_lie_river) - - [wflow\_sbm + local inertial river (1D) and land (2D)](@ref config_sbm_gwf_lie_river_land) -and the [wflow\_sediment](@ref config_sediment) model configuration, the wflow plugin -[hydroMT-wflow](https://github.com/Deltares/hydromt_wflow) of hydroMT can be used to build -and analyze these wflow models in an automated way. - -To learn more about the wflow plugin of this Python package, we refer to the [hydroMT-wflow -documentation](https://deltares.github.io/hydromt_wflow/latest/index.html). - -To inspect or modify (for example in QGIS) the netCDF static data of these wflow models it -is convenient to export the maps to a raster format. This can be done as part of the -hydroMT-wflow plugin, see also the following [example] -(https://deltares.github.io/hydromt_wflow/latest/_examples/convert_staticmaps_to_mapstack.html). -It is also possible to create again the netCDF static data file based on the modified raster -map stack. - -## References -+ Yamazaki, D., Ikeshima, D., Sosa, J., Bates, P. D., Allen, G. H. and Pavelsky, T. M.: - MERIT Hydro: A high‐resolution global hydrography map based on latest topography datasets, - Water Resour. Res., 2019WR024873, doi:10.1029/2019WR024873, 2019. -+ Eilander, D., van Verseveld, W., Yamazaki, D., Weerts, A., Winsemius, H. C., and Ward, P. - J.: A hydrography upscaling method for scale-invariant parametrization of distributed - hydrological models, Hydrol. Earth Syst. Sci., 25, 5287–5313, - , 2021. diff --git a/docs/src/user_guide/step1_requirements.md b/docs/src/user_guide/step1_requirements.md deleted file mode 100644 index 9f4cc5535..000000000 --- a/docs/src/user_guide/step1_requirements.md +++ /dev/null @@ -1,34 +0,0 @@ -# Step 1: Understanding the requirements - -To run wflow, several files are required. These include a settings file and input data. The -input data is typically separated into static maps and forcing data, and both are provided -in netCDF files, except for lake storage and rating curves that are supplied via CSV files. -Below is a brief overview of the different files: - - - The `settings.toml` file contains information on the simulation period, links to the - input files (and their names in the netCDF files), and connect the correct variable names - in the netCDF files to the variables and parameters of wflow. - - The `staticmaps.nc` file contains spatial information such as elevation, gauge locations, - land use, and drainage direction, etc. This file can also contain maps with parameter - values. - - The `forcing.nc` file contains time series data for precipitation, temperature and - potential evaporation (as a 3D array). - -Wflow supports several model configurations, each requiring slightly different input, but -with a similar general structure. A wflow model configuration consists of a `vertical` -concept like [SBM](@ref vert_sbm), [HBV](@ref vert_hbv) or [FLEXTOPO](@ref vert_flextopo) in -combination with `lateral` concepts that control how water is routed for example over the -land or river domain. For the wflow\_sbm model, different model configurations are possible. -The following configurations are supported in wflow: - - - wflow\_sbm: - - SBM + kinematic wave for subsurface and surface flow - - SBM + kinematic wave for subsurface and overland flow + local inertial river (+ - optional floodplain) - - SBM + kinematic wave for subsurface flow + local inertial river (1D) and land (2D) - - SBM + groundwater flow + kinematic wave for surface flow - - wflow\_sediment as post processing of wflow\_sbm output - -In the following pages, some examples will be given on how to prepare a basic wflow\_sbm -model. Sample data for other model configurations is provided in the [sample data](@ref -sample_data) section. \ No newline at end of file diff --git a/docs/src/user_guide/step3_input_data.md b/docs/src/user_guide/step3_input_data.md deleted file mode 100644 index e76d255a1..000000000 --- a/docs/src/user_guide/step3_input_data.md +++ /dev/null @@ -1,127 +0,0 @@ -# Step 3: Preparing the input data - -As mentioned before, the input data can be classified into two types: - - - Meteorological forcing: maps with timeseries for each model pixel, with values for - precipitation, temperature, and potential evaporation. This data should be provided as a - three-dimensional dataset, with the `x`, `y` and `time` dimensions. - - Static maps. - - -## Meteorological data - -Meteorological data is provided as a single netCDF file, with several variables containing -the forcing data for precipitation, temperature and potential evaporation. The code snippet -below shows the contents of the example file (downloaded [here](@ref wflow_sbm_data)), and -displaying the content with `NCDatasets` in Julia. As can be seen, each forcing variable -(`precip`, `pet` and `temp`) consists of a three-dimensional dataset (`x`, `y`, and `time`), -and each timestep consists of a two-dimensional map with values at each gridcell. Only -values within the basin are required. - -``` -Group: / - -Dimensions - time = 366 - y = 313 - x = 291 - -Variables - time (366) - Datatype: Int64 - Dimensions: time - Attributes: - units = days since 2000-01-02 00:00:00 - calendar = proleptic_gregorian - - y (313) - Datatype: Float64 - Dimensions: y - Attributes: - _FillValue = NaN - - x (291) - Datatype: Float64 - Dimensions: x - Attributes: - _FillValue = NaN - - spatial_ref - Attributes: - crs_wkt = GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]] - x_dim = x - y_dim = y - dim0 = time - - precip (291 × 313 × 366) - Datatype: Float32 - Dimensions: x × y × time - Attributes: - _FillValue = NaN - unit = mm - precip_fn = era5 - coordinates = idx_out spatial_ref mask - - idx_out (291 × 313) - Datatype: Int32 - Dimensions: x × y - - mask (291 × 313) - Datatype: UInt8 - Dimensions: x × y - - pet (291 × 313 × 366) - Datatype: Float32 - Dimensions: x × y × time - Attributes: - _FillValue = NaN - unit = mm - pet_fn = era5 - pet_method = debruin - coordinates = idx_out spatial_ref mask - - temp (291 × 313 × 366) - Datatype: Float32 - Dimensions: x × y × time - Attributes: - _FillValue = NaN - unit = degree C. - temp_fn = era5 - temp_correction = True - coordinates = idx_out spatial_ref mask - -Global attributes - unit = mm - precip_fn = era5 -``` - -!!! note - Wflow expects right labeling of the forcing time interval, e.g. daily precipitation - at 01-02-2000 00:00:00 is the accumulated total precipitation between 01-01-2000 - 00:00:00 and 01-02-2000 00:00:00. - - -## Static data - - -### List of essential static data - -The list below contains a brief overview of several essential static maps required to run -wflow. These NC variables names refer to the example data of the wflow\_sbm + kinematic wave -model (see [here](@ref wflow_sbm_data)). Example data for the other model configurations can -be found [here](@ref sample_data). - -Description | NC variable name | unit ---- | --- | --- -Flow direction (1-9) | `wflow_ldd` | - -Map indicating the river cells (0-1) | `wflow_river` | - -The length of the river | `wflow_riverlength` | m -The width of the river | `wflow_riverwidth` | m -Mask of the basin | `wflow_subcatch` | - -Land slope | `Slope` | m m$^{-1}$ -River slope | `RiverSlope` | m m$^{-1}$ - -As mentioned before, the model parameters can also be defined as spatial maps. They can be -included in the same netCDF file, as long as their variable names are correctly mapped in -the TOML settings file. See the section on [example models](@ref sample_data) on how to -use this functionality. diff --git a/docs/user_guide/bmi.qmd b/docs/user_guide/bmi.qmd new file mode 100644 index 000000000..e38a3ff4b --- /dev/null +++ b/docs/user_guide/bmi.qmd @@ -0,0 +1,77 @@ +--- +title: Basic Model Interface (BMI) +--- + +## Introduction +The [Community Surface Dynamics Modeling System](https://csdms.colorado.edu/wiki/Main_Page) +(CSMDS) has developed the Basic Model Interface (BMI). BMI consists of a set of standard +control and query functions that can be added by a developer to the model code and makes a +model both easier to learn and easier to couple with other software elements. + +For more information see also: + +CSDMS provides specifications for the languages C, C++, Fortran and Python. Wflow, written in +the [Julia programming language](https://julialang.org/), makes use of the following [Julia +specification](https://github.com/Deltares/BasicModelInterface.jl), based on BMI 2.0 version. + +For the BMI implementation of wflow all grids are defined as [unstructured +grids](https://bmi-spec.readthedocs.io/en/latest/model_grids.html#unstructured-grids), +including the special cases `scalar` and `points`. While the input (forcing and model +parameters) is structured (uniform rectilinear), internally wflow works with one dimensional +arrays based on the active grid cells of the 2D model domain. + +## Configuration +The variables that wflow can exchange through BMI are based on the different model components +and these components should be listed under the `API` section of the TOML configuration file of +the model type. Below an example of this `API` section, that lists the `vertical` component and +different `lateral` components: + +```toml +[API] +components = [ + "vertical", + "lateral.subsurface", + "lateral.land", + "lateral.river", + "lateral.river.reservoir" +] +``` + +See also: +```@docs +Wflow.BMI.initialize +Wflow.BMI.get_input_var_names +``` + +Variables with a third dimension, for example `layer` as part of the vertical `SBM` concept, +are exposed as two-dimensional grids through the wflow BMI implementation. For these variables +the index of this third dimension is required, by adding `[k]` to the variable name (`k` refers +to the index of the third dimension). For example, the variable `vertical.vwc[1]` refers to the +first soil layer of the vertical `SBM` concept. + +## Couple to a groundwater model +For the coupling of wflow\_sbm (SBM + kinematic wave) with a groundwater model (e.g. MODFLOW) +it is possible to run: +- wflow\_sbm in parts from the BMI, and +- to switch off the lateral subsurface flow component of wflow\_sbm. + +The lateral subsurface component of wflow\_sbm is not initialized by wflow when the +`[input.lateral.subsurface]` part of the TOML file is not included. Then from the BMI it is +possible to run first the recharge part of SBM: + +```julia +model = BMI.update(model, run="sbm_until_recharge") +``` +and to exchange recharge and for example river waterlevels to the groundwater model. After the +groundwater model update, and the exchange of groundwater head and for example drain and river +flux to wflow\_sbm, the SBM part that mainly determines exfiltration of water from the +unsaturated store, and the kinematic wave for river - and overland flow can be run as follows: + +```julia +model = BMI.update(model, run="sbm_after_subsurfaceflow") +``` + +See also: +```@docs +Wflow.BMI.update +``` \ No newline at end of file diff --git a/docs/user_guide/faq.qmd b/docs/user_guide/faq.qmd new file mode 100644 index 000000000..cd19f0a3f --- /dev/null +++ b/docs/user_guide/faq.qmd @@ -0,0 +1,28 @@ +--- +title: Frequently asked questions +--- + +### How do I easily modify input parameters? + +See [this section](./toml_file.qmd#modify-parameters) on how to adjust maps, and [this +section](./toml_file.qmd#fixed-forcing-values) on how to directly pass uniform values. Note +that both options work for any parameter. + +### How do I start wflow with initial conditions from a previous run?{#sec-modify-pars} + +See [here](./toml_file.qmd#state-options) + +### How do I add external inflows and/or abstractions? + +`lateral.river.inflow`: positive for inflows, negative for abstraction. If parameter is time +varying, add it to the correct section, see [below](#how-do-i-add-time-varying-parameters). + +### How do I add time-varying parameters? + +Either through cyclic (add parameter to `cyclic` list in the toml), or to the forcing section. + +### How do I add different output? + +See [here for csv output](./toml_file.qmd#output-csv-section), [here for scalar netcdf +data](./toml_file.qmd#scalar-data), and [here for gridded +output](./toml_file.qmd#output-netcdf-section). \ No newline at end of file diff --git a/docs/user_guide/fews.qmd b/docs/user_guide/fews.qmd new file mode 100644 index 000000000..f0c742218 --- /dev/null +++ b/docs/user_guide/fews.qmd @@ -0,0 +1,38 @@ +--- +title: Run from Delft-FEWS +--- + +Wflow integrates easily as part of an operational system by linking to the +[Delft-FEWS](https://oss.deltares.nl/web/delft-fews/) platform. Delft-FEWS integrates data and +models, and is for example used in many active flood forecasting systems around the world. + +This can be done without a model adapter that provides the interface between Delft-FEWS and an +external model (or module). This is possible because time information in the TOML configuration +file is optional and Delft-FEWS can import and export netCDF files. When time information is +left out from the TOML configuration file, the `starttime`, `endtime` and `timestepsecs` +(timestep) of the run is extracted from the netCDF forcing file by wflow. + +To indicate that a wflow model runs from Delft-FEWS, the following setting needs to be +specified in the main section of the TOML configuration file: + +```toml +fews_run = true # optional, default value is false +``` + +This ensures that wflow offsets the time handling, to meet the expectations of Delft-FEWS. + +It also uses a different format for the log file such that each log message takes up only one +line. That meets the [General Adapter +logFile](https://publicwiki.deltares.nl/display/FEWSDOC/05+General+Adapter+Module#id-05GeneralAdapterModule-logFile) +expectations, which then can get parsed with these Delft-FEWS log parsing settings: + +```xml + + log.txt + * [Error] * + * [Warn] * + * [Info] * + * [Debug] * + +``` + diff --git a/docs/user_guide/index.qmd b/docs/user_guide/index.qmd new file mode 100644 index 000000000..e2d857f4e --- /dev/null +++ b/docs/user_guide/index.qmd @@ -0,0 +1,31 @@ +--- +title: "User guide" +--- + +Use the buttons below to quickly navigate to the most visited pages. Note that more pages are +available in the sidebar. + +::: column-page-inset-right +{{< include /_static/listing_code.html >}} +```{=html} + + + +``` +::: \ No newline at end of file diff --git a/docs/user_guide/model_config.qmd b/docs/user_guide/model_config.qmd new file mode 100644 index 000000000..bb716a1cf --- /dev/null +++ b/docs/user_guide/model_config.qmd @@ -0,0 +1,155 @@ +--- +title: Different model configurations +--- + +## Enabling snow and glacier processes + +```toml +[model] +snow = true +masswasting = true +glacier = true + +[input.vertical] +tt = "TT" +tti = "TTI" +ttm = "TTM" +water_holding_capacity = "WHC" +glacierstore = "wflow_glacierstore" +glacierfrac = "wflow_glacierfrac" +g_cfmax = "G_Cfmax" +g_tt = "G_TT" +g_sifrac = "G_SIfrac" + +[state.vertical] +snow = "snow" +tsoil = "tsoil" +snowwater = "snowwater" +glacierstorage = "glacierstorage" +``` + +## Enabling reservoirs + +```toml +[model] +reservoirs = true + +[input.lateral.river.reservoir] +area = "ResSimpleArea" +areas = "wflow_reservoirareas" +demand = "ResDemand" +locs = "wflow_reservoirlocs" +maxrelease = "ResMaxRelease" +maxvolume = "ResMaxVolume" +targetfullfrac = "ResTargetFullFrac" +targetminfrac = "ResTargetMinFrac" + +[state.lateral.river.reservoir] +volume = "volume_reservoir" +``` + +## Enabling lakes + +```toml +[model] +lakes = true + +[input.lateral.river.lake] +area = "lake_area" +areas = "wflow_lakeareas" +b = "lake_b" +e = "lake_e" +locs = "wflow_lakelocs" +outflowfunc = "lake_outflowfunc" +storfunc = "lake_storfunc" +threshold = "lake_threshold" +waterlevel = "lake_waterlevel" + +[state.lateral.river.lake] +waterlevel = "waterlevel_lake" +``` + +## Enabling floodplain routing +As part of the local inertial model for river flow. + +### 1D floodplains + +```toml +[model] +floodplain_1d = true + +[input.lateral.river.floodplain] +volume = "floodplain_volume" +n = "floodplain_n" + +[state.lateral.river.floodplain] +q = "q_floodplain" +h = "h_floodplain" +``` + +### 2D floodplains + +```toml +[model] +land_routing = "local-inertial" + +[input.lateral.river] +bankfull_elevation = "hydrodem_avg_D4" + +[input.lateral.land] +elevation = "hydrodem_avg_D4" + +[state.lateral.land] +qx = "qx_land" +qy = "qy_land" + +``` + +## Enabling water demand and allocation +The model types `sbm` and `sbm_gwf` support water demand and allocation computations, in +combination with the kinematic wave and local inertial runoff routing scheme for river and +overland flow. + +```toml +# example of water demand and allocation input parameters as cyclic data +[input] +cyclic = ["vertical.domestic.demand_gross", "vertical.domestic.demand_net", +"vertical.industry.demand_gross", "vertical.industry.demand_net", +"vertical.livestock.demand_gross", "vertical.livestock.demand_net", +"vertical.paddy.irrigation_trigger", "vertical.nonpaddy.irrigation_trigger",] + +[model.water_demand] +domestic = true # optional, default is "false" +industry = true # optional, default is "false" +livestock = true # optional, default is "false" +paddy = true # optional, default is "false" +nonpaddy = true # optional, default is "false" + +[input.vertical.allocation] +areas = "allocation_areas" +frac_sw_used = "SurfaceWaterFrac" + +[input.vertical.domestic] +demand_gross = "dom_gross" +demand_net = "dom_net" + +[input.vertical.industry] +demand_gross = "ind_gross" +demand_net = "ind_net" + +[input.vertical.livestock] +demand_gross = "lsk_gross" +demand_net = "lsk_net" + +[input.vertical.paddy] +irrigation_areas = "paddy_irrigation_areas" +irrigation_trigger = "irrigation_trigger" + +[input.vertical.nonpaddy] +irrigation_areas = "nonpaddy_irrigation_areas" +irrigation_trigger = "irrigation_trigger" + +# required if paddy is set to "true" +[state.vertical.paddy] +h = "h_paddy" +``` \ No newline at end of file diff --git a/docs/user_guide/multi_threading.qmd b/docs/user_guide/multi_threading.qmd new file mode 100644 index 000000000..99933b6fc --- /dev/null +++ b/docs/user_guide/multi_threading.qmd @@ -0,0 +1,43 @@ +--- +title: Multithreading +--- + +## Using wflow in Julia + +Wflow supports multi-threading execution of the wflow\_sbm model that uses the kinematic wave +approach for river, overland and lateral subsurface flow. Both the vertical SBM concept and the +kinematic wave components of this model can run on multiple threads. The optional [local +inertial model for river +flow](../model_docs/model_configurations.qmd#sbm--local-inertial-river-1d-and-land-2d) and the +optional [local inertial model for river (1D) and land +(2D)](../model_docs/model_configurations.qmd#sbm--local-inertial-river-1d-and-land-2d), both +part of wflow\_sbm, can also run on multiple threads. The threading functionality for the +kinematic wave may also be useful for the wflow\_sbm model [SBM + Groundwater +flow](../model_docs/model_configurations.qmd#sbm--groundwater-flow). The multi-threading +functionality in wflow is considered experimental, see also the following +[issue](https://github.com/Deltares/Wflow.jl/issues/139), where an error was not thrown running +code multi-threaded. Because of this we advise to start with running a wflow model +single-threaded (for example during the testing phase of setting up an new wflow model). + +For information on how to start Julia with multiple threads we refer to [How to start Julia +with multiple +threads](https://docs.julialang.org/en/v1/manual/multi-threading/#Starting-Julia-with-multiple-threads). + +Additionally, when running Julia + wflow via the command line (note that this is different from +the `wflow_cli`), it is possible to define the number of threads via the `-t` flag. An example +where we start Julia with three threads: + +```bash +julia -t 3 -e 'using Wflow; Wflow.run()' path/to/config.toml +``` + +## Using the command line interface + +As explained above, we need to start julia with multiple threads to make use of this speedup. +For `wflow_cli`, the only way to do this is by setting the `JULIA_NUM_THREADS` environment +variable, as explained in [these julia +docs](https://docs.julialang.org/en/v1/manual/multi-threading/#Starting-Julia-with-multiple-threads). + +When a model run starts, among the run information the number of threads that are used is +printed, so `nthreads() = 4` means 4 threads are used, because `JULIA_NUM_THREADS` has been set +to 4. \ No newline at end of file diff --git a/docs/src/user_guide/step5_output.md b/docs/user_guide/output.qmd similarity index 88% rename from docs/src/user_guide/step5_output.md rename to docs/user_guide/output.qmd index 152375e13..0c08b34cb 100644 --- a/docs/src/user_guide/step5_output.md +++ b/docs/user_guide/output.qmd @@ -1,10 +1,12 @@ -# Step 5: Analyzing the model output +--- +title: Handling model output +--- After running the model example from the previous step 4, the model results can be found in `data/output_moselle_simple.csv`. -If required, it is also possible to output netCDF files as output, by modifying the TOML -file. An example is shown below: +If required, it is also possible to output netCDF files as output, by modifying the TOML file. +An example is shown below: ```toml # Spatial output diff --git a/docs/user_guide/required_files.qmd b/docs/user_guide/required_files.qmd new file mode 100644 index 000000000..7ca047598 --- /dev/null +++ b/docs/user_guide/required_files.qmd @@ -0,0 +1,173 @@ +--- +title: Required files +--- + +To run wflow, several files are required. These include a settings file and input data. The +input data is typically separated into static maps and forcing data, and both are provided in +netCDF files, except for lake storage and rating curves that are supplied via CSV files. Below +is a brief overview of the different files: + + - The `settings.toml` file contains information on the simulation period, links to the input + files (and their names in the netCDF files), and connect the correct variable names in the + netCDF files to the variables and parameters of wflow. + - The `staticmaps.nc` file contains spatial information such as elevation, gauge locations, + land use, and drainage direction, etc. This file can also contain maps with parameter + values. + - The `forcing.nc` file contains time series data for precipitation, temperature and + potential evaporation (as a 3D array). + + +## The configuration file (`settings.toml`) + +The configuration file contains all relevant settings for running wflow, such as the simulation +period, the model settings, the mapping between input files and (internal) model parameters. +More details and explanations can be found [here](./toml_file.qmd). An example configuration +file is presented below. + +
+ Click to show example .toml file + ```toml + {{< include ../../test/sbm_simple.toml >}} + ``` +
+ + +## The static input data (`staticmaps.nc`) + +The list below contains a brief overview of several essential static maps required to run +wflow. These NC variables names refer to the example data of the wflow\_sbm + kinematic wave +model (see [here](../getting_started/download_example_models.qmd#wflow_sbm--kinematic-wave)). +Example data for the other model configurations can be found +[here](../getting_started/download_example_models.qmd). + +Description | NC variable name | unit +--- | --- | --- +Flow direction (1-9) | `wflow_ldd` | - +Map indicating the river cells (0-1) | `wflow_river` | - +The length of the river | `wflow_riverlength` | m +The width of the river | `wflow_riverwidth` | m +Mask of the basin | `wflow_subcatch` | - +Land slope | `Slope` | m m$^{-1}$ +River slope | `RiverSlope` | m m$^{-1}$ + +As mentioned before, the model parameters can also be defined as spatial maps. They can be +included in the same netCDF file, as long as their variable names are correctly mapped in the +TOML settings file. See the section on [example +models](../getting_started/download_example_models.qmd) on how to use this functionality. + +::: callout-important +When using cyclic data, three different options are supported: +- 12 (monthly) +- 365 (daily, where Feb. 29 is not present, so the value for Feb. 28 is taken. Dec. 31 is represented by DOY 365) +- 366 (where Feb. 29 represents DOY 60, and Dec. 31 DOY 366) + +In contrast to the right-labelling of the forcing data (see below), the DOY/month of the +current time step is used. For example: to simulate 2023-06-14 00:00:00 (with a daily time +step), the DOY value at position 6 (when 12 values are provided), 165 (when 365 values are +provided) or 166 (when 366 values are provided). +::: + +## The forcing data (`forcing.nc`) + +The forcing data typically contains the meteorological boundary conditions. This data is +provided as a single netCDF file, with several variables containing the forcing data for +precipitation, temperature and potential evaporation. The code snippet below shows the contents +of the example file (downloaded +[here](../getting_started/download_example_models.qmd#wflow_sbm--kinematic-wave)), and +displaying the content with `NCDatasets` in Julia. As can be seen, each forcing variable +(`precip`, `pet` and `temp`) consists of a three-dimensional dataset (`x`, `y`, and `time`), +and each timestep consists of a two-dimensional map with values at each grid cell. Only values +within the basin are required. + +::: callout-important +Wflow expects the forcing to be "right-labelled". This means that e.g. daily precipitation at +2023-06-15 00:00:00 is the accumulated total precipitation between 2023-06-14 00:00:00 and +2023-06-15 00:00:00. +::: + +::: callout-note +For optimal computational performance, it is recommended to have chunks in the time dimension. +This way, only part of the forcing file needs to be read and kept in memory. We recommend using +a chunk size in the time dimension with size 1. Using larger chunks can largely degrade +computational performance. +::: + +
+ Click to show example forcing.nc file +```bash +Group: / + +Dimensions + time = 366 + y = 313 + x = 291 + +Variables + time (366) + Datatype: Int64 + Dimensions: time + Attributes: + units = days since 2000-01-02 00:00:00 + calendar = proleptic_gregorian + + y (313) + Datatype: Float64 + Dimensions: y + Attributes: + _FillValue = NaN + + x (291) + Datatype: Float64 + Dimensions: x + Attributes: + _FillValue = NaN + + spatial_ref + Attributes: + crs_wkt = GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AXIS["Latitude",NORTH],AXIS["Longitude",EAST],AUTHORITY["EPSG","4326"]] + x_dim = x + y_dim = y + dim0 = time + + precip (291 × 313 × 366) + Datatype: Float32 + Dimensions: x × y × time + Attributes: + _FillValue = NaN + unit = mm + precip_fn = era5 + coordinates = idx_out spatial_ref mask + + idx_out (291 × 313) + Datatype: Int32 + Dimensions: x × y + + mask (291 × 313) + Datatype: UInt8 + Dimensions: x × y + + pet (291 × 313 × 366) + Datatype: Float32 + Dimensions: x × y × time + Attributes: + _FillValue = NaN + unit = mm + pet_fn = era5 + pet_method = debruin + coordinates = idx_out spatial_ref mask + + temp (291 × 313 × 366) + Datatype: Float32 + Dimensions: x × y × time + Attributes: + _FillValue = NaN + unit = degree C. + temp_fn = era5 + temp_correction = True + coordinates = idx_out spatial_ref mask + +Global attributes + unit = mm + precip_fn = era5 +``` +
\ No newline at end of file diff --git a/docs/src/user_guide/step2_settings_file.md b/docs/user_guide/toml_file.qmd similarity index 61% rename from docs/src/user_guide/step2_settings_file.md rename to docs/user_guide/toml_file.qmd index 649e88486..d67f46b7a 100644 --- a/docs/src/user_guide/step2_settings_file.md +++ b/docs/user_guide/toml_file.qmd @@ -1,24 +1,27 @@ -# [Step 2: Preparing the settings file](@id config_toml) -A settings file is essential for wflow, as it contains information about the model -configuration, simulation period, input files, and parameters. The settings are provided in -a TOML file. The settings file is structured in several sections, which are explained below. -The file paths provided in this file are relative to the location of the TOML file, or to -`dir_input` and `dir_output` if they are specified. +--- +title: Simulation settings +--- + +All model configuration and settings are passed through the .toml file, which contains all +relevant settings, information about the model configuration, simulation period, input files, +and parameters. The settings are provided in a TOML file. The settings file is structured in +several sections, which are explained below. The file paths provided in this file are relative +to the location of the TOML file, or to `dir_input` and `dir_output` if they are specified. ## General time info -Time information is optional. When omitted, wflow will perform computations for each -timestamp in the forcing netCDF file, except for the first forcing timestamp, which is -considered equal to the initial conditions of the wflow model (state time). If you wish to -calculate a subset of this time range, or a different timestep, you can specify a -`starttime`, `endtime` and `timestepsecs`. The `starttime` is defined as the model state -time. In the TOML file settings below, the `starttime` is 2000-01-01T00:00:00 (state time) -and the first update (and output) of the wflow model is at 2000-01-02T00:00:00. The -`time_units` optional information is used by the `writer` of the model, for model output in -netCDF format. The `calendar` option allows you to calculate in one of the different [CF -conventions calendars](http://cfconventions.org/cf-conventions/cf-conventions.html#calendar) -provided by the [CFTime.jl package](https://juliageo.org/CFTime.jl/latest/), such as -`"360_day"`. This is useful if you want to calculate climate scenarios which are sometimes -provided in these alternative calendars. +Time information is optional. When omitted, wflow will perform computations for each timestamp +in the forcing netCDF file, except for the first forcing timestamp, which is considered equal +to the initial conditions of the wflow model (state time). If you wish to calculate a subset of +this time range, or a different timestep, you can specify a `starttime`, `endtime` and +`timestepsecs`. The `starttime` is defined as the model state time. In the TOML file settings +below, the `starttime` is 2000-01-01T00:00:00 (state time) and the first update (and output) of +the wflow model is at 2000-01-02T00:00:00. The `time_units` optional information is used by the +`writer` of the model, for model output in netCDF format. The `calendar` option allows you to +calculate in one of the different [CF conventions +calendars](http://cfconventions.org/cf-conventions/cf-conventions.html#calendar) provided by +the [CFTime.jl package](https://juliageo.org/CFTime.jl/latest/), such as `"360_day"`. This is +useful if you want to calculate climate scenarios which are sometimes provided in these +alternative calendars. ```toml calendar = "standard" # optional, this is the default value @@ -30,12 +33,12 @@ dir_input = "data/input" # optional, default is the path dir_output = "data/output" # optional, default is the path of the TOML ``` -## [Logging](@id logging_toml) -Wflow prints logging messages at various levels such as debug, info, and error. These -messages are sent to both the terminal and a log file. Note that logging to a file is only -part of the `Wflow.run(tomlpath::AbstractString)` method. If you want to debug an issue, it -can be helpful to set `loglevel = "debug"` in the TOML. To avoid flooding the screen, debug -messages are only sent to the log file. The following settings will affect the logging: +## Logging +Wflow prints logging messages at various levels such as debug, info, and error. These messages +are sent to both the terminal and a log file. Note that logging to a file is only part of the +`Wflow.run(tomlpath::AbstractString)` method. If you want to debug an issue, it can be helpful +to set `loglevel = "debug"` in the TOML. To avoid flooding the screen, debug messages are only +sent to the log file. The following settings will affect the logging: ```toml silent = false # optional, default is "false" @@ -44,13 +47,13 @@ path_log = "log.txt" # optional, default is "log.txt" fews_run = false # optional, default value is false ``` -`silent` avoids logging to the terminal, and only writes to the log file. `loglevel` -controls which levels are filtered out; for instance, the default setting `"info"` does not -print any debug-level messages. Note that for finer control, you can also pass an integer -log level. For details, see Julia's -[Logging](https://docs.julialang.org/en/v1/stdlib/Logging/#Log-event-structure) -documentation. `path_log` sets the desired output path for the log file. For information on -`fews_run`, see [Run from Delft-FEWS](@ref run_fews). +`silent` avoids logging to the terminal, and only writes to the log file. `loglevel` controls +which levels are filtered out; for instance, the default setting `"info"` does not print any +debug-level messages. Note that for finer control, you can also pass an integer log level. For +details, see Julia's +[Logging](https://docs.julialang.org/en/v1/stdlib/Logging/#Log-event-structure) documentation. +`path_log` sets the desired output path for the log file. For information on `fews_run`, see +[Run from Delft-FEWS](./fews.qmd). ## Model section Model-specific settings can be included in the model section of the TOML file. @@ -66,17 +69,16 @@ kin_wave_iteration = false # enable kinematic wave iterations in the mo thicknesslayers = [100, 300, 800] # specific SBM setting: for each soil layer, a thickness [mm] is specified min_streamorder_river = 5 # minimum stream order to delineate subbasins for river domain, default is 6 (for multi-threading computing purposes) min_streamorder_land = 4 # minimum stream order to delineate subbasins for land domain, default is 5 (for multi-threading computing purposes) - ``` ## State options The `state` section in the TOML file provides information about the location of input and -output states of the model. This section is mostly relevant if the model needs to start with -a "warm" state (i.e. based on the results of a previous simulation). The example below shows -how to save the output states of the current simulation, so it can be used to initialize -another model in the future. Details on the settings required to start a model with a warm -state can be found in the [additional model options](@ref reinit). If it is not required to -store the outstates of the current simulation, the entire `state` section can be removed. +output states of the model. This section is mostly relevant if the model needs to start with a +"warm" state (i.e. based on the results of a previous simulation). The example below shows how +to save the output states of the current simulation, so it can be used to initialize another +model in the future. Details on the settings required to start a model with a warm state can be +found in the [additional model options](./warm_states.qmd). If it is not required to store the +outstates of the current simulation, the entire `state` section can be removed. ```toml [state] @@ -110,16 +112,15 @@ h_av = "h_av_land" ## Input section The `input` section of the TOML file contains information about the input forcing and model -parameters files (in netCDF format). Forcing is applied to the vertical component of the -model, and needs to be mapped to the external netCDF variable name. `forcing` lists the -internal model forcing parameters, and these are mapped to the external netCDF variables -listed under the section `[input.vertical]`. It is possible to provide cyclic parameters to -the model (minimum time step of 1 day). In the example below, the internal -`vertical.leaf_area_index` model parameter is mapped to the external netCDF variable "LAI" -variable. Cyclic time inputs of parameters can be different (e.g., daily or monthly). The -`time` dimension name of these cylic input parameters in the model parameter netCDF file -should start with "time". If a model parameter is not mapped, a default value will be used, -if available. +parameters files (in netCDF format). Forcing is applied to the vertical component of the model, +and needs to be mapped to the external netCDF variable name. `forcing` lists the internal model +forcing parameters, and these are mapped to the external netCDF variables listed under the +section `[input.vertical]`. It is possible to provide cyclic parameters to the model (minimum +time step of 1 day). In the example below, the internal `vertical.leaf_area_index` model +parameter is mapped to the external netCDF variable "LAI" variable. Cyclic time inputs of +parameters can be different (e.g., daily or monthly). The `time` dimension name of these cylic +input parameters in the model parameter netCDF file should start with "time". If a model +parameter is not mapped, a default value will be used, if available. ```toml [input] @@ -234,22 +235,24 @@ h = "h_land" ### Scalar data In addition to gridded data, scalar data can also be written to a netCDF file. Below is an -example that shows how to write scalar data to the file "output\_scalar\_moselle.nc". For -each netCDF variable, a `name` (external variable name) and a `parameter` (internal model -parameter) are required. A `reducer` can be specified to apply to the model output. See more -details in the [Output CSV section](@ref) section. If a `map` is provided to extract data +example that shows how to write scalar data to the file "output\_scalar\_moselle.nc". For each +netCDF variable, a `name` (external variable name) and a `parameter` (internal model parameter) +are required. A `reducer` can be specified to apply to the model output. See more details in +the [Output CSV section](#output-csv-section) section. If a `map` is provided to extract data for specific locations (e.g. `gauges`) or areas (e.g. `subcatchment`), the netCDF location names are extracted from these maps. For a specific location (grid cell) a `location` is -required. For layered model parameters and variables that have an extra `layer` dimension -and are part of the vertical `sbm` concept, an internal layer index can be specified (an -example is provided below). If multiple layers are desired, this can be specified in -separate `[[netcdf.variable]]` entries. Note that the additional dimension should be -specified when wflow is integrated with Delft-FEWS, for netCDF scalar data an extra -dimension is not allowed by the `importNetcdfActivity` of the Delft-FEWS General Adapter. In -the section [Output CSV section](@ref), similar functionality is available for CSV. For -integration with Delft-FEWS, it is recommended to write scalar data to netCDF format, as the -General Adapter of Delft-FEWS can directly ingest data from netCDF files. For more -information, see [Run from Delft-FEWS](@ref run_fews). +required. For layered model parameters and variables that have an extra `layer` dimension and +are part of the vertical `sbm` concept, an internal layer index can be specified (an example is +provided below). Similarly, for model parameters and variables that have an extra dimension +`classes` and are part of the vertical `FLEXTopo` concept, the class name can be specified. If +multiple layers or classes are desired, this can be specified in separate `[[netcdf.variable]]` +entries. Note that the additional dimension should be specified when wflow is integrated with +Delft-FEWS, for netCDF scalar data an extra dimension is not allowed by the +`importNetcdfActivity` of the Delft-FEWS General Adapter. In the section [Output CSV +section](#output-csv-section), similar functionality is available for CSV. For integration with +Delft-FEWS, it is recommended to write scalar data to netCDF format, as the General Adapter of +Delft-FEWS can directly ingest data from netCDF files. For more information, see [Run from +Delft-FEWS](./fews.qmd). ```toml [netcdf] @@ -277,10 +280,10 @@ parameter = "vertical.temperature" ``` ## Output CSV section -Model output can also be written to a CSV file. Below is an example that writes model output -to the file "output_moselle.csv". For each CSV column, a `header` and `parameter` (internal -model parameter) are required. A `reducer` can be specified to apply to the model output, -with the following available reducers: +Model output can also be written to a CSV file. Below is an example that writes model output to +the file "output_moselle.csv". For each CSV column, a `header` and `parameter` (internal model +parameter) are required. A `reducer` can be specified to apply to the model output, with the +following available reducers: + maximum + minimum @@ -291,16 +294,17 @@ with the following available reducers: + last + only -with `only` as the default. To extract data for a specific location (grid cell), the `index` -of the vector, the coordinates `coordinate.x` and `coordinate.y`, or the x and y indices of -the 2D array (`index.x` and `index.y`) can be provided. Additionally, a `map` can be -provided to extract data for certain locations (e.g. `gauges`) or areas (e.g. -`subcatchment`). In this case, a single entry can lead to multiple columns in the CSV file, -which will be of the form `header_id`, e.g. `Q_20`, for a gauge with integer ID 20. For -layered model parameters and variables that have an extra dimension `layer` and are part of -the vertical `sbm` concept an internal layer index (see also example below) should be -specified. If multiple layers or classes are desired, this can be specified in separate -`[[csv.column]]` entries. +with `only` as the default. To extract data for a specific location (grid cell), the `index` of +the vector, the coordinates `coordinate.x` and `coordinate.y`, or the x and y indices of the 2D +array (`index.x` and `index.y`) can be provided. Additionally, a `map` can be provided to +extract data for certain locations (e.g. `gauges`) or areas (e.g. `subcatchment`). In this +case, a single entry can lead to multiple columns in the CSV file, which will be of the form +`header_id`, e.g. `Q_20`, for a gauge with integer ID 20. For layered model parameters and +variables that have an extra dimension `layer` and are part of the vertical `sbm` concept an +internal layer index (see also example below) should be specified. For model parameters and +variables that have an extra dimension `classes` and are part of the vertical `FLEXTopo` +concept, it is possible to specify the class name. If multiple layers or classes are desired, +this can be specified in separate `[[csv.column]]` entries. The double brackets in `[[csv.column]]` follow TOML syntax, indicating that it is part of a list. You can specify as many entries as you want. @@ -367,8 +371,8 @@ waterfrac = "WaterFrac" cfmax.value = 2.5 ``` -For input parameters with an extra dimension (e.g. `layer` or `classes`), one uniform value -can be provided or a list of values that matches the length of the additional dimension. For +For input parameters with an extra dimension (e.g. `layer` or `classes`), one uniform value can +be provided or a list of values that matches the length of the additional dimension. For example, a list of values can be provided for input parameter `c` as follows: ```toml @@ -378,8 +382,8 @@ waterfrac = "WaterFrac" c.value = [10.5, 11.25, 9.5, 7.0] ``` -To change the forcing variable `precipitation` with a `scale` factor of 1.5 and -an `offset` of 0.5: +To change the forcing variable `precipitation` with a `scale` factor of 1.5 and an `offset` of +0.5: ```toml [input.vertical.precipitation] @@ -389,9 +393,9 @@ offset = 0.5 ``` For input parameters with an extra dimension, it is also possible to modify multiple indices -simultaneously with different `scale` and `offset` values. In the example below, the -external netCDF variable `c` is modified at `layer` index 1 and 2, with a `scale` factor of -2.0 and 1.5 respectively, and an `offset` of 0.0 for both indices: +simultaneously with different `scale` and `offset` values. In the example below, the external +netCDF variable `c` is modified at `layer` index 1 and 2, with a `scale` factor of 2.0 and 1.5 +respectively, and an `offset` of 0.0 for both indices: ```toml [input.vertical.c] @@ -402,9 +406,9 @@ layer = [1, 2] ``` ## Fixed forcing values -It is possible to set fixed values for forcing parameters through the TOML file. For -example, to set `temperature` to a fixed value of 10 ``\degree``C, the complete `forcing` -list is required: +It is possible to set fixed values for forcing parameters through the TOML file. For example, +to set `temperature` to a fixed value of 10 ``\degree``C, the complete `forcing` list is +required: ```toml forcing = [ diff --git a/docs/user_guide/warm_states.qmd b/docs/user_guide/warm_states.qmd new file mode 100644 index 000000000..28cdd2170 --- /dev/null +++ b/docs/user_guide/warm_states.qmd @@ -0,0 +1,57 @@ +--- +title: Starting with "warm" states +--- + +The `state` section in the TOML file provides information on the input file if the model is +initialized with a warm state (`path_input`) and to what file the states are written at the end +of the model run (`path_output`). Please note that the model setting `reinit` needs to be set +to `false` in order to initialize the model with states from the file located at `path_input`. +A mapping between external state names and internal model states is required. This information +is specified for each model component, the `vertical` model and `lateral` model components. In +the example below the `vertical` component represents the SBM concept, and for the `lateral` +components there is a `river` (including optional `reservoir`, `lake` and `floodplain` +components), `land` and `subsurface` domain. The internal model states are listed on the left +side, and the external state names are listed on the right side. Note that `path_input` is only +required when `reinit` is set to false. `path_output` is optional, an output state file is only +written when it is defined. If neither is set, the entire `state` section can be left out. + +```toml +[model] +reinit = false # cold (reinit = true) or warm state (reinit = false), default is true + +[state] +path_input = "data/instates-moselle.nc" # Location of the file with the input states +path_output = "data/outstates-moselle.nc" # Output location of the states after the model run + +[state.vertical] +satwaterdepth = "satwaterdepth" +snow = "snow" +tsoil = "tsoil" +ustorelayerdepth = "ustorelayerdepth" +canopystorage = "canopystorage" +snowwater = "snowwater" +glacierstore ="glacierstore" + +[state.lateral.river] +q = "q_river" +h = "h_river" +h_av = "h_av_river" + +[state.lateral.river.floodplain] +q = "q_floodplain" +h = "h_floodplain" + +[state.lateral.river.reservoir] +volume = "volume_reservoir" + +[state.lateral.river.lake] +waterlevel = "waterlevel_lake" + +[state.lateral.subsurface] +ssf = "ssf" + +[state.lateral.land] +q = "q_land" +h = "h_land" +h_av = "h_av_land" +``` \ No newline at end of file diff --git a/docs/user_guide/zmq_server.qmd b/docs/user_guide/zmq_server.qmd new file mode 100644 index 000000000..06f6595ed --- /dev/null +++ b/docs/user_guide/zmq_server.qmd @@ -0,0 +1,9 @@ +--- +title: Run wflow as a ZMQ Server +--- + +It is possible to run wflow as a ZMQ Server, for example for the coupling to the +[OpenDA](https://openda.org/) software for data-assimilation. The code for the wflow ZMQ Server +is not part of the Wflow.jl package, and is located +[here](https://github.com/Deltares/Wflow.jl/tree/master/server). + diff --git a/pixi.lock b/pixi.lock index 2eb64b424..f3f33df39 100644 --- a/pixi.lock +++ b/pixi.lock @@ -7,44 +7,300 @@ environments: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py313h536fd9c_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py313h46c70d0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.8.30-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py313hfab6e84_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.7-py313h46c70d0_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.29.0-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-3.0.0-py313h78bf25f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/juliaup-1.17.6-h8fae777_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_console-6.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.14.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.2.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.43-h712a8e2_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.3-h5888daf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.1.0-h77fa898_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h69a702a_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.1-hadc24fc_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py313h8060acc_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-he02047a_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-7.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.2-hb9d3cd8_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.6-hc5c86c4_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.48-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.1.0-py313h536fd9c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.0-h9ebbce0_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.13-5_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py313h536fd9c_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py313h8e95178_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.20.0-py313h920b4c0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh0d859eb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh0d859eb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.1-py313h536fd9c_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20241003-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-24.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py313h80202fe_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-21.2.0-py313ha7868ed_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py313h5813708_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.8.30-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py313ha7868ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.0-py313hd8ed1ab_100.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.7-py313h5813708_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh4bbf305_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.29.0-pyh7428d3b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.25-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/jsonpointer-3.0.0-py313hfa70ccb_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/juliaup-1.17.6-ha073cba_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-1.1.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_console-6.6.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh5737063_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.14.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.2.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.3-he0c23c2_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.20-hc70643c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.46.1-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.2-py313hb4c8b1a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.4-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-7.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.2-h2466b09_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.6-hce54a09_2_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.48-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/psutil-6.1.0-py313ha7868ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh0701188_6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.13.0-hf5aa216_100_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.13-5_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-307-py313h5813708_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.14-py313h5813708_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.2-py313ha7868ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyzmq-26.2.0-py313h2100fd5_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.20.0-py313hf3b5b86_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh5737063_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh5737063_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.4.1-py313ha7868ed_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20241003-pyhff2d567_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h8827d51_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h8a93ad2_21.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-ha82c5b3_21.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_21.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webcolors-24.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h8ffe710_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-ha9f60a1_6.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py313h574b89f_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda packages: - kind: conda name: _libgcc_mutex @@ -75,6 +331,244 @@ packages: license_family: BSD size: 23621 timestamp: 1650670423406 +- kind: conda + name: anyio + version: 4.6.2.post1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/anyio-4.6.2.post1-pyhd8ed1ab_0.conda + sha256: 4b54b7ce79d818e3cce54ae4d552dba51b7afac160ceecdefd04b3917a37c502 + md5: 688697ec5e9588bdded167d19577625b + depends: + - exceptiongroup >=1.0.2 + - idna >=2.8 + - python >=3.9 + - sniffio >=1.1 + - typing_extensions >=4.1 + constrains: + - uvloop >=0.21.0b1 + - trio >=0.26.1 + license: MIT + license_family: MIT + size: 109864 + timestamp: 1728935803440 +- kind: conda + name: argon2-cffi + version: 23.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/argon2-cffi-23.1.0-pyhd8ed1ab_0.conda + sha256: 130766446f5507bd44df957b6b5c898a8bd98f024bb426ed6cb9ff1ad67fc677 + md5: 3afef1f55a1366b4d3b6a0d92e2235e4 + depends: + - argon2-cffi-bindings + - python >=3.7 + - typing-extensions + constrains: + - argon2_cffi ==999 + license: MIT + license_family: MIT + size: 18602 + timestamp: 1692818472638 +- kind: conda + name: argon2-cffi-bindings + version: 21.2.0 + build: py313h536fd9c_5 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/argon2-cffi-bindings-21.2.0-py313h536fd9c_5.conda + sha256: b17e5477dbc6a01286ea736216f49039d35335ea3283fa0f07d2c7cea57002ae + md5: 49fa2ed332b1239d6b0b2fe5e0393421 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.0.1 + - libgcc >=13 + - python >=3.13.0rc1,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + size: 34900 + timestamp: 1725356714671 +- kind: conda + name: argon2-cffi-bindings + version: 21.2.0 + build: py313ha7868ed_5 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/argon2-cffi-bindings-21.2.0-py313ha7868ed_5.conda + sha256: 36b79f862177b3a104762f68664e445615e7c831ca5fe76dc4596ad531ed46a3 + md5: 6d6dbb065c660e9e358b32bdab9ada31 + depends: + - cffi >=1.0.1 + - python >=3.13.0rc1,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 34467 + timestamp: 1725357154522 +- kind: conda + name: arrow + version: 1.3.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/arrow-1.3.0-pyhd8ed1ab_0.conda + sha256: ff49825c7f9e29e09afa6284300810e7a8640d621740efb47c4541f4dc4969db + md5: b77d8c2313158e6e461ca0efb1c2c508 + depends: + - python >=3.8 + - python-dateutil >=2.7.0 + - types-python-dateutil >=2.8.10 + license: Apache-2.0 + license_family: Apache + size: 100096 + timestamp: 1696129131844 +- kind: conda + name: asttokens + version: 2.4.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda + sha256: 708168f026df19a0344983754d27d1f7b28bb21afc7b97a82f02c4798a3d2111 + md5: 5f25798dcefd8252ce5f9dc494d5f571 + depends: + - python >=3.5 + - six >=1.12.0 + license: Apache-2.0 + license_family: Apache + size: 28922 + timestamp: 1698341257884 +- kind: conda + name: async-lru + version: 2.0.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/async-lru-2.0.4-pyhd8ed1ab_0.conda + sha256: 7ed83731979fe5b046c157730e50af0e24454468bbba1ed8fc1a3107db5d7518 + md5: 3d081de3a6ea9f894bbb585e8e3a4dcb + depends: + - python >=3.8 + - typing_extensions >=4.0.0 + license: MIT + license_family: MIT + size: 15342 + timestamp: 1690563152778 +- kind: conda + name: attrs + version: 24.2.0 + build: pyh71513ae_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/attrs-24.2.0-pyh71513ae_0.conda + sha256: 28dba85a7e0f7fb57d7315e13f603d1e41b83c5b88aa2a602596b52c833a2ff8 + md5: 6732fa52eb8e66e5afeb32db8701a791 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 56048 + timestamp: 1722977241383 +- kind: conda + name: babel + version: 2.14.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda + sha256: 8584e3da58e92b72641c89ff9b98c51f0d5dbe76e527867804cbdf03ac91d8e6 + md5: 9669586875baeced8fc30c0826c3270e + depends: + - python >=3.7 + - pytz + - setuptools + license: BSD-3-Clause + license_family: BSD + size: 7609750 + timestamp: 1702422720584 +- kind: conda + name: beautifulsoup4 + version: 4.12.3 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda + sha256: 7b05b2d0669029326c623b9df7a29fa49d1982a9e7e31b2fea34b4c9a4a72317 + md5: 332493000404d8411859539a5a630865 + depends: + - python >=3.6 + - soupsieve >=1.2 + license: MIT + license_family: MIT + size: 118200 + timestamp: 1705564819537 +- kind: conda + name: bleach + version: 6.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda + sha256: 845e77ef495376c5c3c328ccfd746ca0ef1978150cae8eae61a300fe7755fb08 + md5: 0ed9d7c0e9afa7c025807a9a8136ea3e + depends: + - packaging + - python >=3.6 + - setuptools + - six >=1.9.0 + - webencodings + license: Apache-2.0 + license_family: Apache + size: 131220 + timestamp: 1696630354218 +- kind: conda + name: brotli-python + version: 1.1.0 + build: py313h46c70d0_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py313h46c70d0_2.conda + sha256: da92e5e904465fce33a7a55658b13caa5963cc463c430356373deeda8b2dbc46 + md5: f6bb3742e17a4af0dc3c8ca942683ef6 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - python >=3.13.0rc1,<3.14.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - libbrotlicommon 1.1.0 hb9d3cd8_2 + license: MIT + license_family: MIT + size: 350424 + timestamp: 1725267803672 +- kind: conda + name: brotli-python + version: 1.1.0 + build: py313h5813708_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py313h5813708_2.conda + sha256: e89803147849d429f1ba3eec880b487c2cc4cac48a221079001a2ab1216f3709 + md5: c1a5d95bf18940d2b1d12f7bf2fb589b + depends: + - python >=3.13.0rc1,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - libbrotlicommon 1.1.0 h2466b09_2 + license: MIT + license_family: MIT + size: 322309 + timestamp: 1725268431915 - kind: conda name: bzip2 version: 1.0.8 @@ -130,6 +624,730 @@ packages: license: ISC size: 159003 timestamp: 1725018903918 +- kind: conda + name: cached-property + version: 1.5.2 + build: hd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 + md5: 9b347a7ec10940d3f7941ff6c460b551 + depends: + - cached_property >=1.5.2,<1.5.3.0a0 + license: BSD-3-Clause + license_family: BSD + size: 4134 + timestamp: 1615209571450 +- kind: conda + name: cached_property + version: 1.5.2 + build: pyha770c72_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 + md5: 576d629e47797577ab0f1b351297ef4a + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + size: 11065 + timestamp: 1615209567874 +- kind: conda + name: certifi + version: 2024.8.30 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.8.30-pyhd8ed1ab_0.conda + sha256: 7020770df338c45ac6b560185956c32f0a5abf4b76179c037f115fc7d687819f + md5: 12f7d00853807b0531775e9be891cb11 + depends: + - python >=3.7 + license: ISC + size: 163752 + timestamp: 1725278204397 +- kind: conda + name: cffi + version: 1.17.1 + build: py313ha7868ed_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.1-py313ha7868ed_0.conda + sha256: b19f581fe423858f1f477c52e10978be324c55ebf2e418308d30d013f4a476ff + md5: 519a29d7ac273f8c165efc0af099da42 + depends: + - pycparser + - python >=3.13.0rc1,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 291828 + timestamp: 1725561211547 +- kind: conda + name: cffi + version: 1.17.1 + build: py313hfab6e84_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py313hfab6e84_0.conda + sha256: 73cd6199b143a8a6cbf733ce124ed57defc1b9a7eab9b10fd437448caf8eaa45 + md5: ce6386a5892ef686d6d680c345c40ad1 + depends: + - __glibc >=2.17,<3.0.a0 + - libffi >=3.4,<4.0a0 + - libgcc >=13 + - pycparser + - python >=3.13.0rc1,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + size: 295514 + timestamp: 1725560706794 +- kind: conda + name: charset-normalizer + version: 3.4.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.0-pyhd8ed1ab_0.conda + sha256: 1873ac45ea61f95750cb0b4e5e675d1c5b3def937e80c7eebb19297f76810be8 + md5: a374efa97290b8799046df7c5ca17164 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 47314 + timestamp: 1728479405343 +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + sha256: 2c1b2e9755ce3102bca8d69e8f26e4f087ece73f50418186aee7c74bef8e1698 + md5: 3faab06a954c2a04039983f2c4a50d99 + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + size: 25170 + timestamp: 1666700778190 +- kind: conda + name: comm + version: 0.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/comm-0.2.2-pyhd8ed1ab_0.conda + sha256: e923acf02708a8a0b591f3bce4bdc11c8e63b73198b99b35fe6cd96bfb6a0dbe + md5: 948d84721b578d426294e17a02e24cbb + depends: + - python >=3.6 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + size: 12134 + timestamp: 1710320435158 +- kind: conda + name: cpython + version: 3.13.0 + build: py313hd8ed1ab_100 + build_number: 100 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/cpython-3.13.0-py313hd8ed1ab_100.conda + sha256: f75a981dbaadc0196a275ddeb10e1cf23340589ee49e6f494bc60247468f70b3 + md5: 150059fe488fb313446030b75672e5db + depends: + - python 3.13.0.* + - python_abi * *_cp313 + license: Python-2.0 + size: 46133 + timestamp: 1728417498093 +- kind: conda + name: debugpy + version: 1.8.7 + build: py313h46c70d0_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/debugpy-1.8.7-py313h46c70d0_0.conda + sha256: a18ad8895deb52de9bf5969efbe98f6dad276ebd62d65666836bc4cbc90aa179 + md5: 20476f3c3a8a61560fa249e0d6514ab4 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libstdcxx >=13 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: MIT + license_family: MIT + size: 2679576 + timestamp: 1728594270223 +- kind: conda + name: debugpy + version: 1.8.7 + build: py313h5813708_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.7-py313h5813708_0.conda + sha256: d203fef84c2130ea0a4fe3d1c535cc4c6b2d48a275fca2ddf3f77ce522074fda + md5: 198042ea668cff413825bcaf34293574 + depends: + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 3588809 + timestamp: 1728594850379 +- kind: conda + name: decorator + version: 5.1.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 + sha256: 328a6a379f9bdfd0230e51de291ce858e6479411ea4b0545fb377c71662ef3e2 + md5: 43afe5ab04e35e17ba28649471dd7364 + depends: + - python >=3.5 + license: BSD-2-Clause + license_family: BSD + size: 12072 + timestamp: 1641555714315 +- kind: conda + name: defusedxml + version: 0.7.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2 + sha256: 9717a059677553562a8f38ff07f3b9f61727bd614f505658b0a5ecbcf8df89be + md5: 961b3a227b437d82ad7054484cfa71b2 + depends: + - python >=3.6 + license: PSF-2.0 + license_family: PSF + size: 24062 + timestamp: 1615232388757 +- kind: conda + name: entrypoints + version: '0.4' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 + sha256: 2ec4a0900a4a9f42615fc04d0fb3286b796abe56590e8e042f6ec25e102dd5af + md5: 3cf04868fee0a029769bd41f4b2fbf2d + depends: + - python >=3.6 + license: MIT + license_family: MIT + size: 9199 + timestamp: 1643888357950 +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + sha256: e0edd30c4b7144406bb4da975e6bb97d6bc9c0e999aa4efe66ae108cada5d5b5 + md5: d02ae936e42063ca46af6cdad2dbd1e0 + depends: + - python >=3.7 + license: MIT and PSF-2.0 + size: 20418 + timestamp: 1720869435725 +- kind: conda + name: executing + version: 2.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/executing-2.1.0-pyhd8ed1ab_0.conda + sha256: a52d7516e2e11d3eb10908e10d3eb3f8ef267fea99ed9b09d52d96c4db3441b8 + md5: d0441db20c827c11721889a241df1220 + depends: + - python >=2.7 + license: MIT + license_family: MIT + size: 28337 + timestamp: 1725214501850 +- kind: conda + name: fqdn + version: 1.5.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/fqdn-1.5.1-pyhd8ed1ab_0.tar.bz2 + sha256: 6cfd1f9bcd2358a69fb571f4b3af049b630d52647d906822dbedac03e84e4f63 + md5: 642d35437078749ef23a5dca2c9bb1f3 + depends: + - cached-property >=1.3.0 + - python >=2.7,<4 + license: MPL-2.0 + license_family: MOZILLA + size: 14395 + timestamp: 1638810388635 +- kind: conda + name: h11 + version: 0.14.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h11-0.14.0-pyhd8ed1ab_0.tar.bz2 + sha256: 817d2c77d53afe3f3d9cf7f6eb8745cdd8ea76c7adaa9d7ced75c455a2c2c085 + md5: b21ed0883505ba1910994f1df031a428 + depends: + - python >=3 + - typing_extensions + license: MIT + license_family: MIT + size: 48251 + timestamp: 1664132995560 +- kind: conda + name: h2 + version: 4.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: bfc6a23849953647f4e255c782e74a0e18fe16f7e25c7bb0bc57b83bb6762c7a + md5: b748fbf7060927a6e82df7cb5ee8f097 + depends: + - hpack >=4.0,<5 + - hyperframe >=6.0,<7 + - python >=3.6.1 + license: MIT + license_family: MIT + size: 46754 + timestamp: 1634280590080 +- kind: conda + name: hpack + version: 4.0.0 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + sha256: 5dec948932c4f740674b1afb551223ada0c55103f4c7bf86a110454da3d27cb8 + md5: 914d6646c4dbb1fd3ff539830a12fd71 + depends: + - python + license: MIT + license_family: MIT + size: 25341 + timestamp: 1598856368685 +- kind: conda + name: httpcore + version: 1.0.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpcore-1.0.6-pyhd8ed1ab_0.conda + sha256: 8952c3f1eb18bf4d7e813176c3b23e0af4e863e8b05087e73f74f371d73077ca + md5: b8e1901ef9a215fc41ecfb6bef7e0943 + depends: + - anyio >=3.0,<5.0 + - certifi + - h11 >=0.13,<0.15 + - h2 >=3,<5 + - python >=3.8 + - sniffio 1.* + license: BSD-3-Clause + license_family: BSD + size: 45711 + timestamp: 1727821031365 +- kind: conda + name: httpx + version: 0.27.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/httpx-0.27.2-pyhd8ed1ab_0.conda + sha256: 1a33f160548bf447e15c0273899d27e4473f1d5b7ca1441232ec2d9d07c56d03 + md5: 7e9ac3faeebdbd7b53b462c41891e7f7 + depends: + - anyio + - certifi + - httpcore 1.* + - idna + - python >=3.8 + - sniffio + license: BSD-3-Clause + license_family: BSD + size: 65085 + timestamp: 1724778453275 +- kind: conda + name: hyperframe + version: 6.0.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + sha256: e374a9d0f53149328134a8d86f5d72bca4c6dcebed3c0ecfa968c02996289330 + md5: 9f765cbfab6870c8435b9eefecd7a1f4 + depends: + - python >=3.6 + license: MIT + license_family: MIT + size: 14646 + timestamp: 1619110249723 +- kind: conda + name: idna + version: '3.10' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_0.conda + sha256: 8c57fd68e6be5eecba4462e983aed7e85761a519aab80e834bbd7794d4b545b2 + md5: 7ba2ede0e7c795ff95088daf0dc59753 + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + size: 49837 + timestamp: 1726459583613 +- kind: conda + name: importlib-metadata + version: 8.5.0 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.5.0-pyha770c72_0.conda + sha256: 7194700ce1a5ad2621fd68e894dd8c1ceaff9a38723e6e0e5298fdef13017b1c + md5: 54198435fce4d64d8a89af22573012a8 + depends: + - python >=3.8 + - zipp >=0.5 + license: Apache-2.0 + license_family: APACHE + size: 28646 + timestamp: 1726082927916 +- kind: conda + name: importlib_metadata + version: 8.5.0 + build: hd8ed1ab_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-8.5.0-hd8ed1ab_0.conda + sha256: 313b8a05211bacd6b15ab2621cb73d7f41ea5c6cae98db53367d47833f03fef1 + md5: 2a92e152208121afadf85a5e1f3a5f4d + depends: + - importlib-metadata >=8.5.0,<8.5.1.0a0 + license: Apache-2.0 + license_family: APACHE + size: 9385 + timestamp: 1726082930346 +- kind: conda + name: importlib_resources + version: 6.4.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.4.5-pyhd8ed1ab_0.conda + sha256: 2cb9db3e40033c3df72d3defc678a012840378fd55a67e4351363d4b321a0dc1 + md5: c808991d29b9838fb4d96ce8267ec9ec + depends: + - python >=3.8 + - zipp >=3.1.0 + constrains: + - importlib-resources >=6.4.5,<6.4.6.0a0 + license: Apache-2.0 + license_family: APACHE + size: 32725 + timestamp: 1725921462405 +- kind: conda + name: ipykernel + version: 6.29.5 + build: pyh3099207_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh3099207_0.conda + sha256: 33cfd339bb4efac56edf93474b37ddc049e08b1b4930cf036c893cc1f5a1f32a + md5: b40131ab6a36ac2c09b7c57d4d3fbf99 + depends: + - __linux + - comm >=0.1.1 + - debugpy >=1.6.5 + - ipython >=7.23.1 + - jupyter_client >=6.1.12 + - jupyter_core >=4.12,!=5.0.* + - matplotlib-inline >=0.1 + - nest-asyncio + - packaging + - psutil + - python >=3.8 + - pyzmq >=24 + - tornado >=6.1 + - traitlets >=5.4.0 + license: BSD-3-Clause + license_family: BSD + size: 119084 + timestamp: 1719845605084 +- kind: conda + name: ipykernel + version: 6.29.5 + build: pyh4bbf305_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ipykernel-6.29.5-pyh4bbf305_0.conda + sha256: dc569094125127c0078aa536f78733f383dd7e09507277ef8bcd1789786e7086 + md5: 18df5fc4944a679e085e0e8f31775fc8 + depends: + - __win + - comm >=0.1.1 + - debugpy >=1.6.5 + - ipython >=7.23.1 + - jupyter_client >=6.1.12 + - jupyter_core >=4.12,!=5.0.* + - matplotlib-inline >=0.1 + - nest-asyncio + - packaging + - psutil + - python >=3.8 + - pyzmq >=24 + - tornado >=6.1 + - traitlets >=5.4.0 + license: BSD-3-Clause + license_family: BSD + size: 119853 + timestamp: 1719845858082 +- kind: conda + name: ipython + version: 8.29.0 + build: pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.29.0-pyh707e725_0.conda + sha256: 606723272a208cca1036852e04fbb61741b78451784746e75edd1becb70347d2 + md5: 56db21d7d51410fcfbfeca3d1a6b4269 + depends: + - __unix + - decorator + - exceptiongroup + - jedi >=0.16 + - matplotlib-inline + - pexpect >4.3 + - pickleshare + - prompt-toolkit >=3.0.41,<3.1.0 + - pygments >=2.4.0 + - python >=3.10 + - stack_data + - traitlets >=5.13.0 + - typing_extensions >=4.6 + license: BSD-3-Clause + license_family: BSD + size: 599356 + timestamp: 1729866495921 +- kind: conda + name: ipython + version: 8.29.0 + build: pyh7428d3b_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ipython-8.29.0-pyh7428d3b_0.conda + sha256: 2208dbe96e94ba653c4e0a5f302e36f16df73eec1968cfb85eff2d9775c9ced1 + md5: 9dc505b3569b4c26cffc241c50695f75 + depends: + - __win + - colorama + - decorator + - exceptiongroup + - jedi >=0.16 + - matplotlib-inline + - pickleshare + - prompt-toolkit >=3.0.41,<3.1.0 + - pygments >=2.4.0 + - python >=3.10 + - stack_data + - traitlets >=5.13.0 + - typing_extensions >=4.6 + license: BSD-3-Clause + license_family: BSD + size: 600237 + timestamp: 1729866942619 +- kind: conda + name: ipywidgets + version: 8.1.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ipywidgets-8.1.5-pyhd8ed1ab_0.conda + sha256: ae27447f300c85a184d5d4fa08674eaa93931c12275daca981eb986f5d7795b3 + md5: a022d34163147d16b27de86dc53e93fc + depends: + - comm >=0.1.3 + - ipython >=6.1.0 + - jupyterlab_widgets >=3.0.13,<3.1.0 + - python >=3.7 + - traitlets >=4.3.1 + - widgetsnbextension >=4.0.13,<4.1.0 + license: BSD-3-Clause + license_family: BSD + size: 113497 + timestamp: 1724334989324 +- kind: conda + name: isoduration + version: 20.11.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/isoduration-20.11.0-pyhd8ed1ab_0.tar.bz2 + sha256: 7bb5c4d994361022f47a807b5e7d101b3dce16f7dd8a0af6ffad9f479d346493 + md5: 4cb68948e0b8429534380243d063a27a + depends: + - arrow >=0.15.0 + - python >=3.7 + license: MIT + license_family: MIT + size: 17189 + timestamp: 1638811664194 +- kind: conda + name: jedi + version: 0.19.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda + sha256: 362f0936ef37dfd1eaa860190e42a6ebf8faa094eaa3be6aa4d9ace95f40047a + md5: 81a3be0b2023e1ea8555781f0ad904a2 + depends: + - parso >=0.8.3,<0.9.0 + - python >=3.6 + license: MIT + license_family: MIT + size: 841312 + timestamp: 1696326218364 +- kind: conda + name: jinja2 + version: 3.1.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + sha256: 27380d870d42d00350d2d52598cddaf02f9505fb24be09488da0c9b8d1428f2d + md5: 7b86ecb7d3557821c649b3c31e3eb9f2 + depends: + - markupsafe >=2.0 + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + size: 111565 + timestamp: 1715127275924 +- kind: conda + name: json5 + version: 0.9.25 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/json5-0.9.25-pyhd8ed1ab_0.conda + sha256: 0c75e428970e8bb72ba1dd3a6dc32b8d68f6534b4fe16b38e53364963fdc8e38 + md5: 5d8c241a9261e720a34a07a3e1ac4109 + depends: + - python >=3.7,<4.0 + license: Apache-2.0 + license_family: APACHE + size: 27995 + timestamp: 1712986338874 +- kind: conda + name: jsonpointer + version: 3.0.0 + build: py313h78bf25f_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/jsonpointer-3.0.0-py313h78bf25f_1.conda + sha256: 18d412dc91ee7560f0f94c19bb1c3c23f413b9a7f55948e2bb3ce44340439a58 + md5: 668d64b50e7ce7984cfe09ed7045b9fa + depends: + - python >=3.13.0rc1,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + size: 17568 + timestamp: 1725303033801 +- kind: conda + name: jsonpointer + version: 3.0.0 + build: py313hfa70ccb_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/jsonpointer-3.0.0-py313hfa70ccb_1.conda + sha256: a0625cb0e86775b8996b4ee7117f1912b2fa3d76be8d10bf1d7b39578f5d99f7 + md5: 001efbf150f0ca5fd0a0c5e6e713c1d1 + depends: + - python >=3.13.0rc1,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + size: 42805 + timestamp: 1725303293802 +- kind: conda + name: jsonschema + version: 4.23.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.23.0-pyhd8ed1ab_0.conda + sha256: 7d0c4c0346b26be9f220682b7c5c0d84606d48c6dbc36fc238e4452dda733aff + md5: da304c192ad59975202859b367d0f6a2 + depends: + - attrs >=22.2.0 + - importlib_resources >=1.4.0 + - jsonschema-specifications >=2023.03.6 + - pkgutil-resolve-name >=1.3.10 + - python >=3.8 + - referencing >=0.28.4 + - rpds-py >=0.7.1 + license: MIT + license_family: MIT + size: 74323 + timestamp: 1720529611305 +- kind: conda + name: jsonschema-specifications + version: 2024.10.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2024.10.1-pyhd8ed1ab_0.conda + sha256: 82f8bed0f21dc0b3aff40dd4e39d77e85b93b0417bc5659b001e0109341b8b98 + md5: 720745920222587ef942acfbc578b584 + depends: + - python >=3.8 + - referencing >=0.31.0 + license: MIT + license_family: MIT + size: 16165 + timestamp: 1728418976382 +- kind: conda + name: jsonschema-with-format-nongpl + version: 4.23.0 + build: hd8ed1ab_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/jsonschema-with-format-nongpl-4.23.0-hd8ed1ab_0.conda + sha256: 007a0a506a0d1805b099629cb0ee743ad0afe7d9749e57339f32c168119e0139 + md5: 16b37612b3a2fd77f409329e213b530c + depends: + - fqdn + - idna + - isoduration + - jsonpointer >1.13 + - jsonschema >=4.23.0,<4.23.1.0a0 + - rfc3339-validator + - rfc3986-validator >0.1.0 + - uri-template + - webcolors >=24.6.0 + license: MIT + license_family: MIT + size: 7143 + timestamp: 1720529619500 - kind: conda name: juliaup version: 1.17.6 @@ -163,6 +1381,340 @@ packages: license_family: MIT size: 1517497 timestamp: 1725415742700 +- kind: conda + name: jupyter + version: 1.1.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter-1.1.1-pyhd8ed1ab_0.conda + sha256: 5d92eb46552af180cd27a5e916206eb3f6725a0ae3d4bafa7a5f44adfada4332 + md5: 255a8fe52d1c57a6b46d0d16851883db + depends: + - ipykernel + - ipywidgets + - jupyter_console + - jupyterlab + - nbconvert-core + - notebook + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + size: 8728 + timestamp: 1725037618526 +- kind: conda + name: jupyter-lsp + version: 2.2.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter-lsp-2.2.5-pyhd8ed1ab_0.conda + sha256: 2151c2c63e0442a4c69ee0ad8a634195eedab10b7b74c0ec8266471842239a93 + md5: 885867f6adab3d7ecdf8ab6ca0785f51 + depends: + - importlib-metadata >=4.8.3 + - jupyter_server >=1.1.2 + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 55539 + timestamp: 1712707521811 +- kind: conda + name: jupyter_client + version: 8.6.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.3-pyhd8ed1ab_0.conda + sha256: 4419c85e209a715f551a5c9bead746f29ee9d0fc41e772a76db3868622795671 + md5: a14218cfb29662b4a19ceb04e93e298e + depends: + - importlib-metadata >=4.8.3 + - jupyter_core >=4.12,!=5.0.* + - python >=3.8 + - python-dateutil >=2.8.2 + - pyzmq >=23.0 + - tornado >=6.2 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + size: 106055 + timestamp: 1726610805505 +- kind: conda + name: jupyter_console + version: 6.6.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_console-6.6.3-pyhd8ed1ab_0.conda + sha256: 4e51764d5fe2f6e43d83bcfbcf8b4da6569721bf82eaf4d647be8717cd6be75a + md5: 7cf6f52a66f8e3cd9d8b6c231262dcab + depends: + - ipykernel >=6.14 + - ipython + - jupyter_client >=7.0.0 + - jupyter_core >=4.12,!=5.0.* + - prompt_toolkit >=3.0.30 + - pygments + - python >=3.7 + - pyzmq >=17 + - traitlets >=5.4 + license: BSD-3-Clause + license_family: BSD + size: 26484 + timestamp: 1678118234022 +- kind: conda + name: jupyter_core + version: 5.7.2 + build: pyh31011fe_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh31011fe_1.conda + sha256: 732b1e8536bc22a5a174baa79842d79db2f4956d90293dd82dc1b3f6099bcccd + md5: 0a2980dada0dd7fd0998f0342308b1b1 + depends: + - __unix + - platformdirs >=2.5 + - python >=3.8 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + size: 57671 + timestamp: 1727163547058 +- kind: conda + name: jupyter_core + version: 5.7.2 + build: pyh5737063_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_core-5.7.2-pyh5737063_1.conda + sha256: 7c903b2d62414c3e8da1f78db21f45b98de387aae195f8ca959794113ba4b3fd + md5: 46d87d1c0ea5da0aae36f77fa406e20d + depends: + - __win + - cpython + - platformdirs >=2.5 + - python >=3.8 + - pywin32 >=300 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + size: 58269 + timestamp: 1727164026641 +- kind: conda + name: jupyter_events + version: 0.10.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_events-0.10.0-pyhd8ed1ab_0.conda + sha256: cd3f41dc093162a41d4bae171e40a1b9b115c4d488e9bb837a8fa9d084931fb9 + md5: ed45423c41b3da15ea1df39b1f80c2ca + depends: + - jsonschema-with-format-nongpl >=4.18.0 + - python >=3.8 + - python-json-logger >=2.0.4 + - pyyaml >=5.3 + - referencing + - rfc3339-validator + - rfc3986-validator >=0.1.1 + - traitlets >=5.3 + license: BSD-3-Clause + license_family: BSD + size: 21475 + timestamp: 1710805759187 +- kind: conda + name: jupyter_server + version: 2.14.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server-2.14.2-pyhd8ed1ab_0.conda + sha256: edab71a05feceac54bdb90e755a257545af7832b9911607c1a70f09be44ba985 + md5: ca23c71f70a7c7935b3d03f0f1a5801d + depends: + - anyio >=3.1.0 + - argon2-cffi >=21.1 + - jinja2 >=3.0.3 + - jupyter_client >=7.4.4 + - jupyter_core >=4.12,!=5.0.* + - jupyter_events >=0.9.0 + - jupyter_server_terminals >=0.4.4 + - nbconvert-core >=6.4.4 + - nbformat >=5.3.0 + - overrides >=5.0 + - packaging >=22.0 + - prometheus_client >=0.9 + - python >=3.8 + - pyzmq >=24 + - send2trash >=1.8.2 + - terminado >=0.8.3 + - tornado >=6.2.0 + - traitlets >=5.6.0 + - websocket-client >=1.7 + license: BSD-3-Clause + license_family: BSD + size: 323978 + timestamp: 1720816754998 +- kind: conda + name: jupyter_server_terminals + version: 0.5.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyter_server_terminals-0.5.3-pyhd8ed1ab_0.conda + sha256: 038efbc7e4b2e72d49ed193cfb2bbbe9fbab2459786ce9350301f466a32567db + md5: 219b3833aa8ed91d47d1be6ca03f30be + depends: + - python >=3.8 + - terminado >=0.8.3 + license: BSD-3-Clause + license_family: BSD + size: 19818 + timestamp: 1710262791393 +- kind: conda + name: jupyterlab + version: 4.2.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab-4.2.5-pyhd8ed1ab_0.conda + sha256: db08036a6fd846c178ebdce7327be1130bda10ac96113c17b04bce2bc4d67dda + md5: 594762eddc55b82feac6097165a88e3c + depends: + - async-lru >=1.0.0 + - httpx >=0.25.0 + - importlib_metadata >=4.8.3 + - importlib_resources >=1.4 + - ipykernel >=6.5.0 + - jinja2 >=3.0.3 + - jupyter-lsp >=2.0.0 + - jupyter_core + - jupyter_server >=2.4.0,<3 + - jupyterlab_server >=2.27.1,<3 + - notebook-shim >=0.2 + - packaging + - python >=3.8 + - setuptools >=40.1.0 + - tomli >=1.2.2 + - tornado >=6.2.0 + - traitlets + license: BSD-3-Clause + license_family: BSD + size: 7361961 + timestamp: 1724745262468 +- kind: conda + name: jupyterlab_pygments + version: 0.3.0 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_1.conda + sha256: 4aa622bbcf97e44cd1adf0100b7ff71b7e20268f043bdf6feae4d16152f1f242 + md5: afcd1b53bcac8844540358e33f33d28f + depends: + - pygments >=2.4.1,<3 + - python >=3.7 + constrains: + - jupyterlab >=4.0.8,<5.0.0 + license: BSD-3-Clause + license_family: BSD + size: 18776 + timestamp: 1707149279640 +- kind: conda + name: jupyterlab_server + version: 2.27.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_server-2.27.3-pyhd8ed1ab_0.conda + sha256: a23b26d1a35bccdb91b9232119e5f402624e1e1a252b0e64cc20c6eb5b87cefb + md5: af8239bf1ba7e8c69b689f780f653488 + depends: + - babel >=2.10 + - importlib-metadata >=4.8.3 + - jinja2 >=3.0.3 + - json5 >=0.9.0 + - jsonschema >=4.18 + - jupyter_server >=1.21,<3 + - packaging >=21.3 + - python >=3.8 + - requests >=2.31 + constrains: + - openapi-core >=0.18.0,<0.19.0 + license: BSD-3-Clause + license_family: BSD + size: 49355 + timestamp: 1721163412436 +- kind: conda + name: jupyterlab_widgets + version: 3.0.13 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/jupyterlab_widgets-3.0.13-pyhd8ed1ab_0.conda + sha256: 0e7ec7936d766f39d5a0a8eafc63f5543f488883ad3645246bc22db6d632566e + md5: ccea946e6dce9f330fbf7fca97fe8de7 + depends: + - python >=3.7 + constrains: + - jupyterlab >=3,<5 + license: BSD-3-Clause + license_family: BSD + size: 186024 + timestamp: 1724331451102 +- kind: conda + name: keyutils + version: 1.6.1 + build: h166bdaf_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 + sha256: 150c05a6e538610ca7c43beb3a40d65c90537497a4f6a5f4d15ec0451b6f5ebb + md5: 30186d27e2c9fa62b45fb1476b7200e3 + depends: + - libgcc-ng >=10.3.0 + license: LGPL-2.1-or-later + size: 117831 + timestamp: 1646151697040 +- kind: conda + name: krb5 + version: 1.21.3 + build: h659f571_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda + sha256: 99df692f7a8a5c27cd14b5fb1374ee55e756631b9c3d659ed3ee60830249b238 + md5: 3f43953b7d3fb3aaa1d0d0723d91e368 + depends: + - keyutils >=1.6.1,<2.0a0 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + size: 1370023 + timestamp: 1719463201255 +- kind: conda + name: krb5 + version: 1.21.3 + build: hdf4eb48_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda + sha256: 18e8b3430d7d232dad132f574268f56b3eb1a19431d6d5de8c53c29e6c18fa81 + md5: 31aec030344e962fbd7dbbbbd68e60a9 + depends: + - openssl >=3.3.1,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 712034 + timestamp: 1719463874284 - kind: conda name: ld_impl_linux-64 version: '2.43' @@ -180,6 +1732,22 @@ packages: license_family: GPL size: 669616 timestamp: 1727304687962 +- kind: conda + name: libedit + version: 3.1.20191231 + build: he28a2e2_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 + sha256: a57d37c236d8f7c886e01656f4949d9dcca131d2a0728609c6f7fa338b65f1cf + md5: 4d331e44109e3f0e19b4cb8f9b82f3e1 + depends: + - libgcc-ng >=7.5.0 + - ncurses >=6.2,<7.0.0a0 + license: BSD-2-Clause + license_family: BSD + size: 123878 + timestamp: 1597616541093 - kind: conda name: libexpat version: 2.6.3 @@ -248,67 +1816,112 @@ packages: timestamp: 1636489106777 - kind: conda name: libgcc - version: 14.1.0 + version: 14.2.0 build: h77fa898_1 build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.1.0-h77fa898_1.conda - sha256: 10fa74b69266a2be7b96db881e18fa62cfa03082b65231e8d652e897c4b335a3 - md5: 002ef4463dd1e2b44a94a4ace468f5d2 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-14.2.0-h77fa898_1.conda + sha256: 53eb8a79365e58849e7b1a068d31f4f9e718dc938d6f2c03e960345739a03569 + md5: 3cb76c3f10d3bc7f1105b2fc9db984df depends: - _libgcc_mutex 0.1 conda_forge - _openmp_mutex >=4.5 constrains: - - libgomp 14.1.0 h77fa898_1 - - libgcc-ng ==14.1.0=*_1 + - libgomp 14.2.0 h77fa898_1 + - libgcc-ng ==14.2.0=*_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 846380 - timestamp: 1724801836552 + size: 848745 + timestamp: 1729027721139 - kind: conda name: libgcc-ng - version: 14.1.0 + version: 14.2.0 build: h69a702a_1 build_number: 1 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h69a702a_1.conda - sha256: b91f7021e14c3d5c840fbf0dc75370d6e1f7c7ff4482220940eaafb9c64613b7 - md5: 1efc0ad219877a73ef977af7dbb51f17 + url: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.2.0-h69a702a_1.conda + sha256: 3a76969c80e9af8b6e7a55090088bc41da4cffcde9e2c71b17f44d37b7cb87f7 + md5: e39480b9ca41323497b05492a63bc35b depends: - - libgcc 14.1.0 h77fa898_1 + - libgcc 14.2.0 h77fa898_1 license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL - size: 52170 - timestamp: 1724801842101 + size: 54142 + timestamp: 1729027726517 +- kind: conda + name: libgomp + version: 14.2.0 + build: h77fa898_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.2.0-h77fa898_1.conda + sha256: 1911c29975ec99b6b906904040c855772ccb265a1c79d5d75c8ceec4ed89cd63 + md5: cc3573974587f12dda90d96e3e55a702 + depends: + - _libgcc_mutex 0.1 conda_forge + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 460992 + timestamp: 1729027639220 +- kind: conda + name: libmpdec + version: 4.0.0 + build: h2466b09_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-h2466b09_0.conda + sha256: fc529fc82c7caf51202cc5cec5bb1c2e8d90edbac6d0a4602c966366efe3c7bf + md5: 74860100b2029e2523cf480804c76b9b + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-2-Clause + license_family: BSD + size: 88657 + timestamp: 1723861474602 - kind: conda - name: libgomp - version: 14.1.0 - build: h77fa898_1 - build_number: 1 + name: libmpdec + version: 4.0.0 + build: h4bc722e_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_1.conda - sha256: c96724c8ae4ee61af7674c5d9e5a3fbcf6cd887a40ad5a52c99aa36f1d4f9680 - md5: 23c255b008c4f2ae008f81edcabaca89 + url: https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-h4bc722e_0.conda + sha256: d02d1d3304ecaf5c728e515eb7416517a0b118200cd5eacbe829c432d1664070 + md5: aeb98fdeb2e8f25d43ef71fbacbeec80 depends: - - _libgcc_mutex 0.1 conda_forge - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - size: 460218 - timestamp: 1724801743478 + - __glibc >=2.17,<3.0.a0 + - libgcc-ng >=12 + license: BSD-2-Clause + license_family: BSD + size: 89991 + timestamp: 1723817448345 - kind: conda - name: libnsl - version: 2.0.1 - build: hd590300_0 + name: libsodium + version: 1.0.20 + build: h4ab18f5_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda - sha256: 26d77a3bb4dceeedc2a41bd688564fe71bf2d149fdcf117049970bc02ff1add6 - md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 + url: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.20-h4ab18f5_0.conda + sha256: 0105bd108f19ea8e6a78d2d994a6d4a8db16d19a41212070d2d1d48a63c34161 + md5: a587892d3c13b6621a6091be690dbca2 depends: - libgcc-ng >=12 - license: LGPL-2.1-only - license_family: GPL - size: 33408 - timestamp: 1697359010159 + license: ISC + size: 205978 + timestamp: 1716828628198 +- kind: conda + name: libsodium + version: 1.0.20 + build: hc70643c_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.20-hc70643c_0.conda + sha256: 7bcb3edccea30f711b6be9601e083ecf4f435b9407d70fc48fbcf9e5d69a0fc6 + md5: 198bb594f202b205c7d18b936fa4524f + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: ISC + size: 202344 + timestamp: 1716828757533 - kind: conda name: libsqlite version: 3.46.1 @@ -339,6 +1952,36 @@ packages: license: Unlicense size: 865214 timestamp: 1725353659783 +- kind: conda + name: libstdcxx + version: 14.2.0 + build: hc0a3c3a_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-14.2.0-hc0a3c3a_1.conda + sha256: 4661af0eb9bdcbb5fb33e5d0023b001ad4be828fccdcc56500059d56f9869462 + md5: 234a5554c53625688d51062645337328 + depends: + - libgcc 14.2.0 h77fa898_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 3893695 + timestamp: 1729027746910 +- kind: conda + name: libstdcxx-ng + version: 14.2.0 + build: h4852527_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.2.0-h4852527_1.conda + sha256: 25bb30b827d4f6d6f0522cc0579e431695503822f144043b93c50237017fffd8 + md5: 8371ac6457591af2cf6159439c1fd051 + depends: + - libstdcxx 14.2.0 hc0a3c3a_1 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + size: 54105 + timestamp: 1729027780628 - kind: conda name: libuuid version: 2.38.1 @@ -353,20 +1996,6 @@ packages: license_family: BSD size: 33601 timestamp: 1680112270483 -- kind: conda - name: libxcrypt - version: 4.4.36 - build: hd590300_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - sha256: 6ae68e0b86423ef188196fff6207ed0c8195dd84273cb5623b85aa08033a410c - md5: 5aa797f8787fe7a17d1b0821485b5adc - depends: - - libgcc-ng >=12 - license: LGPL-2.1-or-later - size: 100393 - timestamp: 1702724383534 - kind: conda name: libzlib version: 1.3.1 @@ -403,6 +2032,149 @@ packages: license_family: Other size: 61574 timestamp: 1716874187109 +- kind: conda + name: markupsafe + version: 3.0.2 + build: py313h8060acc_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py313h8060acc_0.conda + sha256: 9158873dbd5b715d5683dd9241b3eab35e896e31ea7842052f1b4e8c3945bf45 + md5: ab825f8b676368beb91350c6a2da6e11 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + size: 25104 + timestamp: 1729351477153 +- kind: conda + name: markupsafe + version: 3.0.2 + build: py313hb4c8b1a_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.2-py313hb4c8b1a_0.conda + sha256: 2b7500300aba9726f785781ded5fb1205c76d3047a93cd30868712e1e02f8c6e + md5: 4ab654528518cea7e94f53af79bd3171 + depends: + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - jinja2 >=3.0.0 + license: BSD-3-Clause + license_family: BSD + size: 27813 + timestamp: 1729351491668 +- kind: conda + name: matplotlib-inline + version: 0.1.7 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda + sha256: 7ea68676ea35fbb095420bbcc1c82c4767b8be7bb56abb6989b7f89d957a3bab + md5: 779345c95648be40d22aaa89de7d4254 + depends: + - python >=3.6 + - traitlets + license: BSD-3-Clause + license_family: BSD + size: 14599 + timestamp: 1713250613726 +- kind: conda + name: mistune + version: 3.0.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda + sha256: f95cb70007e3cc2ba44e17c29a056b499e6dadf08746706d0c817c8e2f47e05c + md5: 5cbee699846772cc939bef23a0d524ed + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + size: 66022 + timestamp: 1698947249750 +- kind: conda + name: nbclient + version: 0.10.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/nbclient-0.10.0-pyhd8ed1ab_0.conda + sha256: 589d72d36d61a23b39d6fff2c488f93e29e20de4fc6f5d315b5f2c16e81028bf + md5: 15b51397e0fe8ea7d7da60d83eb76ebc + depends: + - jupyter_client >=6.1.12 + - jupyter_core >=4.12,!=5.0.* + - nbformat >=5.1 + - python >=3.8 + - traitlets >=5.4 + license: BSD-3-Clause + license_family: BSD + size: 27851 + timestamp: 1710317767117 +- kind: conda + name: nbconvert-core + version: 7.16.4 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.4-pyhd8ed1ab_1.conda + sha256: 074d858c5808e0a832acc0da37cd70de1565e8d6e17a62d5a11b3902b5e78319 + md5: e2d2abb421c13456a9a9f80272fdf543 + depends: + - beautifulsoup4 + - bleach + - defusedxml + - entrypoints >=0.2.2 + - jinja2 >=3.0 + - jupyter_core >=4.7 + - jupyterlab_pygments + - markupsafe >=2.0 + - mistune >=2.0.3,<4 + - nbclient >=0.5.0 + - nbformat >=5.1 + - packaging + - pandocfilters >=1.4.1 + - pygments >=2.4.1 + - python >=3.8 + - tinycss2 + - traitlets >=5.0 + constrains: + - nbconvert =7.16.4=*_1 + - pandoc >=2.9.2,<4.0.0 + license: BSD-3-Clause + license_family: BSD + size: 189599 + timestamp: 1718135529468 +- kind: conda + name: nbformat + version: 5.10.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/nbformat-5.10.4-pyhd8ed1ab_0.conda + sha256: 36fe73da4d37bc7ac2d1540526ecd294fbd09acda04e096181ab8f1ccd2b464c + md5: 0b57b5368ab7fc7cdc9e3511fa867214 + depends: + - jsonschema >=2.6 + - jupyter_core >=4.12,!=5.0.* + - python >=3.8 + - python-fastjsonschema >=2.15 + - traitlets >=5.1 + license: BSD-3-Clause + license_family: BSD + size: 101232 + timestamp: 1712239122969 - kind: conda name: ncurses version: '6.5' @@ -418,6 +2190,57 @@ packages: license: X11 AND BSD-3-Clause size: 889086 timestamp: 1724658547447 +- kind: conda + name: nest-asyncio + version: 1.6.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/nest-asyncio-1.6.0-pyhd8ed1ab_0.conda + sha256: 30db21d1f7e59b3408b831a7e0417b83b53ee6223afae56482c5f26da3ceb49a + md5: 6598c056f64dc8800d40add25e4e2c34 + depends: + - python >=3.5 + license: BSD-2-Clause + license_family: BSD + size: 11638 + timestamp: 1705850780510 +- kind: conda + name: notebook + version: 7.2.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/notebook-7.2.2-pyhd8ed1ab_0.conda + sha256: 613242d5151a4d70438bb2d65041c509e4376b7e18c06c3795c52a18176e41dc + md5: c4d5a58f43ce9ffa430e6ecad6c30a42 + depends: + - jupyter_server >=2.4.0,<3 + - jupyterlab >=4.2.0,<4.3 + - jupyterlab_server >=2.27.1,<3 + - notebook-shim >=0.2,<0.3 + - python >=3.8 + - tornado >=6.2.0 + license: BSD-3-Clause + license_family: BSD + size: 3904930 + timestamp: 1724861465900 +- kind: conda + name: notebook-shim + version: 0.2.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/notebook-shim-0.2.4-pyhd8ed1ab_0.conda + sha256: 9b5fdef9ebe89222baa9da2796ebe7bc02ec6c5a1f61327b651d6b92cf9a0230 + md5: 3d85618e2c97ab896b5b5e298d32b5b3 + depends: + - jupyter_server >=1.8,<3 + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + size: 16880 + timestamp: 1707957948029 - kind: conda name: openssl version: 3.3.2 @@ -451,15 +2274,314 @@ packages: license_family: Apache size: 2891789 timestamp: 1725410790053 +- kind: conda + name: overrides + version: 7.7.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/overrides-7.7.0-pyhd8ed1ab_0.conda + sha256: 5e238e5e646414d517a13f6786c7227206ace58271e3ef63f6adca4d6a4c2839 + md5: 24fba5a9d161ad8103d4e84c0e1a3ed4 + depends: + - python >=3.6 + - typing_utils + license: Apache-2.0 + license_family: APACHE + size: 30232 + timestamp: 1706394723472 +- kind: conda + name: packaging + version: '24.1' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + sha256: 36aca948219e2c9fdd6d80728bcc657519e02f06c2703d8db3446aec67f51d81 + md5: cbe1bb1f21567018ce595d9c2be0f0db + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + size: 50290 + timestamp: 1718189540074 +- kind: conda + name: pandocfilters + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2 + sha256: 2bb9ba9857f4774b85900c2562f7e711d08dd48e2add9bee4e1612fbee27e16f + md5: 457c2c8c08e54905d6954e79cb5b5db9 + depends: + - python !=3.0,!=3.1,!=3.2,!=3.3 + license: BSD-3-Clause + license_family: BSD + size: 11627 + timestamp: 1631603397334 +- kind: conda + name: parso + version: 0.8.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda + sha256: bfe404eebb930cc41782d34f8fc04c0388ea692eeebe2c5fc28df8ec8d4d61ae + md5: 81534b420deb77da8833f2289b8d47ac + depends: + - python >=3.6 + license: MIT + license_family: MIT + size: 75191 + timestamp: 1712320447201 +- kind: conda + name: pexpect + version: 4.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + sha256: 90a09d134a4a43911b716d4d6eb9d169238aff2349056f7323d9db613812667e + md5: 629f3203c99b32e0988910c93e77f3b6 + depends: + - ptyprocess >=0.5 + - python >=3.7 + license: ISC + size: 53600 + timestamp: 1706113273252 +- kind: conda + name: pickleshare + version: 0.7.5 + build: py_1003 + build_number: 1003 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 + sha256: a1ed1a094dd0d1b94a09ed85c283a0eb28943f2e6f22161fb45e128d35229738 + md5: 415f0ebb6198cc2801c73438a9fb5761 + depends: + - python >=3 + license: MIT + license_family: MIT + size: 9332 + timestamp: 1602536313357 +- kind: conda + name: pkgutil-resolve-name + version: 1.3.10 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda + sha256: fecf95377134b0e8944762d92ecf7b0149c07d8186fb5db583125a2705c7ea0a + md5: 405678b942f2481cecdb3e010f4925d9 + depends: + - python >=3.6 + license: MIT AND PSF-2.0 + size: 10778 + timestamp: 1694617398467 +- kind: conda + name: platformdirs + version: 4.3.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 20625 + timestamp: 1726613611845 +- kind: conda + name: prometheus_client + version: 0.21.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/prometheus_client-0.21.0-pyhd8ed1ab_0.conda + sha256: 01f0c3dd00081637ed920a922b17bcc8ed49608404ee466ced806856e671f6b9 + md5: 07e9550ddff45150bfc7da146268e165 + depends: + - python >=3.8 + license: Apache-2.0 + license_family: Apache + size: 49024 + timestamp: 1726902073034 +- kind: conda + name: prompt-toolkit + version: 3.0.48 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.48-pyha770c72_0.conda + sha256: 44e4e6108d425a666856a52d1523e5d70890256a8920bb0dcd3d55cc750f3207 + md5: 4c05134c48b6a74f33bbb9938e4a115e + depends: + - python >=3.7 + - wcwidth + constrains: + - prompt_toolkit 3.0.48 + license: BSD-3-Clause + license_family: BSD + size: 270271 + timestamp: 1727341744544 +- kind: conda + name: prompt_toolkit + version: 3.0.48 + build: hd8ed1ab_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.48-hd8ed1ab_0.conda + sha256: a26eed22badba036b35b8f0a3cc4d17130d7e43c80d3aa258b465dd7d69362a0 + md5: 60a2aeff42b5d629d45cc1be38ec1c5d + depends: + - prompt-toolkit >=3.0.48,<3.0.49.0a0 + license: BSD-3-Clause + license_family: BSD + size: 6664 + timestamp: 1727341747447 +- kind: conda + name: psutil + version: 6.1.0 + build: py313h536fd9c_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/psutil-6.1.0-py313h536fd9c_0.conda + sha256: 4afc1ebb9325389df1ff3260fcef8078c8552aba26d0fbefd3aa2b3f04a407b8 + md5: b50a00ebd2fda55306b8a095363ce27f + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + size: 494158 + timestamp: 1729847232458 +- kind: conda + name: psutil + version: 6.1.0 + build: py313ha7868ed_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/psutil-6.1.0-py313ha7868ed_0.conda + sha256: d58defe84d46da1a7e80283e165d6a9d09378fd830b48917751a318ab5a5d4ce + md5: d13841485f9159f317a4e8bb974e9c8e + depends: + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + size: 508489 + timestamp: 1729847497486 +- kind: conda + name: ptyprocess + version: 0.7.0 + build: pyhd3deb0d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + sha256: fb31e006a25eb2e18f3440eb8d17be44c8ccfae559499199f73584566d0a444a + md5: 359eeb6536da0e687af562ed265ec263 + depends: + - python + license: ISC + size: 16546 + timestamp: 1609419417991 +- kind: conda + name: pure_eval + version: 0.2.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda + sha256: dcfcb3cee1ae0a89729601582cc3edea20ba13c9493967a03a693c67567af0c8 + md5: 0f051f09d992e0d08941706ad519ee0e + depends: + - python >=3.5 + license: MIT + license_family: MIT + size: 16551 + timestamp: 1721585805256 +- kind: conda + name: pycparser + version: '2.22' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + sha256: 406001ebf017688b1a1554b49127ca3a4ac4626ec0fd51dc75ffa4415b720b64 + md5: 844d9eb3b43095b031874477f7d70088 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 105098 + timestamp: 1711811634025 +- kind: conda + name: pygments + version: 2.18.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + sha256: 78267adf4e76d0d64ea2ffab008c501156c108bb08fecb703816fb63e279780b + md5: b7f5c092b8f9800150d998a71b76d5a1 + depends: + - python >=3.8 + license: BSD-2-Clause + license_family: BSD + size: 879295 + timestamp: 1714846885370 +- kind: conda + name: pysocks + version: 1.7.1 + build: pyh0701188_6 + build_number: 6 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh0701188_6.tar.bz2 + sha256: b3a612bc887f3dd0fb7c4199ad8e342bd148cf69a9b74fd9468a18cf2bef07b7 + md5: 56cd9fe388baac0e90c7149cfac95b60 + depends: + - __win + - python >=3.8 + - win_inet_pton + license: BSD-3-Clause + license_family: BSD + size: 19348 + timestamp: 1661605138291 +- kind: conda + name: pysocks + version: 1.7.1 + build: pyha2e5f31_6 + build_number: 6 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 + sha256: a42f826e958a8d22e65b3394f437af7332610e43ee313393d1cf143f0a2d274b + md5: 2a7de29fb590ca14b5243c4c812c8025 + depends: + - __unix + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 18981 + timestamp: 1661604969727 - kind: conda name: python - version: 3.12.6 - build: hc5c86c4_2_cpython - build_number: 2 + version: 3.13.0 + build: h9ebbce0_100_cp313 + build_number: 100 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.6-hc5c86c4_2_cpython.conda - sha256: dda1e75f5227654c78d9143562366eff04444cc8b887cf8f0cc4f6236996b744 - md5: cebe1534cdebcac43acca87bec946b01 + url: https://conda.anaconda.org/conda-forge/linux-64/python-3.13.0-h9ebbce0_100_cp313.conda + sha256: 6ab5179679f0909db828d8316f3b8b379014a82404807310fe7df5a6cf303646 + md5: 08e9aef080f33daeb192b2ddc7e4721f depends: - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 @@ -467,49 +2589,257 @@ packages: - libexpat >=2.6.3,<3.0a0 - libffi >=3.4,<4.0a0 - libgcc >=13 - - libnsl >=2.0.1,<2.1.0a0 + - libmpdec >=4.0.0,<5.0a0 - libsqlite >=3.46.1,<4.0a0 - libuuid >=2.38.1,<3.0a0 - - libxcrypt >=4.4.36 - libzlib >=1.3.1,<2.0a0 - ncurses >=6.5,<7.0a0 - openssl >=3.3.2,<4.0a0 + - python_abi 3.13.* *_cp313 - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - xz >=5.2.6,<6.0a0 - constrains: - - python_abi 3.12.* *_cp312 license: Python-2.0 - size: 31531222 - timestamp: 1727721840884 + size: 33112481 + timestamp: 1728419573472 - kind: conda name: python - version: 3.12.6 - build: hce54a09_2_cpython - build_number: 2 + version: 3.13.0 + build: hf5aa216_100_cp313 + build_number: 100 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/python-3.12.6-hce54a09_2_cpython.conda - sha256: 41325d4c2b5f8bda2b5dd4a71555ad12f3c78b7f0a00e41e57475822e7e89a73 - md5: c30b76855225babfbf18595408a377f3 + url: https://conda.anaconda.org/conda-forge/win-64/python-3.13.0-hf5aa216_100_cp313.conda + sha256: 18f3f0bd514c9101d38d57835b2d027958f3ae4b3b65c22d187a857aa26b3a08 + md5: 3c2f7ad3f598480fe2a09e4e33cb1a2a depends: - bzip2 >=1.0.8,<2.0a0 - libexpat >=2.6.3,<3.0a0 - libffi >=3.4,<4.0a0 + - libmpdec >=4.0.0,<5.0a0 - libsqlite >=3.46.1,<4.0a0 - libzlib >=1.3.1,<2.0a0 - openssl >=3.3.2,<4.0a0 + - python_abi 3.13.* *_cp313 - tk >=8.6.13,<8.7.0a0 - tzdata - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - - xz >=5.2.6,<6.0a0 - constrains: - - python_abi 3.12.* *_cp312 - license: Python-2.0 - size: 15854309 - timestamp: 1727719258211 + - xz >=5.2.6,<6.0a0 + license: Python-2.0 + size: 16641177 + timestamp: 1728417810202 +- kind: conda + name: python-dateutil + version: 2.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320 + md5: 2cf4264fffb9e6eff6031c5b6884d61c + depends: + - python >=3.7 + - six >=1.5 + license: Apache-2.0 + license_family: APACHE + size: 222742 + timestamp: 1709299922152 +- kind: conda + name: python-fastjsonschema + version: 2.20.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.20.0-pyhd8ed1ab_0.conda + sha256: 7d8c931b89c9980434986b4deb22c2917b58d9936c3974139b9c10ae86fdfe60 + md5: b98d2018c01ce9980c03ee2850690fab + depends: + - python >=3.3 + license: BSD-3-Clause + license_family: BSD + size: 226165 + timestamp: 1718477110630 +- kind: conda + name: python-json-logger + version: 2.0.7 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-json-logger-2.0.7-pyhd8ed1ab_0.conda + sha256: 4790787fe1f4e8da616edca4acf6a4f8ed4e7c6967aa31b920208fc8f95efcca + md5: a61bf9ec79426938ff785eb69dbb1960 + depends: + - python >=3.6 + license: BSD-2-Clause + license_family: BSD + size: 13383 + timestamp: 1677079727691 +- kind: conda + name: python_abi + version: '3.13' + build: 5_cp313 + build_number: 5 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.13-5_cp313.conda + sha256: 438225b241c5f9bddae6f0178a97f5870a89ecf927dfca54753e689907331442 + md5: 381bbd2a92c863f640a55b6ff3c35161 + constrains: + - python 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + size: 6217 + timestamp: 1723823393322 +- kind: conda + name: python_abi + version: '3.13' + build: 5_cp313 + build_number: 5 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.13-5_cp313.conda + sha256: 0c12cc1b84962444002c699ed21e815fb9f686f950d734332a1b74d07db97756 + md5: 44b4fe6f22b57103afb2299935c8b68e + constrains: + - python 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + size: 6716 + timestamp: 1723823166911 +- kind: conda + name: pytz + version: '2024.2' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.2-pyhd8ed1ab_0.conda + sha256: 81c16d9183bb4a6780366ce874e567ee5fc903722f85b2f8d1d9479ef1dafcc9 + md5: 260009d03c9d5c0f111904d851f053dc + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 186995 + timestamp: 1726055625738 +- kind: conda + name: pywin32 + version: '307' + build: py313h5813708_3 + build_number: 3 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pywin32-307-py313h5813708_3.conda + sha256: 0a68b324ea47ae720c62522c5d0bb5ea3e4987e1c5870d6490c7f954fbe14cbe + md5: 7113bd6cfe34e80d8211f7c019d14357 + depends: + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: PSF-2.0 + license_family: PSF + size: 6060096 + timestamp: 1728636763526 +- kind: conda + name: pywinpty + version: 2.0.14 + build: py313h5813708_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pywinpty-2.0.14-py313h5813708_0.conda + sha256: eeee0a592dbadeb5b54fc53194984f6b1698f073f49b0d2402e474a620069542 + md5: be81b7b3aa13aeffd1cc26a372ef5cfc + depends: + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - winpty + license: MIT + license_family: MIT + size: 210042 + timestamp: 1729202970817 +- kind: conda + name: pyyaml + version: 6.0.2 + build: py313h536fd9c_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py313h536fd9c_1.conda + sha256: 86ae34bf2bab82c0fff2e31a37318c8977297776436df780a83c6efa5f84749d + md5: 3789f360de131c345e96fbfc955ca80b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.13.0rc1,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + size: 205855 + timestamp: 1725456273924 +- kind: conda + name: pyyaml + version: 6.0.2 + build: py313ha7868ed_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.2-py313ha7868ed_1.conda + sha256: ffa21c4715aa139d20c96ae7274fbb7de12a546f3332eb8d07cc794741fcbde6 + md5: c1743e5c4c7402a14b515cf276778e59 + depends: + - python >=3.13.0rc1,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - yaml >=0.2.5,<0.3.0a0 + license: MIT + license_family: MIT + size: 181722 + timestamp: 1725456802746 +- kind: conda + name: pyzmq + version: 26.2.0 + build: py313h2100fd5_3 + build_number: 3 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pyzmq-26.2.0-py313h2100fd5_3.conda + sha256: 971bea2fd92920327f4a44e69393643193b435c37e7528d93c32071e531fc9ba + md5: d0ce06d0a38f8ad0dc9b71e14137deee + depends: + - libsodium >=1.0.20,<1.0.21.0a0 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zeromq >=4.3.5,<4.3.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 367463 + timestamp: 1728643113504 +- kind: conda + name: pyzmq + version: 26.2.0 + build: py313h8e95178_3 + build_number: 3 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pyzmq-26.2.0-py313h8e95178_3.conda + sha256: 0b26fe1cf10d3511b1ef72faedebfe57256e464a51d23e07153f09c6300ec42c + md5: 8ab50c9c9c3824ac0ffac9e9dcf5619e + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - libsodium >=1.0.20,<1.0.21.0a0 + - libstdcxx >=13 + - python >=3.13,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - zeromq >=4.3.5,<4.4.0a0 + license: BSD-3-Clause + license_family: BSD + size: 384582 + timestamp: 1728642439746 - kind: conda name: readline version: '8.2' @@ -526,6 +2856,278 @@ packages: license_family: GPL size: 281456 timestamp: 1679532220005 +- kind: conda + name: referencing + version: 0.35.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/referencing-0.35.1-pyhd8ed1ab_0.conda + sha256: be8d6d9e86b1a3fef5424127ff81782f8ca63d3058980859609f6f1ecdd34cb3 + md5: 0fc8b52192a8898627c3efae1003e9f6 + depends: + - attrs >=22.2.0 + - python >=3.8 + - rpds-py >=0.7.0 + license: MIT + license_family: MIT + size: 42210 + timestamp: 1714619625532 +- kind: conda + name: requests + version: 2.32.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + sha256: 5845ffe82a6fa4d437a2eae1e32a1ad308d7ad349f61e337c0a890fe04c513cc + md5: 5ede4753180c7a550a443c430dc8ab52 + depends: + - certifi >=2017.4.17 + - charset-normalizer >=2,<4 + - idna >=2.5,<4 + - python >=3.8 + - urllib3 >=1.21.1,<3 + constrains: + - chardet >=3.0.2,<6 + license: Apache-2.0 + license_family: APACHE + size: 58810 + timestamp: 1717057174842 +- kind: conda + name: rfc3339-validator + version: 0.1.4 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rfc3339-validator-0.1.4-pyhd8ed1ab_0.tar.bz2 + sha256: 7c7052b51de0b5c558f890bb11f8b5edbb9934a653d76be086b1182b9f54185d + md5: fed45fc5ea0813240707998abe49f520 + depends: + - python >=3.5 + - six + license: MIT + license_family: MIT + size: 8064 + timestamp: 1638811838081 +- kind: conda + name: rfc3986-validator + version: 0.1.1 + build: pyh9f0ad1d_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/rfc3986-validator-0.1.1-pyh9f0ad1d_0.tar.bz2 + sha256: 2a5b495a1de0f60f24d8a74578ebc23b24aa53279b1ad583755f223097c41c37 + md5: 912a71cc01012ee38e6b90ddd561e36f + depends: + - python + license: MIT + license_family: MIT + size: 7818 + timestamp: 1598024297745 +- kind: conda + name: rpds-py + version: 0.20.0 + build: py313h920b4c0_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.20.0-py313h920b4c0_1.conda + sha256: d0794a48c97c930d94fa7985b04cddcbfe7059d45f700956011cb33df7831f5a + md5: 3588c602a679eb85c19be526705e5d46 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.13.0rc1,<3.14.0a0 + - python_abi 3.13.* *_cp313 + constrains: + - __glibc >=2.17 + license: MIT + license_family: MIT + size: 334430 + timestamp: 1725327282979 +- kind: conda + name: rpds-py + version: 0.20.0 + build: py313hf3b5b86_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/rpds-py-0.20.0-py313hf3b5b86_1.conda + sha256: c6a181b26b7493485416a742477dff29b0f8cd2e4b2c0e0a5cffb808545b458e + md5: b755b464a25fa3584fb56cddcab72c7c + depends: + - python >=3.13.0rc1,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 208863 + timestamp: 1725328077851 +- kind: conda + name: send2trash + version: 1.8.3 + build: pyh0d859eb_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh0d859eb_0.conda + sha256: c4401b071e86ddfa0ea4f34b85308db2516b6aeca50053535996864cfdee7b3f + md5: 778594b20097b5a948c59e50ae42482a + depends: + - __linux + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + size: 22868 + timestamp: 1712585140895 +- kind: conda + name: send2trash + version: 1.8.3 + build: pyh5737063_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/send2trash-1.8.3-pyh5737063_0.conda + sha256: d8aa230501a33250af2deee03006a2579f0335e7240a9c7286834788dcdcfaa8 + md5: 5a86a21050ca3831ec7f77fb302f1132 + depends: + - __win + - python >=3.7 + - pywin32 + license: BSD-3-Clause + license_family: BSD + size: 23319 + timestamp: 1712585816346 +- kind: conda + name: setuptools + version: 75.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-75.1.0-pyhd8ed1ab_0.conda + sha256: 6725235722095c547edd24275053c615158d6163f396550840aebd6e209e4738 + md5: d5cd48392c67fb6849ba459c2c2b671f + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 777462 + timestamp: 1727249510532 +- kind: conda + name: six + version: 1.16.0 + build: pyh6c4a22f_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6 + md5: e5f25f8dbc060e9a8d912e432202afc2 + depends: + - python + license: MIT + license_family: MIT + size: 14259 + timestamp: 1620240338595 +- kind: conda + name: sniffio + version: 1.3.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/sniffio-1.3.1-pyhd8ed1ab_0.conda + sha256: bc12100b2d8836b93c55068b463190505b8064d0fc7d025e89f20ebf22fe6c2b + md5: 490730480d76cf9c8f8f2849719c6e2b + depends: + - python >=3.7 + license: Apache-2.0 + license_family: Apache + size: 15064 + timestamp: 1708953086199 +- kind: conda + name: soupsieve + version: '2.5' + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda + sha256: 54ae221033db8fbcd4998ccb07f3c3828b4d77e73b0c72b18c1d6a507059059c + md5: 3f144b2c34f8cb5a9abd9ed23a39c561 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 36754 + timestamp: 1693929424267 +- kind: conda + name: stack_data + version: 0.6.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda + sha256: a58433e75229bec39f3be50c02efbe9b7083e53a1f31d8ee247564f370191eec + md5: e7df0fdd404616638df5ece6e69ba7af + depends: + - asttokens + - executing + - pure_eval + - python >=3.5 + license: MIT + license_family: MIT + size: 26205 + timestamp: 1669632203115 +- kind: conda + name: terminado + version: 0.18.1 + build: pyh0d859eb_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh0d859eb_0.conda + sha256: b300557c0382478cf661ddb520263508e4b3b5871b471410450ef2846e8c352c + md5: efba281bbdae5f6b0a1d53c6d4a97c93 + depends: + - __linux + - ptyprocess + - python >=3.8 + - tornado >=6.1.0 + license: BSD-2-Clause + license_family: BSD + size: 22452 + timestamp: 1710262728753 +- kind: conda + name: terminado + version: 0.18.1 + build: pyh5737063_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/terminado-0.18.1-pyh5737063_0.conda + sha256: 8cb078291fd7882904e3de594d299c8de16dd3af7405787fce6919a385cfc238 + md5: 4abd500577430a942a995fd0d09b76a2 + depends: + - __win + - python >=3.8 + - pywinpty >=1.1.0 + - tornado >=6.1.0 + license: BSD-2-Clause + license_family: BSD + size: 22883 + timestamp: 1710262943966 +- kind: conda + name: tinycss2 + version: 1.4.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.4.0-pyhd8ed1ab_0.conda + sha256: cad582d6f978276522f84bd209a5ddac824742fe2d452af6acf900f8650a73a2 + md5: f1acf5fdefa8300de697982bcb1761c9 + depends: + - python >=3.5 + - webencodings >=0.4 + license: BSD-3-Clause + license_family: BSD + size: 28285 + timestamp: 1729802975370 - kind: conda name: tk version: 8.6.13 @@ -559,6 +3161,132 @@ packages: license_family: BSD size: 3318875 timestamp: 1699202167581 +- kind: conda + name: tomli + version: 2.0.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.2-pyhd8ed1ab_0.conda + sha256: 5e742ba856168b606ac3c814d247657b1c33b8042371f1a08000bdc5075bc0cc + md5: e977934e00b355ff55ed154904044727 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 18203 + timestamp: 1727974767524 +- kind: conda + name: tornado + version: 6.4.1 + build: py313h536fd9c_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.1-py313h536fd9c_1.conda + sha256: 29630b1f5452628b661a7cdde2c54aa7d9e31874d4ddb8080ad060c10e79063d + md5: 70b5b6dfd7d1760cd59849e2271d937b + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=13 + - python >=3.13.0rc1,<3.14.0a0 + - python_abi 3.13.* *_cp313 + license: Apache-2.0 + license_family: Apache + size: 863224 + timestamp: 1724960831827 +- kind: conda + name: tornado + version: 6.4.1 + build: py313ha7868ed_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/tornado-6.4.1-py313ha7868ed_1.conda + sha256: 63771acac59edb00920e69053e1452c2bea5906f12b9dfde2e7063ef5873e88a + md5: ef4504fee3b2345096fec32898bd0275 + depends: + - python >=3.13.0rc1,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: Apache-2.0 + license_family: Apache + size: 868535 + timestamp: 1724961251062 +- kind: conda + name: traitlets + version: 5.14.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + sha256: 8a64fa0f19022828513667c2c7176cfd125001f3f4b9bc00d33732e627dd2592 + md5: 3df84416a021220d8b5700c613af2dc5 + depends: + - python >=3.8 + license: BSD-3-Clause + license_family: BSD + size: 110187 + timestamp: 1713535244513 +- kind: conda + name: types-python-dateutil + version: 2.9.0.20241003 + build: pyhff2d567_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/types-python-dateutil-2.9.0.20241003-pyhff2d567_0.conda + sha256: 8489af986daebfbcd13d3748ba55431259206e37f184ab42a57e107fecd85e02 + md5: 3d326f8a2aa2d14d51d8c513426b5def + depends: + - python >=3.6 + license: Apache-2.0 AND MIT + size: 21765 + timestamp: 1727940339297 +- kind: conda + name: typing-extensions + version: 4.12.2 + build: hd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.12.2-hd8ed1ab_0.conda + sha256: d3b9a8ed6da7c9f9553c5fd8a4fca9c3e0ab712fa5f497859f82337d67533b73 + md5: 52d648bd608f5737b123f510bb5514b5 + depends: + - typing_extensions 4.12.2 pyha770c72_0 + license: PSF-2.0 + license_family: PSF + size: 10097 + timestamp: 1717802659025 +- kind: conda + name: typing_extensions + version: 4.12.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + size: 39888 + timestamp: 1717802653893 +- kind: conda + name: typing_utils + version: 0.1.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_utils-0.1.0-pyhd8ed1ab_0.tar.bz2 + sha256: 9e3758b620397f56fb709f796969de436d63b7117897159619b87938e1f78739 + md5: eb67e3cace64c66233e2d35949e20f92 + depends: + - python >=3.6.1 + license: Apache-2.0 + license_family: APACHE + size: 13829 + timestamp: 1622899345711 - kind: conda name: tzdata version: 2024a @@ -586,6 +3314,40 @@ packages: license_family: PROPRIETARY size: 1283972 timestamp: 1666630199266 +- kind: conda + name: uri-template + version: 1.3.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/uri-template-1.3.0-pyhd8ed1ab_0.conda + sha256: b76904b53721dc88a46352324c79d2b077c2f74a9f7208ad2c4249892669ae94 + md5: 0944dc65cb4a9b5b68522c3bb585d41c + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 23999 + timestamp: 1688655976471 +- kind: conda + name: urllib3 + version: 2.2.3 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.3-pyhd8ed1ab_0.conda + sha256: b6bb34ce41cd93956ad6eeee275ed52390fb3788d6c75e753172ea7ac60b66e5 + md5: 6b55867f385dd762ed99ea687af32a69 + depends: + - brotli-python >=1.0.9 + - h2 >=4,<5 + - pysocks >=1.5.6,<2.0,!=1.5.7 + - python >=3.8 + - zstandard >=0.18.0 + license: MIT + license_family: MIT + size: 98076 + timestamp: 1726496531769 - kind: conda name: vc version: '14.3' @@ -635,6 +3397,112 @@ packages: license_family: BSD size: 17241 timestamp: 1725984096440 +- kind: conda + name: wcwidth + version: 0.2.13 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + sha256: b6cd2fee7e728e620ec736d8dfee29c6c9e2adbd4e695a31f1d8f834a83e57e3 + md5: 68f0738df502a14213624b288c60c9ad + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 32709 + timestamp: 1704731373922 +- kind: conda + name: webcolors + version: 24.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/webcolors-24.8.0-pyhd8ed1ab_0.conda + sha256: ec71f97c332a7d328ae038990b8090cbfa772f82845b5d2233defd167b7cc5ac + md5: eb48b812eb4fbb9ff238a6651fdbbcae + depends: + - python >=3.5 + license: BSD-3-Clause + license_family: BSD + size: 18378 + timestamp: 1723294800217 +- kind: conda + name: webencodings + version: 0.5.1 + build: pyhd8ed1ab_2 + build_number: 2 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda + sha256: 2adf9bd5482802837bc8814cbe28d7b2a4cbd2e2c52e381329eaa283b3ed1944 + md5: daf5160ff9cde3a468556965329085b9 + depends: + - python >=2.6 + license: BSD-3-Clause + license_family: BSD + size: 15600 + timestamp: 1694681458271 +- kind: conda + name: websocket-client + version: 1.8.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.8.0-pyhd8ed1ab_0.conda + sha256: 44a5e3b97feef24cd719f7851cca9af9799dc9c17d3e0298d5856baab2d682f5 + md5: f372c576b8774922da83cda2b12f9d29 + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + size: 47066 + timestamp: 1713923494501 +- kind: conda + name: widgetsnbextension + version: 4.0.13 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/widgetsnbextension-4.0.13-pyhd8ed1ab_0.conda + sha256: d155adc10f8c96f76d4468dbe37b33b4334dadf5cd4a95841aa009ca9bced5fa + md5: 6372cd99502721bd7499f8d16b56268d + depends: + - python >=3.7 + license: BSD-3-Clause + license_family: BSD + size: 898656 + timestamp: 1724331433259 +- kind: conda + name: win_inet_pton + version: 1.1.0 + build: pyh7428d3b_7 + build_number: 7 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_7.conda + sha256: c5297692ab34aade5e21107abaf623d6f93847662e25f655320038d2bfa1a812 + md5: c998c13b2f998af57c3b88c7a47979e0 + depends: + - __win + - python >=3.6 + license: LicenseRef-Public-Domain + size: 9602 + timestamp: 1727796413384 +- kind: conda + name: winpty + version: 0.4.3 + build: '4' + build_number: 4 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/winpty-0.4.3-4.tar.bz2 + sha256: 9df10c5b607dd30e05ba08cbd940009305c75db242476f4e845ea06008b0a283 + md5: 1cee351bf20b830d991dbe0bc8cd7dfe + arch: x86_64 + platform: win + license: MIT + license_family: MIT + size: 1176306 - kind: conda name: xz version: 5.2.6 @@ -662,3 +3530,163 @@ packages: license: LGPL-2.1 and GPL-2.0 size: 217804 timestamp: 1660346976440 +- kind: conda + name: yaml + version: 0.2.5 + build: h7f98852_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 + sha256: a4e34c710eeb26945bdbdaba82d3d74f60a78f54a874ec10d373811a5d217535 + md5: 4cb3ad778ec2d5a7acbdf254eb1c42ae + depends: + - libgcc-ng >=9.4.0 + license: MIT + license_family: MIT + size: 89141 + timestamp: 1641346969816 +- kind: conda + name: yaml + version: 0.2.5 + build: h8ffe710_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h8ffe710_2.tar.bz2 + sha256: 4e2246383003acbad9682c7c63178e2e715ad0eb84f03a8df1fbfba455dfedc5 + md5: adbfb9f45d1004a26763652246a33764 + depends: + - vc >=14.1,<15.0a0 + - vs2015_runtime >=14.16.27012 + license: MIT + license_family: MIT + size: 63274 + timestamp: 1641347623319 +- kind: conda + name: zeromq + version: 4.3.5 + build: h3b0a872_6 + build_number: 6 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h3b0a872_6.conda + sha256: e67288b1c98a31ee58a5c07bdd873dbe08e75f752e1ad605d5e8c0697339903e + md5: 113506c8d2d558e733f5c38f6bf08c50 + depends: + - __glibc >=2.17,<3.0.a0 + - krb5 >=1.21.3,<1.22.0a0 + - libgcc >=13 + - libsodium >=1.0.20,<1.0.21.0a0 + - libstdcxx >=13 + license: MPL-2.0 + license_family: MOZILLA + size: 335528 + timestamp: 1728364029042 +- kind: conda + name: zeromq + version: 4.3.5 + build: ha9f60a1_6 + build_number: 6 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zeromq-4.3.5-ha9f60a1_6.conda + sha256: c37130692742cc43eedf4e23270c7d1634235acff50760025e9583f8b46b64e6 + md5: 33a78bbc44d6550c361abb058a0556e2 + depends: + - krb5 >=1.21.3,<1.22.0a0 + - libsodium >=1.0.20,<1.0.21.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MPL-2.0 + license_family: MOZILLA + size: 2701749 + timestamp: 1728364260886 +- kind: conda + name: zipp + version: 3.20.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.2-pyhd8ed1ab_0.conda + sha256: 1e84fcfa41e0afdd87ff41e6fbb719c96a0e098c1f79be342293ab0bd8dea322 + md5: 4daaed111c05672ae669f7036ee5bba3 + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 21409 + timestamp: 1726248679175 +- kind: conda + name: zstandard + version: 0.23.0 + build: py313h574b89f_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py313h574b89f_1.conda + sha256: 1d2744ec0e91da267ce749e19142081472539cb140a7dad0646cd249246691fe + md5: 8e017aca933f4dd25491151edd3e7820 + depends: + - cffi >=1.11 + - python >=3.13.0rc1,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 325703 + timestamp: 1725305947138 +- kind: conda + name: zstandard + version: 0.23.0 + build: py313h80202fe_1 + build_number: 1 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py313h80202fe_1.conda + sha256: ea82f2b8964150a3aa7373b4697e48e64f2200fe68ae554ee85c641c692d1c97 + md5: c178558ff516cd507763ffee230c20b2 + depends: + - __glibc >=2.17,<3.0.a0 + - cffi >=1.11 + - libgcc >=13 + - python >=3.13.0rc1,<3.14.0a0 + - python_abi 3.13.* *_cp313 + - zstd >=1.5.6,<1.5.7.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + size: 424424 + timestamp: 1725305749031 +- kind: conda + name: zstd + version: 1.5.6 + build: h0ea2cb4_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + sha256: 768e30dc513568491818fb068ee867c57c514b553915536da09e5d10b4ebf3c3 + md5: 9a17230f95733c04dc40a2b1e5491d74 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + size: 349143 + timestamp: 1714723445995 +- kind: conda + name: zstd + version: 1.5.6 + build: ha6fb4c9_0 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + sha256: c558b9cc01d9c1444031bd1ce4b9cff86f9085765f17627a6cd85fc623c8a02b + md5: 4d056880988120e29d75bfff282e0f45 + depends: + - libgcc-ng >=12 + - libstdcxx-ng >=12 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + size: 554846 + timestamp: 1714722996770 \ No newline at end of file diff --git a/pixi.toml b/pixi.toml index 86725ee2e..fb68a3550 100644 --- a/pixi.toml +++ b/pixi.toml @@ -1,9 +1,10 @@ [project] name = "Wflow.jl" authors = [ - "Joost Buitink ", + "Willem van Verseveld ", "Hofer-Julian ", + "Bart de Koning " ] channels = ["conda-forge"] platforms = ["win-64", "linux-64"] @@ -41,10 +42,16 @@ test-wflow-server = { cmd = "julia --project=server --eval 'using Pkg; Pkg.test( "instantiate-wflow-server", ] } instantiate-wflow-server = "julia --project=server --eval 'using Pkg; Pkg.instantiate(); Pkg.develop(path=\"./\")'" +# Docs +install-ci = { depends_on = ["install-julia", "update-registry-julia"] } +quarto-check = { cmd = "quarto check all" } +quarto-render = { cmd = "julia --project=docs --eval 'using Pkg; Pkg.build(\"IJulia\")' && quarto render docs --to html --execute" } +quarto-preview = { cmd = "quarto preview docs" } [dependencies] juliaup = "*" python = ">=3.10" +jupyter = ">=1.1.1,<2" [system-requirements] linux = "3.10.0"