diff --git a/extern/Microphysics b/extern/Microphysics index 6abd22160b..3fce117e1a 160000 --- a/extern/Microphysics +++ b/extern/Microphysics @@ -1 +1 @@ -Subproject commit 6abd22160ba1d06bd03647f6412fe84cf7bfdf28 +Subproject commit 3fce117e1a6d46ee0175bbdc0774679182c0cd20 diff --git a/extern/photoionization-julia/Manifest.toml b/extern/photoionization-julia/Manifest.toml new file mode 100644 index 0000000000..faae0bc7c3 --- /dev/null +++ b/extern/photoionization-julia/Manifest.toml @@ -0,0 +1,2957 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.11.7" +manifest_format = "2.0" +project_hash = "510e8c89ffe8981e72f3c257b8128e7b0e9d4a54" + +[[deps.ADTypes]] +git-tree-sha1 = "f7304359109c768cf32dc5fa2d371565bb63b68a" +uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" +version = "1.21.0" + + [deps.ADTypes.extensions] + ADTypesChainRulesCoreExt = "ChainRulesCore" + ADTypesConstructionBaseExt = "ConstructionBase" + ADTypesEnzymeCoreExt = "EnzymeCore" + + [deps.ADTypes.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + +[[deps.Accessors]] +deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "MacroTools"] +git-tree-sha1 = "2eeb2c9bef11013efc6f8f97f32ee59b146b09fb" +uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" +version = "0.1.44" + + [deps.Accessors.extensions] + AxisKeysExt = "AxisKeys" + IntervalSetsExt = "IntervalSets" + LinearAlgebraExt = "LinearAlgebra" + StaticArraysExt = "StaticArrays" + StructArraysExt = "StructArrays" + TestExt = "Test" + UnitfulExt = "Unitful" + + [deps.Accessors.weakdeps] + AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "0761717147821d696c9470a7a86364b2fbd22fd8" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "4.5.2" +weakdeps = ["SparseArrays", "StaticArrays"] + + [deps.Adapt.extensions] + AdaptSparseArraysExt = "SparseArrays" + AdaptStaticArraysExt = "StaticArrays" + +[[deps.AliasTables]] +deps = ["PtrArrays", "Random"] +git-tree-sha1 = "9876e1e164b144ca45e9e3198d0b689cadfed9ff" +uuid = "66dad0bd-aa9a-41b7-9441-69ab47430ed8" +version = "1.1.3" + +[[deps.AlmostBlockDiagonals]] +deps = ["ConcreteStructs"] +git-tree-sha1 = "743abe5e5fe8cff96dad4123f263c0d8eee281c0" +uuid = "a95523ee-d6da-40b5-98cc-27bc505739d5" +version = "0.1.10" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.2" + +[[deps.ArnoldiMethod]] +deps = ["LinearAlgebra", "Random", "StaticArrays"] +git-tree-sha1 = "d57bd3762d308bded22c3b82d033bff85f6195c6" +uuid = "ec485272-7323-5ecc-a04f-4719b315124d" +version = "0.4.0" + +[[deps.ArrayInterface]] +deps = ["Adapt", "LinearAlgebra"] +git-tree-sha1 = "78b3a7a536b4b0a747a0f296ea77091ca0a9f9a3" +uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" +version = "7.23.0" + + [deps.ArrayInterface.extensions] + ArrayInterfaceAMDGPUExt = "AMDGPU" + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceCUDSSExt = ["CUDSS", "CUDA"] + ArrayInterfaceChainRulesCoreExt = "ChainRulesCore" + ArrayInterfaceChainRulesExt = "ChainRules" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + ArrayInterfaceMetalExt = "Metal" + ArrayInterfaceReverseDiffExt = "ReverseDiff" + ArrayInterfaceSparseArraysExt = "SparseArrays" + ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" + ArrayInterfaceTrackerExt = "Tracker" + + [deps.ArrayInterface.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" + ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.ArrayLayouts]] +deps = ["FillArrays", "LinearAlgebra", "StaticArrays"] +git-tree-sha1 = "e0b47732a192dd59b9d079a06d04235e2f833963" +uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" +version = "1.12.2" +weakdeps = ["SparseArrays"] + + [deps.ArrayLayouts.extensions] + ArrayLayoutsSparseArraysExt = "SparseArrays" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" +version = "1.11.0" + +[[deps.BandedMatrices]] +deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "PrecompileTools"] +git-tree-sha1 = "02fa77c70ba84361b9bc9ff28523bd9d78519265" +uuid = "aae01518-5342-5314-be14-df237901396f" +version = "1.11.0" + + [deps.BandedMatrices.extensions] + BandedMatricesSparseArraysExt = "SparseArrays" + CliqueTreesExt = "CliqueTrees" + + [deps.BandedMatrices.weakdeps] + CliqueTrees = "60701a23-6482-424a-84db-faee86b9b1f8" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +version = "1.11.0" + +[[deps.BitFlags]] +git-tree-sha1 = "0691e34b3bb8be9307330f88d1a3c3f25466c24d" +uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" +version = "0.1.9" + +[[deps.BitTwiddlingConvenienceFunctions]] +deps = ["Static"] +git-tree-sha1 = "f21cfd4950cb9f0587d5067e69405ad2acd27b87" +uuid = "62783981-4cbd-42fc-bca8-16325de8dc4b" +version = "0.1.6" + +[[deps.BoundaryValueDiffEq]] +deps = ["ADTypes", "BoundaryValueDiffEqAscher", "BoundaryValueDiffEqCore", "BoundaryValueDiffEqFIRK", "BoundaryValueDiffEqMIRK", "BoundaryValueDiffEqMIRKN", "BoundaryValueDiffEqShooting", "DiffEqBase", "FastClosures", "ForwardDiff", "LinearAlgebra", "OrdinaryDiffEqTsit5", "Reexport", "SciMLBase"] +git-tree-sha1 = "601b16cb493a593e2a5c459fdcbf40c6834d0354" +uuid = "764a87c0-6b3e-53db-9096-fe964310641d" +version = "5.20.0" + + [deps.BoundaryValueDiffEq.extensions] + BoundaryValueDiffEqODEInterfaceExt = "ODEInterface" + + [deps.BoundaryValueDiffEq.weakdeps] + ODEInterface = "54ca160b-1b9f-5127-a996-1867f4bc2a2c" + +[[deps.BoundaryValueDiffEqAscher]] +deps = ["ADTypes", "AlmostBlockDiagonals", "BoundaryValueDiffEqCore", "ConcreteStructs", "DifferentiationInterface", "FastClosures", "ForwardDiff", "LinearAlgebra", "PreallocationTools", "RecursiveArrayTools", "Reexport", "SciMLBase", "Setfield"] +git-tree-sha1 = "adfad70381f10dbce8617d19f8deb6ae61d148f0" +uuid = "7227322d-7511-4e07-9247-ad6ff830280e" +version = "1.12.0" + +[[deps.BoundaryValueDiffEqCore]] +deps = ["ADTypes", "Adapt", "ArrayInterface", "ConcreteStructs", "DiffEqBase", "ForwardDiff", "Integrals", "LineSearch", "LinearAlgebra", "NonlinearSolveBase", "NonlinearSolveFirstOrder", "OptimizationBase", "PreallocationTools", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLLogging", "SciMLStructures", "Setfield", "SparseArrays", "SparseConnectivityTracer", "SparseMatrixColorings"] +git-tree-sha1 = "825a77bc661a4e7fbbb69e80d150e94a5e692788" +uuid = "56b672f2-a5fe-4263-ab2d-da677488eb3a" +version = "2.2.0" + +[[deps.BoundaryValueDiffEqFIRK]] +deps = ["ADTypes", "ArrayInterface", "BandedMatrices", "BoundaryValueDiffEqCore", "ConcreteStructs", "DifferentiationInterface", "FastAlmostBandedMatrices", "FastClosures", "ForwardDiff", "LinearAlgebra", "PreallocationTools", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLStructures", "Setfield", "SparseArrays", "StaticArrays"] +git-tree-sha1 = "66f98dd3d114d7a411325971c6df88519542fc39" +uuid = "85d9eb09-370e-4000-bb32-543851f73618" +version = "1.13.0" + +[[deps.BoundaryValueDiffEqMIRK]] +deps = ["ADTypes", "ArrayInterface", "BandedMatrices", "BoundaryValueDiffEqCore", "ConcreteStructs", "DifferentiationInterface", "FastAlmostBandedMatrices", "FastClosures", "ForwardDiff", "LinearAlgebra", "PreallocationTools", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLStructures", "Setfield", "SparseArrays"] +git-tree-sha1 = "ae0686b8874befdf4c9bd5d4eeb54119cadbec19" +uuid = "1a22d4ce-7765-49ea-b6f2-13c8438986a6" +version = "1.13.0" + +[[deps.BoundaryValueDiffEqMIRKN]] +deps = ["ADTypes", "ArrayInterface", "BandedMatrices", "BoundaryValueDiffEqCore", "ConcreteStructs", "DifferentiationInterface", "FastAlmostBandedMatrices", "FastClosures", "ForwardDiff", "LinearAlgebra", "PreallocationTools", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "Setfield", "SparseArrays"] +git-tree-sha1 = "9a67b371f91910c4737b0c26c92471b7f10713b2" +uuid = "9255f1d6-53bf-473e-b6bd-23f1ff009da4" +version = "1.12.0" + +[[deps.BoundaryValueDiffEqShooting]] +deps = ["ADTypes", "ArrayInterface", "BandedMatrices", "BoundaryValueDiffEqCore", "ConcreteStructs", "DifferentiationInterface", "FastClosures", "ForwardDiff", "LinearAlgebra", "OrdinaryDiffEqTsit5", "PreallocationTools", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "Setfield", "SparseArrays"] +git-tree-sha1 = "136c8b312367cf2784e942b65871c5ee7b60775e" +uuid = "ed55bfe0-3725-4db6-871e-a1dc9f42a757" +version = "1.13.0" + +[[deps.BracketingNonlinearSolve]] +deps = ["CommonSolve", "ConcreteStructs", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase"] +git-tree-sha1 = "7ad7171d693ae5552ac43862e7f6b61df4471c2b" +uuid = "70df07ce-3d50-431d-a3e7-ca6ddb60ac1e" +version = "1.12.1" + + [deps.BracketingNonlinearSolve.extensions] + BracketingNonlinearSolveChainRulesCoreExt = ["ChainRulesCore", "ForwardDiff"] + BracketingNonlinearSolveForwardDiffExt = "ForwardDiff" + + [deps.BracketingNonlinearSolve.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1b96ea4a01afe0ea4090c5c8039690672dd13f2e" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.9+0" + +[[deps.CEnum]] +git-tree-sha1 = "389ad5c84de1ae7cf0e28e381131c98ea87d54fc" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.5.0" + +[[deps.CPUSummary]] +deps = ["CpuId", "IfElse", "PrecompileTools", "Preferences", "Static"] +git-tree-sha1 = "f3a21d7fc84ba618a779d1ed2fcca2e682865bab" +uuid = "2a0fbf3d-bb9c-48f3-b0a9-814d99fd7ab9" +version = "0.2.7" + +[[deps.CSV]] +deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] +git-tree-sha1 = "deddd8725e5e1cc49ee205a1964256043720a6c3" +uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +version = "0.10.15" + +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "d0efe2c6fdcdaa1c161d206aa8b933788397ec71" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.18.6+0" + +[[deps.CloseOpenIntervals]] +deps = ["Static", "StaticArrayInterface"] +git-tree-sha1 = "05ba0d07cd4fd8b7a39541e31a7b0254704ea581" +uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9" +version = "0.1.13" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.8" + +[[deps.ColorSchemes]] +deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] +git-tree-sha1 = "b0fd3f56fa442f81e0a47815c92245acfaaa4e34" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.31.0" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "67e11ee83a43eb71ddc950302c53bf33f0690dfe" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.12.1" +weakdeps = ["StyledStrings"] + + [deps.ColorTypes.extensions] + StyledStringsExt = "StyledStrings" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] +git-tree-sha1 = "8b3b6f87ce8f65a2b4f857528fd8d70086cd72b1" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.11.0" +weakdeps = ["SpecialFunctions"] + + [deps.ColorVectorSpace.extensions] + SpecialFunctionsExt = "SpecialFunctions" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "37ea44092930b1811e666c3bc38065d7d87fcc74" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.13.1" + +[[deps.Combinatorics]] +git-tree-sha1 = "c761b00e7755700f9cdf5b02039939d1359330e1" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.1.0" + +[[deps.CommonSolve]] +git-tree-sha1 = "78ea4ddbcf9c241827e7035c3a03e2e456711470" +uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" +version = "0.2.6" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools"] +git-tree-sha1 = "cda2cfaebb4be89c9084adaca7dd7333369715c5" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.1" + +[[deps.CommonWorldInvalidations]] +git-tree-sha1 = "ae52d1c52048455e85a387fbee9be553ec2b68d0" +uuid = "f70d9fcc-98c5-4d4a-abd7-e4cdeebd8ca8" +version = "1.0.0" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.18.1" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.1.1+0" + +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" +weakdeps = ["InverseFunctions"] + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + +[[deps.ConcreteStructs]] +git-tree-sha1 = "f749037478283d372048690eb3b5f92a79432b34" +uuid = "2569d6c7-a4a2-43d3-a901-331e8e4be471" +version = "0.2.3" + +[[deps.ConcurrentUtilities]] +deps = ["Serialization", "Sockets"] +git-tree-sha1 = "21d088c496ea22914fe80906eb5bce65755e5ec8" +uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" +version = "2.5.1" + +[[deps.ConstructionBase]] +git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.6.0" + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseLinearAlgebraExt = "LinearAlgebra" + ConstructionBaseStaticArraysExt = "StaticArrays" + + [deps.ConstructionBase.weakdeps] + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.Contour]] +git-tree-sha1 = "439e35b0b36e2e5881738abc8857bd92ad6ff9a8" +uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" +version = "0.6.3" + +[[deps.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 = "d8928e9169ff76c6281f39a659f9bca3a573f24c" +uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +version = "1.8.1" + +[[deps.DataStructures]] +deps = ["OrderedCollections"] +git-tree-sha1 = "e86f4a2805f7f19bec5129bc9150c38208e5dc23" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.19.4" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" +version = "1.11.0" + +[[deps.Dbus_jll]] +deps = ["Artifacts", "Expat_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "473e9afc9cf30814eb67ffa5f2db7df82c3ad9fd" +uuid = "ee1fde0b-3d02-5ea6-8484-8dfef6360eab" +version = "1.16.2+0" + +[[deps.DelayDiffEq]] +deps = ["ArrayInterface", "DataStructures", "DiffEqBase", "FastBroadcast", "ForwardDiff", "LinearAlgebra", "Logging", "OrdinaryDiffEqCore", "OrdinaryDiffEqDefault", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqFunctionMap", "OrdinaryDiffEqNonlinearSolve", "OrdinaryDiffEqRosenbrock", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLLogging", "SimpleNonlinearSolve", "SymbolicIndexingInterface"] +git-tree-sha1 = "eeb17bb034ee6289fbf23bf1fa660cc39b91a787" +uuid = "bcd4f6db-9728-5f36-b5f7-82caef46ccdb" +version = "5.73.0" +weakdeps = ["DiffEqNoiseProcess", "Random", "StochasticDiffEqCore"] + + [deps.DelayDiffEq.extensions] + DelayDiffEqStochasticDiffEqCoreExt = ["StochasticDiffEqCore", "DiffEqNoiseProcess", "Random"] + +[[deps.DelimitedFiles]] +deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +version = "1.9.1" + +[[deps.DiffEqBase]] +deps = ["ArrayInterface", "BracketingNonlinearSolve", "ConcreteStructs", "DocStringExtensions", "FastBroadcast", "FastClosures", "FastPower", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "Logging", "Markdown", "MuladdMacro", "PrecompileTools", "Printf", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "SciMLStructures", "Setfield", "Static", "StaticArraysCore", "SymbolicIndexingInterface", "TruncatedStacktraces"] +git-tree-sha1 = "52a4b2bb56577d6e8fb5372e35f7542eddaeb283" +uuid = "2b5f629d-d688-5b77-993f-72d75c75574e" +version = "6.215.0" + + [deps.DiffEqBase.extensions] + DiffEqBaseCUDAExt = "CUDA" + DiffEqBaseChainRulesCoreExt = "ChainRulesCore" + DiffEqBaseDynamicQuantitiesExt = "DynamicQuantities" + DiffEqBaseEnzymeExt = ["ChainRulesCore", "Enzyme"] + DiffEqBaseFlexUnitsExt = "FlexUnits" + DiffEqBaseForwardDiffExt = ["ForwardDiff"] + DiffEqBaseGTPSAExt = "GTPSA" + DiffEqBaseGeneralizedGeneratedExt = "GeneralizedGenerated" + DiffEqBaseMPIExt = "MPI" + DiffEqBaseMeasurementsExt = "Measurements" + DiffEqBaseMonteCarloMeasurementsExt = "MonteCarloMeasurements" + DiffEqBaseMooncakeExt = "Mooncake" + DiffEqBaseReverseDiffExt = "ReverseDiff" + DiffEqBaseSparseArraysExt = "SparseArrays" + DiffEqBaseTrackerExt = "Tracker" + DiffEqBaseUnitfulExt = "Unitful" + + [deps.DiffEqBase.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" + DynamicQuantities = "06fc5a27-2a28-4c7c-a15d-362465fb6821" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + FlexUnits = "76e01b6b-c995-4ce6-8559-91e72a3d4e95" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + GTPSA = "b27dd330-f138-47c5-815b-40db9dd9b6e8" + GeneralizedGenerated = "6b9d7cbe-bcb9-11e9-073f-15a7a543e2eb" + MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.DiffEqCallbacks]] +deps = ["ConcreteStructs", "DataStructures", "DiffEqBase", "DifferentiationInterface", "LinearAlgebra", "Markdown", "PrecompileTools", "RecipesBase", "RecursiveArrayTools", "SciMLBase", "StaticArraysCore"] +git-tree-sha1 = "6578347ab1743b1eed62a83b537bd276a5cc736b" +uuid = "459566f4-90b8-5000-8ac3-15dfb0a30def" +version = "4.13.0" + + [deps.DiffEqCallbacks.extensions] + DiffEqCallbacksFunctorsExt = "Functors" + + [deps.DiffEqCallbacks.weakdeps] + Functors = "d9f16b24-f501-4c13-a1f2-28368ffc5196" + +[[deps.DiffEqNoiseProcess]] +deps = ["CommonSolve", "DiffEqBase", "Distributions", "GPUArraysCore", "LinearAlgebra", "Markdown", "PoissonRandom", "QuadGK", "Random", "RecipesBase", "RecursiveArrayTools", "ResettableStacks", "SciMLBase", "StaticArraysCore", "Statistics"] +git-tree-sha1 = "feb625b2aa510b7f8aee69d3fc60c1eed53640cc" +uuid = "77a26b50-5914-5dd7-bc55-306e6241c503" +version = "5.28.0" + + [deps.DiffEqNoiseProcess.extensions] + DiffEqNoiseProcessOptimExt = "Optim" + DiffEqNoiseProcessReverseDiffExt = "ReverseDiff" + + [deps.DiffEqNoiseProcess.weakdeps] + Optim = "429524aa-4258-5aef-a3af-852621145aeb" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + +[[deps.DiffResults]] +deps = ["StaticArraysCore"] +git-tree-sha1 = "782dd5f4561f5d267313f23853baaaa4c52ea621" +uuid = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" +version = "1.1.0" + +[[deps.DiffRules]] +deps = ["IrrationalConstants", "LogExpFunctions", "NaNMath", "Random", "SpecialFunctions"] +git-tree-sha1 = "23163d55f885173722d1e4cf0f6110cdbaf7e272" +uuid = "b552c78f-8df3-52c6-915a-8e097449b14b" +version = "1.15.1" + +[[deps.DifferentialEquations]] +deps = ["BoundaryValueDiffEq", "DelayDiffEq", "DiffEqBase", "DiffEqCallbacks", "DiffEqNoiseProcess", "JumpProcesses", "LinearAlgebra", "LinearSolve", "NonlinearSolve", "OrdinaryDiffEq", "Random", "RecursiveArrayTools", "Reexport", "SciMLBase", "SteadyStateDiffEq", "StochasticDiffEq", "Sundials"] +git-tree-sha1 = "1df783c534cd0c4a865a397b1c4801771b5cbb07" +uuid = "0c46a032-eb83-5123-abaf-570d42b7fbaa" +version = "7.17.0" + +[[deps.DifferentiationInterface]] +deps = ["ADTypes", "LinearAlgebra"] +git-tree-sha1 = "7ae99144ea44715402c6c882bfef2adbeadbc4ce" +uuid = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" +version = "0.7.16" + + [deps.DifferentiationInterface.extensions] + DifferentiationInterfaceChainRulesCoreExt = "ChainRulesCore" + DifferentiationInterfaceDiffractorExt = "Diffractor" + DifferentiationInterfaceEnzymeExt = ["EnzymeCore", "Enzyme"] + DifferentiationInterfaceFastDifferentiationExt = "FastDifferentiation" + DifferentiationInterfaceFiniteDiffExt = "FiniteDiff" + DifferentiationInterfaceFiniteDifferencesExt = "FiniteDifferences" + DifferentiationInterfaceForwardDiffExt = ["ForwardDiff", "DiffResults"] + DifferentiationInterfaceGPUArraysCoreExt = "GPUArraysCore" + DifferentiationInterfaceGTPSAExt = "GTPSA" + DifferentiationInterfaceMooncakeExt = "Mooncake" + DifferentiationInterfacePolyesterForwardDiffExt = ["PolyesterForwardDiff", "ForwardDiff", "DiffResults"] + DifferentiationInterfaceReverseDiffExt = ["ReverseDiff", "DiffResults"] + DifferentiationInterfaceSparseArraysExt = "SparseArrays" + DifferentiationInterfaceSparseConnectivityTracerExt = "SparseConnectivityTracer" + DifferentiationInterfaceSparseMatrixColoringsExt = "SparseMatrixColorings" + DifferentiationInterfaceStaticArraysExt = "StaticArrays" + DifferentiationInterfaceSymbolicsExt = "Symbolics" + DifferentiationInterfaceTrackerExt = "Tracker" + DifferentiationInterfaceZygoteExt = ["Zygote", "ForwardDiff"] + + [deps.DifferentiationInterface.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DiffResults = "163ba53b-c6d8-5494-b064-1a9d43ac40c5" + Diffractor = "9f5e2b26-1114-432f-b630-d3fe2085c51c" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + FastDifferentiation = "eb9bf01b-bf85-4b60-bf87-ee5de06c00be" + FiniteDiff = "6a86dc24-6348-571c-b903-95158fe2bd41" + FiniteDifferences = "26cc04aa-876d-5657-8c51-4c34ba976000" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + GTPSA = "b27dd330-f138-47c5-815b-40db9dd9b6e8" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + PolyesterForwardDiff = "98d1487c-24ca-40b6-b7ab-df2af84e126b" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" + SparseMatrixColorings = "0a514795-09f3-496d-8182-132a7b665d35" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" +version = "1.11.0" + +[[deps.Distributions]] +deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] +git-tree-sha1 = "fbcc7610f6d8348428f722ecbe0e6cfe22e672c6" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.123" + + [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]] +git-tree-sha1 = "7442a5dfe1ebb773c29cc2962a8980f47221d76c" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.5" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.EnumX]] +git-tree-sha1 = "c49898e8438c828577f04b92fc9368c388ac783c" +uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" +version = "1.0.7" + +[[deps.EnzymeCore]] +git-tree-sha1 = "24bbb6fc8fb87eb71c1f8d00184a60fc22c63903" +uuid = "f151be2c-9106-41f4-ab19-57ee4f262869" +version = "0.8.19" + + [deps.EnzymeCore.extensions] + AdaptExt = "Adapt" + EnzymeCoreChainRulesCoreExt = "ChainRulesCore" + + [deps.EnzymeCore.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + +[[deps.EpollShim_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8a4be429317c42cfae6a7fc03c31bad1970c310d" +uuid = "2702e6a9-849d-5ed8-8c21-79e8b8f9ee43" +version = "0.0.20230411+1" + +[[deps.ExceptionUnwrapping]] +deps = ["Test"] +git-tree-sha1 = "d36f682e590a83d63d1c7dbd287573764682d12a" +uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" +version = "0.1.11" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "27af30de8b5445644e8ffe3bcb0d72049c089cf1" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.7.3+0" + +[[deps.ExponentialUtilities]] +deps = ["Adapt", "ArrayInterface", "GPUArraysCore", "GenericSchur", "LinearAlgebra", "PrecompileTools", "Printf", "SparseArrays", "libblastrampoline_jll"] +git-tree-sha1 = "cc294ead6a85e975a8519dd4a0a6cb294eeb18d1" +uuid = "d4d017d3-3776-5f7e-afef-a10c40355c18" +version = "1.30.0" +weakdeps = ["StaticArrays"] + + [deps.ExponentialUtilities.extensions] + ExponentialUtilitiesStaticArraysExt = "StaticArrays" + +[[deps.ExprTools]] +git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" +uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" +version = "0.1.10" + +[[deps.ExproniconLite]] +git-tree-sha1 = "c13f0b150373771b0fdc1713c97860f8df12e6c2" +uuid = "55351af7-c7e9-48d6-89ff-24e801d99491" +version = "0.10.14" + +[[deps.FFMPEG]] +deps = ["FFMPEG_jll"] +git-tree-sha1 = "95ecf07c2eea562b5adbd0696af6db62c0f52560" +uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" +version = "0.4.5" + +[[deps.FFMPEG_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libva_jll", "libvorbis_jll", "x264_jll", "x265_jll"] +git-tree-sha1 = "66381d7059b5f3f6162f28831854008040a4e905" +uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" +version = "8.0.1+1" + +[[deps.FastAlmostBandedMatrices]] +deps = ["ArrayInterface", "ArrayLayouts", "BandedMatrices", "ConcreteStructs", "LazyArrays", "LinearAlgebra", "MatrixFactorizations", "PrecompileTools", "Reexport"] +git-tree-sha1 = "3733dfb413e2a87c790cdf34f32f2c6a6f7fb95e" +uuid = "9d29842c-ecb8-4973-b1e9-a27b1157504e" +version = "0.1.6" + +[[deps.FastBroadcast]] +deps = ["ArrayInterface", "LinearAlgebra"] +git-tree-sha1 = "e3e64918b1604ba8b1734c4a27febdfe5d09e235" +uuid = "7034ab61-46d4-4ed7-9d0f-46aef9175898" +version = "1.3.1" +weakdeps = ["Polyester", "Static"] + + [deps.FastBroadcast.extensions] + FastBroadcastPolyesterExt = "Polyester" + FastBroadcastStaticExt = "Static" + +[[deps.FastClosures]] +git-tree-sha1 = "acebe244d53ee1b461970f8910c235b259e772ef" +uuid = "9aa1b823-49e4-5ca5-8b0f-3971ec8bab6a" +version = "0.3.2" + +[[deps.FastGaussQuadrature]] +deps = ["LinearAlgebra", "SpecialFunctions", "StaticArrays"] +git-tree-sha1 = "0044e9f5e49a57e88205e8f30ab73928b05fe5b6" +uuid = "442a2c76-b920-505d-bb47-c5924d526838" +version = "1.1.0" + +[[deps.FastPower]] +git-tree-sha1 = "862831f78c7a48681a074ecc9aac09f2de563f71" +uuid = "a4df4552-cc26-4903-aec0-212e50a0e84b" +version = "1.3.1" + + [deps.FastPower.extensions] + FastPowerEnzymeExt = "Enzyme" + FastPowerForwardDiffExt = "ForwardDiff" + FastPowerMeasurementsExt = "Measurements" + FastPowerMonteCarloMeasurementsExt = "MonteCarloMeasurements" + FastPowerMooncakeExt = "Mooncake" + FastPowerReverseDiffExt = "ReverseDiff" + FastPowerTrackerExt = "Tracker" + + [deps.FastPower.weakdeps] + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.FilePathsBase]] +deps = ["Compat", "Dates"] +git-tree-sha1 = "3bab2c5aa25e7840a4b065805c0cdfc01f3068d2" +uuid = "48062228-2e41-5def-b9a4-89aafe57970f" +version = "0.9.24" +weakdeps = ["Mmap", "Test"] + + [deps.FilePathsBase.extensions] + FilePathsBaseMmapExt = "Mmap" + FilePathsBaseTestExt = "Test" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" +version = "1.11.0" + +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "2f979084d1e13948a3352cf64a25df6bd3b4dca3" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.16.0" +weakdeps = ["PDMats", "SparseArrays", "StaticArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStaticArraysExt = "StaticArrays" + FillArraysStatisticsExt = "Statistics" + +[[deps.FiniteDiff]] +deps = ["ArrayInterface", "LinearAlgebra", "Setfield"] +git-tree-sha1 = "9340ca07ca27093ff68418b7558ca37b05f8aeb1" +uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" +version = "2.29.0" + + [deps.FiniteDiff.extensions] + FiniteDiffBandedMatricesExt = "BandedMatrices" + FiniteDiffBlockBandedMatricesExt = "BlockBandedMatrices" + FiniteDiffSparseArraysExt = "SparseArrays" + FiniteDiffStaticArraysExt = "StaticArrays" + + [deps.FiniteDiff.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.FixedPointNumbers]] +deps = ["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 = "f85dac9a96a01087df6e3a749840015a0ca3817d" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.17.1+0" + +[[deps.Format]] +git-tree-sha1 = "9c68794ef81b08086aeb32eeaf33531668d5f5fc" +uuid = "1fa38f19-a742-5d3f-a2b9-30dd87b9d5f8" +version = "1.3.7" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "cddeab6487248a39dae1a960fff0ac17b2a28888" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "1.3.3" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + +[[deps.FreeType2_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "70329abc09b886fd2c5d94ad2d9527639c421e3e" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.14.3+1" + +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "7a214fdac5ed5f59a22c2d9a885a16da1c74bbc7" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.17+0" + +[[deps.FunctionWrappers]] +git-tree-sha1 = "d62485945ce5ae9c0c48f124a84998d755bae00e" +uuid = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e" +version = "1.1.3" + +[[deps.FunctionWrappersWrappers]] +deps = ["FunctionWrappers", "PrecompileTools", "TruncatedStacktraces"] +git-tree-sha1 = "3e13d0b39d117a03d3fb5c88a039e94787a37fcb" +uuid = "77dc65aa-8811-40c2-897b-53d922fa7daf" +version = "1.4.0" + + [deps.FunctionWrappersWrappers.extensions] + FunctionWrappersWrappersEnzymeExt = ["Enzyme", "EnzymeCore"] + FunctionWrappersWrappersMooncakeExt = "Mooncake" + + [deps.FunctionWrappersWrappers.weakdeps] + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" +version = "1.11.0" + +[[deps.GLFW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll", "libdecor_jll", "xkbcommon_jll"] +git-tree-sha1 = "b7bfd56fa66616138dfe5237da4dc13bbd83c67f" +uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" +version = "3.4.1+0" + +[[deps.GPUArraysCore]] +deps = ["Adapt"] +git-tree-sha1 = "83cf05ab16a73219e5f6bd1bdfa9848fa24ac627" +uuid = "46192b85-c4d5-4398-a991-12ede77f4527" +version = "0.2.0" + +[[deps.GR]] +deps = ["Artifacts", "Base64", "DelimitedFiles", "Downloads", "GR_jll", "HTTP", "JSON", "Libdl", "LinearAlgebra", "Preferences", "Printf", "Qt6Wayland_jll", "Random", "Serialization", "Sockets", "TOML", "Tar", "Test", "p7zip_jll"] +git-tree-sha1 = "44716a1a667cb867ee0e9ec8edc31c3e4aa5afdc" +uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" +version = "0.73.24" + + [deps.GR.extensions] + IJuliaExt = "IJulia" + + [deps.GR.weakdeps] + IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" + +[[deps.GR_jll]] +deps = ["Artifacts", "Bzip2_jll", "Cairo_jll", "FFMPEG_jll", "Fontconfig_jll", "FreeType2_jll", "GLFW_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libtiff_jll", "Pixman_jll", "Qt6Base_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "be8a1b8065959e24fdc1b51402f39f3b6f0f6653" +uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" +version = "0.73.24+0" + +[[deps.GenericSchur]] +deps = ["LinearAlgebra", "Printf"] +git-tree-sha1 = "a694e2a57394e409f7a11ee0977362a9fafcb8c7" +uuid = "c145ed77-6b09-5dd9-b285-bf645a82121e" +version = "0.5.6" + +[[deps.GettextRuntime_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll"] +git-tree-sha1 = "45288942190db7c5f760f59c04495064eedf9340" +uuid = "b0724c58-0f36-5564-988d-3bb0596ebc4a" +version = "0.22.4+0" + +[[deps.Ghostscript_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Zlib_jll"] +git-tree-sha1 = "38044a04637976140074d0b0621c1edf0eb531fd" +uuid = "61579ee1-b43e-5ca0-a5da-69d92c66a64b" +version = "9.55.1+0" + +[[deps.Glib_jll]] +deps = ["Artifacts", "GettextRuntime_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "24f6def62397474a297bfcec22384101609142ed" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.86.3+0" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8a6dbda1fd736d60cc477d99f2e7a042acfa46e8" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.15+0" + +[[deps.Graphs]] +deps = ["ArnoldiMethod", "DataStructures", "Inflate", "LinearAlgebra", "Random", "SimpleTraits", "SparseArrays", "Statistics"] +git-tree-sha1 = "7eb45fe833a5b7c51cf6d89c5a841d5967e44be3" +uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" +version = "1.14.0" + + [deps.Graphs.extensions] + GraphsSharedArraysExt = "SharedArrays" + + [deps.Graphs.weakdeps] + Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b" + SharedArrays = "1a1011a3-84de-559e-8e89-a11a2f7dc383" + +[[deps.Grisu]] +git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" +uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" +version = "1.0.2" + +[[deps.HCubature]] +deps = ["Combinatorics", "DataStructures", "LinearAlgebra", "QuadGK", "StaticArrays"] +git-tree-sha1 = "8ee627fb73ecba0b5254158b04d4745611b404a1" +uuid = "19dc6840-f33b-545b-b366-655c7e3ffd49" +version = "1.8.0" + +[[deps.HTTP]] +deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "PrecompileTools", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] +git-tree-sha1 = "51059d23c8bb67911a2e6fd5130229113735fc7e" +uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" +version = "1.11.0" + +[[deps.HarfBuzz_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"] +git-tree-sha1 = "f923f9a774fcf3f5cb761bfa43aeadd689714813" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "8.5.1+0" + +[[deps.HypergeometricFunctions]] +deps = ["LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "68c173f4f449de5b438ee67ed0c9c748dc31a2ec" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.28" + +[[deps.IfElse]] +git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" +uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" +version = "0.1.1" + +[[deps.Inflate]] +git-tree-sha1 = "d1b1b796e47d94588b3757fe84fbf65a5ec4a80d" +uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" +version = "0.1.5" + +[[deps.InlineStrings]] +git-tree-sha1 = "8f3d257792a522b4601c24a577954b0a8cd7334d" +uuid = "842dd82b-1e85-43dc-bf29-5d0ee9dffc48" +version = "1.4.5" + + [deps.InlineStrings.extensions] + ArrowTypesExt = "ArrowTypes" + ParsersExt = "Parsers" + + [deps.InlineStrings.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" + Parsers = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" + +[[deps.IntegerMathUtils]] +git-tree-sha1 = "4c1acff2dc6b6967e7e750633c50bc3b8d83e617" +uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235" +version = "0.1.3" + +[[deps.Integrals]] +deps = ["ArrayInterface", "CommonSolve", "HCubature", "LinearAlgebra", "MonteCarloIntegration", "QuadGK", "Random", "Reexport", "SciMLBase", "SciMLLogging"] +git-tree-sha1 = "a93089c3454ab25f08f2c8c7eb81e7bba4343c12" +uuid = "de52edbc-65ea-441a-8357-d3a637375a31" +version = "5.4.0" + + [deps.Integrals.extensions] + IntegralsArblibExt = "Arblib" + IntegralsCubaExt = "Cuba" + IntegralsCubatureExt = "Cubature" + IntegralsDifferentiationInterfaceExt = ["ADTypes", "DifferentiationInterface", "ChainRulesCore"] + IntegralsFastGaussQuadratureExt = "FastGaussQuadrature" + IntegralsFastTanhSinhQuadratureExt = "FastTanhSinhQuadrature" + IntegralsForwardDiffExt = "ForwardDiff" + IntegralsHAdaptiveIntegrationExt = "HAdaptiveIntegration" + IntegralsMCIntegrationExt = "MCIntegration" + IntegralsMooncakeExt = ["Mooncake", "Zygote", "ChainRulesCore"] + IntegralsZygoteExt = ["Zygote", "ChainRulesCore"] + + [deps.Integrals.weakdeps] + ADTypes = "47edcb42-4c32-4615-8424-f2b9edc5f35b" + Arblib = "fb37089c-8514-4489-9461-98f9c8763369" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Cuba = "8a292aeb-7a57-582c-b821-06e4c11590b1" + Cubature = "667455a9-e2ce-5579-9412-b964f529a492" + DifferentiationInterface = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" + FastGaussQuadrature = "442a2c76-b920-505d-bb47-c5924d526838" + FastTanhSinhQuadrature = "b650e0df-f744-4436-b963-b44034668c57" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + HAdaptiveIntegration = "eaa5ad34-b243-48e9-b09c-54bc0655cecf" + MCIntegration = "ea1e2de9-7db7-4b42-91ee-0cd1bf6df167" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.IntelOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "ec1debd61c300961f98064cfb21287613ad7f303" +uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" +version = "2025.2.0+0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" +version = "1.11.0" + +[[deps.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 = "6da3c4316095de0f5ee2ebd875df8721e7e0bdbe" +uuid = "41ab1584-1d38-5bbf-9106-f11c6c58b48f" +version = "1.3.1" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "b2d91fe939cae05960e760110b328288867b5758" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.6" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLFzf]] +deps = ["REPL", "Random", "fzf_jll"] +git-tree-sha1 = "82f7acdc599b65e0f8ccd270ffa1467c21cb647b" +uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c" +version = "0.1.11" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "0533e564aae234aff59ab625543145446d8b6ec2" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.7.1" + +[[deps.JSON]] +deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"] +git-tree-sha1 = "67c6f1f085cb2671c93fe34244c9cccde30f7a26" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "1.5.0" + + [deps.JSON.extensions] + JSONArrowExt = ["ArrowTypes"] + + [deps.JSON.weakdeps] + ArrowTypes = "31f734f8-188a-4ce0-8406-c8a06bd891cd" + +[[deps.Jieko]] +deps = ["ExproniconLite"] +git-tree-sha1 = "2f05ed29618da60c06a87e9c033982d4f71d0b6c" +uuid = "ae98c720-c025-4a4a-838c-29b094483192" +version = "0.2.1" + +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c0c9b76f3520863909825cbecdef58cd63de705a" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "3.1.5+0" + +[[deps.JumpProcesses]] +deps = ["ArrayInterface", "DataStructures", "DiffEqBase", "DiffEqCallbacks", "DocStringExtensions", "FunctionWrappers", "Graphs", "LinearAlgebra", "PoissonRandom", "Random", "RecursiveArrayTools", "Reexport", "SciMLBase", "StaticArrays", "SymbolicIndexingInterface"] +git-tree-sha1 = "7f745242b714313ec435438a8a38492037efa30e" +uuid = "ccbc3e58-028d-4f4c-8cd5-9ae44345cda5" +version = "9.25.0" + + [deps.JumpProcesses.extensions] + JumpProcessesKernelAbstractionsExt = ["Adapt", "KernelAbstractions"] + JumpProcessesOrdinaryDiffEqCoreExt = "OrdinaryDiffEqCore" + + [deps.JumpProcesses.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" + KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" + OrdinaryDiffEqCore = "bbf590c4-e513-4bbe-9b18-05decba2e5d8" + +[[deps.Krylov]] +deps = ["LinearAlgebra", "Printf", "SparseArrays"] +git-tree-sha1 = "c4d19f51afc7ba2afbe32031b8f2d21b11c9e26e" +uuid = "ba0b0d4f-ebba-5204-a429-3ac8c609bfb7" +version = "0.10.6" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "059aabebaa7c82ccb853dd4a0ee9d17796f7e1bc" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.3+0" + +[[deps.LERC_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "17b94ecafcfa45e8360a4fc9ca6b583b049e4e37" +uuid = "88015f11-f218-50d7-93a8-a6af411a945d" +version = "4.1.0+0" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "eb62a3deb62fc6d8822c0c4bef73e4412419c5d8" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "18.1.8+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.4.0" + +[[deps.Latexify]] +deps = ["Format", "Ghostscript_jll", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Requires"] +git-tree-sha1 = "44f93c47f9cd6c7e431f2f2091fcba8f01cd7e8f" +uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" +version = "0.16.10" + + [deps.Latexify.extensions] + DataFramesExt = "DataFrames" + SparseArraysExt = "SparseArrays" + SymEngineExt = "SymEngine" + TectonicExt = "tectonic_jll" + + [deps.Latexify.weakdeps] + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" + tectonic_jll = "d7dd28d6-a5e6-559c-9131-7eb760cdacc5" + +[[deps.LatticeRules]] +deps = ["Random"] +git-tree-sha1 = "7f5b02258a3ca0221a6a9710b0a0a2e8fb4957fe" +uuid = "73f95e8e-ec14-4e6a-8b18-0d2e271c4e55" +version = "0.0.1" + +[[deps.LayoutPointers]] +deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] +git-tree-sha1 = "a9eaadb366f5493a5654e843864c13d8b107548c" +uuid = "10f19ff3-798f-405d-979b-55457f8fc047" +version = "0.1.17" + +[[deps.LazyArrays]] +deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "MacroTools", "SparseArrays"] +git-tree-sha1 = "3866a9d344eaee469d764595d4e18d9517f8e631" +uuid = "5078a376-72f3-5289-bfd5-ec5146d43c02" +version = "2.9.6" + + [deps.LazyArrays.extensions] + LazyArraysBandedMatricesExt = "BandedMatrices" + LazyArraysBlockArraysExt = "BlockArrays" + LazyArraysBlockBandedMatricesExt = "BlockBandedMatrices" + LazyArraysStaticArraysExt = "StaticArrays" + + [deps.LazyArrays.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" +version = "1.11.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.6.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" +version = "1.11.0" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.7.2+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" +version = "1.11.0" + +[[deps.Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c8da7e6a91781c41a863611c7e966098d783c57a" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.4.7+0" + +[[deps.Libglvnd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "d36c21b9e7c172a44a10484125024495e2625ac0" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.7.1+1" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "be484f5c92fad0bd8acfef35fe017900b0b73809" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.18.0+0" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "cc3ad4faf30015a3e8094c9b5b7f19e85bdf2386" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.42.0+0" + +[[deps.Libtiff_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] +git-tree-sha1 = "f04133fe05eff1667d2054c53d59f9122383fe05" +uuid = "89763e89-9b03-5906-acba-b20f662cd828" +version = "4.7.2+0" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d620582b1f0cbe2c72dd1d5bd195a9ce73370ab1" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.42.0+0" + +[[deps.LineSearch]] +deps = ["ADTypes", "CommonSolve", "ConcreteStructs", "FastClosures", "LinearAlgebra", "MaybeInplace", "PrecompileTools", "SciMLBase", "SciMLJacobianOperators", "StaticArraysCore"] +git-tree-sha1 = "69da095e4c24ed3c4a168bb76dc9c620a6d7239c" +uuid = "87fe0de2-c867-4266-b59a-2f0a94fc965b" +version = "0.1.7" +weakdeps = ["LineSearches"] + + [deps.LineSearch.extensions] + LineSearchLineSearchesExt = "LineSearches" + +[[deps.LineSearches]] +deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Printf"] +git-tree-sha1 = "738bdcacfef25b3a9e4a39c28613717a6b23751e" +uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" +version = "7.6.0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +version = "1.11.0" + +[[deps.LinearSolve]] +deps = ["ArrayInterface", "ConcreteStructs", "DocStringExtensions", "EnumX", "GPUArraysCore", "InteractiveUtils", "Krylov", "Libdl", "LinearAlgebra", "MKL_jll", "Markdown", "OpenBLAS_jll", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLLogging", "SciMLOperators", "Setfield", "StaticArraysCore"] +git-tree-sha1 = "a25ba82bd1cf2619115dbf10df196d4c031fa2bb" +uuid = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae" +version = "3.73.0" + + [deps.LinearSolve.extensions] + LinearSolveAMDGPUExt = "AMDGPU" + LinearSolveAlgebraicMultigridExt = "AlgebraicMultigrid" + LinearSolveBLISExt = ["blis_jll", "LAPACK_jll"] + LinearSolveBandedMatricesExt = "BandedMatrices" + LinearSolveBlockDiagonalsExt = "BlockDiagonals" + LinearSolveCUDAExt = "CUDA" + LinearSolveCUDSSExt = "CUDSS" + LinearSolveCUSOLVERRFExt = ["CUSOLVERRF", "SparseArrays"] + LinearSolveChainRulesCoreExt = "ChainRulesCore" + LinearSolveCliqueTreesExt = ["CliqueTrees", "SparseArrays"] + LinearSolveElementalExt = "Elemental" + LinearSolveEnzymeExt = ["EnzymeCore", "SparseArrays"] + LinearSolveFastAlmostBandedMatricesExt = "FastAlmostBandedMatrices" + LinearSolveFastLapackInterfaceExt = "FastLapackInterface" + LinearSolveForwardDiffExt = "ForwardDiff" + LinearSolveGinkgoExt = ["Ginkgo", "SparseArrays"] + LinearSolveHYPREExt = "HYPRE" + LinearSolveIterativeSolversExt = "IterativeSolvers" + LinearSolveKernelAbstractionsExt = "KernelAbstractions" + LinearSolveKrylovKitExt = "KrylovKit" + LinearSolveMetalExt = "Metal" + LinearSolveMooncakeExt = "Mooncake" + LinearSolvePETScCSRExt = ["PETSc", "SparseArrays", "SparseMatricesCSR"] + LinearSolvePETScExt = ["PETSc", "SparseArrays"] + LinearSolvePETScMPIExt = ["PETSc", "PartitionedArrays", "SparseArrays", "SparseMatricesCSR"] + LinearSolveParUExt = ["ParU_jll", "SparseArrays"] + LinearSolvePardisoExt = ["Pardiso", "SparseArrays"] + LinearSolveRecursiveFactorizationExt = "RecursiveFactorization" + LinearSolveSTRUMPACKExt = "SparseArrays" + LinearSolveSparseArraysExt = "SparseArrays" + LinearSolveSparspakExt = ["SparseArrays", "Sparspak"] + + [deps.LinearSolve.weakdeps] + AMDGPU = "21141c5a-9bdb-4563-92ae-f87d6854732e" + AlgebraicMultigrid = "2169fc97-5a83-5252-b627-83903c6c433c" + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockDiagonals = "0a1fb500-61f7-11e9-3c65-f5ef3456f9f0" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" + CUSOLVERRF = "a8cc9031-bad2-4722-94f5-40deabb4245c" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + CliqueTrees = "60701a23-6482-424a-84db-faee86b9b1f8" + Elemental = "902c3f28-d1ec-5e7e-8399-a24c3845ee38" + EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" + FastAlmostBandedMatrices = "9d29842c-ecb8-4973-b1e9-a27b1157504e" + FastLapackInterface = "29a986be-02c6-4525-aec4-84b980013641" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + Ginkgo = "4c8bd3c9-ead9-4b5e-a625-08f1338ba0ec" + HYPRE = "b5ffcf37-a2bd-41ab-a3da-4bd9bc8ad771" + IterativeSolvers = "42fd0dbc-a981-5370-80f2-aaf504508153" + KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" + KrylovKit = "0b1a1467-8014-51b9-945f-bf0ae24f4b77" + LAPACK_jll = "51474c39-65e3-53ba-86ba-03b1b862ec14" + Metal = "dde4c033-4e86-420c-a63e-0dd931031962" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + PETSc = "ace2c81b-2b5f-4b1e-a30d-d662738edfe0" + ParU_jll = "9e0b026c-e8ce-559c-a2c4-6a3d5c955bc9" + Pardiso = "46dd5b70-b6fb-5a00-ae2d-e8fea33afaf2" + PartitionedArrays = "5a9dfac6-5c52-46f7-8278-5e2210713be9" + RecursiveFactorization = "f2c3362d-daeb-58d1-803e-2bc74f2840b4" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + SparseMatricesCSR = "a0a7dd2c-ebf4-11e9-1f05-cf50bc540ca1" + Sparspak = "e56a9233-b9d6-4f03-8d0f-1825330902ac" + blis_jll = "6136c539-28a5-5bf0-87cc-b183200dce32" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "13ca9e2586b89836fd20cccf56e57e2b9ae7f38f" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.29" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" +version = "1.11.0" + +[[deps.LoggingExtras]] +deps = ["Dates", "Logging"] +git-tree-sha1 = "f00544d95982ea270145636c181ceda21c4e2575" +uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" +version = "1.2.0" + +[[deps.MKL_jll]] +deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"] +git-tree-sha1 = "282cadc186e7b2ae0eeadbd7a4dffed4196ae2aa" +uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" +version = "2025.2.0+0" + +[[deps.MacroTools]] +git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.16" + +[[deps.ManualMemory]] +git-tree-sha1 = "bcaef4fc7a0cfe2cba636d84cda54b5e4e4ca3cd" +uuid = "d125e4d3-2237-4719-b19c-fa641b8a4667" +version = "0.1.8" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" +version = "1.11.0" + +[[deps.MatrixFactorizations]] +deps = ["ArrayLayouts", "LinearAlgebra", "Printf", "Random"] +git-tree-sha1 = "3bb3cf4685f1c90f22883f4c4bb6d203fa882b79" +uuid = "a3b82374-2e81-5b9e-98ce-41277c0e4c87" +version = "3.1.3" +weakdeps = ["BandedMatrices"] + + [deps.MatrixFactorizations.extensions] + MatrixFactorizationsBandedMatricesExt = "BandedMatrices" + +[[deps.MaybeInplace]] +deps = ["ArrayInterface", "LinearAlgebra", "MacroTools"] +git-tree-sha1 = "54e2fdc38130c05b42be423e90da3bade29b74bd" +uuid = "bb5d69b7-63fc-4a16-80bd-7e42200c7bdb" +version = "0.1.4" +weakdeps = ["SparseArrays"] + + [deps.MaybeInplace.extensions] + MaybeInplaceSparseArraysExt = "SparseArrays" + +[[deps.MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] +git-tree-sha1 = "8785729fa736197687541f7053f6d8ab7fc44f92" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.1.10" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.6+0" + +[[deps.Measures]] +git-tree-sha1 = "b513cedd20d9c914783d8ad83d08120702bf2c77" +uuid = "442fdcdd-2543-5da2-b0f3-8c86c306513e" +version = "0.3.3" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "ec4f7fbeab05d7747bdf98eb74d130a2a2ed298d" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.2.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" +version = "1.11.0" + +[[deps.MonteCarloIntegration]] +deps = ["Distributions", "QuasiMonteCarlo", "Random"] +git-tree-sha1 = "722ad522068d31954b4a976b66a26aeccbf509ed" +uuid = "4886b29c-78c9-11e9-0a6e-41e1f4161f7b" +version = "0.2.0" + +[[deps.Moshi]] +deps = ["ExproniconLite", "Jieko"] +git-tree-sha1 = "53f817d3e84537d84545e0ad749e483412dd6b2a" +uuid = "2e0e35c7-a2e4-4343-998d-7ef72827ed2d" +version = "0.3.7" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2023.12.12" + +[[deps.MuladdMacro]] +git-tree-sha1 = "cac9cc5499c25554cba55cd3c30543cff5ca4fab" +uuid = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221" +version = "0.2.4" + +[[deps.NLSolversBase]] +deps = ["ADTypes", "DifferentiationInterface", "FiniteDiff", "LinearAlgebra"] +git-tree-sha1 = "b3f76b463c7998473062992b246045e6961a074e" +uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" +version = "8.0.0" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "9b8215b1ee9e78a293f99797cd31375471b2bcae" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.1.3" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.NonlinearSolve]] +deps = ["ADTypes", "ArrayInterface", "BracketingNonlinearSolve", "CommonSolve", "ConcreteStructs", "DifferentiationInterface", "FastClosures", "FiniteDiff", "ForwardDiff", "LineSearch", "LinearAlgebra", "LinearSolve", "NonlinearSolveBase", "NonlinearSolveFirstOrder", "NonlinearSolveQuasiNewton", "NonlinearSolveSpectralMethods", "PrecompileTools", "Preferences", "Reexport", "SciMLBase", "SciMLLogging", "Setfield", "SimpleNonlinearSolve", "StaticArraysCore", "SymbolicIndexingInterface"] +git-tree-sha1 = "e88921859836899abe94d08ea0fd42137067280e" +uuid = "8913a72c-1f9b-4ce2-8d82-65094dcecaec" +version = "4.17.1" + + [deps.NonlinearSolve.extensions] + NonlinearSolveFastLevenbergMarquardtExt = "FastLevenbergMarquardt" + NonlinearSolveFixedPointAccelerationExt = "FixedPointAcceleration" + NonlinearSolveLeastSquaresOptimExt = "LeastSquaresOptim" + NonlinearSolveMINPACKExt = "MINPACK" + NonlinearSolveNLSolversExt = "NLSolvers" + NonlinearSolveNLsolveExt = ["NLsolve", "LineSearches"] + NonlinearSolvePETScExt = ["PETSc", "MPI", "SparseArrays"] + NonlinearSolveSIAMFANLEquationsExt = "SIAMFANLEquations" + NonlinearSolveSpeedMappingExt = "SpeedMapping" + NonlinearSolveSundialsExt = "Sundials" + + [deps.NonlinearSolve.weakdeps] + FastLevenbergMarquardt = "7a0df574-e128-4d35-8cbd-3d84502bf7ce" + FixedPointAcceleration = "817d07cb-a79a-5c30-9a31-890123675176" + LeastSquaresOptim = "0fc2ff8b-aaa3-5acd-a817-1944a5e08891" + LineSearches = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" + MINPACK = "4854310b-de5a-5eb6-a2a5-c1dee2bd17f9" + MPI = "da04e1cc-30fd-572f-bb4f-1f8673147195" + NLSolvers = "337daf1e-9722-11e9-073e-8b9effe078ba" + NLsolve = "2774e3e8-f4cf-5e23-947b-6d7e65073b56" + PETSc = "ace2c81b-2b5f-4b1e-a30d-d662738edfe0" + SIAMFANLEquations = "084e46ad-d928-497d-ad5e-07fa361a48c4" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + SpeedMapping = "f1835b91-879b-4a3f-a438-e4baacf14412" + Sundials = "c3572dad-4567-51f8-b174-8c6c989267f4" + +[[deps.NonlinearSolveBase]] +deps = ["ADTypes", "Adapt", "ArrayInterface", "CommonSolve", "Compat", "ConcreteStructs", "DifferentiationInterface", "EnzymeCore", "FastClosures", "FunctionWrappers", "FunctionWrappersWrappers", "LinearAlgebra", "LogExpFunctions", "Markdown", "MaybeInplace", "PreallocationTools", "PrecompileTools", "Preferences", "Printf", "RecursiveArrayTools", "SciMLBase", "SciMLJacobianOperators", "SciMLLogging", "SciMLOperators", "SciMLStructures", "Setfield", "StaticArraysCore", "SymbolicIndexingInterface", "TimerOutputs"] +git-tree-sha1 = "5bd437a82d7e5eee049a1b488dedc726f0b84bd4" +uuid = "be0214bd-f91f-a760-ac4e-3421ce2b2da0" +version = "2.24.0" + + [deps.NonlinearSolveBase.extensions] + NonlinearSolveBaseBandedMatricesExt = "BandedMatrices" + NonlinearSolveBaseChainRulesCoreExt = "ChainRulesCore" + NonlinearSolveBaseEnzymeExt = ["ChainRulesCore", "Enzyme"] + NonlinearSolveBaseForwardDiffExt = "ForwardDiff" + NonlinearSolveBaseLineSearchExt = "LineSearch" + NonlinearSolveBaseLinearSolveExt = "LinearSolve" + NonlinearSolveBaseMooncakeExt = "Mooncake" + NonlinearSolveBaseReverseDiffExt = "ReverseDiff" + NonlinearSolveBaseSparseArraysExt = "SparseArrays" + NonlinearSolveBaseSparseMatrixColoringsExt = "SparseMatrixColorings" + NonlinearSolveBaseTrackerExt = "Tracker" + + [deps.NonlinearSolveBase.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + LineSearch = "87fe0de2-c867-4266-b59a-2f0a94fc965b" + LinearSolve = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + SparseMatrixColorings = "0a514795-09f3-496d-8182-132a7b665d35" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.NonlinearSolveFirstOrder]] +deps = ["ADTypes", "ArrayInterface", "CommonSolve", "ConcreteStructs", "FiniteDiff", "ForwardDiff", "LineSearch", "LinearAlgebra", "LinearSolve", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "SciMLJacobianOperators", "Setfield", "StaticArraysCore"] +git-tree-sha1 = "ce68820a4f421fb5bee7ec4dcf875aff33886bfb" +uuid = "5959db7a-ea39-4486-b5fe-2dd0bf03d60d" +version = "2.1.1" + +[[deps.NonlinearSolveQuasiNewton]] +deps = ["ArrayInterface", "CommonSolve", "ConcreteStructs", "LinearAlgebra", "LinearSolve", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "SciMLOperators", "StaticArraysCore"] +git-tree-sha1 = "538432ca1aea8bf63db02929bf870501f8a7c64c" +uuid = "9a2c21bd-3a47-402d-9113-8faf9a0ee114" +version = "1.13.1" +weakdeps = ["ForwardDiff"] + + [deps.NonlinearSolveQuasiNewton.extensions] + NonlinearSolveQuasiNewtonForwardDiffExt = "ForwardDiff" + +[[deps.NonlinearSolveSpectralMethods]] +deps = ["CommonSolve", "ConcreteStructs", "LineSearch", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase"] +git-tree-sha1 = "a3781e12becdf0ce5520bd97ec617e879bf4e9f2" +uuid = "26075421-4e9a-44e1-8bd1-420ed7ad02b2" +version = "1.7.1" +weakdeps = ["ForwardDiff"] + + [deps.NonlinearSolveSpectralMethods.extensions] + NonlinearSolveSpectralMethodsForwardDiffExt = "ForwardDiff" + +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "b6aa4566bb7ae78498a5e68943863fa8b5231b59" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.6+0" + +[[deps.OpenBLAS32_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "46cce8b42186882811da4ce1f4c7208b02deb716" +uuid = "656ef2d0-ae68-5445-9ca0-591084a874a2" +version = "0.3.30+0" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.27+1" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.5+0" + +[[deps.OpenSSL]] +deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "NetworkOptions", "OpenSSL_jll", "Sockets"] +git-tree-sha1 = "1d1aaa7d449b58415f97d2839c318b70ffb525a0" +uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" +version = "1.6.1" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "2ac022577e5eac7da040de17776d51bb770cd895" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "3.5.6+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1346c9208249809840c91b26703912dff463d335" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.6+0" + +[[deps.OptimizationBase]] +deps = ["ADTypes", "ArrayInterface", "DifferentiationInterface", "DocStringExtensions", "FastClosures", "LinearAlgebra", "PDMats", "PrecompileTools", "Reexport", "SciMLBase", "SciMLLogging", "SparseArrays", "SparseConnectivityTracer", "SparseMatrixColorings", "SymbolicIndexingInterface"] +git-tree-sha1 = "a3d7837832e515111c95a02df7dc55edbdf17d8a" +uuid = "bca83a33-5cc9-4baa-983d-23429ab6bcbb" +version = "5.1.0" + + [deps.OptimizationBase.extensions] + OptimizationChainRulesCoreExt = "ChainRulesCore" + OptimizationEnzymeExt = ["ChainRulesCore", "Enzyme"] + OptimizationFiniteDiffExt = "FiniteDiff" + OptimizationForwardDiffExt = "ForwardDiff" + OptimizationMLDataDevicesExt = "MLDataDevices" + OptimizationMLUtilsExt = "MLUtils" + OptimizationMooncakeExt = "Mooncake" + OptimizationReverseDiffExt = "ReverseDiff" + OptimizationSymbolicAnalysisExt = "SymbolicAnalysis" + OptimizationZygoteExt = "Zygote" + + [deps.OptimizationBase.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + FiniteDiff = "6a86dc24-6348-571c-b903-95158fe2bd41" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + MLDataDevices = "7e8f7934-dd98-4c1a-8fe8-92b47a384d40" + MLUtils = "f1d291b0-491e-4a28-83b9-f70985020b54" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SymbolicAnalysis = "4297ee4d-0239-47d8-ba5d-195ecdf594fe" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e2bb57a313a74b8104064b7efd01406c0a50d2ff" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.6.1+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.8.1" + +[[deps.OrdinaryDiffEq]] +deps = ["ADTypes", "Adapt", "ArrayInterface", "CommonSolve", "DataStructures", "DiffEqBase", "DocStringExtensions", "EnumX", "ExponentialUtilities", "FastBroadcast", "FastClosures", "FillArrays", "FiniteDiff", "ForwardDiff", "FunctionWrappersWrappers", "InteractiveUtils", "LineSearches", "LinearAlgebra", "LinearSolve", "Logging", "MacroTools", "MuladdMacro", "NonlinearSolve", "OrdinaryDiffEqAdamsBashforthMoulton", "OrdinaryDiffEqBDF", "OrdinaryDiffEqCore", "OrdinaryDiffEqDefault", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqExplicitRK", "OrdinaryDiffEqExponentialRK", "OrdinaryDiffEqExtrapolation", "OrdinaryDiffEqFIRK", "OrdinaryDiffEqFeagin", "OrdinaryDiffEqFunctionMap", "OrdinaryDiffEqHighOrderRK", "OrdinaryDiffEqIMEXMultistep", "OrdinaryDiffEqLinear", "OrdinaryDiffEqLowOrderRK", "OrdinaryDiffEqLowStorageRK", "OrdinaryDiffEqNonlinearSolve", "OrdinaryDiffEqNordsieck", "OrdinaryDiffEqPDIRK", "OrdinaryDiffEqPRK", "OrdinaryDiffEqQPRK", "OrdinaryDiffEqRKN", "OrdinaryDiffEqRosenbrock", "OrdinaryDiffEqSDIRK", "OrdinaryDiffEqSSPRK", "OrdinaryDiffEqStabilizedIRK", "OrdinaryDiffEqStabilizedRK", "OrdinaryDiffEqSymplecticRK", "OrdinaryDiffEqTsit5", "OrdinaryDiffEqVerner", "Polyester", "PreallocationTools", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators", "SciMLStructures", "SimpleNonlinearSolve", "SparseArrays", "Static", "StaticArrayInterface", "StaticArrays", "TruncatedStacktraces"] +git-tree-sha1 = "47271adac597af08263b6ea2669e93040b45c4d0" +uuid = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" +version = "6.111.0" + +[[deps.OrdinaryDiffEqAdamsBashforthMoulton]] +deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqLowOrderRK", "Polyester", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] +git-tree-sha1 = "2e44acb684dfcdc2e41851a988733e30b28a8478" +uuid = "89bda076-bce5-4f1c-845f-551c83cdda9a" +version = "1.11.0" + +[[deps.OrdinaryDiffEqBDF]] +deps = ["ADTypes", "ArrayInterface", "DiffEqBase", "FastBroadcast", "LinearAlgebra", "MacroTools", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqNonlinearSolve", "OrdinaryDiffEqSDIRK", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "StaticArrays", "TruncatedStacktraces"] +git-tree-sha1 = "aecbe8ad2afbb323a8a84fd1677dee4acd1fa73e" +uuid = "6ad6398a-0878-4a85-9266-38940aa047c8" +version = "1.25.0" + +[[deps.OrdinaryDiffEqCore]] +deps = ["ADTypes", "Accessors", "Adapt", "ArrayInterface", "ConcreteStructs", "DataStructures", "DiffEqBase", "DocStringExtensions", "EnumX", "EnzymeCore", "FastBroadcast", "FastClosures", "FastPower", "FunctionWrappersWrappers", "InteractiveUtils", "LinearAlgebra", "Logging", "MacroTools", "MuladdMacro", "Polyester", "PrecompileTools", "Preferences", "Random", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLLogging", "SciMLOperators", "SciMLStructures", "Static", "StaticArraysCore", "SymbolicIndexingInterface", "TruncatedStacktraces"] +git-tree-sha1 = "8c486afe0e5f883573f3875994a72826da24e7d3" +uuid = "bbf590c4-e513-4bbe-9b18-05decba2e5d8" +version = "3.30.0" + + [deps.OrdinaryDiffEqCore.extensions] + OrdinaryDiffEqCoreMooncakeExt = "Mooncake" + OrdinaryDiffEqCoreSparseArraysExt = "SparseArrays" + + [deps.OrdinaryDiffEqCore.weakdeps] + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.OrdinaryDiffEqDefault]] +deps = ["ADTypes", "DiffEqBase", "EnumX", "LinearAlgebra", "LinearSolve", "OrdinaryDiffEqBDF", "OrdinaryDiffEqCore", "OrdinaryDiffEqRosenbrock", "OrdinaryDiffEqTsit5", "OrdinaryDiffEqVerner", "PrecompileTools", "Preferences", "Reexport", "SciMLBase"] +git-tree-sha1 = "5fbd116f93790ce79c4beff8206e1b8e45c492a2" +uuid = "50262376-6c5a-4cf5-baba-aaf4f84d72d7" +version = "1.14.0" + +[[deps.OrdinaryDiffEqDifferentiation]] +deps = ["ADTypes", "ArrayInterface", "ConcreteStructs", "ConstructionBase", "DiffEqBase", "DifferentiationInterface", "FastBroadcast", "FiniteDiff", "ForwardDiff", "FunctionWrappersWrappers", "LinearAlgebra", "LinearSolve", "OrdinaryDiffEqCore", "SciMLBase", "SciMLOperators", "SparseMatrixColorings", "StaticArrays"] +git-tree-sha1 = "ec2f6de416f8e16354ae77d4bf9a5510fcb5f162" +uuid = "4302a76b-040a-498a-8c04-15b101fed76b" +version = "2.8.0" +weakdeps = ["SparseArrays"] + + [deps.OrdinaryDiffEqDifferentiation.extensions] + OrdinaryDiffEqDifferentiationSparseArraysExt = "SparseArrays" + +[[deps.OrdinaryDiffEqExplicitRK]] +deps = ["DiffEqBase", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "TruncatedStacktraces"] +git-tree-sha1 = "54346c3d7a9932ab11743a99afed8a3ff0a65fea" +uuid = "9286f039-9fbf-40e8-bf65-aa933bdc4db0" +version = "1.12.0" + +[[deps.OrdinaryDiffEqExponentialRK]] +deps = ["ADTypes", "DiffEqBase", "ExponentialUtilities", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "RecursiveArrayTools", "Reexport", "SciMLBase"] +git-tree-sha1 = "32fb54c8000c82fd32c55f7bf52f4651a3bd0e61" +uuid = "e0540318-69ee-4070-8777-9e2de6de23de" +version = "1.15.0" + +[[deps.OrdinaryDiffEqExtrapolation]] +deps = ["ADTypes", "DiffEqBase", "FastBroadcast", "FastPower", "LinearSolve", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "Polyester", "RecursiveArrayTools", "Reexport", "SciMLBase"] +git-tree-sha1 = "57bf89f5b144f6e5af1146fb7aee1544c6b76950" +uuid = "becaefa8-8ca2-5cf9-886d-c06f3d2bd2c4" +version = "1.18.0" + +[[deps.OrdinaryDiffEqFIRK]] +deps = ["ADTypes", "DiffEqBase", "FastBroadcast", "FastGaussQuadrature", "FastPower", "LinearAlgebra", "LinearSolve", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqNonlinearSolve", "Polyester", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators"] +git-tree-sha1 = "3339f3a26974a37666c74b95bdb54aefc63b9a56" +uuid = "5960d6e9-dd7a-4743-88e7-cf307b64f125" +version = "1.26.0" + +[[deps.OrdinaryDiffEqFeagin]] +deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "Polyester", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] +git-tree-sha1 = "302999c99bc454cf274d39b9ba3c2415f6fbb1cb" +uuid = "101fe9f7-ebb6-4678-b671-3a81e7194747" +version = "1.10.0" + +[[deps.OrdinaryDiffEqFunctionMap]] +deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] +git-tree-sha1 = "2d2d59f9e530bca2f99934ecfde5430f6ad54bfe" +uuid = "d3585ca7-f5d3-4ba6-8057-292ed1abd90f" +version = "1.11.0" + +[[deps.OrdinaryDiffEqHighOrderRK]] +deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] +git-tree-sha1 = "a6fef72198944e64e0d818f2cc46275e663370c9" +uuid = "d28bc4f8-55e1-4f49-af69-84c1a99f0f58" +version = "1.12.0" + +[[deps.OrdinaryDiffEqIMEXMultistep]] +deps = ["ADTypes", "DiffEqBase", "FastBroadcast", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqNonlinearSolve", "Reexport", "SciMLBase"] +git-tree-sha1 = "bd5440f7f09ce75df59e7f5d2f5b8e52d24aae3c" +uuid = "9f002381-b378-40b7-97a6-27a27c83f129" +version = "1.14.0" + +[[deps.OrdinaryDiffEqLinear]] +deps = ["DiffEqBase", "ExponentialUtilities", "LinearAlgebra", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLOperators"] +git-tree-sha1 = "a1217ddfc979da3a2d9cf11b083688562e8ef333" +uuid = "521117fe-8c41-49f8-b3b6-30780b3f0fb5" +version = "1.12.0" + +[[deps.OrdinaryDiffEqLowOrderRK]] +deps = ["DiffEqBase", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] +git-tree-sha1 = "68a5e7e1b37933841e823a588deff3ec3e757a00" +uuid = "1344f307-1e59-4825-a18e-ace9aa3fa4c6" +version = "1.13.0" + +[[deps.OrdinaryDiffEqLowStorageRK]] +deps = ["Adapt", "DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "Polyester", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] +git-tree-sha1 = "076ac77cee882b2f4858292dde748c8b2ab908e7" +uuid = "b0944070-b475-4768-8dec-fb6eb410534d" +version = "1.15.0" + +[[deps.OrdinaryDiffEqNonlinearSolve]] +deps = ["ADTypes", "ArrayInterface", "DiffEqBase", "FastBroadcast", "FastClosures", "ForwardDiff", "LinearAlgebra", "LinearSolve", "MuladdMacro", "NonlinearSolve", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "PreallocationTools", "RecursiveArrayTools", "SciMLBase", "SciMLOperators", "SciMLStructures", "SimpleNonlinearSolve", "SparseArrays", "StaticArrays"] +git-tree-sha1 = "b17a53d959067bdea518e1ad5287128857627065" +uuid = "127b3ac7-2247-4354-8eb6-78cf4e7c58e8" +version = "1.27.0" + +[[deps.OrdinaryDiffEqNordsieck]] +deps = ["DiffEqBase", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqTsit5", "Polyester", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] +git-tree-sha1 = "21117475cb0d27942d31e4b8a27337392ae680b0" +uuid = "c9986a66-5c92-4813-8696-a7ec84c806c8" +version = "1.11.0" + +[[deps.OrdinaryDiffEqPDIRK]] +deps = ["ADTypes", "DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqNonlinearSolve", "Polyester", "Reexport", "SciMLBase"] +git-tree-sha1 = "1aaaa4851bbe72497c9d01d69fa36396ddeb0a0a" +uuid = "5dd0a6cf-3d4b-4314-aa06-06d4e299bc89" +version = "1.14.0" + +[[deps.OrdinaryDiffEqPRK]] +deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "Polyester", "Reexport", "SciMLBase"] +git-tree-sha1 = "1fe4f58f170c68b187ac42dc5f00932bb162ddfa" +uuid = "5b33eab2-c0f1-4480-b2c3-94bc1e80bda1" +version = "1.10.0" + +[[deps.OrdinaryDiffEqQPRK]] +deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] +git-tree-sha1 = "275900d64ab7be5f1bca8c7bfd48166838b6ab44" +uuid = "04162be5-8125-4266-98ed-640baecc6514" +version = "1.10.0" + +[[deps.OrdinaryDiffEqRKN]] +deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "Polyester", "RecursiveArrayTools", "Reexport", "SciMLBase"] +git-tree-sha1 = "edf3411246d6030e165a5fba513cbdcde5c72f79" +uuid = "af6ede74-add8-4cfd-b1df-9a4dbb109d7a" +version = "1.12.0" + +[[deps.OrdinaryDiffEqRosenbrock]] +deps = ["ADTypes", "DiffEqBase", "DifferentiationInterface", "FastBroadcast", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "LinearSolve", "MacroTools", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "Polyester", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] +git-tree-sha1 = "ed8d41b79e496e7876c2b8e020a9ebd8a821efc8" +uuid = "43230ef6-c299-4910-a778-202eb28ce4ce" +version = "1.30.0" + +[[deps.OrdinaryDiffEqSDIRK]] +deps = ["ADTypes", "DiffEqBase", "FastBroadcast", "LinearAlgebra", "MacroTools", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqNonlinearSolve", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "TruncatedStacktraces"] +git-tree-sha1 = "c5e26fbadbad137fa2b7e3161a290a1becfec502" +uuid = "2d112036-d095-4a1e-ab9a-08536f3ecdbf" +version = "1.14.0" + +[[deps.OrdinaryDiffEqSSPRK]] +deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "Polyester", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static"] +git-tree-sha1 = "4ec0be19f8115889f61643fc25f6e3af5cd4c9e7" +uuid = "669c94d9-1f4b-4b64-b377-1aa079aa2388" +version = "1.14.0" + +[[deps.OrdinaryDiffEqStabilizedIRK]] +deps = ["ADTypes", "DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqNonlinearSolve", "OrdinaryDiffEqStabilizedRK", "RecursiveArrayTools", "Reexport", "SciMLBase"] +git-tree-sha1 = "226226d334fe295885df6ecb2d110c22ead79983" +uuid = "e3e12d00-db14-5390-b879-ac3dd2ef6296" +version = "1.14.0" + +[[deps.OrdinaryDiffEqStabilizedRK]] +deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "StaticArrays"] +git-tree-sha1 = "bda2155c5abd7b1e4965d35f930f78e320d7bafe" +uuid = "358294b1-0aab-51c3-aafe-ad5ab194a2ad" +version = "1.10.0" + +[[deps.OrdinaryDiffEqSymplecticRK]] +deps = ["DiffEqBase", "FastBroadcast", "MuladdMacro", "OrdinaryDiffEqCore", "Polyester", "RecursiveArrayTools", "Reexport", "SciMLBase"] +git-tree-sha1 = "b18a4e7973e73e84cfd79222e2389565b323b588" +uuid = "fa646aed-7ef9-47eb-84c4-9443fc8cbfa8" +version = "1.13.0" + +[[deps.OrdinaryDiffEqTsit5]] +deps = ["DiffEqBase", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static", "TruncatedStacktraces"] +git-tree-sha1 = "6bd89fce8a0b198ac9fe98dc80362a92a2a13ae5" +uuid = "b1df2697-797e-41e3-8120-5422d3b24e4a" +version = "1.12.0" + +[[deps.OrdinaryDiffEqVerner]] +deps = ["DiffEqBase", "FastBroadcast", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "Polyester", "PrecompileTools", "Preferences", "RecursiveArrayTools", "Reexport", "SciMLBase", "Static", "TruncatedStacktraces"] +git-tree-sha1 = "58dc7756825ca46e5a601a5aeba7d26a071d373a" +uuid = "79d7bb75-1356-48c1-b8c0-6832512096c2" +version = "1.14.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 = "e4cff168707d441cd6bf3ff7e4832bdf34278e4a" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.37" +weakdeps = ["StatsBase"] + + [deps.PDMats.extensions] + StatsBaseExt = "StatsBase" + +[[deps.Pango_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "0662b083e11420952f2e62e17eddae7fc07d5997" +uuid = "36c8627f-9965-5494-a995-c6b170f724f3" +version = "1.57.0+0" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "7d2f8f21da5db6a806faf7b9b292296da42b2810" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.8.3" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] +git-tree-sha1 = "db76b1ecd5e9715f3d043cec13b2ec93ce015d53" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.44.2+0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.11.0" +weakdeps = ["REPL"] + + [deps.Pkg.extensions] + REPLExt = "REPL" + +[[deps.PlotThemes]] +deps = ["PlotUtils", "Statistics"] +git-tree-sha1 = "41031ef3a1be6f5bbbf3e8073f210556daeae5ca" +uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" +version = "3.3.0" + +[[deps.PlotUtils]] +deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "StableRNGs", "Statistics"] +git-tree-sha1 = "26ca162858917496748aad52bb5d3be4d26a228a" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.4.4" + +[[deps.Plots]] +deps = ["Base64", "Contour", "Dates", "Downloads", "FFMPEG", "FixedPointNumbers", "GR", "JLFzf", "JSON", "LaTeXStrings", "Latexify", "LinearAlgebra", "Measures", "NaNMath", "Pkg", "PlotThemes", "PlotUtils", "PrecompileTools", "Printf", "REPL", "Random", "RecipesBase", "RecipesPipeline", "Reexport", "RelocatableFolders", "Requires", "Scratch", "Showoff", "SparseArrays", "Statistics", "StatsBase", "TOML", "UUIDs", "UnicodeFun", "Unzip"] +git-tree-sha1 = "1cc8ad0762e59e713ee3ef28f9b78b2c9f4ca078" +uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +version = "1.41.5" + + [deps.Plots.extensions] + FileIOExt = "FileIO" + GeometryBasicsExt = "GeometryBasics" + IJuliaExt = "IJulia" + ImageInTerminalExt = "ImageInTerminal" + UnitfulExt = "Unitful" + + [deps.Plots.weakdeps] + FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" + GeometryBasics = "5c1252a2-5f33-56bf-86c9-59e7332b4326" + IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" + ImageInTerminal = "d8c32880-2388-543b-8c61-d9f865259254" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.PoissonRandom]] +deps = ["LogExpFunctions", "Random"] +git-tree-sha1 = "67afbcbe9e184d6729a92a022147ed4cf972ca7b" +uuid = "e409e4f3-bfea-5376-8464-e040bb5c01ab" +version = "0.4.7" + +[[deps.Polyester]] +deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] +git-tree-sha1 = "16bbc30b5ebea91e9ce1671adc03de2832cff552" +uuid = "f517fe37-dbe3-4b94-8317-1923a5111588" +version = "0.7.19" + +[[deps.PolyesterWeave]] +deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] +git-tree-sha1 = "645bed98cd47f72f67316fd42fc47dee771aefcd" +uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad" +version = "0.2.2" + +[[deps.PooledArrays]] +deps = ["DataAPI", "Future"] +git-tree-sha1 = "36d8b4b899628fb92c2749eb488d884a926614d3" +uuid = "2dfb63ee-cc39-5dd5-95bd-886bf059d720" +version = "1.4.3" + +[[deps.PreallocationTools]] +deps = ["Adapt", "ArrayInterface", "PrecompileTools"] +git-tree-sha1 = "e16b73bf892c55d16d53c9c0dbd0fb31cb7e25da" +uuid = "d236fae5-4411-538c-8e31-a6e3d9e00b46" +version = "1.2.0" + + [deps.PreallocationTools.extensions] + PreallocationToolsForwardDiffExt = "ForwardDiff" + PreallocationToolsReverseDiffExt = "ReverseDiff" + PreallocationToolsSparseConnectivityTracerExt = "SparseConnectivityTracer" + + [deps.PreallocationTools.weakdeps] + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseConnectivityTracer = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.1" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "8b770b60760d4451834fe79dd483e318eee709c4" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.5.2" + +[[deps.PrettyTables]] +deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "REPL", "Reexport", "StringManipulation", "Tables"] +git-tree-sha1 = "624de6279ab7d94fc9f672f0068107eb6619732c" +uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" +version = "3.3.2" + + [deps.PrettyTables.extensions] + PrettyTablesTypstryExt = "Typstry" + + [deps.PrettyTables.weakdeps] + Typstry = "f0ed7684-a786-439e-b1e3-3b82803b501e" + +[[deps.Primes]] +deps = ["IntegerMathUtils"] +git-tree-sha1 = "25cdd1d20cd005b52fc12cb6be3f75faaf59bb9b" +uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae" +version = "0.5.7" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" +version = "1.11.0" + +[[deps.PtrArrays]] +git-tree-sha1 = "4fbbafbc6251b883f4d2705356f3641f3652a7fe" +uuid = "43287f4e-b6f4-7ad1-bb20-aadabca52c3d" +version = "1.4.0" + +[[deps.Qt6Base_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Fontconfig_jll", "Glib_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "OpenSSL_jll", "Vulkan_Loader_jll", "Xorg_libSM_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Xorg_libxcb_jll", "Xorg_xcb_util_cursor_jll", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_keysyms_jll", "Xorg_xcb_util_renderutil_jll", "Xorg_xcb_util_wm_jll", "Zlib_jll", "libinput_jll", "xkbcommon_jll"] +git-tree-sha1 = "d7a4bff94f42208ce3cf6bc8e4e7d1d663e7ee8b" +uuid = "c0090381-4147-56d7-9ebc-da0b1113ec56" +version = "6.10.2+1" + +[[deps.Qt6Declarative_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll", "Qt6ShaderTools_jll", "Qt6Svg_jll"] +git-tree-sha1 = "d5b7dd0e226774cbd87e2790e34def09245c7eab" +uuid = "629bc702-f1f5-5709-abd5-49b8460ea067" +version = "6.10.2+1" + +[[deps.Qt6ShaderTools_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll"] +git-tree-sha1 = "4d85eedf69d875982c46643f6b4f66919d7e157b" +uuid = "ce943373-25bb-56aa-8eca-768745ed7b5a" +version = "6.10.2+1" + +[[deps.Qt6Svg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll"] +git-tree-sha1 = "81587ff5ff25a4e1115ce191e36285ede0334c9d" +uuid = "6de9746b-f93d-5813-b365-ba18ad4a9cf3" +version = "6.10.2+0" + +[[deps.Qt6Wayland_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Qt6Base_jll", "Qt6Declarative_jll"] +git-tree-sha1 = "672c938b4b4e3e0169a07a5f227029d4905456f2" +uuid = "e99dba38-086e-5de3-a5b1-6e4c66e897c3" +version = "6.10.2+1" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "5e8e8b0ab68215d7a2b14b9921a946fee794749e" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.11.3" + + [deps.QuadGK.extensions] + QuadGKEnzymeExt = "Enzyme" + + [deps.QuadGK.weakdeps] + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + +[[deps.QuasiMonteCarlo]] +deps = ["Accessors", "ConcreteStructs", "LatticeRules", "LinearAlgebra", "PrecompileTools", "Primes", "Random", "Sobol"] +git-tree-sha1 = "017a6731a1754173013b98f458adb631e368a9d2" +uuid = "8a4e6c94-4038-4cdc-81c3-7e6ffdb2a71b" +version = "0.3.5" +weakdeps = ["Distributions"] + + [deps.QuasiMonteCarlo.extensions] + QuasiMonteCarloDistributionsExt = "Distributions" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "StyledStrings", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" +version = "1.11.0" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +version = "1.11.0" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.RecipesPipeline]] +deps = ["Dates", "NaNMath", "PlotUtils", "PrecompileTools", "RecipesBase"] +git-tree-sha1 = "45cf9fd0ca5839d06ef333c8201714e888486342" +uuid = "01d81517-befc-4cb6-b9ec-a95719d0359c" +version = "0.6.12" + +[[deps.RecursiveArrayTools]] +deps = ["Adapt", "ArrayInterface", "DocStringExtensions", "GPUArraysCore", "LinearAlgebra", "PrecompileTools", "RecipesBase", "StaticArraysCore", "SymbolicIndexingInterface"] +git-tree-sha1 = "d0282d612f22dcad7b81cf487b746e63aa2a6709" +uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" +version = "3.54.0" + + [deps.RecursiveArrayTools.extensions] + RecursiveArrayToolsFastBroadcastExt = "FastBroadcast" + RecursiveArrayToolsFastBroadcastPolyesterExt = ["FastBroadcast", "Polyester"] + RecursiveArrayToolsForwardDiffExt = "ForwardDiff" + RecursiveArrayToolsKernelAbstractionsExt = "KernelAbstractions" + RecursiveArrayToolsMeasurementsExt = "Measurements" + RecursiveArrayToolsMonteCarloMeasurementsExt = "MonteCarloMeasurements" + RecursiveArrayToolsReverseDiffExt = ["ReverseDiff", "Zygote"] + RecursiveArrayToolsSparseArraysExt = ["SparseArrays"] + RecursiveArrayToolsStatisticsExt = "Statistics" + RecursiveArrayToolsStructArraysExt = "StructArrays" + RecursiveArrayToolsTablesExt = ["Tables"] + RecursiveArrayToolsTrackerExt = "Tracker" + RecursiveArrayToolsZygoteExt = "Zygote" + + [deps.RecursiveArrayTools.weakdeps] + FastBroadcast = "7034ab61-46d4-4ed7-9d0f-46aef9175898" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" + Polyester = "f517fe37-dbe3-4b94-8317-1923a5111588" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "ffdaf70d81cf6ff22c2b6e733c900c3321cab864" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "1.0.1" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.1" + +[[deps.ResettableStacks]] +deps = ["StaticArrays"] +git-tree-sha1 = "31c086583c92ab32d82ebef0d09fbcd6dd2c54a7" +uuid = "ae5879a3-cd67-5da8-be7f-38c6eb64a37b" +version = "1.2.0" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "5b3d50eb374cea306873b371d3f8d3915a018f0b" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.9.0" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "58cdd8fb2201a6267e1db87ff148dd6c1dbd8ad8" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.5.1+0" + +[[deps.RuntimeGeneratedFunctions]] +deps = ["ExprTools", "SHA", "Serialization"] +git-tree-sha1 = "cfcdc949c4660544ab0fdeed169561cb22f835f4" +uuid = "7e49a35a-f44a-4d26-94aa-eba1b4ca6b47" +version = "0.5.18" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.SIMDTypes]] +git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" +uuid = "94e857df-77ce-4151-89e5-788b33177be4" +version = "0.1.0" + +[[deps.SciMLBase]] +deps = ["ADTypes", "Accessors", "Adapt", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "Moshi", "PreallocationTools", "PrecompileTools", "Preferences", "Printf", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLLogging", "SciMLOperators", "SciMLPublic", "SciMLStructures", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface"] +git-tree-sha1 = "4ab0641a10918b1a2d8f59c22ff641fc478332e3" +uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462" +version = "2.155.0" + + [deps.SciMLBase.extensions] + SciMLBaseChainRulesCoreExt = "ChainRulesCore" + SciMLBaseDifferentiationInterfaceExt = "DifferentiationInterface" + SciMLBaseDistributionsExt = "Distributions" + SciMLBaseEnzymeExt = "Enzyme" + SciMLBaseForwardDiffExt = "ForwardDiff" + SciMLBaseMLStyleExt = "MLStyle" + SciMLBaseMakieExt = "Makie" + SciMLBaseMeasurementsExt = "Measurements" + SciMLBaseMonteCarloMeasurementsExt = "MonteCarloMeasurements" + SciMLBaseMooncakeExt = "Mooncake" + SciMLBasePartialFunctionsExt = "PartialFunctions" + SciMLBasePyCallExt = "PyCall" + SciMLBasePythonCallExt = "PythonCall" + SciMLBaseRCallExt = "RCall" + SciMLBaseReverseDiffExt = "ReverseDiff" + SciMLBaseTrackerExt = "Tracker" + SciMLBaseZygoteExt = ["Zygote", "ChainRulesCore"] + + [deps.SciMLBase.weakdeps] + ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DifferentiationInterface = "a0c0ee7d-e4b9-4e03-894e-1c5f64a51d63" + Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" + Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" + ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" + MLStyle = "d8e11817-5142-5d16-987a-aa16d5891078" + Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" + Mooncake = "da2b9cff-9c12-43a0-ae48-6db2b0edb7d6" + PartialFunctions = "570af359-4316-4cb7-8c74-252c00c2016b" + PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" + PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" + RCall = "6f49c342-dc21-5d91-9882-a32aef131414" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" + +[[deps.SciMLJacobianOperators]] +deps = ["ADTypes", "ArrayInterface", "ConcreteStructs", "ConstructionBase", "DifferentiationInterface", "FastClosures", "LinearAlgebra", "SciMLBase", "SciMLOperators"] +git-tree-sha1 = "7156a5b51cba1bea33a82a036939ead4131f92bc" +uuid = "19f34311-ddf3-4b8b-af20-060888a46c0e" +version = "0.1.13" + +[[deps.SciMLLogging]] +deps = ["Logging", "LoggingExtras", "Preferences"] +git-tree-sha1 = "0161be062570af4042cf6f69e3d5d0b0555b6927" +uuid = "a6db7da4-7206-11f0-1eab-35f2a5dbe1d1" +version = "1.9.1" + + [deps.SciMLLogging.extensions] + SciMLLoggingTracyExt = "Tracy" + + [deps.SciMLLogging.weakdeps] + Tracy = "e689c965-62c8-4b79-b2c5-8359227902fd" + +[[deps.SciMLOperators]] +deps = ["Accessors", "ArrayInterface", "DocStringExtensions", "LinearAlgebra"] +git-tree-sha1 = "234869cf9fee9258a95464b7a7065cc7be84db00" +uuid = "c0aeaf25-5076-4817-a8d5-81caf7dfa961" +version = "1.16.0" +weakdeps = ["SparseArrays", "StaticArraysCore"] + + [deps.SciMLOperators.extensions] + SciMLOperatorsSparseArraysExt = "SparseArrays" + SciMLOperatorsStaticArraysCoreExt = "StaticArraysCore" + +[[deps.SciMLPublic]] +git-tree-sha1 = "0ba076dbdce87ba230fff48ca9bca62e1f345c9b" +uuid = "431bcebd-1456-4ced-9d72-93c2757fff0b" +version = "1.0.1" + +[[deps.SciMLStructures]] +deps = ["ArrayInterface", "PrecompileTools"] +git-tree-sha1 = "607f6867d0b0553e98fc7f725c9f9f13b4d01a32" +uuid = "53ae85a6-f571-4167-b2af-e1d143709226" +version = "1.10.0" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "9b81b8393e50b7d4e6d0a9f14e192294d3b7c109" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.3.0" + +[[deps.SentinelArrays]] +deps = ["Dates", "Random"] +git-tree-sha1 = "ebe7e59b37c400f694f52b58c93d26201387da70" +uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" +version = "1.4.9" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" +version = "1.11.0" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "c5391c6ace3bc430ca630251d02ea9687169ca68" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.2" + +[[deps.Showoff]] +deps = ["Dates", "Grisu"] +git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" +uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" +version = "1.0.3" + +[[deps.SimpleBufferStream]] +git-tree-sha1 = "f305871d2f381d21527c770d4788c06c097c9bc1" +uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" +version = "1.2.0" + +[[deps.SimpleNonlinearSolve]] +deps = ["ADTypes", "ArrayInterface", "BracketingNonlinearSolve", "CommonSolve", "ConcreteStructs", "DifferentiationInterface", "FastClosures", "FiniteDiff", "ForwardDiff", "LineSearch", "LinearAlgebra", "MaybeInplace", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "Setfield", "StaticArraysCore"] +git-tree-sha1 = "d688de789b7e643326caf9a1051376dadbcd8873" +uuid = "727e6d20-b764-4bd8-a329-72de5adea6c7" +version = "2.11.1" + + [deps.SimpleNonlinearSolve.extensions] + SimpleNonlinearSolveChainRulesCoreExt = "ChainRulesCore" + SimpleNonlinearSolveReverseDiffExt = "ReverseDiff" + SimpleNonlinearSolveTrackerExt = "Tracker" + + [deps.SimpleNonlinearSolve.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "be8eeac05ec97d379347584fa9fe2f5f76795bcb" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.5" + +[[deps.Sobol]] +deps = ["DelimitedFiles", "Random"] +git-tree-sha1 = "5a74ac22a9daef23705f010f72c81d6925b19df8" +uuid = "ed01d8cd-4d21-5b2a-85b4-cc3bdc58bad4" +version = "1.5.0" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" +version = "1.11.0" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "64d974c2e6fdf07f8155b5b2ca2ffa9069b608d9" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.2.2" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +version = "1.11.0" + +[[deps.SparseConnectivityTracer]] +deps = ["ADTypes", "DocStringExtensions", "FillArrays", "LinearAlgebra", "Random", "SparseArrays"] +git-tree-sha1 = "590b72143436e443888124aaf4026a636049e3f5" +uuid = "9f842d2f-2579-4b1d-911e-f412cf18a3f5" +version = "1.2.1" + + [deps.SparseConnectivityTracer.extensions] + SparseConnectivityTracerChainRulesCoreExt = "ChainRulesCore" + SparseConnectivityTracerLogExpFunctionsExt = "LogExpFunctions" + SparseConnectivityTracerNNlibExt = "NNlib" + SparseConnectivityTracerNaNMathExt = "NaNMath" + SparseConnectivityTracerSpecialFunctionsExt = "SpecialFunctions" + + [deps.SparseConnectivityTracer.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + LogExpFunctions = "2ab3a3ac-af41-5b50-aa03-7779005ae688" + NNlib = "872c559c-99b0-510c-b3b7-b6c96a88d5cd" + NaNMath = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" + SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b" + +[[deps.SparseMatrixColorings]] +deps = ["ADTypes", "DocStringExtensions", "LinearAlgebra", "PrecompileTools", "Random", "SparseArrays"] +git-tree-sha1 = "1c1be8c6fdfaf9b6c9e156c509e672953b8e6af7" +uuid = "0a514795-09f3-496d-8182-132a7b665d35" +version = "0.4.26" + + [deps.SparseMatrixColorings.extensions] + SparseMatrixColoringsCUDAExt = "CUDA" + SparseMatrixColoringsCliqueTreesExt = "CliqueTrees" + SparseMatrixColoringsColorsExt = "Colors" + SparseMatrixColoringsJuMPExt = ["JuMP", "MathOptInterface"] + + [deps.SparseMatrixColorings.weakdeps] + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + CliqueTrees = "60701a23-6482-424a-84db-faee86b9b1f8" + Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" + JuMP = "4076af6c-e467-56ae-b986-b466b2749572" + MathOptInterface = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "2700b235561b0335d5bef7097a111dc513b8655e" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.7.2" + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + + [deps.SpecialFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + +[[deps.StableRNGs]] +deps = ["Random"] +git-tree-sha1 = "4f96c596b8c8258cc7d3b19797854d368f243ddc" +uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" +version = "1.0.4" + +[[deps.Static]] +deps = ["CommonWorldInvalidations", "IfElse", "PrecompileTools", "SciMLPublic"] +git-tree-sha1 = "49440414711eddc7227724ae6e570c7d5559a086" +uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" +version = "1.3.1" + +[[deps.StaticArrayInterface]] +deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "PrecompileTools", "SciMLPublic", "Static"] +git-tree-sha1 = "aa1ea41b3d45ac449d10477f65e2b40e3197a0d2" +uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" +version = "1.9.0" + + [deps.StaticArrayInterface.extensions] + StaticArrayInterfaceOffsetArraysExt = "OffsetArrays" + StaticArrayInterfaceStaticArraysExt = "StaticArrays" + + [deps.StaticArrayInterface.weakdeps] + OffsetArrays = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "246a8bb2e6667f832eea063c3a56aef96429a3db" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.18" + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + + [deps.StaticArrays.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "6ab403037779dae8c514bad259f32a447262455a" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.4" + +[[deps.Statistics]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0" +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.11.1" +weakdeps = ["SparseArrays"] + + [deps.Statistics.extensions] + SparseArraysExt = ["SparseArrays"] + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "178ed29fd5b2a2cfc3bd31c13375ae925623ff36" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.8.0" + +[[deps.StatsBase]] +deps = ["AliasTables", "DataAPI", "DataStructures", "IrrationalConstants", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "aceda6f4e598d331548e04cc6b2124a6148138e3" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.10" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "91f091a8716a6bb38417a6e6f274602a19aaa685" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.5.2" + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + + [deps.StatsFuns.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.SteadyStateDiffEq]] +deps = ["ConcreteStructs", "DiffEqBase", "DiffEqCallbacks", "LinearAlgebra", "NonlinearSolveBase", "Reexport", "SciMLBase"] +git-tree-sha1 = "a7fb7c70236eb798c2021ded04844784e31549cc" +uuid = "9672c7b4-1e72-59bd-8a11-6ac3964bc41f" +version = "2.10.0" + +[[deps.StochasticDiffEq]] +deps = ["DiffEqBase", "DiffEqNoiseProcess", "LinearAlgebra", "OrdinaryDiffEqCore", "OrdinaryDiffEqNonlinearSolve", "Reexport", "SciMLBase", "StochasticDiffEqCore", "StochasticDiffEqHighOrder", "StochasticDiffEqIIF", "StochasticDiffEqImplicit", "StochasticDiffEqLeaping", "StochasticDiffEqLevyArea", "StochasticDiffEqLowOrder", "StochasticDiffEqMilstein", "StochasticDiffEqROCK", "StochasticDiffEqRODE", "StochasticDiffEqWeak"] +git-tree-sha1 = "6b893f2876290ea691817f78c11b67b0f043b085" +uuid = "789caeaf-c7a9-5a7d-9973-96adeb23e2a0" +version = "6.102.0" + +[[deps.StochasticDiffEqCore]] +deps = ["ADTypes", "Adapt", "ArrayInterface", "DataStructures", "DiffEqBase", "DiffEqNoiseProcess", "FastPower", "FiniteDiff", "ForwardDiff", "JumpProcesses", "LinearAlgebra", "Logging", "MuladdMacro", "OrdinaryDiffEqCore", "Random", "RecursiveArrayTools", "Reexport", "SciMLBase", "SciMLLogging", "SciMLOperators", "SimpleNonlinearSolve", "SparseArrays", "StaticArrays", "StochasticDiffEqLevyArea"] +git-tree-sha1 = "9bc7b74e950dfdc8dac95280b7d8fd49aa8fb7bc" +uuid = "19c5a474-6cd1-4a5f-be79-46dc34e54d7f" +version = "1.1.0" + +[[deps.StochasticDiffEqHighOrder]] +deps = ["DiffEqBase", "DiffEqNoiseProcess", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "StaticArrays", "StochasticDiffEqCore"] +git-tree-sha1 = "df195401fd83b6ef80715ee26a3da66094085d39" +uuid = "0520c28c-50fd-4d16-9c96-902fc80b3bab" +version = "1.1.0" + +[[deps.StochasticDiffEqIIF]] +deps = ["DiffEqBase", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "StochasticDiffEqCore"] +git-tree-sha1 = "8c93785bd96b50aad7ee38f849ad48946d2b1394" +uuid = "ebf54054-c36b-4494-9aba-657e36df524f" +version = "1.1.0" + +[[deps.StochasticDiffEqImplicit]] +deps = ["ADTypes", "DiffEqBase", "DiffEqNoiseProcess", "FiniteDiff", "ForwardDiff", "JumpProcesses", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqDifferentiation", "OrdinaryDiffEqNonlinearSolve", "RecursiveArrayTools", "Reexport", "SciMLBase", "StaticArrays", "StochasticDiffEqCore"] +git-tree-sha1 = "a63c04c61da6fb85343f6b2e9121525519f94353" +uuid = "5080b986-4c76-4669-b5dc-373a41579d5b" +version = "1.2.0" + +[[deps.StochasticDiffEqLeaping]] +deps = ["ADTypes", "DiffEqBase", "FiniteDiff", "ForwardDiff", "JumpProcesses", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqNonlinearSolve", "RecursiveArrayTools", "Reexport", "SciMLBase", "StaticArrays", "StochasticDiffEqCore"] +git-tree-sha1 = "ea31ac84f17ea024c665642ca7e594527346c404" +uuid = "aefaaa88-39f2-4e89-b162-d61b7e8cc81b" +version = "1.1.0" + +[[deps.StochasticDiffEqLevyArea]] +deps = ["LinearAlgebra", "Random", "SpecialFunctions"] +git-tree-sha1 = "30414532d345d9e67c561f004c4343daef77e099" +uuid = "90dbc90e-856a-4131-af2c-e8c5aa0f35b5" +version = "1.1.0" + +[[deps.StochasticDiffEqLowOrder]] +deps = ["DiffEqBase", "DiffEqNoiseProcess", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "StaticArrays", "StochasticDiffEqCore"] +git-tree-sha1 = "73af8041144bb4e23e41601b9c53664edf5aac96" +uuid = "d15fe365-ce7f-450a-828a-7985bd5b681b" +version = "1.1.0" + +[[deps.StochasticDiffEqMilstein]] +deps = ["DiffEqBase", "DiffEqNoiseProcess", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "StaticArrays", "StochasticDiffEqCore", "StochasticDiffEqLevyArea"] +git-tree-sha1 = "ea2d9a43b2a146ccf71dda9518386a6c9ae299b5" +uuid = "8c95a807-c8e7-4581-8419-890d001af53e" +version = "1.2.0" + +[[deps.StochasticDiffEqROCK]] +deps = ["DiffEqBase", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "StaticArrays", "StochasticDiffEqCore"] +git-tree-sha1 = "7bbc9d7c81ad8fbf8e7787dadc98e51e7b1d46aa" +uuid = "db241ea8-0e6b-4abc-8f2d-1adff2294fd9" +version = "1.1.0" + +[[deps.StochasticDiffEqRODE]] +deps = ["DiffEqBase", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "RecursiveArrayTools", "Reexport", "SciMLBase", "StaticArrays", "StochasticDiffEqCore"] +git-tree-sha1 = "72ed88d97e0dff8708df5e9359e39b09931f6ca6" +uuid = "49714585-0aa1-4f53-b1e6-a9b8c0d5e03f" +version = "1.1.0" + +[[deps.StochasticDiffEqWeak]] +deps = ["ADTypes", "DiffEqBase", "DiffEqNoiseProcess", "FiniteDiff", "ForwardDiff", "LinearAlgebra", "MuladdMacro", "OrdinaryDiffEqCore", "OrdinaryDiffEqNonlinearSolve", "RecursiveArrayTools", "Reexport", "SciMLBase", "StaticArrays", "StochasticDiffEqCore"] +git-tree-sha1 = "60d6d7c180aeae58f254d0c5d3377bc4f6bb959d" +uuid = "af2a2fcd-1c36-4cbe-a6d0-5afda784a085" +version = "1.1.0" + +[[deps.StrideArraysCore]] +deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] +git-tree-sha1 = "83151ba8065a73f53ca2ae98bc7274d817aa30f2" +uuid = "7792a7ef-975c-4747-a70f-980b88e8d1da" +version = "0.5.8" + +[[deps.StringManipulation]] +deps = ["PrecompileTools"] +git-tree-sha1 = "d05693d339e37d6ab134c5ab53c29fce5ee5d7d5" +uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" +version = "0.4.4" + +[[deps.StructUtils]] +deps = ["Dates", "UUIDs"] +git-tree-sha1 = "fa95b3b097bcef5845c142ea2e085f1b2591e92c" +uuid = "ec057cc2-7a8d-4b58-b3b3-92acb9f63b42" +version = "2.7.1" + + [deps.StructUtils.extensions] + StructUtilsMeasurementsExt = ["Measurements"] + StructUtilsStaticArraysCoreExt = ["StaticArraysCore"] + StructUtilsTablesExt = ["Tables"] + + [deps.StructUtils.weakdeps] + Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" + +[[deps.StyledStrings]] +uuid = "f489334b-da3d-4c2e-b8f0-e476e12c162b" +version = "1.11.0" + +[[deps.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse32_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "libblastrampoline_jll"] +git-tree-sha1 = "1d43a4874b879f381b8a3a978f0ebe837cfd0922" +uuid = "ca45d3f4-326b-53b0-9957-23b75aacb3f2" +version = "7.12.1+0" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.7.0+0" + +[[deps.Sundials]] +deps = ["Accessors", "ArrayInterface", "CEnum", "DataStructures", "DiffEqBase", "Libdl", "LinearAlgebra", "LinearSolve", "Logging", "NonlinearSolveBase", "PrecompileTools", "Reexport", "SciMLBase", "SparseArrays", "Sundials_jll", "SymbolicIndexingInterface"] +git-tree-sha1 = "2d27edb89b7c555a57b8f22bfde92d6828d11cee" +uuid = "c3572dad-4567-51f8-b174-8c6c989267f4" +version = "5.1.0" + +[[deps.Sundials_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "OpenBLAS32_jll", "SuiteSparse32_jll"] +git-tree-sha1 = "a872f379c836e9cb5734485ca0681b192a59b98b" +uuid = "fb77eaff-e24c-56d4-86b1-d163f2edb164" +version = "7.5.0+0" + +[[deps.SymbolicIndexingInterface]] +deps = ["Accessors", "ArrayInterface", "RuntimeGeneratedFunctions", "StaticArraysCore"] +git-tree-sha1 = "94c58884e013efff548002e8dc2fdd1cb74dfce5" +uuid = "2efcf032-c050-4f8e-a9bb-153293bab1f5" +version = "0.3.46" +weakdeps = ["PrettyTables"] + + [deps.SymbolicIndexingInterface.extensions] + SymbolicIndexingInterfacePrettyTablesExt = "PrettyTables" + +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + +[[deps.TableTraits]] +deps = ["IteratorInterfaceExtensions"] +git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" +uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" +version = "1.0.1" + +[[deps.Tables]] +deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "f2c1efbc8f3a609aadf318094f8fc5204bdaf344" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.12.1" + +[[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.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +version = "1.11.0" + +[[deps.ThreadingUtilities]] +deps = ["ManualMemory"] +git-tree-sha1 = "d969183d3d244b6c33796b5ed01ab97328f2db85" +uuid = "8290d209-cae3-49c0-8002-c8c24d57dab5" +version = "0.5.5" + +[[deps.TimerOutputs]] +deps = ["ExprTools", "Printf"] +git-tree-sha1 = "3748bd928e68c7c346b52125cf41fff0de6937d0" +uuid = "a759f4b9-e2f1-59dc-863e-4aeb61b1ea8f" +version = "0.5.29" + + [deps.TimerOutputs.extensions] + FlameGraphsExt = "FlameGraphs" + + [deps.TimerOutputs.weakdeps] + FlameGraphs = "08572546-2f56-4bcf-ba4e-bab62c3a3f89" + +[[deps.TranscodingStreams]] +git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.11.3" + +[[deps.TruncatedStacktraces]] +deps = ["InteractiveUtils", "MacroTools", "Preferences"] +git-tree-sha1 = "ea3e54c2bdde39062abf5a9758a23735558705e1" +uuid = "781d530d-4396-4725-bb49-402e4bee1e77" +version = "1.4.0" + +[[deps.URIs]] +git-tree-sha1 = "bef26fb046d031353ef97a82e3fdb6afe7f21b1a" +uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" +version = "1.6.1" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" +version = "1.11.0" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" +version = "1.11.0" + +[[deps.UnicodeFun]] +deps = ["REPL"] +git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" +uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" +version = "0.4.1" + +[[deps.Unzip]] +git-tree-sha1 = "ca0969166a028236229f63514992fc073799bb78" +uuid = "41fe7b60-77ed-43a1-b4f0-825fd5a5650d" +version = "0.2.0" + +[[deps.Vulkan_Loader_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Wayland_jll", "Xorg_libX11_jll", "Xorg_libXrandr_jll", "xkbcommon_jll"] +git-tree-sha1 = "2f0486047a07670caad3a81a075d2e518acc5c59" +uuid = "a44049a8-05dd-5a78-86c9-5fde0876e88c" +version = "1.3.243+0" + +[[deps.Wayland_jll]] +deps = ["Artifacts", "EpollShim_jll", "Expat_jll", "JLLWrappers", "Libdl", "Libffi_jll"] +git-tree-sha1 = "96478df35bbc2f3e1e791bc7a3d0eeee559e60e9" +uuid = "a2964d1f-97da-50d4-b82a-358c7fce9d89" +version = "1.24.0+0" + +[[deps.WeakRefStrings]] +deps = ["DataAPI", "InlineStrings", "Parsers"] +git-tree-sha1 = "b1be2855ed9ed8eac54e5caff2afcdb442d52c23" +uuid = "ea10d353-3f73-51f8-a26c-33c1cb351aa5" +version = "1.4.2" + +[[deps.WorkerUtilities]] +git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7" +uuid = "76eceee3-57b5-4d4a-8e66-0e911cebbf60" +version = "1.6.1" + +[[deps.XZ_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "b29c22e245d092b8b4e8d3c09ad7baa586d9f573" +uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" +version = "5.8.3+0" + +[[deps.Xorg_libICE_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a3ea76ee3f4facd7a64684f9af25310825ee3668" +uuid = "f67eecfb-183a-506d-b269-f58e52b52d7c" +version = "1.1.2+0" + +[[deps.Xorg_libSM_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libICE_jll"] +git-tree-sha1 = "9c7ad99c629a44f81e7799eb05ec2746abb5d588" +uuid = "c834827a-8449-5923-a945-d239c165b7dd" +version = "1.2.6+0" + +[[deps.Xorg_libX11_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] +git-tree-sha1 = "808090ede1d41644447dd5cbafced4731c56bd2f" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.8.13+0" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "aa1261ebbac3ccc8d16558ae6799524c450ed16b" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.13+0" + +[[deps.Xorg_libXcursor_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "6c74ca84bbabc18c4547014765d194ff0b4dc9da" +uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" +version = "1.2.4+0" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "52858d64353db33a56e13c341d7bf44cd0d7b309" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.6+0" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "1a4a26870bf1e5d26cd585e38038d399d7e65706" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.8+0" + +[[deps.Xorg_libXfixes_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "75e00946e43621e09d431d9b95818ee751e6b2ef" +uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" +version = "6.0.2+0" + +[[deps.Xorg_libXi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll", "Xorg_libXfixes_jll"] +git-tree-sha1 = "a376af5c7ae60d29825164db40787f15c80c7c54" +uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" +version = "1.8.3+0" + +[[deps.Xorg_libXinerama_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll"] +git-tree-sha1 = "0ba01bc7396896a4ace8aab67db31403c71628f4" +uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" +version = "1.1.7+0" + +[[deps.Xorg_libXrandr_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "6c174ef70c96c76f4c3f4d3cfbe09d018bcd1b53" +uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" +version = "1.5.6+0" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "7ed9347888fac59a618302ee38216dd0379c480d" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.12+0" + +[[deps.Xorg_libpciaccess_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "4909eb8f1cbf6bd4b1c30dd18b2ead9019ef2fad" +uuid = "a65dc6b1-eb27-53a1-bb3e-dea574b5389e" +version = "0.18.1+0" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXau_jll", "Xorg_libXdmcp_jll"] +git-tree-sha1 = "bfcaf7ec088eaba362093393fe11aa141fa15422" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.17.1+0" + +[[deps.Xorg_libxkbfile_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "ed756a03e95fff88d8f738ebc2849431bdd4fd1a" +uuid = "cc61e674-0454-545c-8b26-ed2c68acab7a" +version = "1.2.0+0" + +[[deps.Xorg_xcb_util_cursor_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_image_jll", "Xorg_xcb_util_jll", "Xorg_xcb_util_renderutil_jll"] +git-tree-sha1 = "9750dc53819eba4e9a20be42349a6d3b86c7cdf8" +uuid = "e920d4aa-a673-5f3a-b3d7-f755a4d47c43" +version = "0.1.6+0" + +[[deps.Xorg_xcb_util_image_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] +git-tree-sha1 = "f4fc02e384b74418679983a97385644b67e1263b" +uuid = "12413925-8142-5f55-bb0e-6d7ca50bb09b" +version = "0.4.1+0" + +[[deps.Xorg_xcb_util_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll"] +git-tree-sha1 = "68da27247e7d8d8dafd1fcf0c3654ad6506f5f97" +uuid = "2def613f-5ad1-5310-b15b-b15d46f528f5" +version = "0.4.1+0" + +[[deps.Xorg_xcb_util_keysyms_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] +git-tree-sha1 = "44ec54b0e2acd408b0fb361e1e9244c60c9c3dd4" +uuid = "975044d2-76e6-5fbe-bf08-97ce7c6574c7" +version = "0.4.1+0" + +[[deps.Xorg_xcb_util_renderutil_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] +git-tree-sha1 = "5b0263b6d080716a02544c55fdff2c8d7f9a16a0" +uuid = "0d47668e-0667-5a69-a72c-f761630bfb7e" +version = "0.3.10+0" + +[[deps.Xorg_xcb_util_wm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xcb_util_jll"] +git-tree-sha1 = "f233c83cad1fa0e70b7771e0e21b061a116f2763" +uuid = "c22f9ab0-d5fe-5066-847c-f4bb1cd4e361" +version = "0.4.2+0" + +[[deps.Xorg_xkbcomp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxkbfile_jll"] +git-tree-sha1 = "801a858fc9fb90c11ffddee1801bb06a738bda9b" +uuid = "35661453-b289-5fab-8a00-3d9160c6a3a4" +version = "1.4.7+0" + +[[deps.Xorg_xkeyboard_config_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_xkbcomp_jll"] +git-tree-sha1 = "00af7ebdc563c9217ecc67776d1bbf037dbcebf4" +uuid = "33bec58e-1273-512f-9401-5d533626f822" +version = "2.44.0+0" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a63799ff68005991f9d9491b6e95bd3478d783cb" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.6.0+0" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+1" + +[[deps.Zstd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "446b23e73536f84e8037f5dce465e92275f6a308" +uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" +version = "1.5.7+1" + +[[deps.eudev_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c3b0e6196d50eab0c5ed34021aaa0bb463489510" +uuid = "35ca27e7-8b34-5b7f-bca9-bdc33f59eb06" +version = "3.2.14+0" + +[[deps.fzf_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "b6a34e0e0960190ac2a4363a1bd003504772d631" +uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" +version = "0.61.1+0" + +[[deps.libaom_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "371cc681c00a3ccc3fbc5c0fb91f58ba9bec1ecf" +uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" +version = "3.13.1+0" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "125eedcb0a4a0bba65b657251ce1d27c8714e9d6" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.17.4+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.11.0+0" + +[[deps.libdecor_jll]] +deps = ["Artifacts", "Dbus_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pango_jll", "Wayland_jll", "xkbcommon_jll"] +git-tree-sha1 = "9bf7903af251d2050b467f76bdbe57ce541f7f4f" +uuid = "1183f4f0-6f2a-5f1a-908b-139f9cdfea6f" +version = "0.2.2+0" + +[[deps.libdrm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libpciaccess_jll"] +git-tree-sha1 = "63aac0bcb0b582e11bad965cef4a689905456c03" +uuid = "8e53e030-5e6c-5a89-a30b-be5b7263a166" +version = "2.4.125+1" + +[[deps.libevdev_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "56d643b57b188d30cccc25e331d416d3d358e557" +uuid = "2db6ffa8-e38f-5e21-84af-90c45d0032cc" +version = "1.13.4+0" + +[[deps.libfdk_aac_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "646634dd19587a56ee2f1199563ec056c5f228df" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.4+0" + +[[deps.libinput_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "eudev_jll", "libevdev_jll", "mtdev_jll"] +git-tree-sha1 = "91d05d7f4a9f67205bd6cf395e488009fe85b499" +uuid = "36db933b-70db-51c0-b978-0f229ee0e533" +version = "1.28.1+0" + +[[deps.libpng_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "45a20bd63e4fafc84ed9e4ac4ba15c8a7deff803" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.57+0" + +[[deps.libva_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll", "Xorg_libXfixes_jll", "libdrm_jll"] +git-tree-sha1 = "7dbf96baae3310fe2fa0df0ccbb3c6288d5816c9" +uuid = "9a156e7d-b971-5f62-b2c9-67348b8fb97c" +version = "2.23.0+0" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll"] +git-tree-sha1 = "11e1772e7f3cc987e9d3de991dd4f6b2602663a5" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.8+0" + +[[deps.mtdev_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "b4d631fd51f2e9cdd93724ae25b2efc198b059b1" +uuid = "009596ad-96f7-51b1-9f1b-5ce2d5e8a71e" +version = "1.1.7+0" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.59.0+0" + +[[deps.oneTBB_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "1350188a69a6e46f799d3945beef36435ed7262f" +uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e" +version = "2022.0.0+1" + +[[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 = "14cc7083fc6dff3cc44f2bc435ee96d06ed79aa7" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "10164.0.1+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e7b67590c14d487e734dcb925924c5dc43ec85f3" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +version = "4.1.0+0" + +[[deps.xkbcommon_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xkeyboard_config_jll"] +git-tree-sha1 = "a1fc6507a40bf504527d0d4067d718f8e179b2b8" +uuid = "d8fb68d0-12a3-5cfd-a85a-d49703b185fd" +version = "1.13.0+0" diff --git a/extern/photoionization-julia/Project.toml b/extern/photoionization-julia/Project.toml new file mode 100644 index 0000000000..49765cf0c9 --- /dev/null +++ b/extern/photoionization-julia/Project.toml @@ -0,0 +1,6 @@ +[deps] +CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" +DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" +DifferentialEquations = "0c46a032-eb83-5123-abaf-570d42b7fbaa" +Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +Sundials = "c3572dad-4567-51f8-b174-8c6c989267f4" diff --git a/extern/photoionization-julia/fraction.jl b/extern/photoionization-julia/fraction.jl new file mode 100644 index 0000000000..f0acf2766c --- /dev/null +++ b/extern/photoionization-julia/fraction.jl @@ -0,0 +1,136 @@ +using Pkg +PATH = dirname(PROGRAM_FILE) +Pkg.activate(PATH) +Pkg.instantiate() + +using DifferentialEquations +using Sundials +using Plots +using CSV +using DataFrames + +const m_p = 1.672621777e-24 +const m_e = 9.10938291e-28 +const c = 2.99792458e10 +const k_B = 1.3806488e-16 +const n_A = 6.02214129e23 +const h = 6.62606957e-27 +const R = k_B * n_A +const σ_v = 1.5e-18 +const E_ion = 6.4e-12 + +struct State + n_spec::Vector{Float64} + n_rad::Vector{Float64} + γ_vec::Vector{Float64} + spec_mass::Vector{Float64} + E::Float64 +end + +function get_ρ(state::State) + ρ = 0.0 + for i in 1:length(state.n_spec) + ρ += state.n_spec[i] * state.spec_mass[i] + end + return ρ +end + +function get_γ_inv(state::State) + γ = 0.0 + for i in 1:length(state.n_spec) + γ += state.n_spec[i] / (state.γ_vec[i] - 1.0) + end + return γ / sum(state.n_spec) +end + +function get_T(state::State) + γ_inv = get_γ_inv(state) + ρ = get_ρ(state) + sum_ni = sum(state.n_spec) + T = state.E * ρ / (k_B * γ_inv * sum_ni) + return T +end + +function get_E(state::State, T::Float64) + # The state should contain a dummy value for energy + γ_inv = get_γ_inv(state) + sum_ni = sum(state.n_spec) + E = γ_inv * k_B * T * sum_ni / get_ρ(state) + return E +end + +function rhs!(df::Vector{Float64}, f::Vector{Float64}, params, t) + energy_switch = params[1] + γ_e, γ_HI, γ_HII = params[2:4] + m_e, m_HI, m_HII = params[5:7] + + # Unpack the state variables + state = State(f[1:3], f[4:5], [γ_e, γ_HI, γ_HII], [m_e, m_HI, m_HII], f[6]) + n_spec = state.n_spec + n_rad = state.n_rad + ρ = get_ρ(state) + T = get_T(state) + + n_e = n_spec[1] + n_HI = n_spec[2] + n_HII = n_spec[3] + n_photon = n_rad[1] + flux_photon = n_rad[2] + + α_rec = 2.6e-13 * (1 + energy_switch * ((T / 1.0e4)^(-0.7) - 1.0)) + ionization_term = n_HI * c * σ_v * n_photon + recombination_term = α_rec * n_e * n_HII + + df[1] = ionization_term - recombination_term + df[2] = -ionization_term + recombination_term + df[3] = ionization_term - recombination_term + df[4] = -ionization_term + df[5] = -ionization_term * flux_photon / n_photon + df[6] = energy_switch * (ionization_term * E_ion - recombination_term * k_B * T * (0.684 - 0.0416 * log(T / 1.0e4))) / ρ +end + +function make_problem(state::State, tend::Float64, params::Tuple) + f = vcat(state.n_spec, state.n_rad, state.E) + prob = ODEProblem(rhs!, f, (0.0, tend), params) + return prob +end + +function parse_fraction(s) + if occursin("/", s) + num, den = split(s, "/") + return parse(Float64, num) / parse(Float64, den) + else + return parse(Float64, s) + end +end + +n_photon0 = parse(Float64, ARGS[1]) +n_e, n_HI, n_HII = parse.(Float64, ARGS[2:4]) +γ_e, γ_HI, γ_HII = parse_fraction.(ARGS[5:7]) +T0 = parse(Float64, ARGS[8]) +energy_switch = parse(Int64, ARGS[9]) +tend = parse(Float64, ARGS[10]) +constant_dt = parse(Float64, ARGS[11]) +abstol, reltol = parse.(Float64, ARGS[12:13]) +save_path = ARGS[14] + +m_HI = m_p + m_e +m_HII = m_p + +E0 = get_E(State([n_e, n_HI, n_HII], [n_photon0, 0], [γ_e, γ_HI, γ_HII], [m_e, m_HI, m_HII], 0.0), T0) +state = State( + [n_e, n_HI, n_HII], # n_spec: [n_e, n_HI, n_HII] + [n_photon0, 0], # n_rad: [n_photon, flux_photon] + [γ_e, γ_HI, γ_HII], # γ_vec + [m_e, m_HI, m_HII], # spec_mass + E0 # E +) +params = (energy_switch, γ_e, γ_HI, γ_HII, m_e, m_HI, m_HII) +prob = make_problem(state, tend, params) +sol = solve(prob, saveat=constant_dt, CVODE_BDF(); reltol=reltol, abstol=abstol) + +T_values = [get_T(State(sol[i][1:3], sol[i][4:5], [γ_e, γ_HI, γ_HII], [m_e, m_HI, m_HII], sol[i][6])) for i in eachindex(sol)] +rho_values = [get_ρ(State(sol[i][1:3], sol[i][4:5], [γ_e, γ_HI, γ_HII], [m_e, m_HI, m_HII], sol[i][6])) for i in eachindex(sol)] + +results = DataFrame(time=sol.t, n_e=sol[1, :], n_HI=sol[2, :], n_HII=sol[3, :], n_gamma=sol[4, :], Egas=sol[6, :] .* rho_values, gas_temp=T_values) +CSV.write(save_path, results) diff --git a/extern/photoionization-julia/no_energy.csv b/extern/photoionization-julia/no_energy.csv new file mode 100644 index 0000000000..91e0a3f606 --- /dev/null +++ b/extern/photoionization-julia/no_energy.csv @@ -0,0 +1,202 @@ +time,n_e,n_HI,n_HII,n_gamma,Egas,gas_temp +0.0,1.0e-10,100.0,1.0e-10,5000.0,2.0709732000041416e-11,1000.0 +50.0,1.1178014617593364,98.88219853834069,1.1178014617593364,4998.882198538334,2.070973200004142e-11,988.9455521629299 +100.0,2.222863781136226,97.77713621896379,2.222863781136226,4997.777136218919,2.070973200004142e-11,978.2547299223265 +150.0,3.3153375701619296,96.68466242993809,3.3153375701619296,4996.684662429792,2.0709732000041416e-11,967.9104995634624 +200.0,4.395371539498847,95.60462846060116,4.395371539498847,4995.604628460261,2.070973200004142e-11,957.8968734477695 +250.0,5.463112525200942,94.53688747489907,5.463112525200942,4994.536887474241,2.070973200004142e-11,948.1988309060163 +300.0,6.518705514942934,93.48129448515711,6.518705514942934,4993.4812944840305,2.0709732000041423e-11,938.8022462033925 +350.0,7.562293673826667,92.43770632627339,7.562293673826667,4992.4377063245,2.0709732000041423e-11,929.6938228497463 +400.0,8.59401836977215,91.40598163032791,8.59401836977215,4991.405981627705,2.070973200004143e-11,920.8610336123593 +450.0,9.614019198501316,90.38598080159876,9.614019198501316,4990.385980797896,2.070973200004143e-11,912.2920656619441 +500.0,10.6224340081221,89.37756599197799,10.6224340081221,4989.3775659869425,2.0709732000041433e-11,903.9757703466136 +550.0,11.619398923320402,88.38060107677967,11.619398923320402,4988.380601070135,2.070973200004143e-11,895.9016171445951 +600.0,12.605048369167147,87.3949516309329,12.605048369167147,4987.394951622379,2.070973200004142e-11,888.0596513956348 +650.0,13.579515094547723,86.42048490555231,13.579515094547723,4986.420484894768,2.070973200004142e-11,880.4404554542102 +700.0,14.542930195220718,85.45706980487932,14.542930195220718,4985.457069791524,2.070973200004142e-11,873.0351129456715 +750.0,15.495423136512862,84.50457686358719,15.495423136512862,4984.504576847297,2.0709732000041423e-11,865.8351758399618 +800.0,16.43712177565687,83.5628782244432,16.43712177565687,4983.562878204839,2.070973200004143e-11,858.8326340871541 +850.0,17.368152383778774,82.63184761632132,17.368152383778774,4982.631847593001,2.0709732000041433e-11,852.0198875852425 +900.0,18.28863966754114,81.71136033255895,18.28863966754114,4981.711360305104,2.0709732000041433e-11,845.3897202738383 +950.0,19.198706790448487,80.80129320965158,19.198706790448487,4980.8012931776275,2.0709732000041426e-11,838.9352761680228 +1000.0,20.09847539382109,79.90152460627897,20.09847539382109,4979.901524569234,2.0709732000041426e-11,832.6500371649314 +1050.0,20.988065617443116,79.01193438265693,20.988065617443116,4979.011934340124,2.0709732000041423e-11,826.5278024719499 +1100.0,21.867596119891115,78.13240388020891,21.867596119891115,4978.132403831706,2.070973200004142e-11,820.5626695199579 +1150.0,22.737184098548504,77.26281590155152,22.737184098548504,4977.262815846581,2.070973200004142e-11,814.7490162380312 +1200.0,23.596945309311838,76.4030546907882,23.596945309311838,4976.403054628838,2.070973200004142e-11,809.0814845776373 +1250.0,24.446994085994024,75.55300591410601,24.446994085994024,4975.553005844652,2.0709732000041423e-11,803.5549651847656 +1300.0,25.28744335943112,74.71255664066892,25.28744335943112,4974.712556563175,2.0709732000041423e-11,798.164583127736 +1350.0,26.118404676296436,73.88159532380361,26.118404676296436,4973.88159523772,2.0709732000041423e-11,792.9056845968445 +1400.0,26.939988217627175,73.06001178247286,26.939988217627175,4973.060011687237,2.070973200004142e-11,787.7738244994969 +1450.0,27.75230281707068,72.24769718302935,27.75230281707068,4972.247697078072,2.070973200004142e-11,782.764754881267 +1500.0,28.555455978853328,71.44454402124668,28.555455978853328,4971.444543905984,2.070973200004142e-11,777.8744141094381 +1550.0,29.349553895477435,70.65044610462259,29.349553895477435,4970.650445978462,2.070973200004142e-11,773.0989167610811 +1600.0,30.134701465151466,69.86529853494854,30.134701465151466,4969.865298397287,2.0709732000041416e-11,768.4345441627034 +1650.0,30.91100230895764,69.08899769114235,30.91100230895764,4969.088997541368,2.0709732000041416e-11,763.877735533013 +1700.0,31.678558787761766,68.32144121233823,31.678558787761766,4968.321441049832,2.0709732000041413e-11,759.4250796844084 +1750.0,32.437472018870025,67.56252798122996,32.43747201887002,4967.562527805363,2.0709732000041413e-11,755.0733072425019 +1800.0,33.187841892436495,66.81215810766349,33.18784189243649,4966.812157917799,2.070973200004141e-11,750.8192833463406 +1850.0,33.92976708762655,66.07023291247344,33.929767087626544,4966.070232707968,2.070973200004141e-11,746.6600007950291 +1900.0,34.66334508853961,65.33665491156039,34.6633450885396,4965.336654691763,2.0709732000041416e-11,742.5925736092244 +1950.0,35.388672199895844,64.61132780020415,35.38867219989584,4964.6113275644575,2.0709732000041413e-11,738.6142309784988 +2000.0,36.105843562490904,63.894156437609084,36.1058435624909,4963.894156185249,2.0709732000041413e-11,734.7223115678576 +2050.0,36.8149531684222,63.18504683167779,36.81495316842219,4963.1850465620355,2.070973200004141e-11,730.9142581587898 +2100.0,37.51609387609127,62.48390612400872,37.51609387609126,4962.483905836408,2.070973200004141e-11,727.187612602145 +2150.0,38.20935742498559,61.7906425751144,38.20935742498558,4961.790642268876,2.070973200004141e-11,723.5400110618673 +2200.0,38.89483445024369,61.105165549856295,38.894834450243685,4961.105165224295,2.070973200004141e-11,719.969179530222 +2250.0,39.57261449700756,60.42738550309243,39.57261449700755,4960.427385157519,2.070973200004141e-11,716.4729295966031 +2300.0,40.242786034565256,59.75721396553473,40.24278603456525,4959.757213599257,2.070973200004141e-11,713.0491544533488 +2350.0,40.905436470288095,59.09456352981189,40.90543647028809,4959.094563142132,2.070973200004141e-11,709.6958251232231 +2400.0,41.56065216336523,58.439347836734754,41.560652163365226,4958.439347426953,2.070973200004141e-11,706.4109868943408 +2450.0,42.20851843833925,57.79148156176074,42.20851843833924,4957.791481129172,2.070973200004141e-11,703.1927559493495 +2500.0,42.84911959844627,57.150880401653716,42.849119598446265,4957.150879945552,2.070973200004141e-11,700.03931617663 +2550.0,43.48253893876347,56.51746106133652,43.48253893876346,4956.517460581012,2.070973200004141e-11,696.9489161521531 +2600.0,44.10885875916758,55.891141240932406,44.108858759167575,4955.891140735673,2.070973200004141e-11,693.9198662814268 +2650.0,44.72816037710728,55.27183962299271,44.72816037710727,4955.271839092083,2.070973200004141e-11,690.9505360917212 +2700.0,45.34052414019253,54.65947585990746,45.34052414019252,4954.659475302631,2.070973200004141e-11,688.0393516654254 +2750.0,45.946029438604164,54.053970561495824,45.94602943860416,4954.053969977136,2.070973200004141e-11,685.1847932060322 +2800.0,46.5447547173263,53.45524528277369,46.54475471732629,4953.455244670611,2.070973200004141e-11,682.3853927288229 +2850.0,47.13677748820478,52.86322251189521,47.13677748820477,4952.86322187121,2.070973200004141e-11,679.6397318688629 +2900.0,47.72217434183437,52.27782565826562,47.72217434183436,4952.277824988336,2.070973200004141e-11,676.9464397994084 +2950.0,48.301020959277494,51.69897904082249,48.30102095927749,4951.698978340926,2.070973200004141e-11,674.3041912542998 +3000.0,48.87339212361733,51.12660787648266,48.87339212361732,4951.126607145898,2.070973200004141e-11,671.7117046483203 +3050.0,49.439361731347844,50.56063826875214,49.43936173134784,4950.560637506754,2.070973200004141e-11,669.1677402899139 +3100.0,49.9990028036035,50.000997196496485,49.999002803603496,4950.000996402362,2.070973200004141e-11,666.6710986810037 +3150.0,50.552387497231265,49.44761250286872,50.55238749723126,4949.447611675875,2.070973200004141e-11,664.2206188990036 +3200.0,51.09958711570723,48.90041288439276,51.09958711570722,4948.900412023817,2.070973200004141e-11,661.8151770564205 +3250.0,51.640672119900714,48.359327880199274,51.64067211990071,4948.359326985318,2.070973200004141e-11,659.4536848337435 +3300.0,52.17571213868788,47.82428786141211,52.17571213868787,4947.824286931504,2.070973200004141e-11,657.1350880815829 +3350.0,52.704775979417605,47.29522402068238,52.7047759794176,4947.2952230550245,2.070973200004141e-11,654.8583654882743 +3400.0,53.22793163823183,46.77206836186816,53.22793163823182,4946.772067359738,2.0709732000041413e-11,652.6225273093994 +3450.0,53.7452463102426,46.25475368985739,53.74524631024259,4946.254752650535,2.070973200004141e-11,650.4266141558934 +3500.0,54.2567863995683,45.74321360053169,54.25678639956829,4945.743212523297,2.070973200004141e-11,648.269695837609 +3550.0,54.762617529231065,45.23738247086892,54.76261752923106,4945.237381355007,2.070973200004141e-11,646.1508702594002 +3600.0,55.26280455091778,44.73719544918221,55.26280455091777,4944.737194293974,2.070973200004141e-11,644.0692623669631 +3650.0,55.75741155460669,44.2425884454933,55.75741155460668,4944.242587250225,2.070973200004141e-11,642.0240231398361 +3700.0,56.24650187806166,43.75349812203833,56.24650187806165,4943.753496885997,2.070973200004141e-11,640.0143286291188 +3750.0,56.73013811619642,43.269861883903566,56.730138116196414,4943.269860606379,2.070973200004141e-11,638.039379037606 +3800.0,57.208382130310525,42.79161786978946,57.20838213031051,4942.791616550069,2.070973200004141e-11,636.0983978401741 +3850.0,57.681295057199186,42.3187049429008,57.68129505719917,4942.31870358028,2.070973200004141e-11,634.1906309423789 +3900.0,58.148937318139005,41.85106268196098,58.14893731813899,4941.8510612757345,2.070973200004141e-11,632.3153458753414 +3950.0,58.611368627751304,41.388631372348684,58.61136862775129,4941.388629921814,2.070973200004141e-11,630.4718310251093 +4000.0,59.06864800274519,40.931351997354795,59.06864800274518,4940.931350501809,2.070973200004141e-11,628.6593948947836 +4050.0,59.52083377054208,40.479166229557904,59.52083377054207,4940.479164688304,2.070973200004141e-11,626.8773653977967 +4100.0,59.96798357778345,40.03201642231654,59.967983577783436,4940.032014834658,2.070973200004141e-11,625.1250891808177 +4150.0,60.410154398723876,39.58984560137611,60.41015439872386,4939.589843966621,2.070973200004141e-11,623.401930974846 +4200.0,60.84740254351066,39.152597456589326,60.84740254351065,4939.152595774046,2.070973200004141e-11,621.7072729731331 +4250.0,61.27978366635235,38.720216333747636,61.27978366635234,4938.720214602728,2.070973200004141e-11,620.0405142346485 +4300.0,61.70735277357731,38.292647226522675,61.7073527735773,4938.292645446342,2.070973200004141e-11,618.4010701118716 +4350.0,62.13016423158435,37.869835768515635,62.13016423158434,4937.869833938492,2.070973200004141e-11,616.7883717017628 +4400.0,62.54827177468701,37.45172822541298,62.548271774686995,4937.451726344866,2.070973200004141e-11,615.2018653188231 +4450.0,62.96172851285282,37.038271487247165,62.96172851285281,4937.038269555503,2.070973200004141e-11,613.6410119892143 +4500.0,63.37058693933969,36.6294130607603,63.370586939339674,4936.629411077144,2.070973200004141e-11,612.1052869649619 +4550.0,63.774898938230315,36.22510106186967,63.7748989382303,4936.225099025713,2.070973200004141e-11,610.5941792573179 +4600.0,64.17471579186669,35.82528420823331,64.17471579186667,4935.825282118869,2.0709732000041413e-11,609.107191188408 +4650.0,64.5700881881858,35.42991181191416,64.57008818818579,4935.429909668678,2.0709732000041407e-11,607.6438379603301 +4700.0,64.96106622795845,35.03893377214151,64.96106622795844,4935.038931574375,2.0709732000041403e-11,606.2036472409197 +4750.0,65.34769943193197,34.652300568168,65.34769943193196,4934.652298315214,2.070973200004141e-11,604.7861587654329 +4800.0,65.73003674787898,34.269963252220975,65.73003674787897,4934.269960943426,2.0709732000041403e-11,603.3909239534362 +4850.0,66.1081265575532,33.89187344254676,66.10812655755319,4933.8918710772605,2.0709732000041403e-11,602.0175055402344 +4900.0,66.48201668355371,33.517983316546264,66.4820166835537,4933.517980894123,2.0709732000041407e-11,600.6654772221932 +4950.0,66.85175439609898,33.148245604001,66.85175439609897,4933.148243123798,2.0709732000041407e-11,599.334423315348 +5000.0,67.21738641971235,32.78261358038761,67.21738641971234,4932.782611041766,2.0709732000041403e-11,598.0239384267263 +5050.0,67.57895893981974,32.42104106028024,67.57895893981973,4932.421038462605,2.0709732000041407e-11,596.733627137831 +5100.0,67.93651760926116,32.06348239083883,67.93651760926114,4932.063479733477,2.070973200004141e-11,595.4631036997623 +5150.0,68.29010755471742,31.70989244538255,68.29010755471741,4931.7098897277065,2.0709732000041407e-11,594.2119917394834 +5200.0,68.63977338305305,31.360226617046937,68.63977338305304,4931.360223838434,2.070973200004141e-11,592.9799239767591 +5250.0,68.98555918757653,31.014440812523464,68.98555918757651,4931.014437972351,2.070973200004141e-11,591.7665419513113 +5300.0,69.32750855421952,30.672491445880464,69.3275085542195,4930.6724885435315,2.070973200004141e-11,590.5714957597716 +5350.0,69.6656645676358,30.334335432464176,69.66566456763577,4930.334332467327,2.0709732000041403e-11,589.3944438020154 +5400.0,70.0000698172213,29.999930182878675,70.00006981722127,4929.999927154344,2.0709732000041403e-11,588.2350525364959 +5450.0,70.33076640305624,29.66923359704372,70.33076640305622,4929.669230504506,2.07097320000414e-11,587.0929962442001 +5500.0,70.65779594177074,29.342204058329244,70.65779594177071,4929.342200901187,2.0709732000041403e-11,585.9679568008827 +5550.0,70.98119957233457,29.018800427765367,70.98119957233455,4929.018797205423,2.0709732000041397e-11,584.8596234572323 +5600.0,71.30101796177289,28.69898203832707,71.30101796177286,4928.698978750188,2.0709732000041397e-11,583.7676926266563 +5650.0,71.61729131080784,28.38270868929213,71.61729131080781,4928.382705334769,2.0709732000041403e-11,582.6918676803755 +5700.0,71.9300593594284,28.06994064067156,71.93005935942837,4928.0699372191775,2.0709732000041397e-11,581.6318587495324 +5750.0,72.23936139238859,27.760638607711357,72.23936139238856,4927.760635118665,2.0709732000041397e-11,580.5873825340425 +5800.0,72.54523624463543,27.45476375546453,72.5452362446354,4927.454760198288,2.07097320000414e-11,579.558162117913 +5850.0,72.84772230666735,27.152277693432605,72.84772230666732,4927.152274067553,2.0709732000041397e-11,578.5439267907826 +5900.0,73.14685752982464,26.85314247027531,73.14685752982462,4926.853138775123,2.0709732000041397e-11,577.5444118754343 +5950.0,73.44267943151219,26.557320568587762,73.44267943151216,4926.557316803597,2.07097320000414e-11,576.559358561049 +6000.0,73.73522510035589,26.264774899744047,73.73522510035586,4926.264771064352,2.0709732000041394e-11,575.5885137419812 +6050.0,74.0245312012937,25.975468798806254,74.02453120129367,4925.975464892456,2.0709732000041397e-11,574.6316298618425 +6100.0,74.31063398060176,25.689366019498188,74.31063398060174,4925.689362041637,2.0709732000041397e-11,573.6884647626898 +6150.0,74.59356927085734,25.406430729242604,74.59356927085732,4925.406426679319,2.0709732000041397e-11,572.7587815391228 +6200.0,74.8733724958386,25.126627504261347,74.87337249583857,4925.1266233817305,2.0709732000041397e-11,571.8423483971092 +6250.0,75.15007867536261,24.849921324737316,75.15007867536258,4924.849917129057,2.0709732000041394e-11,570.9389385173556 +6300.0,75.42372243006248,24.576277570037448,75.42372243006245,4924.57627330067,2.070973200004139e-11,570.0483299230564 +6350.0,75.69433798610397,24.30566201399597,75.69433798610395,4924.305657670409,2.0709732000041397e-11,569.1703053518562 +6400.0,75.96195917984308,24.038040820256874,75.96195917984305,4924.03803640192,2.07097320000414e-11,568.3046521318706 +6450.0,76.22661946242492,23.773380537675006,76.22661946242489,4923.773376044063,2.070973200004139e-11,567.4511620616158 +6500.0,76.48835190432506,23.511648095774863,76.48835190432503,4923.511643526366,2.070973200004139e-11,566.609631293705 +6550.0,76.74718919983371,23.2528108002662,76.74718919983368,4923.252806154543,2.070973200004139e-11,565.7798602221701 +6600.0,77.003163671484,22.996836328615924,77.00316367148397,4922.996831606065,2.0709732000041394e-11,564.9616533732832 +6650.0,77.25630727442474,22.743692725675206,77.25630727442471,4922.743687925787,2.0709732000041397e-11,564.1548192997471 +6700.0,77.50665160073868,22.493348399361256,77.50665160073865,4922.493343521629,2.0709732000041394e-11,563.3591704781358 +6750.0,77.75422788370697,22.24577211639295,77.75422788370695,4922.245767160316,2.070973200004139e-11,562.5745232094686 +6800.0,77.9990670020204,22.000932998079506,77.99906700202037,4922.000927963159,2.070973200004139e-11,561.8006975228061 +6850.0,78.24119948393827,21.758800516161614,78.24119948393825,4921.758795401904,2.0709732000041387e-11,561.0375170817623 +6900.0,78.48065551139572,21.519344488704185,78.4806555113957,4921.519339294619,2.070973200004139e-11,560.2848090938296 +6950.0,78.71746492405984,21.28253507604008,78.71746492405981,4921.282529801642,2.070973200004139e-11,559.5424042224173 +7000.0,78.95165722333579,21.048342776764127,78.95165722333576,4921.048337421572,2.070973200004139e-11,558.810136501512 +7050.0,79.18326157632323,20.816738423776684,79.1832615763232,4920.816732987312,2.070973200004139e-11,558.0878432528647 +7100.0,79.41230681972374,20.587693180376174,79.41230681972371,4920.587687662165,2.070973200004139e-11,557.3753650056223 +7150.0,79.63882146370007,20.36117853639985,79.63882146370004,4920.361172935973,2.070973200004139e-11,556.6725454183156 +7200.0,79.86283369568777,20.137166304412144,79.86283369568774,4920.137160621302,2.070973200004139e-11,555.9792312031268 +7250.0,80.08437138415988,19.91562861594004,80.08437138415985,4919.915622849684,2.070973200004139e-11,555.295272052355 +7300.0,80.3034620823452,19.696537917754718,80.30346208234518,4919.696532067894,2.070973200004139e-11,554.6205205670101 +7350.0,80.52013303190097,19.479866968198937,80.52013303190094,4919.479861034279,2.070973200004139e-11,553.9548321874594 +7400.0,80.73441116654037,19.26558883355955,80.73441116654034,4919.265582815128,2.070973200004139e-11,553.2980651260602 +7450.0,80.94632311561548,19.053676884484428,80.94632311561546,4919.053670781094,2.070973200004139e-11,552.6500803017133 +7500.0,81.15589520765651,18.844104792443396,81.15589520765649,4918.844098603653,2.070973200004139e-11,552.01074127627 +7550.0,81.36315347386753,18.636846526232368,81.3631534738675,4918.6368402516,2.0709732000041387e-11,551.3799141927344 +7600.0,81.56812365157954,18.43187634852036,81.56812365157951,4918.43186998761,2.070973200004139e-11,550.7574677152032 +7650.0,81.7708311876614,18.229168812438516,81.77083118766137,4918.229162364819,2.070973200004139e-11,550.1432729704815 +7700.0,81.97130124188902,18.02869875821089,81.971301241889,4918.028692223454,2.070973200004139e-11,549.537203491324 +7750.0,82.16955869027369,17.830441309826202,82.16955869027366,4917.830434687507,2.0709732000041387e-11,548.939135161248 +7800.0,82.36562812834974,17.63437187175016,82.36562812834971,4917.634365161446,2.0709732000041387e-11,548.3489461608665 +7850.0,82.55953387442217,17.440466125677716,82.55953387442214,4917.440459326972,2.0709732000041384e-11,547.7665169156954 +7900.0,82.75129997277503,17.24870002732485,82.751299972775,4917.248693139803,2.0709732000041384e-11,547.1917300453812 +7950.0,82.94095019684065,17.059049803259217,82.94095019684062,4917.059042826511,2.070973200004138e-11,546.6244703143136 +8000.0,83.12850805233056,16.871491947769307,83.12850805233053,4916.871484881389,2.070973200004138e-11,546.0646245835709 +8050.0,83.31399678032844,16.686003219771433,83.31399678032841,4916.685996063356,2.0709732000041384e-11,545.5120817641593 +8100.0,83.49743936034565,16.502560639754225,83.49743936034562,4916.502553392902,2.0709732000041384e-11,544.9667327715077 +8150.0,83.67885851333988,16.32114148676002,83.67885851333985,4916.321134149077,2.0709732000041387e-11,544.4284704811733 +8200.0,83.85827670469718,16.14172329540271,83.85827670469715,4916.141715866495,2.0709732000041384e-11,543.8971896857267 +8250.0,84.03571614717829,15.964283852921602,84.03571614717826,4915.964276332401,2.070973200004139e-11,543.3727870527747 +8300.0,84.21119880382912,15.78880119627076,84.21119880382909,4915.7887935837525,2.0709732000041384e-11,542.8551610840881 +8350.0,84.38474639085648,15.615253609243405,84.38474639085645,4915.615245904343,2.0709732000041387e-11,542.3442120758023 +8400.0,84.55638038046895,15.443619619630919,84.55638038046892,4915.443611821971,2.0709732000041384e-11,541.8398420796535 +8450.0,84.72612200368387,15.273877996415992,84.72612200368384,4915.273870105622,2.070973200004138e-11,541.3419548652223 +8500.0,84.8939922531004,15.106007746999481,84.89399225310036,4915.105999762699,2.0709732000041384e-11,540.8504558831547 +8550.0,85.06001188563934,14.939988114460538,85.06001188563931,4914.939980036286,2.0709732000041384e-11,540.3652522293277 +8600.0,85.2242014252503,14.775798574849587,85.22420142525027,4914.775790402436,2.0709732000041387e-11,539.8862526099339 +8650.0,85.3865811655862,14.613418834513709,85.38658116558616,4914.613410567498,2.070973200004139e-11,539.4133673074568 +8700.0,85.54717117264586,14.452828827454042,85.54717117264583,4914.452820465478,2.070973200004139e-11,538.9465081475112 +8750.0,85.70599128738512,14.294008712714783,85.70599128738509,4914.294000255423,2.0709732000041387e-11,538.4855884665203 +8800.0,85.86306112829655,14.136938871803341,85.86306112829652,4914.136930318845,2.0709732000041387e-11,538.0305230802084 +8850.0,86.01840009395855,13.98159990614133,86.01840009395852,4913.981591257167,2.0709732000041387e-11,537.5812282528816 +8900.0,86.17202736555396,13.827972634545922,86.17202736555393,4913.827963889209,2.0709732000041384e-11,537.1376216674777 +8950.0,86.32396190935864,13.6760380907412,86.32396190935862,4913.676029248701,2.0709732000041378e-11,536.6996223963582 +9000.0,86.47422247920066,13.525777520899181,86.47422247920063,4913.525768581815,2.0709732000041378e-11,536.2671508728253 +9050.0,86.62282761888981,13.377172381210043,86.62282761888979,4913.377163344748,2.070973200004138e-11,535.8401288633374 +9100.0,86.76979566461863,13.230204335481242,86.7697956646186,4913.230195201307,2.070973200004138e-11,535.418479440411 +9150.0,86.91514474733472,13.084855252765152,86.9151447473347,4913.08484602055,2.0709732000041384e-11,535.0021269561805 +9200.0,87.05889279508507,12.941107205014829,87.05889279508504,4912.941097874432,2.070973200004139e-11,534.5909970166034 +9250.0,87.2010575353323,12.798942464767586,87.20105753533227,4912.798933035492,2.0709732000041384e-11,534.1850164562907 +9300.0,87.34165649724389,12.658343502856006,87.34165649724386,4912.658333974568,2.070973200004139e-11,533.7841133139427 +9350.0,87.48070701395386,12.519292986146038,87.48070701395383,4912.51928335853,2.070973200004139e-11,533.3882168083769 +9400.0,87.61822622479802,12.381773775301859,87.618226224798,4912.381764048041,2.0709732000041387e-11,532.9972573151283 +9450.0,87.75423107752272,12.245768922577145,87.75423107752269,4912.24575909536,2.070973200004138e-11,532.6111663436079 +9500.0,87.88873833046743,12.111261669632421,87.8887383304674,4912.111251742151,2.0709732000041378e-11,532.2298765148023 +9550.0,88.02176455472166,11.97823544537818,88.02176455472163,4911.978225417327,2.0709732000041374e-11,531.8533215395009 +9600.0,88.1533261362564,11.846673863843424,88.15332613625637,4911.846663734918,2.0709732000041374e-11,531.4814361970355 +9650.0,88.28343927803049,11.71656072206932,88.28343927803046,4911.716550491971,2.0709732000041368e-11,531.1141563145171 +9700.0,88.41212000207217,11.58787999802766,88.41212000207214,4911.5878696664595,2.070973200004137e-11,530.7514187465594 +9750.0,88.53938415153603,11.460615848563808,88.539384151536,4911.460605415232,2.0709732000041374e-11,530.3931613554714 +9800.0,88.665247392736,11.334752607363844,88.66524739273598,4911.334742071976,2.0709732000041378e-11,530.0393229919094 +9850.0,88.78972521715433,11.210274782945556,88.7897252171543,4911.210264145214,2.0709732000041387e-11,529.6898434759759 +9900.0,88.91283294342682,11.087167056673069,88.91283294342679,4911.087156316312,2.0709732000041387e-11,529.3446635787508 +9950.0,89.03458571930518,10.965414280794706,89.03458571930516,4910.965403437522,2.0709732000041387e-11,529.0037250042467 +10000.0,89.15499852359598,10.845001476503924,89.15499852359595,4910.844990530038,2.070973200004139e-11,528.6669703717752 diff --git a/extern/photoionization-julia/with_energy.csv b/extern/photoionization-julia/with_energy.csv new file mode 100644 index 0000000000..9d7fc807f7 --- /dev/null +++ b/extern/photoionization-julia/with_energy.csv @@ -0,0 +1,202 @@ +time,n_e,n_HI,n_HII,n_gamma,Egas,gas_temp +0.0,1.0e-10,100.0,1.0e-10,5000.0,2.0709732000041416e-11,1000.0 +50.0,1.1178014617412384,98.88219853835864,1.1178014617412384,4998.8821985383365,2.786366135469153e-11,1330.564971272741 +100.0,2.2228637810157497,97.77713621908413,2.2228637810157497,4997.7771362189205,3.4936060198926066e-11,1650.2563207685414 +150.0,3.315337569812381,96.68466243028746,3.315337569812381,4996.684662429791,4.1927892449290894e-11,1959.583413551295 +200.0,4.39537153877358,95.60462846132626,4.39537153877358,4995.6046284602535,4.884010985420372e-11,2259.024333507496 +250.0,5.463112523945478,94.53688747615435,5.463112523945478,4994.536887474224,5.5673652164584186e-11,2549.028248904904 +300.0,6.518705513001837,93.48129448709801,6.518705513001837,4993.481294483996,6.242944730171878e-11,2830.017566477481 +350.0,7.562293671047635,92.4377063290522,7.562293671047635,4992.43770632444,6.910841152242015e-11,3102.389895768996 +400.0,8.594018366008754,91.40598163409109,8.594018366008754,4991.405981627607,7.5711449581531e-11,3366.519842951879 +450.0,9.614019193614817,90.38598080648504,9.614019193614817,4990.38598079775,8.223945489181998e-11,3622.760651145336 +500.0,10.622434001982674,89.37756599811718,10.622434001982674,4989.377565986733,8.869330968132017e-11,3871.445702341857 +550.0,11.619398915807926,88.38060108429194,11.619398915807926,4988.380601069848,9.507388514815752e-11,4112.889894375086 +600.0,12.605048360171725,87.39495163992811,12.605048360171725,4987.394951622,1.0138204161291634e-10,4347.390904892281 +650.0,13.57951508397,86.42048491612984,13.57951508397,4986.42048489428,1.0761862866858792e-10,4575.230353003312 +700.0,14.542930182972041,85.45706981712779,14.542930182972041,4985.457069790907,1.1378448532814657e-10,4796.674868141595 +750.0,15.495423122515325,84.50457687758453,15.495423122515325,4984.5045768465325,1.1988044016979743e-10,5011.977074670057 +800.0,16.437121759843272,83.56287824025657,16.437121759843272,4983.562878203907,1.259073114799386e-10,5221.376499880211 +850.0,17.368152366092506,82.63184763400734,17.368152366092506,4982.63184759188,1.3186590739388066e-10,5425.100412248989 +900.0,18.288639647936016,81.71136035216385,18.288639647936016,4981.711360303774,1.3775702603436281e-10,5623.364596123931 +950.0,19.198706768888567,80.80129323121129,19.198706768888567,4980.801293176068,1.435814556479084e-10,5816.374068391194 +1000.0,20.09847537028044,79.90152462981943,20.09847537028044,4979.901524567422,1.4933997473905682e-10,6004.323742132956 +1050.0,20.988065591905578,79.01193440819428,20.988065591905578,4979.0119343380375,1.550333522025121e-10,6187.3990417931545 +1100.0,21.867596092350013,78.13240390774985,21.867596092350013,4978.132403829321,1.6066234745324517e-10,6365.77647393543 +1150.0,22.73718406900638,77.26281593109353,22.73718406900638,4977.2628158438765,1.6622771055458677e-10,6539.624157288814 +1200.0,23.596945277780147,76.40305472231975,23.596945277780147,4976.403054625792,1.7173018234434753e-10,6709.102315429396 +1250.0,24.44699405249313,75.55300594760679,24.44699405249313,4975.553005841242,1.7717049455900086e-10,6874.363735135043 +1300.0,25.287443323989656,74.71255667611027,25.287443323989656,4974.71255655938,1.8254936995596224e-10,7035.554193171462 +1350.0,26.11840463895073,73.8815953611492,26.11840463895073,4973.881595233518,1.8786752243400024e-10,7192.8128540174275 +1400.0,26.939988178421416,73.0600118216785,26.939988178421416,4973.060011682608,1.9312565715181181e-10,7346.27264081186 +1450.0,27.752302776056514,72.24769722404339,27.752302776056514,4972.247697072993,1.9832447064479466e-10,7496.060581602832 +1500.0,28.555455936089484,71.44454406401043,28.555455936089484,4971.444543900436,2.034646509400486e-10,7642.298132795905 +1550.0,29.349553851029523,70.65044614907039,29.349553851029523,4970.650445972426,2.0854687766963664e-10,7785.1014815344515 +1600.0,30.13470141909164,69.86529858100828,30.13470141909164,4969.865298390744,2.135718221821381e-10,7924.581828595768 +1650.0,30.911002261364303,69.0889977387356,30.911002261364303,4969.088997534302,2.185401476525209e-10,8060.845653252074 +1700.0,31.67855873871934,68.32144126138056,31.67855873871934,4968.321441042223,2.234525091903656e-10,8193.99496142377 +1750.0,32.437471968468586,67.56252803163132,32.437471968468586,4967.5625277971985,2.2830955394646758e-10,8324.127518341682 +1800.0,33.1878418407716,66.81215815932829,33.1878418407716,4966.812157909065,2.33111921217847e-10,8451.337066834887 +1850.0,33.92976703479891,66.07023296530102,33.92976703479891,4966.07023269865,2.3786024255119306e-10,8575.713532269656 +1900.0,34.66334503465482,65.3366549654451,34.66334503465482,4965.33665468185,2.4255514184477024e-10,8697.343215082272 +1950.0,35.38867214506423,64.61132785503573,35.38867214506423,4964.611327553937,2.471972354488141e-10,8816.30897177312 +2000.0,36.10584350682712,63.89415649327281,36.10584350682712,4963.894156174113,2.5178713226443986e-10,8932.690385160895 +2050.0,36.81495311204512,63.18504688805481,36.81495311204512,4963.185046550275,2.563254338410927e-10,9046.563924633087 +2100.0,37.51609381912368,62.48390618097625,37.51609381912368,4962.483905824017,2.608127344725614e-10,9158.00309707188 +2150.0,38.20935736755398,61.79064263254595,38.20935736755398,4961.790642255846,2.652496212915828e-10,9267.07858908238 +2200.0,38.89483439247807,61.10516560762186,38.89483439247807,4961.105165210625,2.696366743630587e-10,9373.858401102372 +2250.0,39.57261443904114,60.42738556105879,39.57261443904113,4960.427385143204,2.739744667759105e-10,9478.407973929141 +2300.0,40.24278597653435,59.75721402356558,40.24278597653434,4959.757213584296,2.78263564733593e-10,9580.790308158921 +2350.0,40.90543641233186,59.09456358776807,40.90543641233185,4959.094563126524,2.8250452764329194e-10,9681.066076997844 +2400.0,41.56065210562546,58.43934789447447,41.56065210562545,4958.439347410701,2.866979082038251e-10,9779.293732869593 +2450.0,42.20851838096022,57.79148161913971,42.208518380960214,4957.791481112279,2.9084425249227105e-10,9875.529608214161 +2500.0,42.84911954157452,57.150880458525414,42.84911954157451,4957.150879928023,2.9494410004934487e-10,9969.828010843596 +2550.0,43.48253888254762,56.51746111755231,43.482538882547615,4956.517460562854,2.989979839635431e-10,10062.241314194624 +2600.0,44.10885870375819,55.89114129634174,44.10885870375818,4955.891140716893,3.0300643095407776e-10,10152.82004279393 +2650.0,44.728160322656635,55.271839677443296,44.72816032265663,4955.271839072691,3.0696996145261984e-10,10241.612953229756 +2700.0,45.340524086854515,54.659475913245416,45.34052408685451,4954.659475282642,3.108890896838712e-10,10328.66711090309 +2750.0,45.946029386534086,54.053970613565845,45.94602938653408,4954.053969956562,3.147643237449859e-10,10414.02796281285 +2800.0,46.54475466668074,53.45524533341919,46.54475466668073,4953.455244649466,3.1859616568385766e-10,10497.739406612145 +2850.0,47.13677743914144,52.86322256095849,47.13677743914143,4952.863221849511,3.2238511157629403e-10,10579.84385615659 +2900.0,47.72217429451194,52.27782570558799,47.72217429451193,4952.277824966101,3.261316516020945e-10,10660.382303750808 +2950.0,48.301020913855496,51.698979086244435,48.30102091385549,4951.698978318176,3.298362701200503e-10,10739.394379285588 +3000.0,48.873392080256004,51.12660791984393,48.873392080256,4951.126607122654,3.3349944574188443e-10,10816.918406445377 +3050.0,49.43936169020802,50.560638309891914,49.43936169020801,4950.560637483041,3.3712165140514776e-10,10892.99145615403 +3100.0,49.99900276484643,50.0009972352535,49.99900276484642,4950.000996378205,3.407033544450896e-10,10967.649397415931 +3150.0,50.55238746101855,49.44761253908138,50.55238746101854,4949.447611651302,3.442450166655178e-10,11040.926945699237 +3200.0,51.0995870822007,48.90041291789923,51.09958708220069,4948.900411998857,3.477470944086662e-10,11112.857708998932 +3250.0,51.64067208926229,48.35932791083764,51.64067208926228,4948.3593269600005,3.5121003862408405e-10,11183.474231708351 +3300.0,52.1757121110795,47.82428788902043,52.17571211107949,4947.824286905862,3.5463429493656367e-10,11252.808036419907 +3350.0,52.70477595500111,47.29522404509882,52.704775955001104,4947.295223029094,3.580203037131218e-10,11320.889663768183 +3400.0,53.22793161716886,46.77206838293107,53.227931617168856,4946.772067333557,3.6136850012905026e-10,11387.748710421498 +3450.0,53.745246292694496,46.254753707405435,53.74524629269449,4946.254752624142,3.646793142330484e-10,11453.41386532156 +3500.0,54.256786385696,45.74321361440392,54.256786385696,4945.743212496734,3.679531710114557e-10,11517.912944264777 +3550.0,54.76261751919491,45.23738248090501,54.76261751919491,4945.237381328311,3.711904904515938e-10,11581.272922913011 +3600.0,55.262804544877206,44.73719545522272,55.262804544877206,4944.737194267193,3.74391687604237e-10,11643.519968316481 +3650.0,55.75741155272117,44.24258844737875,55.75741155272117,4944.242587223405,3.7755717264523054e-10,11704.679469026558 +3700.0,56.24650188048981,43.753498119610114,56.24650188048981,4943.7534968591835,3.806873509362409e-10,11764.776063870962 +3750.0,56.73013812309602,43.269861877003905,56.73013812309602,4943.269860579622,3.837826230846945e-10,11823.833669460952 +3800.0,57.20838214183852,42.791617858261404,57.20838214183852,4942.791616523419,3.868433850028867e-10,11881.87550649471 +3850.0,57.68129507351159,42.31870492658833,57.68129507351159,4942.318703553789,3.8987002796628444e-10,11938.924124918078 +3900.0,58.14893733939082,41.851062660709104,58.14893733939082,4941.851061249455,3.928629386710347e-10,11995.001428000145 +3950.0,58.61136865409649,41.388631346003436,58.61136865409649,4941.3886298958005,3.958224992906909e-10,12050.128695377958 +4000.0,59.06864803433659,40.931351965763334,59.06864803433659,4940.931350476121,3.987490875321674e-10,12104.32660512136 +4050.0,59.52083380753135,40.47916619256857,59.52083380753135,4940.479164663,4.0164307669093695e-10,12157.615254866363 +4100.0,59.967983620321085,40.03201637977884,59.967983620321085,4940.0320148098,4.0450483570548056e-10,12210.014182062547 +4150.0,60.41015444695903,39.5898455531409,60.41015444695903,4939.589843942269,4.0733472921100226e-10,12261.54238337752 +4200.0,60.84740259759121,39.15259740250871,60.84740259759121,4939.152595750265,4.101331175924199e-10,12312.218333299146 +4250.0,61.2797837264248,38.72021627367512,61.2797837264248,4938.720214579584,4.1290035703664235e-10,12362.060001973909 +4300.0,61.707352839786736,38.29264716031319,61.707352839786736,4938.292645423901,4.1563679958414507e-10,12411.084872317833 +4350.0,62.13016430407439,37.86983569602553,62.13016430407439,4937.869833916824,4.183427931798544e-10,12459.309956434323 +4400.0,62.548271853599765,37.45172814650016,62.548271853599765,4937.451726324042,4.2101868172335033e-10,12506.751811371398 +4450.0,62.96172859832894,37.038271401770984,62.96172859832894,4937.038269535593,4.236648051183987e-10,12553.426554249227 +4500.0,63.37058703151822,36.629412968581704,63.37058703151822,4936.629411058224,4.2628149932182286e-10,12599.349876787055 +4550.0,63.774899037248716,36.22510096285121,63.774899037248716,4936.2250990078555,4.2886909639172527e-10,12644.53705925725 +4600.0,64.1747158978608,35.825284102239124,64.1747158978608,4935.8252821021515,4.3142792453506725e-10,12689.00298389253 +4650.0,64.57008830128986,35.42991169881007,64.57008830128986,4935.4299096531795,4.339583081546185e-10,12732.762147771358 +4700.0,64.96106634830491,35.03893365179502,64.96106634830491,4935.0389315601715,4.3646056789528367e-10,12775.82867520494 +4750.0,65.34769955965162,34.65230044044831,65.34769955965162,4934.652298302388,4.3893502068981815e-10,12818.216329648274 +4800.0,65.7300368831009,34.26996311699902,65.7300368831009,4934.269960932061,4.4138197980393913e-10,12859.938525156365 +4850.0,66.10812670040471,33.89187329969521,66.10812670040471,4933.89187106744,4.438017548808424e-10,12901.008337405809 +4900.0,66.48201683416033,33.517983165939576,66.48201683416033,4933.517980885932,4.461946519851336e-10,12941.438514300833 +4950.0,66.8517545545845,33.1482454455154,66.8517545545845,4933.148243117323,4.485609736461832e-10,12981.241486181989 +5000.0,67.21738658619874,32.78261341390117,67.21738658619874,4932.782611037093,4.5090101890091236e-10,13020.429375654767 +5050.0,67.57895911442711,32.421040885672795,67.57895911442711,4932.421038459825,4.532150833360182e-10,13059.014007054478 +5100.0,67.93651779210784,32.063482207992074,67.93651779210784,4932.063479732681,4.555034591296491e-10,13097.00691556315 +5150.0,68.29010774591985,31.709892254180044,68.29010774591985,4931.709889728985,4.5776643509253323e-10,13134.419355993094 +5200.0,68.63977358272582,31.360226417374083,68.63977358272582,4931.360223841879,4.6000429670857544e-10,13171.262311251512 +5250.0,68.98555939583237,31.01444060426753,68.98555939583237,4931.014437978059,4.622173261749217e-10,13207.54650049934 +5300.0,69.32750877116929,30.6724912289306,69.32750877116929,4930.672488551598,4.6440580244150615e-10,13243.282387017318 +5350.0,69.66566479338849,30.3343352067114,69.66566479338849,4930.334332477847,4.665700012500846e-10,13278.480185791403 +5400.0,70.000070051884,29.99992994821591,70.000070051884,4929.999927167416,4.687101951727629e-10,13313.14987082916 +5450.0,70.33076664673412,29.669233353365787,70.33076664673412,4929.669230520229,4.708266536500257e-10,13347.301182218194 +5500.0,70.65779619456707,29.34220380553283,70.65779619456707,4929.342200919662,4.729196430282775e-10,13380.94363293719 +5550.0,70.98119983435079,29.018800165749127,70.98119983435079,4929.0187972267495,4.749894265968971e-10,13414.08651542961 +5600.0,71.3010182331084,28.69898176699152,71.3010182331084,4928.698978774471,4.770362646248164e-10,13446.73890794967 +5650.0,71.6172915915602,28.3827084085397,71.6172915915602,4928.382705362109,4.790604143966294e-10,13478.909680689738 +5700.0,71.93005964969332,28.069940350406586,71.93005964969332,4928.069937249681,4.810621302482378e-10,13510.607501697865 +5750.0,72.23936169225983,27.76063830784007,72.23936169225983,4927.760635152437,4.830416636020391e-10,13541.840842593852 +5800.0,72.54523655420482,27.454763445895086,72.54523655420482,4927.454760235436,4.849992630016663e-10,13572.617984091794 +5850.0,72.84772262602486,27.15227737407504,72.84772262602486,4927.1522741081835,4.869351741462817e-10,13602.947021336638 +5900.0,73.14685785905833,26.853142141041577,73.14685785905833,4926.853138819344,4.888496399244352e-10,13632.835869062172 +5950.0,73.44267977070818,26.55732022939171,73.44267977070818,4926.557316851519,4.907429004474902e-10,13662.29226657724 +6000.0,73.7352254495985,26.264774550501404,73.7352254495985,4926.264771116087,4.926151930826258e-10,13691.32378258692 +6050.0,74.02453156066525,25.97546843943465,74.02453156066525,4925.975464948113,4.944667524854166e-10,13719.937819854948 +6100.0,74.31063435018278,25.689365649917107,74.31063435018278,4925.689362101327,4.962978106320032e-10,13748.1416197135 +6150.0,74.59356965072648,25.406430349373426,74.59356965072648,4925.406426743158,4.981085968508529e-10,13775.942266426144 +6200.0,74.8733728860726,25.126627114027304,74.8733728860726,4925.126623449831,4.998993378541186e-10,13803.346691409446 +6250.0,75.1500790760364,24.84992092406349,75.1500790760364,4924.849917201534,5.016702577686032e-10,13830.361677318651 +6300.0,75.42372284124912,24.576277158850786,75.42372284124912,4924.576273377638,5.034215781663314e-10,13856.993862002428 +6350.0,75.69433840787465,24.305661592225256,75.69433840787465,4924.305657751986,5.051535180947378e-10,13883.249742331618 +6400.0,75.96195961226718,24.038040387832726,75.96195961226718,4924.038036488222,5.068662941064738e-10,13909.135677906612 +6450.0,76.22661990557006,23.77338009452987,76.22661990557006,4923.773376135208,5.085601202888427e-10,13934.657894647886 +6500.0,76.48835235825696,23.511647641842966,76.48835235825696,4923.511643622473,5.102352082928616e-10,13959.822488273863 +6550.0,76.74718966461633,23.252810335483588,76.74718966461633,4923.25280625573,5.118917673619616e-10,13984.635427670346 +6600.0,77.00316414717948,22.996835852920427,77.00316414717948,4922.996831712453,5.13530004360329e-10,14009.102558155339 +6650.0,77.25630776109347,22.74369223900643,77.25630776109347,4922.743688037495,5.151501238008907e-10,14033.229604643104 +6700.0,77.50665209843933,22.493347901660574,77.50665209843933,4922.49334363878,5.16752327872951e-10,14057.02217471104 +6750.0,77.75422839249643,22.245771607603483,77.75422839249643,4922.245767283032,5.183368164694839e-10,14080.485761572847 +6800.0,77.99906752195379,22.000932478146126,77.99906752195379,4922.000928091563,5.199037872140853e-10,14103.625746961308 +6850.0,78.24120001506901,21.7587999850309,78.24120001506901,4921.758795536119,5.214534354875895e-10,14126.4474039239 +6900.0,78.48065605377546,21.519343946324444,78.48065605377546,4921.51933943477,5.229859544543566e-10,14148.955899534305 +6950.0,78.7174654777386,21.28253452236131,78.7174654777386,4921.282529947851,5.245015350882316e-10,14171.156297522713 +7000.0,78.95165778836189,21.04834221173801,78.95165778836189,4921.048337573963,5.260003661981832e-10,14193.053560827802 +7050.0,79.18326215274332,20.816737847356578,79.18326215274332,4920.816733146012,5.274826344536252e-10,14214.652554073089 +7100.0,79.41230740758283,20.587692592517087,79.41230740758283,4920.587687827299,5.289485244094234e-10,14235.958045970227 +7150.0,79.6388220630415,20.36117793705843,79.6388220630415,4920.361173107666,5.303982185305955e-10,14256.974711651812 +7200.0,79.86283430655325,20.137165693546674,79.86283430655325,4920.137160799683,5.318318972167054e-10,14277.707134936085 +7250.0,80.08437200658952,19.915627993510405,80.08437200658952,4919.91562303488,5.332497388259573e-10,14298.159810525798 +7300.0,80.30346271637752,19.696537283722396,80.30346271637752,4919.696532260032,5.34651919698992e-10,14318.337146143538 +7350.0,80.52013367757291,19.479866322527002,80.52013367757291,4919.479861233486,5.360386141823929e-10,14338.243464605603 +7400.0,80.7344118238873,19.265588176212617,80.7344118238873,4919.265583021535,5.374099946519016e-10,14357.883005836518 +7450.0,80.94632378467124,19.053676215428673,80.94632378467124,4919.05367099483,5.387662315353486e-10,14377.25992882612 +7500.0,81.15589588845339,18.844104111646516,81.15589588845339,4918.844098824844,5.401074933353048e-10,14396.378313531186 +7550.0,81.3631541664363,18.6368458336636,81.3631541664363,4918.636840480377,5.414339466514541e-10,14415.242162723367 +7600.0,81.5681243559495,18.43187564415041,81.5681243559495,4918.431870224104,5.427457562026927e-10,14433.855403785254 +7650.0,81.7708319038603,18.2291680962396,81.7708319038603,4918.229162609157,5.440430848489593e-10,14452.2218904562 +7700.0,81.97130196994323,18.028698030156676,81.97130196994323,4918.0286924757675,5.453260936127984e-10,14470.345404529618 +7750.0,82.16955943020808,17.830440569891813,82.16955943020808,4917.830434947926,5.465949417006605e-10,14488.229657503269 +7800.0,82.36562888018776,17.634371119912142,82.36562888018776,4917.634365430103,5.478497865239443e-10,14505.878292184052 +7850.0,82.55953463818587,17.440465361914036,82.55953463818587,4917.440459603996,5.490907837197805e-10,14523.294884248802 +7900.0,82.75130074848502,17.248699251614873,82.75130074848502,4917.248693425327,5.503180871715662e-10,14540.48294376247 +7950.0,82.94095098451619,17.059049015583696,82.94095098451619,4917.059043120666,5.515318490292477e-10,14557.445916655035 +8000.0,83.12850885198954,16.871491148110362,83.12850885198954,4916.871485184305,5.527322197293583e-10,14574.18718615847 +8050.0,83.31399759198735,16.686002408112532,83.31399759198735,4916.685996375167,5.539193480148133e-10,14590.710074205055 +8100.0,83.49744018401974,16.50255981608016,83.49744018401974,4916.502553713741,5.550933809544654e-10,14607.017842788118 +8150.0,83.67885934904301,16.321140651056897,83.67885934904301,4916.321134479074,5.562544639624239e-10,14623.113695286613 +8200.0,83.85827755244198,16.141722447657948,83.85827755244198,4916.141716205785,5.574027408171399e-10,14639.000777754372 +8250.0,84.03571700697603,15.964282993123884,84.03571700697603,4915.964276681114,5.585383536802627e-10,14654.682180175381 +8300.0,84.21119967568987,15.788800324410044,84.21119967568987,4915.788793942022,5.596614431152669e-10,14670.160937685976 +8350.0,84.38474727478902,15.615252725310889,84.38474727478902,4915.615246272303,5.60772148105857e-10,14685.440031765009 +8400.0,84.55638127648089,15.443618723619036,84.55638127648089,4915.443612199753,5.618706060741493e-10,14700.522391392995 +8450.0,84.72612291178153,15.273877088318391,84.72612291178153,4915.273870493361,5.629569528986356e-10,14715.410894181132 +8500.0,84.89399317328892,15.106006826811003,84.89399317328892,4915.106000160527,5.640313229319324e-10,14730.108367471186 +8550.0,85.06001281792273,14.939987182177205,85.06001281792273,4914.939980444335,5.650938490183146e-10,14744.617589406984 +8600.0,85.22420236963136,14.775797630468578,85.22420236963136,4914.7757908208405,5.661446625110414e-10,14758.941289978538 +8650.0,85.38658212206657,14.613417878033351,85.38658212206657,4914.6134109963905,5.671838932894737e-10,14773.082152039497 +8700.0,85.54717214122614,14.452827858873793,85.54717214122614,4914.452820904992,5.682116697759868e-10,14787.042812298716 +8750.0,85.70599226806473,14.294007732035206,85.70599226806473,4914.294000705692,5.692281189526803e-10,14800.82586228684 +8800.0,85.86306212107384,14.136937879026105,85.86306212107384,4914.1369307800005,5.702333663778892e-10,14814.43384929846 +8850.0,86.01840109883076,13.98159890126918,86.01840109883076,4913.981591729344,5.712275362024984e-10,14827.869277310716 +8900.0,86.1720283825173,13.82797161758266,86.1720283825173,4913.82796437254,5.72210751186061e-10,14841.134607878932 +8950.0,86.32396293840826,13.676037061691684,86.32396293840826,4913.676029743318,5.731831327127262e-10,14854.232261010005 +9000.0,86.47422352033065,13.525776479769291,86.47422352033065,4913.525769087853,5.741448008069766e-10,14867.164616014186 +9050.0,86.62282867209326,13.377171328006675,86.62282867209326,4913.3771638623375,5.750958741491787e-10,14879.934012335843 +9100.0,86.76979672988766,13.230203270212286,86.76979672988766,4913.230195730583,5.760364700909488e-10,14892.54275036389 +9150.0,86.91514582466047,13.084854175439478,86.91514582466047,4913.084846561644,5.769667046703359e-10,14904.993092222367 +9200.0,87.05889388445769,12.941106115642274,87.05889388445769,4912.941098427476,5.778866926268243e-10,14917.287262541806 +9250.0,87.201058636741,12.798941363358944,87.201058636741,4912.798933600621,5.787965474161599e-10,14929.427449211913 +9300.0,87.34165761067693,12.658342389423,87.34165761067693,4912.658334551912,5.796963812249987e-10,14941.415804116075 +9350.0,87.4807081393986,12.519291860701308,87.4807081393986,4912.519283948221,5.805863049853836e-10,14953.254443848236 +9400.0,87.61822736224099,12.381772637858948,87.61822736224099,4912.381764650212,5.814664283890489e-10,14964.945450412622 +9450.0,87.75423222694945,12.245767773150476,87.75423222694945,4912.245759710145,5.823368599015559e-10,14976.490871906775 +9500.0,87.88873949186261,12.111260508237299,87.88873949186261,4912.111252369678,5.831977067762632e-10,14987.892723188424 +9550.0,88.02176572806916,11.978234272030758,88.02176572806916,4911.978226057729,5.840490750681285e-10,14999.152986526515 +9600.0,88.15332732153922,11.846672678560696,88.15332732153922,4911.8466643883285,5.848910696473526e-10,15010.273612237055 +9650.0,88.28344047523082,11.716559524869107,88.28344047523082,4911.71655115852,5.857237942128575e-10,15021.256519303883 +9700.0,88.41212121117131,11.587878788928599,88.41212121117131,4911.587870346279,5.865473513056098e-10,15032.103595985136 +9750.0,88.53938537251459,11.460614627585331,88.53938537251459,4911.4606061084505,5.873618423217855e-10,15042.816700405467 +9800.0,88.66524862557377,11.334751374526155,88.66524862557377,4911.334742778726,5.881673675257803e-10,15053.397661134632 +9850.0,88.7897264618303,11.210273538269632,88.7897264618303,4911.210264865624,5.889640260630668e-10,15063.848277752719 +9900.0,88.91283419991929,11.087165800180635,88.91283419991929,4911.087157050512,5.897519159729012e-10,15074.170321402395 +9950.0,89.03458698759168,10.965413012508234,89.03458698759168,4910.965404185643,5.905311342008814e-10,15084.365535328536 +10000.0,89.15499980365331,10.845000196446593,89.15499980365331,4910.84499129221,5.913017766113564e-10,15094.435635405525 diff --git a/inputs/OneZonePhotoionization.toml b/inputs/OneZonePhotoionization.toml new file mode 100644 index 0000000000..a4f3b93e03 --- /dev/null +++ b/inputs/OneZonePhotoionization.toml @@ -0,0 +1,49 @@ +# ***************************************************************** +# Problem size and geometry +# ***************************************************************** +geometry.prob_lo = [0.0, 0.0, 0.0] +geometry.prob_hi = [100000000000.0, 100000000000.0, 100000000000.0] +quokka.bc = ["periodic", "periodic", "periodic"] + +# ***************************************************************** +# VERBOSITY +# ***************************************************************** +amr.v = 0 # verbosity in Amr + +# ***************************************************************** +# Resolution and refinement +# ***************************************************************** +amr.n_cell = [8, 8, 8] +amr.max_level = 0 # number of levels = max_level + 1 +max_timesteps = 500000 +do_reflux = 0 +do_subcycle = 0 +suppress_output = 0 + +photochemistry.enabled = 1 +integrator.use_number_densities = 1 +integrator.do_species_clip = 0 +integrator.jacobian = 1 +integrator.renormalize_abundances = 0 +integrator.subtract_internal_energy = 0 + +photoionization.primary_species_1 = 1e-10 +photoionization.primary_species_2 = 1e2 +photoionization.primary_species_3 = 1e-10 +photoionization.tend = 10000 +photoionization.n_photon = 5e3 +photoionization.temperature = 1e3 + +integrator.atol_spec = 1e-14 +integrator.atol_rad_num = 1e-14 +integrator.atol_rad_flux = 1e-14 +integrator.atol_enuc = 1e-14 + +integrator.rtol_spec = 1e-14 +integrator.rtol_rad_num = 1e-14 +integrator.rtol_rad_flux = 1e-14 +integrator.rtol_enuc = 1e-14 + +network.energy_switch = 0 +network.collisional_ionization_switch = 0 +network.recombination_temperature_dependent = 0 \ No newline at end of file diff --git a/inputs/OneZonePhotoionizationWithEnergy.toml b/inputs/OneZonePhotoionizationWithEnergy.toml new file mode 100644 index 0000000000..5399f7f225 --- /dev/null +++ b/inputs/OneZonePhotoionizationWithEnergy.toml @@ -0,0 +1,51 @@ +# ***************************************************************** +# Problem size and geometry +# ***************************************************************** +geometry.prob_lo = [0.0, 0.0, 0.0] +geometry.prob_hi = [100000000000.0, 100000000000.0, 100000000000.0] +quokka.bc = ["periodic", "periodic", "periodic"] + +# ***************************************************************** +# VERBOSITY +# ***************************************************************** +amr.v = 0 # verbosity in Amr + +# ***************************************************************** +# Resolution and refinement +# ***************************************************************** +amr.n_cell = [8, 8, 8] +amr.max_level = 0 # number of levels = max_level + 1 +max_timesteps = 500000 +do_reflux = 0 +do_subcycle = 0 +suppress_output = 0 + +photochemistry.enabled = 1 +integrator.use_number_densities = 1 +integrator.do_species_clip = 0 +integrator.jacobian = 1 +integrator.renormalize_abundances = 0 +integrator.subtract_internal_energy = 0 + +photoionization.primary_species_1 = 1e-10 +photoionization.primary_species_2 = 1e2 +photoionization.primary_species_3 = 1e-10 +photoionization.tend = 10000 +photoionization.n_photon = 5e3 +photoionization.temperature = 1e3 + +integrator.atol_spec = 1e-14 +integrator.atol_rad_num = 1e-14 +integrator.atol_rad_flux = 1e-14 +integrator.atol_enuc = 1e-14 + +integrator.rtol_spec = 1e-14 +integrator.rtol_rad_num = 1e-14 +integrator.rtol_rad_flux = 1e-14 +integrator.rtol_enuc = 1e-14 + +network.energy_switch = 1 +network.KI_heating_switch = 0 +network.KI_cooling_switch = 0 +network.ion_ff_cooling_switch = 0 +network.collisional_ionization_switch = 0 \ No newline at end of file diff --git a/inputs/StromgrenNoRecombination.toml b/inputs/StromgrenNoRecombination.toml new file mode 100644 index 0000000000..1ef9fb8eda --- /dev/null +++ b/inputs/StromgrenNoRecombination.toml @@ -0,0 +1,52 @@ +# ***************************************************************** +# Problem size and geometry +# ***************************************************************** +geometry.prob_lo = [0.0, 0.0, 0.0] +geometry.prob_hi = [5e13, 5e13, 5e13] +quokka.bc = ["reflecting", "reflecting", "reflecting"] + +# ***************************************************************** +# VERBOSITY +# ***************************************************************** +amr.v = 0 # verbosity in Amr + +# ***************************************************************** +# Resolution and refinement +# ***************************************************************** +amr.n_cell = [16, 16, 16] +amr.max_level = 0 # number of levels = max_level + 1 +#max_timesteps = 10 +do_reflux = 0 +do_subcycle = 0 +suppress_output = 0 + +stromgen.tend = 1200 +stromgen.primary_species_1 = 1.0e-30 +stromgen.primary_species_2 = 1.0e3 +stromgen.primary_species_3 = 1.0e-30 +stromgen.Q = 1e48 + +photochemistry.enabled = 1 +integrator.use_number_densities = 1 +integrator.do_species_clip = 0 +integrator.jacobian = 1 +integrator.renormalize_abundances = 0 +integrator.subtract_internal_energy = 0 +integrator.X_reject_buffer = 1e100 + +integrator.atol_spec = 1e-14 +integrator.atol_rad_num = 1e-14 +integrator.atol_rad_flux = 1e-14 +integrator.atol_enuc = 1e-14 + +integrator.rtol_spec = 1e-14 +integrator.rtol_rad_num = 1e-14 +integrator.rtol_rad_flux = 1e-14 +integrator.rtol_enuc = 1e-14 + +plotfile_interval = 1 +plotfile_prefix = "StrmNoRec" + +network.recombination_switch = 0 +network.energy_switch = 0 +network.collisional_ionization_switch = 0 \ No newline at end of file diff --git a/inputs/StromgrenTempIndependentRecombination.toml b/inputs/StromgrenTempIndependentRecombination.toml new file mode 100644 index 0000000000..3fb75d09ce --- /dev/null +++ b/inputs/StromgrenTempIndependentRecombination.toml @@ -0,0 +1,43 @@ +# ***************************************************************** +# Problem size and geometry +# ***************************************************************** +geometry.prob_lo = [0.0, 0.0, 0.0] +geometry.prob_hi = [8.3e18, 8.3e18, 8.3e18] +quokka.bc = ["reflecting", "reflecting", "reflecting"] + +# ***************************************************************** +# VERBOSITY +# ***************************************************************** +amr.v = 0 # verbosity in Amr + +# ***************************************************************** +# Resolution and refinement +# ***************************************************************** +amr.n_cell = [16, 16, 16] +amr.max_level = 0 # number of levels = max_level + 1 +#max_timesteps = 10 +do_reflux = 0 +do_subcycle = 0 +suppress_output = 0 + +stromgen.tend = 1.2e10 +stromgen.primary_species_1 = 1.0e-30 +stromgen.primary_species_2 = 1670 +stromgen.primary_species_3 = 1.0e-30 +stromgen.Q = 1e51 + +photochemistry.enabled = 1 +integrator.use_number_densities = 1 +integrator.do_species_clip = 0 +integrator.jacobian = 1 +integrator.renormalize_abundances = 0 +integrator.subtract_internal_energy = 0 +integrator.X_reject_buffer = 1e100 + +plotfile_interval = 50 +plotfile_prefix = "StrmConstRec" + +network.recombination_switch = 1 +network.recombination_temperature_dependent = 0 +network.energy_switch = 0 +network.collisional_ionization_switch = 0 diff --git a/src/QuokkaSimulation.hpp b/src/QuokkaSimulation.hpp index a49c7c1573..7de981f6bb 100644 --- a/src/QuokkaSimulation.hpp +++ b/src/QuokkaSimulation.hpp @@ -78,6 +78,7 @@ namespace filesystem = experimental::filesystem; #include "hyperbolic_system.hpp" #include "physics_info.hpp" #include "physics_numVars.hpp" +#include "radiation/photochemistry.hpp" #include "radiation/radiation_system.hpp" #include "simulation.hpp" #include "turbulence/TurbulentDriving.hpp" @@ -162,6 +163,7 @@ template class QuokkaSimulation : public AMRSimulation::max(); int enableIterDustStoptime_ = 0; @@ -268,6 +270,10 @@ template class QuokkaSimulation : public AMRSimulation::gamma); // initialize Microphysics params init_extern_parameters(); +#if defined(PHOTOCHEMISTRY) || defined(CHEMISTRY) + AMREX_ALWAYS_ASSERT_WITH_MESSAGE(!integrator_rp::subtract_internal_energy, + "integrator.subtract_internal_energy must be 0: Quokka reads total energy from burn_t::e, not the delta"); +#endif // initialize Microphysics EOS amrex::Real small_temp = 1e-10; amrex::Real small_dens = 1e-100; @@ -604,6 +610,16 @@ template void QuokkaSimulation::readParmParse() hpp.query("update_initial_b_energy", updateInitialMagneticEnergy_); } +#ifdef PHOTOCHEMISTRY + // set photochemistry runtime parameters + { + amrex::ParmParse const hpp("photochemistry"); + hpp.query("enabled", enablePhotoChemistry_); + hpp.query("max_density_allowed", max_density_allowed); + hpp.query("min_density_allowed", min_density_allowed); // don't do photochemistry in cells with densities below the minimum density specified + } +#endif + // set cooling runtime parameters bool cooling_table_include_pe = false; { @@ -3146,6 +3162,12 @@ void QuokkaSimulation::subcycleRadiationAtLevel(int lev, amrex::Real p_iteration_failure_counter); } } +#ifdef PHOTOCHEMISTRY + if (enablePhotoChemistry_ == 1) { + // compute photo-chemistry + quokka::photochemistry::computePhotoChemistry(state_new_cc_[lev], dt_radiation, 1, max_density_allowed, min_density_allowed); + } +#endif if (print_rad_counter_) { auto *h_iteration_counter = iteration_counter.copyToHost(); diff --git a/src/hydro/EOS.hpp b/src/hydro/EOS.hpp index a2b654e5aa..7061141a44 100644 --- a/src/hydro/EOS.hpp +++ b/src/hydro/EOS.hpp @@ -97,7 +97,7 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS::ComputeTgasFromEin // return temperature for an ideal gas given density and internal energy amrex::Real Tgas = NAN; // NOLINT(cppcoreguidelines-init-variables) -#ifdef CHEMISTRY +#if defined(CHEMISTRY) || defined(PHOTOCHEMISTRY) eos_t chemstate; chemstate.rho = rho; chemstate.e = Eint / rho; @@ -139,7 +139,7 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS::ComputeEintFromTga // return internal energy density given density and temperature amrex::Real Eint = NAN; // NOLINT(cppcoreguidelines-init-variables) -#ifdef CHEMISTRY +#if defined(CHEMISTRY) || defined(PHOTOCHEMISTRY) eos_t chemstate; chemstate.rho = rho; // Define and initialize Tgas here @@ -182,7 +182,7 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS::ComputeEintFromPre // return internal energy density given density and pressure amrex::Real Eint = NAN; // NOLINT(cppcoreguidelines-init-variables) -#ifdef CHEMISTRY +#if defined(CHEMISTRY) || defined(PHOTOCHEMISTRY) eos_t chemstate; chemstate.rho = rho; chemstate.p = Pressure; @@ -223,7 +223,7 @@ EOS::ComputeEintTempDerivative(const amrex::Real rho, const amrex::Re // compute derivative of internal energy w/r/t temperature, given density and temperature amrex::Real dEint_dT = NAN; -#ifdef CHEMISTRY +#if defined(CHEMISTRY) || defined(PHOTOCHEMISTRY) amrex::ignore_unused(Tgas); eos_t chemstate; chemstate.rho = rho; @@ -274,7 +274,7 @@ EOS::ComputeOtherDerivatives(const amrex::Real rho, const amrex::Real // fundamental derivative amrex::Real G = NAN; -#ifdef CHEMISTRY +#if defined(CHEMISTRY) || defined(PHOTOCHEMISTRY) eos_t chemstate; chemstate.rho = rho; chemstate.p = P; @@ -331,7 +331,7 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS::ComputePressure(am P = rho * EOS_Traits::cs_isothermal * EOS_Traits::cs_isothermal; return P; } -#ifdef CHEMISTRY +#if defined(CHEMISTRY) || defined(PHOTOCHEMISTRY) eos_t chemstate; chemstate.rho = rho; chemstate.e = Eint / rho; @@ -384,7 +384,7 @@ AMREX_FORCE_INLINE AMREX_GPU_HOST_DEVICE auto EOS::ComputeSoundSpeed( return cs; } -#ifdef CHEMISTRY +#if defined(CHEMISTRY) || defined(PHOTOCHEMISTRY) eos_t chemstate; chemstate.rho = rho; chemstate.p = Pressure; diff --git a/src/main.hpp b/src/main.hpp index 3b529e446a..33a40fca9e 100644 --- a/src/main.hpp +++ b/src/main.hpp @@ -7,6 +7,7 @@ //============================================================================== /// \file main.hpp /// +/// #if defined(__INTEL_COMPILER) #error \ diff --git a/src/networks/network_header.template b/src/networks/network_header.template new file mode 100644 index 0000000000..f3742f61bd --- /dev/null +++ b/src/networks/network_header.template @@ -0,0 +1,126 @@ +/* Do not edit -- this is automatically generated by the network specific CMakeLists.txt + at compile time */ +#include +#include + +#include +#include + +#include "physics_numVars.hpp" +#include + +#ifndef NETWORK_PROPERTIES_H +#define NETWORK_PROPERTIES_H + +#if defined(__GNUC__) +#define MICROPHYSICS_UNUSED [[gnu::unused]] +#else +#define MICROPHYSICS_UNUSED +#endif + +#ifdef AMREX_USE_HIP +#define HIP_CONSTEXPR constexpr +#else +#define HIP_CONSTEXPR +#endif + +constexpr int NumSpec = @NSPEC@; + +constexpr int NumSpecExtra = @NEXTRASPEC@; + +constexpr int NumSpecTotal = NumSpec + NumSpecExtra; + +#ifdef PHOTOCHEMISTRY +constexpr int NumChemBands = @NUM_CHEM_BANDS@; +constexpr int MicrophysicsNumRadVarsPerGroup = 2; +constexpr int NumRadEqs = NumChemBands * MicrophysicsNumRadVarsPerGroup; +constexpr amrex::GpuArray ChemBandsHeader_{ @CHEM_BANDS@ }; +#endif + +// filled via the preprocessor by including NAUX_NETWORK +constexpr int NumAux = NAUX_NET; + +@PROPERTIES@ + +namespace { + + MICROPHYSICS_UNUSED HIP_CONSTEXPR AMREX_GPU_MANAGED amrex::Real aion[NumSpecTotal] = { + @AION@ + }; + + MICROPHYSICS_UNUSED HIP_CONSTEXPR AMREX_GPU_MANAGED amrex::Real aion_inv[NumSpecTotal] = { + @AION_INV@ + }; + + MICROPHYSICS_UNUSED HIP_CONSTEXPR AMREX_GPU_MANAGED amrex::Real zion[NumSpecTotal] = { + @ZION@ + }; + + MICROPHYSICS_UNUSED const std::vector short_spec_names_cxx = { + @SHORT_SPEC_NAMES@ + }; + + MICROPHYSICS_UNUSED const std::vector spec_names_cxx = { + @SPEC_NAMES@ + }; + +#if NAUX_NET > 0 + MICROPHYSICS_UNUSED const std::vector short_aux_names_cxx = { + @SHORT_AUX_NAMES@ + }; + + MICROPHYSICS_UNUSED const std::vector aux_names_cxx = { + @AUX_NAMES@ + }; +#endif +} + +#if NAUX_NET > 0 +namespace AuxZero { + enum AuxIndices { + @AUXZERO_ENUM@ + }; +} +#endif + +namespace Species { + enum NetworkSpecies { + @SPECIES_ENUM@ + }; +} + +namespace NetworkProperties { + AMREX_GPU_HOST_DEVICE AMREX_INLINE constexpr amrex::Real aion (int spec) + { + using namespace Species; + + amrex::Real a = -1.0; + + // NOLINTBEGIN(bugprone-branch-clone) + switch (spec) { // NOLINT(bugprone-switch-missing-default-case) + @AION_CONSTEXPR@ + + } + // NOLINTEND(bugprone-branch-clone) + + return a; + } + + AMREX_GPU_HOST_DEVICE AMREX_INLINE constexpr amrex::Real zion (int spec) + { + using namespace Species; + + amrex::Real z = -1.0; + + // NOLINTBEGIN(bugprone-branch-clone) + switch (spec) { // NOLINT(bugprone-switch-missing-default-case) + @ZION_CONSTEXPR@ + + } + // NOLINTEND(bugprone-branch-clone) + + return z; + } + +} +#endif diff --git a/src/networks/photoionization/Make.package b/src/networks/photoionization/Make.package new file mode 100644 index 0000000000..efeedf6f70 --- /dev/null +++ b/src/networks/photoionization/Make.package @@ -0,0 +1,6 @@ +CEXE_headers += network_properties.H +CEXE_sources += actual_network_data.cpp +CEXE_headers += actual_network.H + +CEXE_sources += actual_rhs_data.cpp +CEXE_headers += actual_rhs.H \ No newline at end of file diff --git a/src/networks/photoionization/_parameters b/src/networks/photoionization/_parameters new file mode 100644 index 0000000000..6a3cf3f963 --- /dev/null +++ b/src/networks/photoionization/_parameters @@ -0,0 +1,31 @@ +@namespace: network + +# Recombination switch +recombination_switch int 1 + +# Recombination is temperature dependent +recombination_temperature_dependent int 0 + +# Collisional ionization switch +collisional_ionization_switch int 1 + +# Heating/Cooling switch +energy_switch int 1 + +# Photoionization heating +photoheating_switch int 1 + +# KI heating +KI_heating_switch int 1 + +# Recombination cooling +recombination_cooling_switch int 1 + +# KI cooling +KI_cooling_switch int 1 + +# Ion FF cooling +ion_ff_cooling_switch int 1 + +# Assume a cell with ionization fraction x has a fraction x of its volume fully ionized +assume_sharp_ionization_front int 0 \ No newline at end of file diff --git a/src/networks/photoionization/actual_network.H b/src/networks/photoionization/actual_network.H new file mode 100644 index 0000000000..327fbed8b1 --- /dev/null +++ b/src/networks/photoionization/actual_network.H @@ -0,0 +1,28 @@ +#ifndef actual_network_H +#define actual_network_H + +#include +#include + +#include +#include +#include + +using namespace amrex; + +void actual_network_init(); + +const std::string network_name = "photoionization"; + +namespace network +{ +} // namespace network + +namespace Rates +{ + +enum NetworkRates {}; + +} + +#endif diff --git a/src/networks/photoionization/actual_network_data.cpp b/src/networks/photoionization/actual_network_data.cpp new file mode 100644 index 0000000000..bc72d2a71d --- /dev/null +++ b/src/networks/photoionization/actual_network_data.cpp @@ -0,0 +1,7 @@ +#include + +namespace network +{ +} + +void actual_network_init() {} diff --git a/src/networks/photoionization/actual_rhs.H b/src/networks/photoionization/actual_rhs.H new file mode 100644 index 0000000000..c6b81a42ae --- /dev/null +++ b/src/networks/photoionization/actual_rhs.H @@ -0,0 +1,192 @@ +#ifndef actual_rhs_H +#define actual_rhs_H + +#include "AMReX_BLassert.H" +#include "AMReX_GpuQualifiers.H" +#include "AMReX_REAL.H" +#include "burn_type.H" +#include "fundamental_constants.H" +#include "integrator_data.H" +#include +#include +#include + +using namespace amrex; +using namespace network_rp; +using namespace eos_rp; +using namespace C; + +void actual_rhs_init(); + +// Species 0 (Index 0 in the state) = electron +// Species 1 (Index 1 in the state) = neutral hydrogen +// Species 2 (Index 2 in the state) = ionized hydrogen +// Index net_ienuc(=3) = specific internal energy +// Radiation index 0 (Index 4 in the state) = number density of photons +// Radiation index 1 (Index 5 in the state) = flux of photons normalized by the flux magnitude before the burn (therefore, it is 1.0 at the beginning of burn) + +AMREX_GPU_HOST_DEVICE AMREX_INLINE auto get_photoionization_coefficient(Real T) -> Real { return 1.5e-18_rt; } + +AMREX_GPU_HOST_DEVICE AMREX_INLINE auto get_recombination_coefficient(Real T) -> Real +{ + return 2.6e-13 * (1.0 + recombination_temperature_dependent * (std::pow(T / 1.0e4, -0.7) - 1.0)); +} + +AMREX_GPU_HOST_DEVICE AMREX_INLINE auto get_collisional_ionization_coefficient(Real T) -> Real +{ + return 5.84e-11 * std::sqrt(T) * std::exp(-6.4e-12_rt / (C::k_B * T)); +} + +AMREX_GPU_HOST_DEVICE AMREX_INLINE auto get_ionization_heating_coefficient(Real T) -> Real { return 6.4e-12_rt; } + +AMREX_GPU_HOST_DEVICE AMREX_INLINE auto get_KI_heating_coefficient(Real T) -> Real { return 2.0e-26; } + +AMREX_GPU_HOST_DEVICE AMREX_INLINE auto get_KI_cooling_coefficient(Real T) -> Real +{ + return 2.0e-26 * (1.0e7 * std::exp(-114800.0 / (T + 1.0e3)) + 14 * std::sqrt(T) * std::exp(-92.0 / T)); +} + +AMREX_GPU_HOST_DEVICE AMREX_INLINE auto get_recombination_cooling_coefficient(Real T) -> Real +{ + return C::k_B * T * get_recombination_coefficient(T) * (0.684 - 0.0416 * std::log(T / 1.0e4)); +} + +AMREX_GPU_HOST_DEVICE AMREX_INLINE auto get_ion_ff_cooling_coefficient(Real T) -> Real { return 1.4e-27 * std::sqrt(T) + 1.0e-19 * std::exp(-118348.0 / T); } + +AMREX_GPU_HOST_DEVICE AMREX_INLINE auto get_ionization_fraction_scaling(Real n_HI, Real n_HII) -> Real +{ + // If sharp ionization front is assumed, scale densities by 1/x to account for + // the fact that only 1/x of the cell is ionized instead of the full cell. + AMREX_ASSERT(assume_sharp_ionization_front == 0); // We don't support it yet. + if (assume_sharp_ionization_front == 1) { + if (n_HII <= 0.0_rt) { + return 1.0_rt; + } + return (n_HI + n_HII) / n_HII; + } + return 1.0_rt; +} + +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void actual_rhs(const burn_t &state, Array1D &ydot) +{ + amrex::Real sigma_photo = get_photoionization_coefficient(state.T); + amrex::Real sigma_coll = get_collisional_ionization_coefficient(state.T); + amrex::Real alpha_rec = get_recombination_coefficient(state.T); + + amrex::Real Gamma_photo = get_ionization_heating_coefficient(state.T); + amrex::Real Gamma_KI = get_KI_heating_coefficient(state.T); + amrex::Real Lambda_KI = get_KI_cooling_coefficient(state.T); + amrex::Real Lambda_rec = get_recombination_cooling_coefficient(state.T); + amrex::Real Lambda_ion_ff = get_ion_ff_cooling_coefficient(state.T); + + AMREX_ASSERT(state.c_hat == C::c_light); // RSLA (c_hat != c) is not implemented + amrex::Real c = C::c_light; + + amrex::Real n_e = state.xn[0]; + amrex::Real n_HI = state.xn[1]; + amrex::Real n_HII = state.xn[2]; + amrex::Real n_gamma = state.rn[0]; + amrex::Real n_gamma_flux = state.rn[1]; + + // Apply sharp ionization front scaling if enabled + amrex::Real scaling = get_ionization_fraction_scaling(n_HI, n_HII); + amrex::Real n_e_eff = n_e * scaling; + amrex::Real n_HII_eff = n_HII * scaling; + + amrex::Real photoionization_term = c * sigma_photo * n_HI * n_gamma; + amrex::Real collisional_ionization_term = collisional_ionization_switch * n_e_eff * n_HI * sigma_coll / scaling; + amrex::Real recombination_term = recombination_switch * alpha_rec * n_e_eff * n_HII_eff / scaling; + amrex::Real photoionization_heating = photoheating_switch * Gamma_photo * photoionization_term; + amrex::Real KI_heating = KI_heating_switch * Gamma_KI * n_HI; + amrex::Real KI_cooling = KI_cooling_switch * Lambda_KI * n_HI * n_HI; + amrex::Real recombination_cooling = recombination_cooling_switch * Lambda_rec * n_e_eff * n_HII_eff / scaling; + amrex::Real ion_ff_cooling = ion_ff_cooling_switch * Lambda_ion_ff * n_e_eff * n_HII_eff / scaling; + + ydot(1) = photoionization_term + collisional_ionization_term - recombination_term; + ydot(2) = -ydot(1); + ydot(3) = ydot(1); + ydot(net_ienuc) = energy_switch * (photoionization_heating + KI_heating - recombination_cooling - KI_cooling - ion_ff_cooling) / state.rho; + ydot(5) = -photoionization_term; + ydot(6) = -n_HI * c * sigma_photo * n_gamma_flux; +} + +template AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void actual_jac(const burn_t &state, MatrixType &jac) +{ + amrex::Real sigma_photo = get_photoionization_coefficient(state.T); + amrex::Real sigma_coll = get_collisional_ionization_coefficient(state.T); + amrex::Real alpha_rec = get_recombination_coefficient(state.T); + + amrex::Real Gamma_photo = get_ionization_heating_coefficient(state.T); + amrex::Real Gamma_KI = get_KI_heating_coefficient(state.T); + amrex::Real Lambda_KI = get_KI_cooling_coefficient(state.T); + amrex::Real Lambda_rec = get_recombination_cooling_coefficient(state.T); + amrex::Real Lambda_ion_ff = get_ion_ff_cooling_coefficient(state.T); + + AMREX_ASSERT(state.c_hat == C::c_light); // RSLA (c_hat != c) is not implemented + amrex::Real c = C::c_light; + + amrex::Real n_e = state.xn[0]; + amrex::Real n_HI = state.xn[1]; + amrex::Real n_HII = state.xn[2]; + amrex::Real n_gamma = state.rn[0]; + amrex::Real n_gamma_flux = state.rn[1]; + + // Apply sharp ionization front scaling if enabled + amrex::Real scaling = get_ionization_fraction_scaling(n_HI, n_HII); + amrex::Real n_e_eff = n_e * scaling; + amrex::Real n_HII_eff = n_HII * scaling; + + amrex::Real photoionization_term = c * sigma_photo * n_HI * n_gamma; + amrex::Real collisional_ionization_term = collisional_ionization_switch * n_e_eff * n_HI * sigma_coll / scaling; + amrex::Real recombination_term = recombination_switch * alpha_rec * n_e_eff * n_HII_eff / scaling; + amrex::Real photoionization_heating = photoheating_switch * Gamma_photo * photoionization_term; + amrex::Real KI_heating = KI_heating_switch * Gamma_KI * n_HI; + amrex::Real KI_cooling = KI_cooling_switch * Lambda_KI * n_HI * n_HI; + amrex::Real recombination_cooling = recombination_cooling_switch * Lambda_rec * n_e_eff * n_HII_eff / scaling; + amrex::Real ion_ff_cooling = ion_ff_cooling_switch * Lambda_ion_ff * n_e_eff * n_HII_eff / scaling; + + jac.zero(); + + jac(1, 1) = (collisional_ionization_term - recombination_term) / n_e_eff; + jac(1, 2) = (photoionization_term + collisional_ionization_term) / n_HI; + jac(1, 3) = -recombination_term / n_HII_eff; + jac(1, net_ienuc) = 0.0_rt; + jac(1, 5) = photoionization_term / n_gamma; + jac(1, 6) = 0.0_rt; + + jac(2, 1) = -jac(1, 1); + jac(2, 2) = -jac(1, 2); + jac(2, 3) = -jac(1, 3); + jac(2, net_ienuc) = -jac(1, net_ienuc); + jac(2, 5) = -jac(1, 5); + jac(2, 6) = -jac(1, 6); + jac(3, 1) = jac(1, 1); + jac(3, 2) = jac(1, 2); + jac(3, 3) = jac(1, 3); + jac(3, net_ienuc) = jac(1, net_ienuc); + jac(3, 5) = jac(1, 5); + jac(3, 6) = jac(1, 6); + + jac(net_ienuc, 1) = -energy_switch * (recombination_cooling / n_e_eff + ion_ff_cooling / n_e_eff) / state.rho; + jac(net_ienuc, 2) = energy_switch * (photoionization_heating / n_HI + KI_heating / n_HI - 2.0_rt * KI_cooling / n_HI) / state.rho; + jac(net_ienuc, 3) = -energy_switch * (recombination_cooling / n_HII_eff + ion_ff_cooling / n_HII_eff) / state.rho; + jac(net_ienuc, net_ienuc) = 0.0_rt; + jac(net_ienuc, 5) = energy_switch * (photoionization_heating / n_gamma) / state.rho; + jac(net_ienuc, 6) = 0.0_rt; + + jac(5, 1) = 0.0_rt; + jac(5, 2) = -photoionization_term / n_HI; + jac(5, 3) = 0.0_rt; + jac(5, net_ienuc) = 0.0_rt; + jac(5, 5) = -photoionization_term / n_gamma; + jac(5, 6) = 0.0_rt; + + jac(6, 1) = 0.0_rt; + jac(6, 2) = -c * sigma_photo * n_gamma_flux; + jac(6, 3) = 0.0_rt; + jac(6, net_ienuc) = 0.0_rt; + jac(6, 5) = 0.0_rt; + jac(6, 6) = -n_HI * c * sigma_photo; +} + +#endif diff --git a/src/networks/photoionization/actual_rhs_data.cpp b/src/networks/photoionization/actual_rhs_data.cpp new file mode 100644 index 0000000000..1d622978c1 --- /dev/null +++ b/src/networks/photoionization/actual_rhs_data.cpp @@ -0,0 +1,3 @@ +#include + +void actual_rhs_init() {} diff --git a/src/problems/OneZonePhotoionization/CMakeLists.txt b/src/problems/OneZonePhotoionization/CMakeLists.txt new file mode 100644 index 0000000000..514ca32996 --- /dev/null +++ b/src/problems/OneZonePhotoionization/CMakeLists.txt @@ -0,0 +1,102 @@ +set(microphysics_network_name "photoionization") # this will override + # network_name to + # photoionization for this + # directory only +setup_target_for_microphysics_compilation(${microphysics_network_name} + "${CMAKE_CURRENT_BINARY_DIR}/") + +# use the BEFORE keyword so that these files get priority in compilation for +# targets in this directory this is critical to ensure the correct Microphysics +# files are linked to photoionization target +include_directories( + BEFORE ${photoionization_dirs} "${CMAKE_CURRENT_BINARY_DIR}/" + "includes/extern_parameters.H" "includes/network_properties.H") + +set(JOB_NAME OneZonePhotoionization) + +# Number of species +set(NSPEC 3) +set(NEXTRASPEC 0) + +# Species enums +set(SPECIES_ENUM +"e = 0, +H, +Hp" +) + +# Atomic masses (in atomic mass units) +# Electron mass is set to 1, but never used. +set(AION +"1.0, + 1.0, + 1.0" +) +set(AION_INV +"1.0, + 1.0, + 1.0" +) + +# Charges +set(ZION +"1.0, + 1.0, + 1.0" +) + +# constexpr switch bodies +set(AION_CONSTEXPR +"case e: a = 1.0; break; + case H: a = 1.0; break; + case Hp: a = 1.0; break;" +) + +set(ZION_CONSTEXPR +"case e: z = 1.0; break; + case H: z = 1.0; break; + case Hp: z = 1.0; break;" +) + +# Species names +set(SHORT_SPEC_NAMES +"\"e\", + \"H\", + \"H+\"" +) + +set(SPEC_NAMES +"\"Electron\", + \"Hydrogen\", + \"Hydrogen_Ion\"" +) + +# No extra network properties +set(PROPERTIES "") + +# Set photoionisation properties +set(NUM_CHEM_BANDS 1) +set(CHEM_BANDS "3.29e15, 1.50e16") # Hz + +# Configure the header +configure_file( + ${CMAKE_SOURCE_DIR}/src/networks/network_header.template + ${CMAKE_CURRENT_BINARY_DIR}/network_properties.H + @ONLY +) + + +add_executable( + ${JOB_NAME} testOneZonePhotoionization.cpp "${QuokkaSourcesNoEOS}" + ../../radiation/photochemistry.cpp ${photoionization_sources}) + +# this will add #define PHOTOCHEMISTRY +target_compile_definitions(${JOB_NAME} PUBLIC PHOTOCHEMISTRY) + +if(AMReX_GPU_BACKEND MATCHES "CUDA") + setup_target_for_cuda_compilation(${JOB_NAME}) +endif(AMReX_GPU_BACKEND MATCHES "CUDA") + +add_test(NAME OneZonePhotoionizationNoEnergy COMMAND ${JOB_NAME} ../inputs/OneZonePhotoionization.toml ${QuokkaTestParams} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests) +add_test(NAME OneZonePhotoionizationWithEnergy COMMAND ${JOB_NAME} ../inputs/OneZonePhotoionizationWithEnergy.toml ${QuokkaTestParams} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests) + diff --git a/src/problems/OneZonePhotoionization/analysis_1d.ipynb b/src/problems/OneZonePhotoionization/analysis_1d.ipynb new file mode 100644 index 0000000000..eb78c1e9e4 --- /dev/null +++ b/src/problems/OneZonePhotoionization/analysis_1d.ipynb @@ -0,0 +1,122 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 10, + "id": "0c44fd02", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import matplotlib.pyplot as pl\n", + "import astropy.constants as c\n", + "import astropy.units as u\n", + "freq_low = 3.29e15 * u.Hz\n", + "freq_high = 1.50e16 * u.Hz\n", + "quanta = c.h * (freq_low + freq_high) / 2\n", + "quokka_csv_path = '../../../tests/photoionization_quokka_output.csv'\n", + "julia_csv_path = './photoionization-julia/with_energy.csv'\n", + "df_quokka = pd.read_csv(quokka_csv_path, delimiter=',')\n", + "df_julia = pd.read_csv(julia_csv_path, delimiter=',')\n", + "def get_error(key):\n", + " return np.sum(np.abs(df_julia[key] - df_quokka[key]) / df_julia[key]) / len(df_julia)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "6446a033", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(np.float64(2.269152330611286e-08),\n", + " np.float64(1.0050859399812925e-07),\n", + " np.float64(2.269152865356852e-08),\n", + " np.float64(3.580706969598308e-10),\n", + " np.float64(2.2681551065441488e-08))" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "get_error('n_e'), get_error('n_HI'), get_error('n_HII'), get_error('n_gamma'), get_error('Egas')" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "d32e61b0", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABc4AAAHpCAYAAAC7lq+8AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAA+GxJREFUeJzs3QVYFN3bBvB7aUlFVMTE7va1Fbu7u7u7sTtfu7u7O7C7O7FBTJCO3e86xz986GuAAgfY+3ddI7Ozs7vPzq47Z5458xyNTqfTgYiIiIiIiIiIiIiIJIOvf4iIiIiIiIiIiIiISGDinIiIiIiIiIiIiIgoHCbOiYiIiIiIiIiIiIjCYeKciIiIiIiIiIiIiCgcJs6JiIiIiIiIiIiIiMJh4pyIiIiIiIiIiIiIKBwmzomIiIiIiIiIiIiIwmHinIiIiIiIiIiIiIgoHCbOiYiIiIiIiIiIiIjCYeKciIiIiIiIiIiIiCgcJs6JiIiIiIiIKMadPHkS1atXh4ODAzQaDXbs2BHp59DpdJg6dSoyZcoEU1NTpEiRAuPGjYuWeImISL8YqQ6AiIiIiIiIiPSPj48PcufOjTZt2qBOnTp/9Bw9e/bEoUOHZPI8Z86c+Pjxo5yIiIj+lkYnTs8SERERERERESkiepxv374dtWrVClsWEBCAoUOHYv369fj8+TNy5MiBSZMmwcnJSd5/79495MqVC7dv30bmzJkVRk9ERPERS7UQERERERERUazTrVs3nDt3Dhs2bMDNmzdRv359VKpUCY8ePZL37969G+nSpcOePXvg6OiItGnTol27duxxTkREUYKJcyIiIiIiIiKKVV68eIHly5dj8+bNKFGiBNKnT49+/fqhePHicrnw9OlTPH/+XK6zatUqrFixAleuXEG9evVUh09ERPEAa5wTERERERERUaxy69YthISEyEE/wxPlWxInTizntVqtvC2S5qHrLV26FPnz58eDBw9YvoWIiP4KE+dEREREREREFKt4e3vD0NBQ9iAXf8OztLSUf5MnTw4jI6NvkutZs2YN67HOxDkREf0NJs6JiIiIiIiIKFbJmzev7HHu4eEhS7X8SLFixRAcHIwnT57IUi7Cw4cP5d80adLEaLxERBT/aHQ6nU51EERERERERESkf73KHz9+HJYonz59OkqXLg1bW1ukTp0azZo1w5kzZzBt2jR5/7t373D06FHkypULVatWlaVaChYsKHugz5w5U97u2rUrrK2tcejQIdVvj4iI4jgmzomIiIiIiIgoxrm4uMhE+fdatmwpB/oMCgrC2LFjZQ3z169fw87ODoULF8aoUaOQM2dOue6bN2/QvXt3mSi3sLBA5cqVZaJdJN+JiIj+BhPnREREREREREREREThGIS/QURERERERERERESk7zg4aASJWmniEjArKytoNBrV4RARkR4QF4V9+fIFDg4OMDDgue6I4P6aiIhiGvfXkcf9NRERxYX9NRPnESR26qlSpVIdBhER6aGXL18iZcqUqsOIE7i/JiIiVbi/jjjur4mIKC7sr5k4jyBxJjx044oRuomIiKKbl5eXPKgM3QfR73F/TUREMY3768jj/pqIiOLC/pqJ8wgKvXxM7NS5YyciopjES5gjjvtrIiJShfvriOP+moiI4sL+mgXYiIiIiIiIiIiIiIjCYeKciIiIiIiIiIiIiCgcJs6JiIiIiIiIiIiIiMJhjXOiCNBqtQgMDFQdBhHFM8bGxjA0NFQdBhEREVGsw2Mw+hm2oYkopjBxTvQborHm6uoqG25ERFEtYcKEsLe354BiRERERP/DYzD6HbahiSgmMHFO9As6nQ5ubm7ybHaqVKlgYMDqRkQUdb8vvr6+8PDwkLeTJ0+uOiQiIiIi5XgMRr/CNjQRxSQmzol+ITg4WO6UHRwcYG5urjocIopnEiRIIP+Khn/SpEl5ySkRERHpPR6D0e+wDU1EMYWnbol+ISQkRP41MTFRHQoRxVOhB4RBQUGqQyEiIiJSjsdgFBFsQxNRTGDinCgCWDeNiKILf1+IiIiI/ottJPoVfj+IKCYwcU5EREREREREREREFA4T50RERERERERERERE4TBxTqSHVqxYgYQJE6oOI05dBrhjxw7om+j+njRv3hzjx4+HKk5OTujVq9dP72/VqhVq1ar1x8///v17OVjRq1ev/vg5iIiIiIiIiEgPE+cjR46UCanwU5YsWcLu9/f3R9euXZE4cWJYWlqibt26ePv27TfP8eLFC1StWlUODCESFP3795ejcIfn4uKCfPnywdTUFBkyZJDJIKL4TCT8Qv9PiUF1xPd+9OjR//m/8TeePXsmn//69etR9pz0NVkd+tmJ0eETJUqEQoUKyc/P09MzRmNp2LAhHj58+M1vdp48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bNmyxfsdhpLU2Vfx7dq1S/0SI74w586dW1myZEm8x7VarTJq1Cj1A1UcU6VKFcXHxyfeMW/evFE/gG1sbBRbW1ulffv26gd9XFevXlXKlSunPodIjuKDXt8EBQWp/5bE54+VlZX6/33EiBFKRESEYuz9Jd4PX/qcEl+GkrtfNm/erOTMmVN9b+bLl0/5448/kvjV09cwXzNfJxZz9tcxXycc8/XXMV/TlzBfM18nFvP11zFfJxzztfHka434z38bYE9EREREREREREREZHg4xzkRERERERERERERURwsnBMRERERERERERERxcHCORERERERERERERFRHCycExERERERERERERHFwcI5EREREREREREREVEcLJwTEREREREREREREcXBwjkRERERERERERERURwsnBMRERERERERERERxcHCORF9Ubt27VC/fn1pv79169aYPHlygo5t1qwZZsyYkeQxERER6RrmayIiIt3HfE2knzSKoiiygyCi5KXRaP7x8TFjxqB///4QHw/29vZIblevXkXlypXx+PFj2NjY/OvxN27cgIeHB3x9fWFnZ5csMRIRESU15msiIiLdx3xNZLhYOCcyQn5+frHtTZs2YfTo0fDx8YndJ5JpQhJqUunUqRPMzMywaNGiBP9MiRIl1LP4PXv2TNLYiIiIkgvzNRERke5jviYyXJyqhcgIOTk5xW7iDLI4Qx53n0jqn19KVrFiRfTu3Rv9+vVD6tSpkT59eixduhQhISFo3749UqVKhezZs2Pv3r1/O1tdo0YN9TnFz4hLxF6/fv3V2GJiYrB161bUqVMn3v4FCxYgR44csLKyUp/nhx9+iPe4OH7jxo3frY+IiIhkY74mIiLSfczXRIaLhXMiSrDVq1fD0dER58+fV5N89+7d0bhxY5QpUwaXL1+Gl5eXmrhDQ0PV49+/f69eElakSBFcvHgR+/btg7+/P5o0afLV33Ht2jUEBgaiePHisfvEz/bp0wfjx49Xz9yL5xGXjsVVsmRJNa6IiIgk7AEiIiLdx3xNRESk+5iviXQfC+dElGCFChXCyJEj1TPTw4YNU89Oi0TfuXNndZ+4JO3NmzdqchZ++eUXNamLRUhy586ttlesWIEjR47g7t27X/wdYt41U1NTpEuXLnbfkydPkDJlStSuXRuZM2dWn0ck+rgyZsyIyMjIeJfJERERGSPmayIiIt3HfE2k+1g4J6IEK1iwYGxbJN80adKgQIECsfvEJV5CQEBA7CIkIol/mtNNbCLBCw8ePPji7wgLC4OlpWW8BVaqVq2qJvRs2bKpZ9zXrVsXe9b9kxQpUqi3n+8nIiIyNszXREREuo/5mkj3sXBORAlmbm4e775IvnH3fUrGWq1WvQ0ODlbnRvP29o633bt372+Xgn0izrCL5CzObn8i5ncTl6pt2LABGTJkUM+8i7Pz4lK1T96+favepk2b9ju/aiIiIv3CfE1ERKT7mK+JdB8L50SUZIoWLYqbN28iS5Ys6sImcTdxadiXFC5cWL29detWvP1iFXBPT09MnTpVvVTt0aNHOHz4cLxFUpydndUvBkRERJRwzNdERES6j/maKPmxcE5ESaZnz57qmermzZvjwoUL6uVj+/fvV1cJF6t7f4k4oy2+EJw8eTJ23+7duzF37lz1bLqYo+3XX39Vz7rnypUr9pgTJ06oi6cQERFR4jBfExER6T7ma6Lkx8I5ESUZsaDIqVOn1CQukq6Yr61fv36wt7eHicnXP346deqkzrP2iTh+27Zt6griefLkwaJFi9TLyvLly6c+Hh4ejh07dqiLqBAREVHiMF8TERHpPuZrouSnURRFkfB7iYi+SixgIs52b9q0Ce7u7v96/MKFC7F9+3YcOHAgWeIjIiIi5msiIiJ9wHxN9N9xxDkR6Ryxgre4XOz169cJOl4soDJv3rwkj4uIiIj+j/maiIhI9zFfE/13HHFORERERERERERERBQHR5wTEREREREREREREcXBwjkRERERERERERERURwsnBMRERERERERERERxcHCORERERERERERERFRHCycExERERERERERERHFwcI5EREREREREREREVEcLJwTEREREREREREREcXBwjkRERERERERERERURwsnBMRERERERERERER4f/+B4ze77k/9sTTAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, ax = pl.subplots(1, 3, figsize=(15, 5))\n", + "ax[0].plot(df_quokka[\"time\"], df_quokka[\"n_gamma\"], label=\"Photon number Density (Quokka)\", color=\"blue\")\n", + "ax[0].plot(df_julia[\"time\"], df_julia[\"n_gamma\"], label=\"Julia\", linestyle=\"dashed\", color=\"black\")\n", + "ax[0].set_xlabel(\"Time (s)\")\n", + "ax[0].set_ylabel(\"n\")\n", + "ax[0].legend()\n", + "ax[1].plot(df_quokka[\"time\"], df_quokka[\"n_e\"], label=\"n_e\", color=\"green\")\n", + "ax[1].plot(df_quokka[\"time\"], df_quokka[\"n_HI\"], label=\"n_HI\", color=\"red\")\n", + "ax[1].plot(df_julia[\"time\"], df_julia[\"n_HI\"], color=\"black\", linestyle=\"dashed\")\n", + "ax[1].plot(df_quokka[\"time\"], df_quokka[\"n_HII\"], label=\"n_HII\", color=\"blue\")\n", + "ax[1].plot(df_julia[\"time\"], df_julia[\"n_HII\"], color=\"black\", linestyle=\"dashed\")\n", + "ax[1].plot(df_julia[\"time\"], df_julia[\"n_e\"], label=\"Julia\", color=\"black\", linestyle=\"dashed\")\n", + "ax[1].set_xlabel(\"Time (s)\")\n", + "ax[1].set_ylabel(\"n\")\n", + "ax[1].legend()\n", + "ax[2].plot(df_quokka[\"time\"], df_quokka[\"gas_temp\"], label=\"Temperature\", color=\"purple\")\n", + "ax[2].plot(df_julia[\"time\"], df_julia[\"gas_temp\"], label=\"Julia\", color=\"black\", linestyle=\"dashed\")\n", + "ax[2].set_xlabel(\"Time (s)\")\n", + "ax[2].set_ylabel(\"Temperature\")\n", + "ax[2].legend()\n", + "fig.tight_layout()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b2f0a35d", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.19" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/src/problems/OneZonePhotoionization/testOneZonePhotoionization.cpp b/src/problems/OneZonePhotoionization/testOneZonePhotoionization.cpp new file mode 100644 index 0000000000..cad0f95ee6 --- /dev/null +++ b/src/problems/OneZonePhotoionization/testOneZonePhotoionization.cpp @@ -0,0 +1,436 @@ +//============================================================================== +// TwoMomentRad - a radiation transport library for patch-based AMR codes +// Copyright 2020 Benjamin Wibking. +// Released under the MIT license. See LICENSE file included in the GitHub repo. +//============================================================================== +/// \file testOneZonePhotoionization.cpp +/// \brief Defines a test problem for photoionization. +/// + +#include "AMReX.H" +#include "QuokkaSimulation.hpp" +#include "fundamental_constants.H" +#include "radiation/radiation_system.hpp" +#include "util/fextract.hpp" +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef HAVE_PYTHON +#include "util/matplotlibcpp.h" +#endif + +#include "actual_eos_data.H" +#include "burn_type.H" +#include "eos.H" +#include "extern_parameters.H" +#include "network.H" + +struct PhotoionizationStreamingProblem { +}; + +constexpr double c = C::c_light; // speed of light +constexpr double chat = C::c_light; // reduced speed of light +constexpr double kappa0 = 0; // opacity + +template <> struct quokka::EOS_Traits { + static constexpr double mean_molecular_weight = 1.0; + static constexpr double gamma = 5. / 3.; +}; + +template <> struct Physics_Traits { + static constexpr bool is_self_gravity_enabled = false; + // cell-centred + static constexpr bool is_hydro_enabled = false; + static constexpr int numMassScalars = NumSpec; // number of mass scalars + static constexpr int numPassiveScalars = numMassScalars + 0; // number of passive scalars + static constexpr bool is_radiation_enabled = true; + static constexpr bool is_dust_enabled = false; + static constexpr int nDustGroups = 1; // number of dust groups + // face-centred + static constexpr bool is_mhd_enabled = false; + static constexpr int nGroups = 1; // number of radiation groups + static constexpr UnitSystem unit_system = UnitSystem::CGS; +}; + +template <> struct RadSystem_Traits { + static constexpr double c_hat_over_c = chat / c; + static constexpr double Erad_floor = 0.0; + static constexpr int beta_order = 0; + static constexpr auto ChemBands() -> amrex::GpuArray { return ChemBandsHeader_; } +}; + +template <> struct SimulationData { + amrex::Real small_temp{}; + amrex::Real small_dens{}; + amrex::Real temperature{}; + amrex::Real primary_species_1{}; + amrex::Real primary_species_2{}; + amrex::Real primary_species_3{}; + amrex::Real tend{}; + amrex::Real n_photon{}; + std::ofstream output_file_; + std::vector t_vec_; + std::vector n_e_vec_; + std::vector n_HI_vec_; + std::vector n_HII_vec_; + std::vector n_gamma_vec_; + std::vector Egas_vec_; + std::vector temp_vec_; +}; + +template <> void QuokkaSimulation::preCalculateInitialConditions() +{ + // initialize microphysics routines + init_extern_parameters(); + + // parmparse species and temperature + amrex::ParmParse const pp("photoionization"); + userData_.small_temp = 1e-2; + userData_.small_dens = 1e-60; + userData_.temperature = 1.0e3; + userData_.primary_species_1 = 0.0e0_rt; + userData_.primary_species_2 = 1.0e2_rt; + userData_.primary_species_3 = 0.0e0_rt; + userData_.tend = 1000.0_rt; + userData_.n_photon = 1.0e5_rt; + pp.query("small_temp", userData_.small_temp); + pp.query("small_dens", userData_.small_dens); + pp.query("temperature", userData_.temperature); + pp.query("primary_species_1", userData_.primary_species_1); + pp.query("primary_species_2", userData_.primary_species_2); + pp.query("primary_species_3", userData_.primary_species_3); + pp.query("tend", userData_.tend); + pp.query("n_photon", userData_.n_photon); + + eos_init(userData_.small_temp, userData_.small_dens); + network_init(); + + burn_t state; + state.T = userData_.temperature; + Real rhotot = 0.0_rt; + state.xn[0] = userData_.primary_species_1; + state.xn[1] = userData_.primary_species_2; + state.xn[2] = userData_.primary_species_3; + rhotot = state.xn[0] * spmasses[0] + state.xn[1] * spmasses[1] + state.xn[2] * spmasses[2]; + state.rho = rhotot; + eos(eos_input_rt, state); + + const amrex::Real t = 0.0; + const amrex::Real n_e = userData_.primary_species_1; + const amrex::Real n_HI = userData_.primary_species_2; + const amrex::Real n_HII = userData_.primary_species_3; + const amrex::Real n_gamma = userData_.n_photon; + const amrex::Real Egas_i = state.e * rhotot; + const amrex::Real temp = userData_.temperature; + + userData_.output_file_.open("photoionization_quokka_output.csv"); + userData_.output_file_ << "time,n_e,n_HI,n_HII,n_gamma,Egas,gas_temp\n"; + userData_.output_file_ << std::scientific << std::setprecision(std::numeric_limits::max_digits10); + userData_.output_file_ << t << "," << n_e << "," << n_HI << "," << n_HII << "," << n_gamma << "," << Egas_i << "," << temp << "\n"; +} + +template <> +AMREX_GPU_HOST_DEVICE auto RadSystem::ComputePlanckOpacity(const double /*rho*/, const double /*Tgas*/) -> amrex::Real +{ + return kappa0; +} + +template <> +AMREX_GPU_HOST_DEVICE auto RadSystem::ComputeFluxMeanOpacity(const double /*rho*/, const double /*Tgas*/) -> amrex::Real +{ + return kappa0; +} + +template <> void QuokkaSimulation::setInitialConditionsOnGrid(quokka::grid const &grid_elem) +{ + const amrex::Box &indexRange = grid_elem.indexRange_; + const amrex::Array4 &state_cc = grid_elem.array_; + + burn_t state; + std::array numdens = {-1.0}; + for (int n = 1; n <= NumSpec; ++n) { + switch (n) { + case 1: + numdens[n - 1] = userData_.primary_species_1; + break; + case 2: + numdens[n - 1] = userData_.primary_species_2; + break; + case 3: + numdens[n - 1] = userData_.primary_species_3; + break; + default: + amrex::Abort("Cannot initialize number density for chem specie"); + break; + } + } + + state.T = userData_.temperature; + + // find the density in g/cm^3 + Real rhotot = 0.0_rt; + for (int n = 0; n < NumSpec; ++n) { + state.xn[n] = numdens[n]; + rhotot += state.xn[n] * spmasses[n]; // spmasses contains the masses of all species, defined in EOS + } + state.rho = rhotot; + // call the EOS to set initial internal energy e + eos(eos_input_rt, state); + + const auto Erad0 = userData_.n_photon * RadSystem::GetChemBandQuanta(0); + const auto Egas0 = state.e * rhotot; // initial_Egas; + + // loop over the grid and set the initial condition + amrex::ParallelFor(indexRange, [=] AMREX_GPU_DEVICE(int i, int j, int k) { + for (int g = 0; g < Physics_Traits::nGroups; ++g) { + state_cc(i, j, k, RadSystem::radEnergy_index + Physics_NumVars::numRadVarsPerGroup * g) = Erad0; + state_cc(i, j, k, RadSystem::x1RadFlux_index + Physics_NumVars::numRadVarsPerGroup * g) = 0; + state_cc(i, j, k, RadSystem::x2RadFlux_index + Physics_NumVars::numRadVarsPerGroup * g) = 0; + state_cc(i, j, k, RadSystem::x3RadFlux_index + Physics_NumVars::numRadVarsPerGroup * g) = 0; + } + state_cc(i, j, k, RadSystem::gasEnergy_index) = Egas0; + state_cc(i, j, k, RadSystem::gasDensity_index) = rhotot; + state_cc(i, j, k, RadSystem::gasInternalEnergy_index) = Egas0; + state_cc(i, j, k, RadSystem::x1GasMomentum_index) = 0.; + state_cc(i, j, k, RadSystem::x2GasMomentum_index) = 0.; + state_cc(i, j, k, RadSystem::x3GasMomentum_index) = 0.; + for (int nn = 0; nn < NumSpec; ++nn) { + state_cc(i, j, k, HydroSystem::scalar0_index + nn) = + state.xn[nn] * spmasses[nn]; // scalar indices carry partial densities instead of number densities + } + }); +} + +template <> void QuokkaSimulation::computeAfterTimestep() +{ + auto [position, values] = fextract(state_new_cc_[0], Geom(0), 0, 0.5); // NOLINT + + if (amrex::ParallelDescriptor::IOProcessor()) { + const amrex::Real time = tNew_[0]; + const amrex::Real Erad_i = values.at(RadSystem::radEnergy_index)[0]; + const amrex::Real n_e = values.at(HydroSystem::scalar0_index)[0] / spmasses[0]; + const amrex::Real n_HI = values.at(HydroSystem::scalar0_index + 1)[0] / spmasses[1]; + const amrex::Real n_HII = values.at(HydroSystem::scalar0_index + 2)[0] / spmasses[2]; + const amrex::Real n_gamma = Erad_i / RadSystem::GetChemBandQuanta(0); + const amrex::Real rho = values.at(RadSystem::gasDensity_index)[0]; + const amrex::Real Egas_i = values.at(RadSystem::gasEnergy_index)[0]; + const amrex::Real Eint_i = values.at(RadSystem::gasInternalEnergy_index)[0]; + quokka::optional> massScalars; + amrex::GpuArray scalars{}; + scalars[0] = n_e * spmasses[0]; + scalars[1] = n_HI * spmasses[1]; + scalars[2] = n_HII * spmasses[2]; + massScalars = scalars; + const amrex::Real temp = quokka::EOS::ComputeTgasFromEint(rho, Eint_i, massScalars); + + userData_.t_vec_.push_back(time); + userData_.n_e_vec_.push_back(n_e); + userData_.n_HI_vec_.push_back(n_HI); + userData_.n_HII_vec_.push_back(n_HII); + userData_.n_gamma_vec_.push_back(n_gamma); + userData_.Egas_vec_.push_back(Egas_i); + userData_.temp_vec_.push_back(temp); + + userData_.output_file_ << time << "," << n_e << "," << n_HI << "," << n_HII << "," << n_gamma << "," << Egas_i << "," << temp << "\n"; + } +} + +auto problem_main() -> int +{ + // Problem parameters + const double CFL_number = 0.3; + const int max_timesteps = 5000000; + const double constant_dt = 50.0; + + // Boundary conditions + constexpr int nvars = RadSystem::nvar_; + amrex::Vector BCs_cc(nvars); + for (int n = 0; n < nvars; ++n) { + for (int i = 0; i < AMREX_SPACEDIM; ++i) { + BCs_cc[n].setLo(i, amrex::BCType::int_dir); // periodic + BCs_cc[n].setHi(i, amrex::BCType::int_dir); + } + } + + // Problem initialization + QuokkaSimulation sim(BCs_cc); + + // initialize + sim.setInitialConditions(); + sim.stopTime_ = sim.userData_.tend; + sim.radiationReconstructionOrder_ = 3; // PPM + sim.radiationCflNumber_ = CFL_number; + sim.maxTimesteps_ = max_timesteps; + sim.constantDt_ = constant_dt; + sim.plotfileInterval_ = -1; + + // evolve + sim.evolve(); + + std::vector const &t = sim.userData_.t_vec_; + std::vector const &n_e = sim.userData_.n_e_vec_; + std::vector const &n_HI = sim.userData_.n_HI_vec_; + std::vector const &n_HII = sim.userData_.n_HII_vec_; + std::vector const &n_gamma = sim.userData_.n_gamma_vec_; + std::vector const &Egas = sim.userData_.Egas_vec_; + std::vector const &temp = sim.userData_.temp_vec_; + + int energy_switch = 1; + + amrex::ParmParse const pp1("network"); + pp1.query("energy_switch", energy_switch); + + std::string filename = "../extern/photoionization-julia/"; + if (energy_switch == 0) { + filename += "no_energy.csv"; + } else if (energy_switch == 1) { + filename += "with_energy.csv"; + } else { + amrex::Abort("Invalid energy_switch parameter"); + } + + std::ifstream file(filename); + if (!file.is_open()) { + amrex::Abort("Could not open file: " + filename + "\nPlease run this test from the /tests/ folder."); + } + std::string line; + std::vector> data; + std::getline(file, line); + while (std::getline(file, line)) { + std::stringstream ss(line); + std::string value; + std::vector row; + while (std::getline(ss, value, ',')) { + row.push_back(std::stod(value)); + } + data.push_back(row); + } + + std::vector t_julia; + std::vector n_e_julia; + std::vector n_HI_julia; + std::vector n_HII_julia; + std::vector n_gamma_julia; + std::vector Egas_julia; + std::vector temp_julia; + for (size_t i = 1; i < data.size(); ++i) { + t_julia.push_back(data[i][0]); + n_e_julia.push_back(data[i][1]); + n_HI_julia.push_back(data[i][2]); + n_HII_julia.push_back(data[i][3]); + n_gamma_julia.push_back(data[i][4]); + Egas_julia.push_back(data[i][5]); + temp_julia.push_back(data[i][6]); + } + + int errors = 0; + int status = 0; + amrex::Real const error_tol = 1e-6; + amrex::Real species1_error_norm = 0.0; + amrex::Real species2_error_norm = 0.0; + amrex::Real species3_error_norm = 0.0; + amrex::Real photon_error_norm = 0.0; + amrex::Real energy_error_norm = 0.0; + + for (size_t i = 0; i < t.size(); ++i) { + species1_error_norm += std::abs(n_e[i] - n_e_julia[i]) / std::abs(n_e_julia[i]); + species2_error_norm += std::abs(n_HI[i] - n_HI_julia[i]) / std::abs(n_HI_julia[i]); + species3_error_norm += std::abs(n_HII[i] - n_HII_julia[i]) / std::abs(n_HII_julia[i]); + photon_error_norm += std::abs(n_gamma[i] - n_gamma_julia[i]) / std::abs(n_gamma_julia[i]); + if (energy_switch == 1) { + energy_error_norm += std::abs(Egas[i] - Egas_julia[i]) / std::abs(Egas_julia[i]); + } + } + species1_error_norm /= static_cast(t.size()); + species2_error_norm /= static_cast(t.size()); + species3_error_norm /= static_cast(t.size()); + photon_error_norm /= static_cast(t.size()); + energy_error_norm /= static_cast(t.size()); + amrex::Print() << "Species 1 L1 error norm = " << species1_error_norm << '\n'; + amrex::Print() << "Species 2 L1 error norm = " << species2_error_norm << '\n'; + amrex::Print() << "Species 3 L1 error norm = " << species3_error_norm << '\n'; + amrex::Print() << "Photon L1 error norm = " << photon_error_norm << '\n'; + amrex::Print() << "Energy L1 error norm = " << energy_error_norm << '\n'; + if (species1_error_norm > error_tol) { + amrex::Print() << "Species 1 error norm exceeds tolerance!" << '\n'; + errors += 1; + } + if (species2_error_norm > error_tol) { + amrex::Print() << "Species 2 error norm exceeds tolerance!" << '\n'; + errors += 1; + } + if (species3_error_norm > error_tol) { + amrex::Print() << "Species 3 error norm exceeds tolerance!" << '\n'; + errors += 1; + } + if (photon_error_norm > error_tol) { + amrex::Print() << "Photon error norm exceeds tolerance!" << '\n'; + errors += 1; + } + if (energy_error_norm > error_tol) { + amrex::Print() << "Energy error norm exceeds tolerance!" << '\n'; + errors += 1; + } + if (errors > 0) { + status = 1; + } + +#ifdef HAVE_PYTHON + // Plot n_HI and n_HII + matplotlibcpp::clf(); + std::map n_HI_args; + std::map n_HII_args; + std::map n_HI_julia_args; + std::map n_HII_julia_args; + n_HI_args["label"] = "n_HI"; + n_HI_args["color"] = "C0"; + n_HII_args["label"] = "n_HII"; + n_HII_args["color"] = "C1"; + n_HI_julia_args["label"] = "Julia"; + n_HI_julia_args["linestyle"] = "--"; + n_HI_julia_args["color"] = "k"; + n_HII_julia_args["linestyle"] = "--"; + n_HII_julia_args["color"] = "k"; + matplotlibcpp::plot(t, n_HI, n_HI_args); + matplotlibcpp::plot(t, n_HII, n_HII_args); + matplotlibcpp::plot(t_julia, n_HI_julia, n_HI_julia_args); + matplotlibcpp::plot(t_julia, n_HII_julia, n_HII_julia_args); + matplotlibcpp::yscale("log"); + matplotlibcpp::xlabel("time (s)"); + matplotlibcpp::ylabel("number density (cm^-3)"); + matplotlibcpp::legend(); + matplotlibcpp::tight_layout(); + const std::string species_plot_filename = + (energy_switch == 0) ? "./photoionization_species_no_energy.pdf" : "./photoionization_species_with_energy.pdf"; + matplotlibcpp::save(species_plot_filename); + + if (energy_switch == 1) { + // Plot temperature + matplotlibcpp::clf(); + std::map temp_args; + std::map temp_julia_args; + temp_args["label"] = "T"; + temp_args["color"] = "C2"; + temp_julia_args["label"] = "Julia"; + temp_julia_args["linestyle"] = "--"; + temp_julia_args["color"] = "k"; + matplotlibcpp::plot(t, temp, temp_args); + matplotlibcpp::plot(t_julia, temp_julia, temp_julia_args); + matplotlibcpp::xlabel("time (s)"); + matplotlibcpp::ylabel("temperature (K)"); + matplotlibcpp::legend(); + matplotlibcpp::tight_layout(); + matplotlibcpp::save("./photoionization_temperature.pdf"); + } +#endif + + // Cleanup and exit + amrex::Print() << "Finished." << '\n'; + return status; +} diff --git a/src/problems/StromgrenSphere/CMakeLists.txt b/src/problems/StromgrenSphere/CMakeLists.txt new file mode 100644 index 0000000000..96475e16df --- /dev/null +++ b/src/problems/StromgrenSphere/CMakeLists.txt @@ -0,0 +1,103 @@ +if(AMReX_SPACEDIM EQUAL 3) + set(microphysics_network_name "photoionization") # this will override + # network_name to + # photoionization for this + # directory only + setup_target_for_microphysics_compilation(${microphysics_network_name} + "${CMAKE_CURRENT_BINARY_DIR}/") + + # use the BEFORE keyword so that these files get priority in compilation for + # targets in this directory this is critical to ensure the correct Microphysics + # files are linked to photoionization target + include_directories( + BEFORE ${photoionization_dirs} "${CMAKE_CURRENT_BINARY_DIR}/" + "includes/extern_parameters.H" "includes/network_properties.H") + + set(JOB_NAME StromgrenSphere) + + # Number of species + set(NSPEC 3) + set(NEXTRASPEC 0) + + # Species enums + set(SPECIES_ENUM + "e = 0, + H, + Hp" + ) + + # Atomic masses (in atomic mass units) + # Electron mass is set to 1, but never used. + set(AION + "1.0, + 1.0, + 1.0" + ) + set(AION_INV + "1.0, + 1.0, + 1.0" + ) + + # Charges + set(ZION + "1.0, + 1.0, + 1.0" + ) + + # constexpr switch bodies + set(AION_CONSTEXPR + "case e: a = 1.0; break; + case H: a = 1.0; break; + case Hp: a = 1.0; break;" + ) + + set(ZION_CONSTEXPR + "case e: z = 1.0; break; + case H: z = 1.0; break; + case Hp: z = 1.0; break;" + ) + + # Species names + set(SHORT_SPEC_NAMES + "\"e\", + \"H\", + \"H+\"" + ) + + set(SPEC_NAMES + "\"Electron\", + \"Hydrogen\", + \"Hydrogen_Ion\"" + ) + + # No extra network properties + set(PROPERTIES "") + + # Set photoionisation properties + set(NUM_CHEM_BANDS 1) + set(CHEM_BANDS "3.29e15, 1.50e16") # Hz + + # Configure the header + configure_file( + ${CMAKE_SOURCE_DIR}/src/networks/network_header.template + ${CMAKE_CURRENT_BINARY_DIR}/network_properties.H + @ONLY + ) + + + add_executable( + ${JOB_NAME} testStromgrenSphere.cpp "${QuokkaSourcesNoEOS}" + ../../radiation/photochemistry.cpp ${photoionization_sources}) + + # this will add #define PHOTOCHEMISTRY + target_compile_definitions(${JOB_NAME} PUBLIC PHOTOCHEMISTRY) + + if(AMReX_GPU_BACKEND MATCHES "CUDA") + setup_target_for_cuda_compilation(${JOB_NAME}) + endif(AMReX_GPU_BACKEND MATCHES "CUDA") + + add_test(NAME StromgrenSphereNoRecombination COMMAND ${JOB_NAME} ../inputs/StromgrenNoRecombination.toml ${QuokkaTestParams} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests) + add_test(NAME StromgrenSphereTempIndependentRecombination COMMAND ${JOB_NAME} ../inputs/StromgrenTempIndependentRecombination.toml ${QuokkaTestParams} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests) +endif() \ No newline at end of file diff --git a/src/problems/StromgrenSphere/testStromgrenSphere.cpp b/src/problems/StromgrenSphere/testStromgrenSphere.cpp new file mode 100644 index 0000000000..26c0cc1408 --- /dev/null +++ b/src/problems/StromgrenSphere/testStromgrenSphere.cpp @@ -0,0 +1,554 @@ +//============================================================================== +// TwoMomentRad - a radiation transport library for patch-based AMR codes +// Copyright 2020 Benjamin Wibking. +// Released under the MIT license. See LICENSE file included in the GitHub repo. +//============================================================================== +/// \file testStromgrenSphere.cpp +/// \brief Defines a test problem for the static Stromgren sphere with no temperature dependence. +/// + +#include "AMReX.H" +#include "AMReX_Array.H" +#include "AMReX_ParmParse.H" +#include "AMReX_REAL.H" +#include "AMReX_Vector.H" +#include "QuokkaSimulation.hpp" +#include "fundamental_constants.H" +#include "physics_info.hpp" +#include "radiation/radiation_system.hpp" +#include +#include +#include +#include +#include + +#include "actual_eos_data.H" +#include "burn_type.H" +#include "eos.H" +#include "extern_parameters.H" +#include "network.H" + +struct StromgrenSphere { +}; + +constexpr double c_hat = C::c_light / 1.0; +constexpr double sigma_star_coeff = 1.5 / 16.0; +constexpr double r_trunc_coeff = 2.5; + +template <> struct quokka::EOS_Traits { + static constexpr double mean_molecular_weight = 1.0; + static constexpr double gamma = 5. / 3.; +}; + +template <> struct Physics_Traits { + static constexpr bool is_self_gravity_enabled = false; + // cell-centred + static constexpr bool is_hydro_enabled = false; + static constexpr int numMassScalars = NumSpec; // number of mass scalars + static constexpr int numPassiveScalars = numMassScalars + 0; // number of passive scalars + static constexpr bool is_radiation_enabled = true; + static constexpr bool is_dust_enabled = false; + static constexpr int nDustGroups = 1; // number of dust groups + // face-centred + static constexpr bool is_mhd_enabled = false; + static constexpr int nGroups = 1; // number of radiation groups + static constexpr UnitSystem unit_system = UnitSystem::CGS; + static constexpr double boltzmann_constant = C::k_B; + static constexpr double gravitational_constant = C::Gconst; + static constexpr double c_light = C::c_light; + static constexpr double radiation_constant = C::a_rad; +}; + +template <> struct RadSystem_Traits { + static constexpr double c_hat_over_c = c_hat / C::c_light; + static constexpr double Erad_floor = 1e-99; + static constexpr int beta_order = 0; + static constexpr auto ChemBands() { return ChemBandsHeader_; } +}; + +template <> +void RadSystem::SetRadEnergySource(array_t &radEnergy, const amrex::Box &indexRange, amrex::GpuArray const &dx, + amrex::GpuArray const &prob_lo, + amrex::GpuArray const &prob_hi, amrex::Real /*time*/) +{ + amrex::ParmParse const pp("stromgen"); + amrex::Real Q = 1.0e49_rt; + pp.query("Q", Q); + + amrex::ParmParse const pp2("amr"); + int n = 16; + pp2.query("n_cell", n); + + const amrex::Real sigma_star = sigma_star_coeff * (prob_hi[0] - prob_lo[0]); + const amrex::Real r_trunc = r_trunc_coeff * sigma_star; + const amrex::Real L_star = Q * RadSystem::GetChemBandQuanta(0) / 8.0_rt; + const amrex::Real x0 = 0.0_rt; + const amrex::Real y0 = 0.0_rt; + const amrex::Real z0 = 0.0_rt; + amrex::Real sum = 0.0_rt; + for (int i = 0; i < n; ++i) { + for (int j = 0; j < n; ++j) { + for (int k = 0; k < n; ++k) { + amrex::Real const x = prob_lo[0] + (i + 0.5) * dx[0]; + amrex::Real const y = prob_lo[1] + (j + 0.5) * dx[1]; + amrex::Real const z = prob_lo[2] + (k + 0.5) * dx[2]; + amrex::Real const r = std::sqrt(std::pow(x - x0, 2) + std::pow(y - y0, 2) + std::pow(z - z0, 2)); + if (r <= r_trunc) { + sum += std::exp(-(r * r) / (2.0 * sigma_star * sigma_star)) * dx[0] * dx[1] * dx[2] / + (std::pow(2.0 * M_PI * sigma_star * sigma_star, 1.5)); + } + } + } + } + amrex::ParallelFor(indexRange, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { + amrex::Real const x = prob_lo[0] + (i + 0.5) * dx[0]; + amrex::Real const y = prob_lo[1] + (j + 0.5) * dx[1]; + amrex::Real const z = prob_lo[2] + (k + 0.5) * dx[2]; + amrex::Real const r = std::sqrt(std::pow(x - x0, 2) + std::pow(y - y0, 2) + std::pow(z - z0, 2)); + if (r <= r_trunc) { + amrex::Real const w_i = std::exp(-(r * r) / (2.0 * sigma_star * sigma_star)) / (std::pow(2.0 * M_PI * sigma_star * sigma_star, 1.5)); + amrex::Real const val = L_star * w_i / sum; + radEnergy(i, j, k) = val; + } else { + radEnergy(i, j, k) = 0.0_rt; + } + }); +} + +namespace +{ + +// Numerically integrate dR/dt = (Q - 4*pi*R^3*alpha_B*n_HI0^2/3) / (Q/c + 4*pi*R^2*n_HI0) +// Integrates forward by `dt_target` starting from `R0` using RK4 with step-doubling. +// Aborts the run if convergence is not reached within allowed iterations. +auto integrate_radius(amrex::Real dt_target, amrex::Real Q, amrex::Real alpha_B, amrex::Real n_HI0, amrex::Real c_light, amrex::Real R0, amrex::Real r_s_est) + -> amrex::Real +{ + if (dt_target <= 0.0_rt) { + return R0; + } + + auto rhs = [&](amrex::Real R) -> amrex::Real { + const amrex::Real num = Q - (4.0_rt * M_PI * R * R * R * alpha_B * n_HI0 * n_HI0) / 3.0_rt; + const amrex::Real den = Q / c_light + 4.0_rt * M_PI * R * R * n_HI0; + return num / den; + }; + + int N = 256; + const int max_iters = 10; + const amrex::Real tol = 1e-6_rt * std::max(r_s_est, 1.0_rt); + amrex::Real R_prev = R0; + + for (int iter = 0; iter < max_iters; ++iter) { + const amrex::Real dt = dt_target / static_cast(N); + amrex::Real R = R0; + + for (int step = 0; step < N; ++step) { + const amrex::Real k1 = rhs(R); + const amrex::Real k2 = rhs(R + 0.5_rt * dt * k1); + const amrex::Real k3 = rhs(R + 0.5_rt * dt * k2); + const amrex::Real k4 = rhs(R + dt * k3); + R += (dt / 6.0_rt) * (k1 + 2.0_rt * k2 + 2.0_rt * k3 + k4); + R = std::max(R, 0.0_rt); // ensure radius does not become negative + } + + if (iter > 0 && std::abs(R - R_prev) < tol) { + return R; + } + R_prev = R; + N *= 2; + } + + amrex::Abort("integrate_radius failed to converge within max_iters for dt=" + std::to_string(dt_target)); + return R_prev; // unreachable +} + +} // namespace + +template <> struct SimulationData { + amrex::Real small_temp{}; + amrex::Real small_dens{}; + amrex::Real temperature{}; + amrex::Real primary_species_1{}; + amrex::Real primary_species_2{}; + amrex::Real primary_species_3{}; + amrex::Real Q{}; + amrex::Real tend{}; + int recombination_switch{}; + amrex::Vector t_vec_; + amrex::Vector r50_vec_; + amrex::Vector r16_vec_; + amrex::Vector r84_vec_; + amrex::Vector r_analytical_vec_; + amrex::Real r_analytical_last_t{}; + amrex::Real r_analytical_last_R{}; + std::ofstream output_file_; +}; + +template <> void QuokkaSimulation::preCalculateInitialConditions() +{ + // initialize microphysics routines + init_extern_parameters(); + + // parmparse species and temperature + amrex::ParmParse const pp("stromgen"); + userData_.small_temp = 1e-2; + userData_.small_dens = 1e-60; + userData_.temperature = 1.0e4; + userData_.tend = 1000.0_rt; + userData_.primary_species_1 = 0.0e0_rt; + userData_.primary_species_2 = 1.0e2_rt; + userData_.primary_species_3 = 0.0e0_rt; + userData_.Q = 1.0e49_rt; + userData_.recombination_switch = 0; + pp.query("small_temp", userData_.small_temp); + pp.query("small_dens", userData_.small_dens); + pp.query("temperature", userData_.temperature); + pp.query("tend", userData_.tend); + pp.query("primary_species_1", userData_.primary_species_1); + pp.query("primary_species_2", userData_.primary_species_2); + pp.query("primary_species_3", userData_.primary_species_3); + pp.query("Q", userData_.Q); + + amrex::ParmParse const pp2("network"); + pp2.query("recombination_switch", userData_.recombination_switch); + + eos_init(userData_.small_temp, userData_.small_dens); + network_init(); + + userData_.r_analytical_last_t = 0.0_rt; + userData_.r_analytical_last_R = 0.0_rt; + if (amrex::ParallelDescriptor::IOProcessor()) { + std::string const filename = "stromgren_sphere_radii.csv"; + userData_.output_file_.open(filename); + userData_.output_file_ << "time,r16,r50,r84,r_analytical\n"; + } +} + +template <> AMREX_GPU_HOST_DEVICE auto RadSystem::ComputePlanckOpacity(const double /*rho*/, const double /*Tgas*/) -> amrex::Real +{ + return 0.0_rt; +} + +template <> AMREX_GPU_HOST_DEVICE auto RadSystem::ComputeFluxMeanOpacity(const double /*rho*/, const double /*Tgas*/) -> amrex::Real +{ + return 0.0_rt; +} + +template <> void QuokkaSimulation::setInitialConditionsOnGrid(quokka::grid const &grid_elem) +{ + const amrex::Box &indexRange = grid_elem.indexRange_; + const amrex::Array4 &state_cc = grid_elem.array_; + + burn_t state; + std::array numdens = {-1.0}; + for (int n = 1; n <= NumSpec; ++n) { + switch (n) { + case 1: + numdens[n - 1] = userData_.primary_species_1; + break; + case 2: + numdens[n - 1] = userData_.primary_species_2; + break; + case 3: + numdens[n - 1] = userData_.primary_species_3; + break; + default: + amrex::Abort("Cannot initialize number density for chem specie"); + break; + } + } + + state.T = userData_.temperature; + // find the density in g/cm^3 + Real rhotot = 0.0_rt; + for (int n = 0; n < NumSpec; ++n) { + state.xn[n] = numdens[n]; + rhotot += state.xn[n] * spmasses[n]; // spmasses contains the masses of all species, defined in EOS + } + state.rho = rhotot; + + // call the EOS to set initial internal energy e + eos(eos_input_rt, state); + const auto Egas0 = state.e * rhotot; + + // loop over the grid and set the initial condition + amrex::ParallelFor(indexRange, [=] AMREX_GPU_DEVICE(int i, int j, int k) { + for (int g = 0; g < Physics_Traits::nGroups; ++g) { + state_cc(i, j, k, RadSystem::radEnergy_index + Physics_NumVars::numRadVarsPerGroup * g) = 1.e-99_rt; + state_cc(i, j, k, RadSystem::x1RadFlux_index + Physics_NumVars::numRadVarsPerGroup * g) = 0.0_rt; + state_cc(i, j, k, RadSystem::x2RadFlux_index + Physics_NumVars::numRadVarsPerGroup * g) = 0.0_rt; + state_cc(i, j, k, RadSystem::x3RadFlux_index + Physics_NumVars::numRadVarsPerGroup * g) = 0.0_rt; + } + state_cc(i, j, k, RadSystem::gasEnergy_index) = Egas0; + state_cc(i, j, k, RadSystem::gasDensity_index) = rhotot; + state_cc(i, j, k, RadSystem::gasInternalEnergy_index) = Egas0; + state_cc(i, j, k, RadSystem::x1GasMomentum_index) = 0.0_rt; + state_cc(i, j, k, RadSystem::x2GasMomentum_index) = 0.0_rt; + state_cc(i, j, k, RadSystem::x3GasMomentum_index) = 0.0_rt; + for (int nn = 0; nn < NumSpec; ++nn) { + state_cc(i, j, k, HydroSystem::scalar0_index + nn) = + state.xn[nn] * spmasses[nn]; // scalar indices carry partial densities instead of number densities + } + }); +} + +template <> void QuokkaSimulation::computeAfterTimestep() +{ + if (userData_.recombination_switch == 0) { + return; + } + const int lev = 0; + const amrex::GpuArray dx = geom[lev].CellSizeArray(); + const amrex::GpuArray prob_lo = geom[lev].ProbLoArray(); + const amrex::GpuArray prob_hi = geom[lev].ProbHiArray(); + const amrex::Real xmax = std::max(std::abs(prob_lo[0]), std::abs(prob_hi[0])); + const amrex::Real ymax = std::max(std::abs(prob_lo[1]), std::abs(prob_hi[1])); + const amrex::Real zmax = std::max(std::abs(prob_lo[2]), std::abs(prob_hi[2])); + const amrex::Real rmax = std::sqrt(xmax * xmax + ymax * ymax + zmax * zmax); + + const int n_bins = + 3 * static_cast(CountCells(lev)); // The test is meant to be run with a small number of cells, so this narrowing static cast is fine. + using hist_t = int; + amrex::Gpu::DeviceVector d_hist(n_bins, static_cast(0)); + + for (amrex::MFIter mfi(state_new_cc_[lev]); mfi.isValid(); ++mfi) { + const amrex::Box &bx = mfi.validbox(); + auto const &state = state_new_cc_[lev].const_array(mfi); + auto *hist_ptr = d_hist.data(); + + amrex::ParallelFor(bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { + const amrex::Real n_HI = state(i, j, k, HydroSystem::scalar0_index + 1) / spmasses[1]; + const amrex::Real n_HII = state(i, j, k, HydroSystem::scalar0_index + 2) / spmasses[2]; + const amrex::Real denom = n_HI + n_HII; + if (denom <= 0.0_rt) { + return; + } + + const amrex::Real x_HII = n_HII / denom; + if ((x_HII < 0.01_rt) || (x_HII > 0.99_rt)) { + return; + } + + const amrex::Real x = prob_lo[0] + (static_cast(i) + 0.5_rt) * dx[0]; + const amrex::Real y = prob_lo[1] + (static_cast(j) + 0.5_rt) * dx[1]; + const amrex::Real z = prob_lo[2] + (static_cast(k) + 0.5_rt) * dx[2]; + const amrex::Real r = std::sqrt(x * x + y * y + z * z); + if (rmax <= 0.0_rt) { + return; + } + + int ibin = static_cast((r / rmax) * static_cast(n_bins)); + ibin = amrex::max(0, amrex::min(ibin, n_bins - 1)); + amrex::Gpu::Atomic::AddNoRet(&hist_ptr[ibin], static_cast(1)); + }); + } + + amrex::Gpu::streamSynchronize(); + + amrex::Gpu::HostVector h_hist(n_bins); + amrex::Gpu::copy(amrex::Gpu::deviceToHost, d_hist.begin(), d_hist.end(), h_hist.begin()); + + const int num_local = n_bins; + auto num_local_vec = amrex::ParallelDescriptor::Gather(num_local, amrex::ParallelDescriptor::IOProcessorNumber()); + + amrex::Vector recvcnt; + amrex::Vector disp; + amrex::Vector all_hist; + if (amrex::ParallelDescriptor::IOProcessor()) { + recvcnt.resize(num_local_vec.size()); + disp.resize(num_local_vec.size()); + int ntot = 0; + disp[0] = 0; + for (int i = 0, n = static_cast(num_local_vec.size()); i < n; ++i) { + ntot += num_local_vec[i]; + recvcnt[i] = num_local_vec[i]; + if (i + 1 < n) { + disp[i + 1] = disp[i] + num_local_vec[i]; + } + } + all_hist.resize(ntot); + } else { + recvcnt.resize(1); + disp.resize(1); + all_hist.resize(1); + } + + static hist_t static_hist = 0; + const hist_t *send_ptr = h_hist.empty() ? &static_hist : h_hist.data(); + hist_t *recv_ptr = all_hist.empty() ? &static_hist : all_hist.data(); + amrex::ParallelDescriptor::Gatherv(send_ptr, num_local, recv_ptr, recvcnt, disp, amrex::ParallelDescriptor::IOProcessorNumber()); + + amrex::Real r16 = std::numeric_limits::quiet_NaN(); + amrex::Real r50 = std::numeric_limits::quiet_NaN(); + amrex::Real r84 = std::numeric_limits::quiet_NaN(); + + if (amrex::ParallelDescriptor::IOProcessor()) { + amrex::Vector global_hist(n_bins, static_cast(0)); + const int n_ranks = static_cast(num_local_vec.size()); + for (int rank = 0; rank < n_ranks; ++rank) { + const int offset = disp[rank]; + for (int b = 0; b < n_bins; ++b) { + global_hist[b] += all_hist[offset + b]; + } + } + + hist_t total_count = 0; + for (int b = 0; b < n_bins; ++b) { + total_count += global_hist[b]; + } + + if (total_count == 0) { + amrex::Print() << "t = " << tNew_[lev] << ": no cells with 0.01 <= x_HII <= 0.99" << '\n'; + } else { + auto percentile_from_hist = [=](amrex::Vector const &hist, amrex::Real q) -> amrex::Real { + const amrex::Real target = q * static_cast(total_count - 1); + amrex::Real cum = 0.0_rt; + for (int b = 0; b < n_bins; ++b) { + const amrex::Real next_cum = cum + static_cast(hist[b]); + if (target < next_cum) { + const amrex::Real bin_lo = (static_cast(b) / static_cast(n_bins)) * rmax; + const amrex::Real bin_hi = (static_cast(b + 1) / static_cast(n_bins)) * rmax; + if (hist[b] <= 1) { + return 0.5_rt * (bin_lo + bin_hi); + } + const amrex::Real frac = (target - cum) / static_cast(hist[b]); + return bin_lo + frac * (bin_hi - bin_lo); + } + cum = next_cum; + } + amrex::Abort("Error in percentile_from_hist: target" + std::to_string(target) + " exceeds total count " + + std::to_string(total_count)); + return rmax; + }; + + r16 = percentile_from_hist(global_hist, 0.16_rt); + r50 = percentile_from_hist(global_hist, 0.50_rt); + r84 = percentile_from_hist(global_hist, 0.84_rt); + } + } + + amrex::ParallelDescriptor::Bcast(&r16, 1, amrex::ParallelDescriptor::IOProcessorNumber()); + amrex::ParallelDescriptor::Bcast(&r50, 1, amrex::ParallelDescriptor::IOProcessorNumber()); + amrex::ParallelDescriptor::Bcast(&r84, 1, amrex::ParallelDescriptor::IOProcessorNumber()); + + amrex::Real r_analytical = std::numeric_limits::quiet_NaN(); + if (amrex::ParallelDescriptor::IOProcessor()) { + const amrex::Real n_HI0 = userData_.primary_species_2; + const amrex::Real alpha_B = 2.6e-13; + const amrex::Real r_s = std::pow((3.0_rt * userData_.Q) / (4.0_rt * M_PI * alpha_B * n_HI0 * n_HI0), 1.0_rt / 3.0_rt); + + amrex::Real dt = tNew_[lev] - userData_.r_analytical_last_t; + if (dt < 0.0_rt) { + // time went backwards or was reset; recompute from t=0 + userData_.r_analytical_last_t = 0.0_rt; + userData_.r_analytical_last_R = 0.0_rt; + dt = tNew_[lev]; + } + const amrex::Real R0 = userData_.r_analytical_last_R; + const amrex::Real r_new = integrate_radius(dt, userData_.Q, alpha_B, n_HI0, C::c_light, R0, r_s); + userData_.r_analytical_last_t = tNew_[lev]; + userData_.r_analytical_last_R = r_new; + r_analytical = r_new; + } + amrex::ParallelDescriptor::Bcast(&r_analytical, 1, amrex::ParallelDescriptor::IOProcessorNumber()); + + userData_.t_vec_.push_back(tNew_[lev]); + userData_.r16_vec_.push_back(r16); + userData_.r50_vec_.push_back(r50); + userData_.r84_vec_.push_back(r84); + userData_.r_analytical_vec_.push_back(r_analytical); + + if (amrex::ParallelDescriptor::IOProcessor()) { + userData_.output_file_ << tNew_[lev] << ',' << r16 << ',' << r50 << ',' << r84 << ',' << r_analytical << '\n'; + } +} + +auto problem_main() -> int +{ + // Problem parameters + // const int nx = 1000; + // const double Lx = 1.0; + const double CFL_number = 0.3; + const double dt_max = 1e99; + const int max_timesteps = 5000000; + + // Problem initialization + QuokkaSimulation sim; + + // initialize + sim.setInitialConditions(); + sim.stopTime_ = sim.userData_.tend; + sim.radiationReconstructionOrder_ = 3; // PPM + sim.radiationCflNumber_ = CFL_number; + sim.maxDt_ = dt_max; + sim.maxTimesteps_ = max_timesteps; + sim.plotfileInterval_ = -1; + + int status = 0; + if (sim.userData_.recombination_switch == 0) { + const amrex::GpuArray dx = sim.geom[0].CellSizeArray(); + const amrex::Real cell_vol = AMREX_D_TERM(dx[0], *dx[1], *dx[2]); + const amrex::Real quanta = RadSystem::GetChemBandQuanta(0); + const amrex::Real n_photon_sum0 = sim.state_new_cc_[0].sum(RadSystem::radEnergy_index) / quanta; + const amrex::Real n_e_sum0 = sim.state_new_cc_[0].sum(HydroSystem::scalar0_index + 0) / C::m_e; + + sim.evolve(); + + const amrex::Real error_tol = 1e-6; + const amrex::Real n_photon_sum = sim.state_new_cc_[0].sum(RadSystem::radEnergy_index) / quanta; + const amrex::Real n_e_sum = sim.state_new_cc_[0].sum(HydroSystem::scalar0_index + 0) / C::m_e; + amrex::Print() << "Final total number of photons: " << n_photon_sum << '\n'; + amrex::Print() << "Final total number of electrons: " << n_e_sum << '\n'; + const amrex::Real n_photon_added = sim.userData_.Q * sim.userData_.tend / 8.0_rt; + const amrex::Real n_photon_inflight = (n_photon_sum - n_photon_sum0) * cell_vol; + const amrex::Real n_electron_added = (n_e_sum - n_e_sum0) * cell_vol; + const amrex::Real photon_absorbed = n_electron_added; + + amrex::Real const photon_err = std::abs((n_photon_added - (n_photon_inflight + photon_absorbed)) / n_photon_added); + if (photon_err > error_tol) { + amrex::Print() << "Test failed: Relative photon conservation error is " << photon_err << " (tolerance: " << error_tol << ")" << '\n'; + status = 1; + } else { + amrex::Print() << "Test passed: Relative photon conservation error is " << photon_err << " (tolerance: " << error_tol << ")" << '\n'; + } + } else { + sim.evolve(); + + if (amrex::ParallelDescriptor::IOProcessor()) { + const amrex::Real cell_size = sim.geom[0].CellSizeArray()[0]; + const amrex::Real error_tol = 2.0_rt * cell_size; + const amrex::GpuArray prob_lo = sim.geom[0].ProbLoArray(); + const amrex::GpuArray prob_hi = sim.geom[0].ProbHiArray(); + const amrex::Real sigma_star = sigma_star_coeff * (prob_hi[0] - prob_lo[0]); + const amrex::Real r_trunc = r_trunc_coeff * sigma_star; + for (int i = 0; i < sim.userData_.t_vec_.size(); ++i) { + const amrex::Real r50_numerical = sim.userData_.r50_vec_[i]; + const amrex::Real r16_numerical = sim.userData_.r16_vec_[i]; + const amrex::Real r84_numerical = sim.userData_.r84_vec_[i]; + // Use radius computed and stored at each timestep in computeAfterTimestep() + const amrex::Real analytical_radius = sim.userData_.r_analytical_vec_[i]; + const amrex::Real upper_bound = analytical_radius + error_tol; + const amrex::Real lower_bound = analytical_radius - error_tol; + if (((r84_numerical > upper_bound) || (r16_numerical < lower_bound)) && (analytical_radius > r_trunc)) { + amrex::Print() << "Test failed at t = " << sim.userData_.t_vec_[i] << "\n"; + amrex::Print() << "Analytical radius: " << analytical_radius << '\n'; + amrex::Print() << "Numerical r16: " << r16_numerical << '\n'; + amrex::Print() << "Numerical r50: " << r50_numerical << '\n'; + amrex::Print() << "Numerical r84: " << r84_numerical << '\n'; + amrex::Print() << "Error tolerance: " << error_tol << '\n'; + status = 1; + } + } + if (status == 0) { + amrex::Print() + << "Test passed: Numerical ionization front radii are within error tolerance of analytical solution at all output times." + << '\n'; + } + } + } + + // Cleanup and exit + amrex::Print() << "Finished." << '\n'; + return status; +} diff --git a/src/radiation/photochemistry.cpp b/src/radiation/photochemistry.cpp new file mode 100644 index 0000000000..0eda7e53ee --- /dev/null +++ b/src/radiation/photochemistry.cpp @@ -0,0 +1,18 @@ +//============================================================================== +// TwoMomentRad - a radiation transport library for patch-based AMR codes +// Copyright 2020 Benjamin Wibking. +// Released under the MIT license. See LICENSE file included in the GitHub repo. +//============================================================================== +/// \file Photochemistry.cpp +/// \brief Implements methods for primordial chemistry using Microphysics +/// + +#include "radiation/photochemistry.hpp" +#include "burn_type.H" +#include "burner.H" + +namespace quokka::photochemistry +{ + +AMREX_GPU_DEVICE void photochem_burner(burn_t &photochemstate, const Real dt) { burner(photochemstate, dt); } +} // namespace quokka::photochemistry diff --git a/src/radiation/photochemistry.hpp b/src/radiation/photochemistry.hpp new file mode 100644 index 0000000000..0740cc98a4 --- /dev/null +++ b/src/radiation/photochemistry.hpp @@ -0,0 +1,157 @@ +#ifndef PHOTOCHEMISTRY_HPP_ // NOLINT +#define PHOTOCHEMISTRY_HPP_ + +#include +#include + +#include "AMReX.H" +#include "AMReX_BLassert.H" +#include "AMReX_GpuQualifiers.H" + +#include "physics_info.hpp" +#include "radiation/radiation_system.hpp" + +#ifdef PHOTOCHEMISTRY +#include "actual_eos_data.H" +#include "burn_type.H" +#include "eos.H" +#include "extern_parameters.H" +#include "network_properties.H" +#include "physics_numVars.hpp" + +namespace quokka::photochemistry +{ +AMREX_GPU_DEVICE void photochem_burner(burn_t &photochemstate, Real dt); + +template +auto computePhotoChemistry(amrex::MultiFab &mf, const Real dt, const int stage, const Real max_density_allowed, const Real min_density_allowed) -> bool +{ + AMREX_ASSERT(stage == 1 || stage == 2); + // Start off by assuming a successful burn. + int photochem_burn_success = 1; + + amrex::Gpu::Buffer d_num_failed({0}); + auto *p_num_failed = d_num_failed.data(); + + int num_failed = 0; + + auto dt_stage = dt / static_cast(stage); + auto energy_update_factor = static_cast(stage); + + const BL_PROFILE("PhotoChemistry::computePhotoChemistry()"); + for (amrex::MFIter iter(mf); iter.isValid(); ++iter) { + const amrex::Box &indexRange = iter.validbox(); + auto const &state = mf.array(iter); + + amrex::ParallelFor(indexRange, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { + const Real rho = state(i, j, k, RadSystem::gasDensity_index); + const Real xmom = state(i, j, k, RadSystem::x1GasMomentum_index); + const Real ymom = state(i, j, k, RadSystem::x2GasMomentum_index); + const Real zmom = state(i, j, k, RadSystem::x3GasMomentum_index); + const Real Ener = state(i, j, k, RadSystem::gasEnergy_index); + const Real Eint = RadSystem::ComputeEintFromEgas(rho, xmom, ymom, zmom, Ener); + + Real quanta_energy = 0.0_rt; + burn_t photochemstate; + photochemstate.success = true; + int burn_failed = 0; + photochemstate.c_hat = RadSystem_Traits::c_hat_over_c * C::c_light; + for (int nn = 0; nn < NumSpec; ++nn) { + photochemstate.xn[nn] = state(i, j, k, RadSystem::scalar0_index + nn) / spmasses[nn]; + } + for (int nn = 0; nn < NumChemBands; ++nn) { + quanta_energy = RadSystem::GetChemBandQuanta(nn); + photochemstate.rn[0 + MicrophysicsNumRadVarsPerGroup * nn] = + state(i, j, k, RadSystem::radEnergy_index + Physics_NumVars::numRadVarsPerGroup * nn) / quanta_energy; + // // TODO(james471): Add check for isotropy + photochemstate.rn[1 + MicrophysicsNumRadVarsPerGroup * nn] = 1.0_rt; + } + photochemstate.rho = rho; + photochemstate.e = Eint / rho; + + // dont do photochemistry in cells with densities below the minimum density specified + if (rho < min_density_allowed) { + return; + } + // stop the test if we have reached very high densities + if (rho > max_density_allowed) { + amrex::Abort("Density exceeded max_density_allowed!"); + } + + // call the EOS to set the temperature + eos(eos_input_re, photochemstate); + + // do the actual integration + // do it in .cpp so that it is not built at compile time for all tests + // which would otherwise slow down compilation due to the large RHS file + photochem_burner(photochemstate, dt_stage); + + if (std::isnan(photochemstate.xn[0]) || std::isnan(photochemstate.rho) || std::isnan(photochemstate.rn[0])) { + amrex::Abort("Burner returned NAN"); + } + + if (!photochemstate.success) { + burn_failed = 1; + } + + if (burn_failed) { + amrex::Gpu::Atomic::Add(p_num_failed, burn_failed); + } + + // Ensure positivity + for (double &nn : photochemstate.xn) { + nn = amrex::max(nn, small_x); + } + for (int nn = 0; nn < NumChemBands; nn += 1) { + // TODO (james471): Ensure that flux doesn't deviate from the corresponding energy density. + photochemstate.rn[static_cast(nn) * MicrophysicsNumRadVarsPerGroup] = + amrex::max(photochemstate.rn[static_cast(nn) * MicrophysicsNumRadVarsPerGroup], small_x); + } + + // get the updated specific eint + eos(eos_input_re, photochemstate); + + for (int nn = 0; nn < NumSpec; ++nn) { + state(i, j, k, RadSystem::scalar0_index + nn) = photochemstate.xn[nn] * spmasses[nn]; + } + for (int nn = 0; nn < NumChemBands; ++nn) { + quanta_energy = RadSystem::GetChemBandQuanta(nn); + state(i, j, k, RadSystem::radEnergy_index + Physics_NumVars::numRadVarsPerGroup * nn) = + photochemstate.rn[0 + MicrophysicsNumRadVarsPerGroup * nn] * quanta_energy; + state(i, j, k, RadSystem::x1RadFlux_index + Physics_NumVars::numRadVarsPerGroup * nn) = + photochemstate.rn[1 + MicrophysicsNumRadVarsPerGroup * nn] * + state(i, j, k, RadSystem::x1RadFlux_index + Physics_NumVars::numRadVarsPerGroup * nn); + state(i, j, k, RadSystem::x2RadFlux_index + Physics_NumVars::numRadVarsPerGroup * nn) = + photochemstate.rn[1 + MicrophysicsNumRadVarsPerGroup * nn] * + state(i, j, k, RadSystem::x2RadFlux_index + Physics_NumVars::numRadVarsPerGroup * nn); + state(i, j, k, RadSystem::x3RadFlux_index + Physics_NumVars::numRadVarsPerGroup * nn) = + photochemstate.rn[1 + MicrophysicsNumRadVarsPerGroup * nn] * + state(i, j, k, RadSystem::x3RadFlux_index + Physics_NumVars::numRadVarsPerGroup * nn); + } + // Quokka uses rho*eint + const Real dEint = (photochemstate.e * photochemstate.rho) - Eint; + state(i, j, k, RadSystem::gasInternalEnergy_index) += dEint * energy_update_factor; + state(i, j, k, RadSystem::gasEnergy_index) += dEint * energy_update_factor; + }); + +#ifdef AMREX_USE_HIP + amrex::Gpu::streamSynchronize(); // otherwise HIP may fail to allocate the necessary resources. +#endif + } + + num_failed = *(d_num_failed.copyToHost()); + + photochem_burn_success = num_failed == 0; + amrex::ParallelDescriptor::ReduceIntMin(photochem_burn_success); + + if (!photochem_burn_success) { + amrex::Abort("Burn failed in VODE. Aborting."); + } + + return photochem_burn_success; +} + +} // namespace quokka::photochemistry +#endif + +#endif \ No newline at end of file diff --git a/src/radiation/radiation_system.hpp b/src/radiation/radiation_system.hpp index 64896b685a..4f581e6ecb 100644 --- a/src/radiation/radiation_system.hpp +++ b/src/radiation/radiation_system.hpp @@ -258,6 +258,10 @@ template class RadSystem : public HyperbolicSystem amrex::Real; +#endif + static void ComputeMaxSignalSpeed(amrex::Array4 const &cons, array_t &maxSignal, amrex::Box const &indexRange); static void ConservedToPrimitive(amrex::Array4 const &cons, array_t &primVar, amrex::Box const &indexRange); @@ -647,6 +651,16 @@ void RadSystem::ConservedToPrimitive(amrex::Array4 }); } +#ifdef PHOTOCHEMISTRY +template AMREX_GPU_HOST_DEVICE auto RadSystem::GetChemBandQuanta(int group_index) -> amrex::Real +{ + auto const freq_bounds = RadSystem_Traits::ChemBands(); + amrex::Real freq_low = freq_bounds[group_index]; + amrex::Real freq_high = freq_bounds[group_index + 1]; + return 0.5_rt * (freq_high + freq_low) * C::hplanck; +} +#endif + template void RadSystem::ComputeMaxSignalSpeed(amrex::Array4 const & /*cons*/, array_t &maxSignal, amrex::Box const &indexRange) {