From cec1670302a97a8fe46ad5afd3d4c2922fb8a75c Mon Sep 17 00:00:00 2001 From: albert-de-montserrat Date: Thu, 28 Nov 2024 14:31:45 +0100 Subject: [PATCH 1/3] optimize BFGS for Spinel --- GradientBasedMinimizers/Manifest.toml | 433 ++++++++++-------- GradientBasedMinimizers/Project.toml | 2 + .../functions/figures/figures.jl | 16 +- .../functions/gradient_method.jl | 20 +- .../functions/phases/spn.jl | 239 +++++----- .../unconstrained_CG_BFGS/nullMin.jl | 86 ++-- 6 files changed, 445 insertions(+), 351 deletions(-) diff --git a/GradientBasedMinimizers/Manifest.toml b/GradientBasedMinimizers/Manifest.toml index f6a7c3a..7b2361e 100644 --- a/GradientBasedMinimizers/Manifest.toml +++ b/GradientBasedMinimizers/Manifest.toml @@ -1,15 +1,16 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.10.4" +julia_version = "1.11.1" manifest_format = "2.0" -project_hash = "43b6d2feac71aa8fe84097851be45beb125d72cf" +project_hash = "868989f1925e8378bcc866c196ed3bbba5f5dcaf" [[deps.ArgTools]] uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.1" +version = "1.1.2" [[deps.Artifacts]] uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" +version = "1.11.0" [[deps.AssetRegistry]] deps = ["Distributed", "JSON", "Pidfile", "SHA", "Test"] @@ -19,6 +20,7 @@ version = "0.1.0" [[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +version = "1.11.0" [[deps.BenchmarkTools]] deps = ["JSON", "Logging", "Printf", "Profile", "Statistics", "UUIDs"] @@ -39,9 +41,9 @@ version = "0.12.9" [[deps.Bzip2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "9e2a6b69137e6969bab0152632dcb3bc108c8bdd" +git-tree-sha1 = "8873e196c2eb87962a2048b3b8e08946535864a1" uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" -version = "1.0.8+1" +version = "1.0.8+2" [[deps.CEnum]] git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" @@ -50,39 +52,43 @@ version = "0.4.2" [[deps.CSV]] deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] -git-tree-sha1 = "6c834533dc1fabd820c1db03c839bf97e45a3fab" +git-tree-sha1 = "deddd8725e5e1cc49ee205a1964256043720a6c3" uuid = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" -version = "0.10.14" +version = "0.10.15" [[deps.Cairo_jll]] deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "a2f1c8c668c8e3cb4cca4e57a8efdb09067bb3fd" +git-tree-sha1 = "009060c9a6168704143100f36ab08f06c2af4642" uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" -version = "1.18.0+2" +version = "1.18.2+1" [[deps.CodecZlib]] deps = ["TranscodingStreams", "Zlib_jll"] -git-tree-sha1 = "b8fe8546d52ca154ac556809e10c75e6e7430ac8" +git-tree-sha1 = "bce6804e5e6044c6daab27bb533d1295e4a2e759" uuid = "944b1d66-785c-5afd-91f1-9de20f533193" -version = "0.7.5" +version = "0.7.6" [[deps.ColorSchemes]] deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] -git-tree-sha1 = "b5278586822443594ff615963b0c09755771b3e0" +git-tree-sha1 = "c785dfb1b3bfddd1da557e861b919819b82bbe5b" uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" -version = "3.26.0" +version = "3.27.1" [[deps.ColorTypes]] deps = ["FixedPointNumbers", "Random"] -git-tree-sha1 = "b10d0b65641d57b8b4d5e234446582de5047050d" +git-tree-sha1 = "c7acce7a7e1078a20a285211dd73cd3941a871d6" uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" -version = "0.11.5" +version = "0.12.0" +weakdeps = ["StyledStrings"] + + [deps.ColorTypes.extensions] + StyledStringsExt = "StyledStrings" [[deps.ColorVectorSpace]] deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] -git-tree-sha1 = "a1f44953f2382ebb937d60dafbe2deea4bd23249" +git-tree-sha1 = "8b3b6f87ce8f65a2b4f857528fd8d70086cd72b1" uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" -version = "0.10.0" +version = "0.11.0" [deps.ColorVectorSpace.extensions] SpecialFunctionsExt = "SpecialFunctions" @@ -92,15 +98,15 @@ version = "0.10.0" [[deps.Colors]] deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] -git-tree-sha1 = "362a287c3aa50601b0bc359053d5c2468f0e7ce0" +git-tree-sha1 = "64e15186f0aa277e174aa81798f7eb8598e0157e" uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" -version = "0.12.11" +version = "0.13.0" [[deps.Compat]] deps = ["TOML", "UUIDs"] -git-tree-sha1 = "b1c55339b7c6c350ee89f2c1604299660525b248" +git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215" uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.15.0" +version = "4.16.0" weakdeps = ["Dates", "LinearAlgebra"] [deps.Compat.extensions] @@ -133,10 +139,10 @@ 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", "REPL", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] -git-tree-sha1 = "04c738083f29f86e62c8afc341f0967d8717bdb8" +deps = ["Compat", "DataAPI", "DataStructures", "Future", "InlineStrings", "InvertedIndices", "IteratorInterfaceExtensions", "LinearAlgebra", "Markdown", "Missings", "PooledArrays", "PrecompileTools", "PrettyTables", "Printf", "Random", "Reexport", "SentinelArrays", "SortingAlgorithms", "Statistics", "TableTraits", "Tables", "Unicode"] +git-tree-sha1 = "fb61b4812c49343d7ef0b533ba982c46021938a6" uuid = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" -version = "1.6.1" +version = "1.7.0" [[deps.DataStructures]] deps = ["Compat", "InteractiveUtils", "OrderedCollections"] @@ -152,6 +158,13 @@ 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 = "fc173b380865f70627d7dd1190dc2fce6cc105af" +uuid = "ee1fde0b-3d02-5ea6-8484-8dfef6360eab" +version = "1.14.10+0" [[deps.DelimitedFiles]] deps = ["Mmap"] @@ -162,6 +175,7 @@ version = "1.9.1" [[deps.Distributed]] deps = ["Random", "Serialization", "Sockets"] uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" +version = "1.11.0" [[deps.DocStringExtensions]] deps = ["LibGit2"] @@ -182,21 +196,21 @@ version = "0.0.20230411+0" [[deps.ExceptionUnwrapping]] deps = ["Test"] -git-tree-sha1 = "dcb08a0d93ec0b1cdc4af184b26b591e9695423a" +git-tree-sha1 = "d36f682e590a83d63d1c7dbd287573764682d12a" uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" -version = "0.1.10" +version = "0.1.11" [[deps.Expat_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1c6317308b9dc757616f0b5cb379db10494443a7" +git-tree-sha1 = "cc5231d52eb1771251fbd37171dbc408bcc8a1b6" uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.6.2+0" +version = "2.6.4+0" [[deps.FFMPEG]] deps = ["FFMPEG_jll"] -git-tree-sha1 = "b57e3acbe22f8484b4b5ff66a7499717fe1a9cc8" +git-tree-sha1 = "53ebe7511fa11d33bec688a9178fac4e49eeee00" uuid = "c87230d0-a227-11e9-1b43-d7ebe4e7570a" -version = "0.4.1" +version = "0.4.2" [[deps.FFMPEG_jll]] deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] @@ -205,13 +219,19 @@ uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" version = "4.4.4+1" [[deps.FilePathsBase]] -deps = ["Compat", "Dates", "Mmap", "Printf", "Test", "UUIDs"] -git-tree-sha1 = "9f00e42f8d99fdde64d40c8ea5d14269a2e2c1aa" +deps = ["Compat", "Dates"] +git-tree-sha1 = "7878ff7172a8e6beedd1dea14bd27c3c6340d361" uuid = "48062228-2e41-5def-b9a4-89aafe57970f" -version = "0.9.21" +version = "0.9.22" +weakdeps = ["Mmap", "Test"] + + [deps.FilePathsBase.extensions] + FilePathsBaseMmapExt = "Mmap" + FilePathsBaseTestExt = "Test" [[deps.FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" +version = "1.11.0" [[deps.FixedPointNumbers]] deps = ["Statistics"] @@ -232,9 +252,9 @@ version = "1.3.7" [[deps.FreeType2_jll]] deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "5c1d8ae0efc6c2e7b1fc502cbe25def8f661b7bc" +git-tree-sha1 = "fa8e19f44de37e225aa0f1695bc223b05ed51fb4" uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" -version = "2.13.2+0" +version = "2.13.3+0" [[deps.FriBidi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -251,24 +271,25 @@ version = "0.5.0" [[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", "xkbcommon_jll"] -git-tree-sha1 = "3f74912a156096bd8fdbef211eff66ab446e7297" +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 = "532f9126ad901533af1d4f5c198867227a7bb077" uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" -version = "3.4.0+0" +version = "3.4.0+1" [[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 = "629693584cef594c3f6f99e76e7a7ad17e60e8d5" +git-tree-sha1 = "ee28ddcd5517d54e417182fec3886e7412d3926f" uuid = "28b8d3ca-fb5f-59d9-8090-bfdbd6d07a71" -version = "0.73.7" +version = "0.73.8" [[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 = "a8863b69c2a0859f2c2c87ebdc4c6712e88bdf0d" +git-tree-sha1 = "f31929b9e67066bee48eec8b03c0df47d31a74b3" uuid = "d2c73de3-f751-5644-a686-071e5b155ba9" -version = "0.73.7+0" +version = "0.73.8+0" [[deps.Gettext_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] @@ -278,15 +299,15 @@ version = "0.21.0+0" [[deps.Glib_jll]] deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] -git-tree-sha1 = "7c82e6a6cd34e9d935e9aa4051b66c6ff3af59ba" +git-tree-sha1 = "b36c7e110080ae48fdef61b0c31e6b17ada23b33" uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" -version = "2.80.2+0" +version = "2.82.2+0" [[deps.Graphite2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +git-tree-sha1 = "01979f9b37367603e2848ea225918a3b3861b606" uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" -version = "1.3.14+0" +version = "1.3.14+1" [[deps.Grisu]] git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" @@ -294,16 +315,16 @@ uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" version = "1.0.2" [[deps.HTTP]] -deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] -git-tree-sha1 = "d1d712be3164d61d1fb98e7ce9bcbc6cc06b45ed" +deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "PrecompileTools", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] +git-tree-sha1 = "ae350b8225575cc3ea385d4131c81594f86dfe4f" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" -version = "1.10.8" +version = "1.10.12" [[deps.HarfBuzz_jll]] -deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] -git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll"] +git-tree-sha1 = "401e4f3f30f43af2c8478fc008da50096ea5240f" uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" -version = "2.8.1+1" +version = "8.3.1+0" [[deps.Hiccup]] deps = ["MacroTools", "Test"] @@ -313,9 +334,9 @@ version = "0.2.2" [[deps.Hwloc_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "5e19e1e4fa3e71b774ce746274364aef0234634e" +git-tree-sha1 = "50aedf345a709ab75872f80a2779568dc0bb461b" uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" -version = "2.11.1+0" +version = "2.11.2+1" [[deps.InlineStrings]] git-tree-sha1 = "45521d31238e87ee9f9732561bfee12d4eebd52d" @@ -333,6 +354,7 @@ version = "1.4.2" [[deps.InteractiveUtils]] deps = ["Markdown"] uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" +version = "1.11.0" [[deps.InvertedIndices]] git-tree-sha1 = "0dc7b50b8d436461be01300fd8cd45aa0274b038" @@ -351,15 +373,15 @@ version = "1.0.0" [[deps.JLFzf]] deps = ["Pipe", "REPL", "Random", "fzf_jll"] -git-tree-sha1 = "a53ebe394b71470c7f97c2e7e170d51df21b17af" +git-tree-sha1 = "71b48d857e86bf7a1838c4736545699974ce79a2" uuid = "1019f520-868f-41f5-a6de-eb00f4b6a39c" -version = "0.1.7" +version = "0.1.9" [[deps.JLLWrappers]] deps = ["Artifacts", "Preferences"] -git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" +git-tree-sha1 = "be3dc50a92e5a386872a493a10050136d4703f9b" uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.5.0" +version = "1.6.1" [[deps.JSExpr]] deps = ["JSON", "MacroTools", "Observables", "WebIO"] @@ -375,9 +397,9 @@ version = "0.21.4" [[deps.JpegTurbo_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "c84a835e1a09b289ffcd2271bf2a337bbdda6637" +git-tree-sha1 = "25ee0be4d43d0269027024d75a24c24d6c6e590c" uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" -version = "3.0.3+0" +version = "3.0.4+0" [[deps.Kaleido_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -392,40 +414,42 @@ uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" version = "3.100.2+0" [[deps.LERC_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "bf36f528eec6634efc60d7ec062008f171071434" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "36bdbc52f13a7d1dcb0f3cd694e01677a515655b" uuid = "88015f11-f218-50d7-93a8-a6af411a945d" -version = "3.0.0+1" +version = "4.0.0+0" [[deps.LLVMOpenMP_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "d986ce2d884d49126836ea94ed5bfb0f12679713" +git-tree-sha1 = "78211fb6cbc872f77cad3fc0b6cf647d923f4929" uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" -version = "15.0.7+0" +version = "18.1.7+0" [[deps.LZO_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "70c5da094887fd2cae843b8db33920bac4b6f07d" +git-tree-sha1 = "854a9c268c43b77b0a27f22d7fab8d33cdb3a731" uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" -version = "2.10.2+0" +version = "2.10.2+1" [[deps.LaTeXStrings]] -git-tree-sha1 = "50901ebc375ed41dbf8058da26f9de442febbbec" +git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c" uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" -version = "1.3.1" +version = "1.4.0" [[deps.Latexify]] deps = ["Format", "InteractiveUtils", "LaTeXStrings", "MacroTools", "Markdown", "OrderedCollections", "Requires"] -git-tree-sha1 = "5b0d630f3020b82c0775a51d05895852f8506f50" +git-tree-sha1 = "ce5f5621cac23a86011836badfedf664a612cee4" uuid = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" -version = "0.16.4" +version = "0.16.5" [deps.Latexify.extensions] DataFramesExt = "DataFrames" + SparseArraysExt = "SparseArrays" SymEngineExt = "SymEngine" [deps.Latexify.weakdeps] DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" SymEngine = "123dc426-2d89-5057-bbad-38513e3affd8" [[deps.Lazy]] @@ -437,6 +461,7 @@ version = "0.15.1" [[deps.LazyArtifacts]] deps = ["Artifacts", "Pkg"] uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" +version = "1.11.0" [[deps.LibCURL]] deps = ["LibCURL_jll", "MozillaCACerts_jll"] @@ -446,16 +471,17 @@ version = "0.6.4" [[deps.LibCURL_jll]] deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.4.0+0" +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.6.4+0" +version = "1.7.2+0" [[deps.LibSSH2_jll]] deps = ["Artifacts", "Libdl", "MbedTLS_jll"] @@ -464,6 +490,7 @@ version = "1.11.0+1" [[deps.Libdl]] uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +version = "1.11.0" [[deps.Libffi_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -473,9 +500,9 @@ version = "3.2.2+1" [[deps.Libgcrypt_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll"] -git-tree-sha1 = "9fd170c4bbfd8b935fdc5f8b7aa33532c991a673" +git-tree-sha1 = "8be878062e0ffa2c3f67bb58a595375eda5de80b" uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" -version = "1.8.11+0" +version = "1.11.0+0" [[deps.Libglvnd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] @@ -485,37 +512,38 @@ version = "1.6.0+0" [[deps.Libgpg_error_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "fbb1f2bef882392312feb1ede3615ddc1e9b99ed" +git-tree-sha1 = "c6ce1e19f3aec9b59186bdf06cdf3c4fc5f5f3e6" uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" -version = "1.49.0+0" +version = "1.50.0+0" [[deps.Libiconv_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175" +git-tree-sha1 = "61dfdba58e585066d8bce214c5a51eaa0539f269" uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" -version = "1.17.0+0" +version = "1.17.0+1" [[deps.Libmount_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "0c4f9c4f1a50d8f35048fa0532dabbadf702f81e" +git-tree-sha1 = "84eef7acd508ee5b3e956a2ae51b05024181dee0" uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" -version = "2.40.1+0" +version = "2.40.2+0" [[deps.Libtiff_jll]] deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "LERC_jll", "Libdl", "XZ_jll", "Zlib_jll", "Zstd_jll"] -git-tree-sha1 = "2da088d113af58221c52828a80378e16be7d037a" +git-tree-sha1 = "b404131d06f7886402758c9ce2214b636eb4d54a" uuid = "89763e89-9b03-5906-acba-b20f662cd828" -version = "4.5.1+1" +version = "4.7.0+0" [[deps.Libuuid_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "5ee6203157c120d79034c748a2acba45b82b8807" +git-tree-sha1 = "edbf5309f9ddf1cab25afc344b1e8150b7c832f9" uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" -version = "2.40.1+0" +version = "2.40.2+0" [[deps.LinearAlgebra]] deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +version = "1.11.0" [[deps.LogExpFunctions]] deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] @@ -535,30 +563,31 @@ version = "0.3.28" [[deps.Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" +version = "1.11.0" [[deps.LoggingExtras]] deps = ["Dates", "Logging"] -git-tree-sha1 = "c1dd6d7978c12545b4179fb6153b9250c96b0075" +git-tree-sha1 = "f02b56007b064fbfddb4c9cd60161b6dd0f40df3" uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" -version = "1.0.3" +version = "1.1.0" [[deps.MAGEMin_C]] deps = ["CEnum", "CSV", "DataFrames", "Dates", "Libdl", "MAGEMin_jll", "ProgressMeter", "Test"] -git-tree-sha1 = "bb6003bf4e8018d0128d92639a7f5c9c0a5024c3" +git-tree-sha1 = "0413a43672d7ee6cdc7df169c2705d51f4146561" uuid = "e5d170eb-415a-4524-987b-12f1bce1ddab" -version = "1.5.4" +version = "1.6.3" [[deps.MAGEMin_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "NLopt_jll", "OpenBLAS32_jll", "OpenMPI_jll", "TOML"] -git-tree-sha1 = "cd1a0c9eda064f789305723c6eebb2603c5e2769" +git-tree-sha1 = "3807d57893bf2deabe9d12c897701e58a7febcf3" uuid = "763ebaa8-b0d2-5f6b-90ef-4fc23b5db1c4" -version = "1.5.0+0" +version = "1.5.9+0" [[deps.MPICH_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "19d4bd098928a3263693991500d05d74dbdc2004" +git-tree-sha1 = "7715e65c47ba3941c502bffb7f266a41a7f54423" uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" -version = "4.2.2+0" +version = "4.2.3+0" [[deps.MPIPreferences]] deps = ["Libdl", "Preferences"] @@ -568,9 +597,9 @@ version = "0.1.11" [[deps.MPItrampoline_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "8c35d5420193841b2f367e658540e8d9e0601ed0" +git-tree-sha1 = "70e830dab5d0775183c99fc75e4c24c614ed7142" uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" -version = "5.4.0+0" +version = "5.5.1+0" [[deps.MacroTools]] deps = ["Markdown", "Random"] @@ -581,6 +610,7 @@ version = "0.5.13" [[deps.Markdown]] deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" +version = "1.11.0" [[deps.MbedTLS]] deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] @@ -591,7 +621,7 @@ version = "1.1.9" [[deps.MbedTLS_jll]] deps = ["Artifacts", "Libdl"] uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.2+1" +version = "2.28.6+0" [[deps.Measures]] git-tree-sha1 = "c13304c81eec1ed3af7fc20e75fb6b26092a1102" @@ -600,9 +630,9 @@ version = "0.3.2" [[deps.MicrosoftMPI_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "f12a29c4400ba812841c6ace3f4efbb6dbb3ba01" +git-tree-sha1 = "bc95bf4149bf535c09602e3acdf950d9b4376227" uuid = "9237b28f-5490-5468-be7b-bb81f5f5e6cf" -version = "10.1.4+2" +version = "10.1.4+3" [[deps.Missings]] deps = ["DataAPI"] @@ -612,16 +642,22 @@ version = "1.2.0" [[deps.Mmap]] uuid = "a63ad114-7e13-5084-954f-fe012c677804" +version = "1.11.0" [[deps.MozillaCACerts_jll]] uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2023.1.10" +version = "2023.12.12" + +[[deps.MuladdMacro]] +git-tree-sha1 = "cac9cc5499c25554cba55cd3c30543cff5ca4fab" +uuid = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221" +version = "0.2.4" [[deps.Mustache]] deps = ["Printf", "Tables"] -git-tree-sha1 = "a7cefa21a2ff993bff0456bf7521f46fc077ddf1" +git-tree-sha1 = "3b2db451a872b20519ebb0cec759d3d81a1c6bcb" uuid = "ffc61752-8dc7-55ee-8c37-f3e9cdd09e70" -version = "1.0.19" +version = "1.0.20" [[deps.Mux]] deps = ["AssetRegistry", "Base64", "HTTP", "Hiccup", "MbedTLS", "Pkg", "Sockets"] @@ -630,10 +666,10 @@ uuid = "a975b10e-0019-58db-a62f-e48ff68538c9" version = "1.0.2" [[deps.NLopt_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "9b1f15a08f9d00cdb2761dcfa6f453f5d0d6f973" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "3d1eefa627faeabc59ab9edbf00d17f70123ad69" uuid = "079eb43e-fd8e-5478-9966-2cf3e3edb778" -version = "2.7.1+0" +version = "2.8.0+0" [[deps.NaNMath]] deps = ["OpenLibm_jll"] @@ -658,14 +694,14 @@ version = "1.3.5+1" [[deps.OpenBLAS32_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] -git-tree-sha1 = "6065c4cff8fee6c6770b277af45d5082baacdba1" +git-tree-sha1 = "dd806c813429ff09878ea3eeb317818f3ca02871" uuid = "656ef2d0-ae68-5445-9ca0-591084a874a2" -version = "0.3.24+0" +version = "0.3.28+3" [[deps.OpenBLAS_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.23+4" +version = "0.3.27+1" [[deps.OpenLibm_jll]] deps = ["Artifacts", "Libdl"] @@ -674,9 +710,9 @@ version = "0.8.1+2" [[deps.OpenMPI_jll]] deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML", "Zlib_jll"] -git-tree-sha1 = "2f0a1d8c79bc385ec3fcda12830c9d0e72b30e71" +git-tree-sha1 = "2dace87e14256edb1dd0724ab7ba831c779b96bd" uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" -version = "5.0.4+0" +version = "5.0.6+0" [[deps.OpenSSL]] deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "OpenSSL_jll", "Sockets"] @@ -686,26 +722,32 @@ version = "1.4.3" [[deps.OpenSSL_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "a028ee3cb5641cccc4c24e90c36b0a4f7707bdf5" +git-tree-sha1 = "7493f61f55a6cce7325f197443aa80d32554ba10" uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.0.14+0" +version = "3.0.15+1" [[deps.Opus_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6703a85cb3781bd5909d48730a67205f3f31a575" uuid = "91d4177d-7536-5919-b921-800302f37372" -version = "1.3.2+0" +version = "1.3.3+0" [[deps.OrderedCollections]] -git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" +git-tree-sha1 = "12f1439c4f986bb868acda6ea33ebc78e19b95ad" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.6.3" +version = "1.7.0" [[deps.PCRE2_jll]] deps = ["Artifacts", "Libdl"] uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" version = "10.42.0+1" +[[deps.Pango_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e127b609fb9ecba6f201ba7ab753d5a605d53801" +uuid = "36c8627f-9965-5494-a995-c6b170f724f3" +version = "1.54.1+0" + [[deps.Parameters]] deps = ["OrderedCollections", "UnPack"] git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" @@ -736,21 +778,25 @@ uuid = "30392449-352a-5448-841d-b1acce4e97dc" version = "0.43.4+0" [[deps.Pkg]] -deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +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.10.0" +version = "1.11.0" +weakdeps = ["REPL"] + + [deps.Pkg.extensions] + REPLExt = "REPL" [[deps.PlotThemes]] deps = ["PlotUtils", "Statistics"] -git-tree-sha1 = "6e55c6841ce3411ccb3457ee52fc48cb698d6fb0" +git-tree-sha1 = "41031ef3a1be6f5bbbf3e8073f210556daeae5ca" uuid = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" -version = "3.2.0" +version = "3.3.0" [[deps.PlotUtils]] -deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "Statistics"] -git-tree-sha1 = "7b1a9df27f072ac4c9c7cbe5efb198489258d1f5" +deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "StableRNGs", "Statistics"] +git-tree-sha1 = "3ca9a356cd2e113c420f2c13bea19f8d3fb1cb18" uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" -version = "1.4.1" +version = "1.4.3" [[deps.PlotlyBase]] deps = ["ColorSchemes", "Dates", "DelimitedFiles", "DocStringExtensions", "JSON", "LaTeXStrings", "Logging", "Parameters", "Pkg", "REPL", "Requires", "Statistics", "UUIDs"] @@ -760,9 +806,9 @@ version = "0.8.19" [[deps.PlotlyJS]] deps = ["Base64", "Blink", "DelimitedFiles", "JSExpr", "JSON", "Kaleido_jll", "Markdown", "Pkg", "PlotlyBase", "PlotlyKaleido", "REPL", "Reexport", "Requires", "WebIO"] -git-tree-sha1 = "e62d886d33b81c371c9d4e2f70663c0637f19459" +git-tree-sha1 = "e415b25fdec06e57590a7d5ac8e0cf662fa317e2" uuid = "f0f68f2c-4968-5e81-91da-67840de0976a" -version = "0.18.13" +version = "0.18.15" [deps.PlotlyJS.extensions] CSVExt = "CSV" @@ -778,15 +824,15 @@ version = "0.18.13" [[deps.PlotlyKaleido]] deps = ["Base64", "JSON", "Kaleido_jll"] -git-tree-sha1 = "2650cd8fb83f73394996d507b3411a7316f6f184" +git-tree-sha1 = "3210de4d88af7ca5de9e26305758a59aabc48aac" uuid = "f2990250-8cf9-495f-b13a-cce12b45703c" -version = "2.2.4" +version = "2.2.5" [[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", "UnitfulLatexify", "Unzip"] -git-tree-sha1 = "082f0c4b70c202c37784ce4bfbc33c9f437685bf" +git-tree-sha1 = "dae01f8c2e069a683d3a6e17bbae5070ab94786f" uuid = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" -version = "1.40.5" +version = "1.40.9" [deps.Plots.extensions] FileIOExt = "FileIO" @@ -822,17 +868,18 @@ version = "1.4.3" [[deps.PrettyTables]] deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] -git-tree-sha1 = "66b20dd35966a748321d3b2537c4584cf40387c7" +git-tree-sha1 = "1101cd475833706e4d0e7b122218257178f48f34" uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -version = "2.3.2" +version = "2.4.0" [[deps.Printf]] deps = ["Unicode"] uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" +version = "1.11.0" [[deps.Profile]] -deps = ["Printf"] uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" +version = "1.11.0" [[deps.ProgressMeter]] deps = ["Distributed", "Printf"] @@ -865,12 +912,14 @@ uuid = "e99dba38-086e-5de3-a5b1-6e4c66e897c3" version = "6.7.1+1" [[deps.REPL]] -deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +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"] @@ -913,12 +962,13 @@ version = "1.2.1" [[deps.SentinelArrays]] deps = ["Dates", "Random"] -git-tree-sha1 = "ff11acffdb082493657550959d4feb4b6149e73a" +git-tree-sha1 = "d0553ce4031a081cc42387a9b9c8441b7d99f32d" uuid = "91c51154-3ec4-41a3-a24f-3f23e20d615c" -version = "1.4.5" +version = "1.4.7" [[deps.Serialization]] uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" +version = "1.11.0" [[deps.Showoff]] deps = ["Dates", "Grisu"] @@ -927,12 +977,13 @@ uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" version = "1.0.3" [[deps.SimpleBufferStream]] -git-tree-sha1 = "874e8867b33a00e784c8a7e4b60afe9e037b74e1" +git-tree-sha1 = "f305871d2f381d21527c770d4788c06c097c9bc1" uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" -version = "1.1.0" +version = "1.2.0" [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" +version = "1.11.0" [[deps.SortingAlgorithms]] deps = ["DataStructures"] @@ -943,13 +994,19 @@ version = "1.2.1" [[deps.SparseArrays]] deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" -version = "1.10.0" +version = "1.11.0" + +[[deps.StableRNGs]] +deps = ["Random"] +git-tree-sha1 = "83e6cce8324d49dfaf9ef059227f91ed4441a8e5" +uuid = "860ef19b-820b-49d6-a774-d7a799459cd3" +version = "1.0.2" [[deps.StaticArrays]] deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] -git-tree-sha1 = "eeafab08ae20c62c44c8399ccb9354a04b80db50" +git-tree-sha1 = "777657803913ffc7e8cc20f0fd04b634f871af8f" uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.9.7" +version = "1.9.8" [deps.StaticArrays.extensions] StaticArraysChainRulesCoreExt = "ChainRulesCore" @@ -965,9 +1022,14 @@ uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" version = "1.4.3" [[deps.Statistics]] -deps = ["LinearAlgebra", "SparseArrays"] +deps = ["LinearAlgebra"] +git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0" uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" -version = "1.10.0" +version = "1.11.1" +weakdeps = ["SparseArrays"] + + [deps.Statistics.extensions] + SparseArraysExt = ["SparseArrays"] [[deps.StatsAPI]] deps = ["LinearAlgebra"] @@ -983,14 +1045,18 @@ version = "0.34.3" [[deps.StringManipulation]] deps = ["PrecompileTools"] -git-tree-sha1 = "a04cabe79c5f01f4d723cc6704070ada0b9d46d5" +git-tree-sha1 = "a6b1675a536c5ad1a60e5a5153e1fee12eb146e3" uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" -version = "0.3.4" +version = "0.4.0" + +[[deps.StyledStrings]] +uuid = "f489334b-da3d-4c2e-b8f0-e476e12c162b" +version = "1.11.0" [[deps.SuiteSparse_jll]] deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "7.2.1+1" +version = "7.7.0+0" [[deps.TOML]] deps = ["Dates"] @@ -1023,15 +1089,12 @@ version = "0.1.1" [[deps.Test]] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +version = "1.11.0" [[deps.TranscodingStreams]] -git-tree-sha1 = "96612ac5365777520c3c5396314c8cf7408f436a" +git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.11.1" -weakdeps = ["Random", "Test"] - - [deps.TranscodingStreams.extensions] - TestExt = ["Test", "Random"] +version = "0.11.3" [[deps.URIs]] git-tree-sha1 = "67db6cc7b3821e19ebe75791a9dd19c9b1188f2b" @@ -1041,6 +1104,7 @@ version = "1.5.1" [[deps.UUIDs]] deps = ["Random", "SHA"] uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" +version = "1.11.0" [[deps.UnPack]] git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" @@ -1049,6 +1113,7 @@ version = "1.0.2" [[deps.Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" +version = "1.11.0" [[deps.UnicodeFun]] deps = ["REPL"] @@ -1119,9 +1184,9 @@ version = "1.6.0" [[deps.Widgets]] deps = ["Colors", "Dates", "Observables", "OrderedCollections"] -git-tree-sha1 = "fcdae142c1cfc7d89de2d11e08721d0f2f86c98a" +git-tree-sha1 = "e9aeb174f95385de31e70bd15fa066a505ea82b9" uuid = "cc8bc4a8-27d6-5769-a93b-9d913e69aa62" -version = "0.6.6" +version = "0.6.7" [[deps.WorkerUtilities]] git-tree-sha1 = "cd1659ba0d57b71a464a29e64dbc67cfe83d54e7" @@ -1130,21 +1195,21 @@ version = "1.6.1" [[deps.XML2_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] -git-tree-sha1 = "d9717ce3518dc68a99e6b96300813760d887a01d" +git-tree-sha1 = "a2fccc6559132927d4c5dc183e3e01048c6dcbd6" uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.13.1+0" +version = "2.13.5+0" [[deps.XSLT_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "XML2_jll", "Zlib_jll"] -git-tree-sha1 = "a54ee957f4c86b526460a720dbc882fa5edcbefc" +git-tree-sha1 = "7d1671acbe47ac88e981868a078bd6b4e27c5191" uuid = "aed1982a-8fda-507f-9586-7b0439959a61" -version = "1.1.41+0" +version = "1.1.42+0" [[deps.XZ_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "ac88fb95ae6447c8dda6a5503f3bafd496ae8632" +git-tree-sha1 = "15e637a697345f6743674f1322beefbc5dcd5cfc" uuid = "ffd25f8a-64ca-5728-b0f7-c24cf3aae800" -version = "5.4.6+0" +version = "5.6.3+0" [[deps.Xorg_libICE_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -1166,9 +1231,9 @@ version = "1.8.6+0" [[deps.Xorg_libXau_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "6035850dcc70518ca32f012e46015b9beeda49d8" +git-tree-sha1 = "2b0e27d52ec9d8d483e2ca0b72b3cb1a8df5c27a" uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" -version = "1.0.11+0" +version = "1.0.11+1" [[deps.Xorg_libXcursor_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll"] @@ -1178,9 +1243,9 @@ version = "1.2.0+4" [[deps.Xorg_libXdmcp_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "34d526d318358a859d7de23da945578e8e8727b7" +git-tree-sha1 = "02054ee01980c90297412e4c809c8694d7323af3" uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" -version = "1.1.4+0" +version = "1.1.4+1" [[deps.Xorg_libXext_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] @@ -1220,9 +1285,9 @@ version = "0.9.11+0" [[deps.Xorg_libpthread_stubs_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9" +git-tree-sha1 = "fee57a273563e273f0f53275101cd41a8153517a" uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" -version = "0.1.1+0" +version = "0.1.1+1" [[deps.Xorg_libxcb_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] @@ -1286,9 +1351,9 @@ version = "2.39.0+0" [[deps.Xorg_xtrans_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "e92a1a012a10506618f10b7047e478403a046c77" +git-tree-sha1 = "b9ead2d2bdb27330545eb14234a2e300da61232e" uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" -version = "1.5.0+0" +version = "1.5.0+1" [[deps.Zlib_jll]] deps = ["Libdl"] @@ -1297,9 +1362,9 @@ version = "1.2.13+1" [[deps.Zstd_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "e678132f07ddb5bfa46857f0d7620fb9be675d3b" +git-tree-sha1 = "555d1076590a6cc2fdee2ef1469451f872d8b41b" uuid = "3161d3a3-bdf6-5164-811a-617609db77b4" -version = "1.5.6+0" +version = "1.5.6+1" [[deps.eudev_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "gperf_jll"] @@ -1309,9 +1374,9 @@ version = "3.2.9+0" [[deps.fzf_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "a68c9655fbe6dfcab3d972808f1aafec151ce3f8" +git-tree-sha1 = "6e50f145003024df4f5cb96c7fce79466741d601" uuid = "214eeab7-80f7-51ab-84ad-2988db7cef09" -version = "0.43.0+0" +version = "0.56.3+0" [[deps.gperf_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -1326,15 +1391,21 @@ uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" version = "3.9.0+0" [[deps.libass_jll]] -deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] -git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "e17c115d55c5fbb7e52ebedb427a0dca79d4484e" uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" -version = "0.15.1+0" +version = "0.15.2+0" [[deps.libblastrampoline_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.8.0+1" +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.libevdev_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] @@ -1343,10 +1414,10 @@ uuid = "2db6ffa8-e38f-5e21-84af-90c45d0032cc" version = "1.11.0+0" [[deps.libfdk_aac_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8a22cf860a7d27e4f3498a0fe0811a7957badb38" uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" -version = "2.0.2+0" +version = "2.0.3+0" [[deps.libinput_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "eudev_jll", "libevdev_jll", "mtdev_jll"] @@ -1356,9 +1427,9 @@ version = "1.18.0+0" [[deps.libpng_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "d7015d2e18a5fd9a4f47de711837e980519781a4" +git-tree-sha1 = "b70c870239dc3d7bc094eb2d6be9b73d27bef280" uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" -version = "1.6.43+1" +version = "1.6.44+0" [[deps.libvorbis_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] @@ -1375,7 +1446,7 @@ version = "1.1.6+0" [[deps.nghttp2_jll]] deps = ["Artifacts", "Libdl"] uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.52.0+1" +version = "1.59.0+0" [[deps.p7zip_jll]] deps = ["Artifacts", "Libdl"] diff --git a/GradientBasedMinimizers/Project.toml b/GradientBasedMinimizers/Project.toml index 041b7ed..d15c1ea 100644 --- a/GradientBasedMinimizers/Project.toml +++ b/GradientBasedMinimizers/Project.toml @@ -8,6 +8,7 @@ BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" MAGEMin_C = "e5d170eb-415a-4524-987b-12f1bce1ddab" MAGEMin_jll = "763ebaa8-b0d2-5f6b-90ef-4fc23b5db1c4" +MuladdMacro = "46d2c3a1-f734-5fdb-9937-b9b9aeba4221" PlotlyJS = "f0f68f2c-4968-5e81-91da-67840de0976a" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" @@ -16,3 +17,4 @@ Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" [compat] MAGEMin_C = "1.5.4" MAGEMin_jll = "1.5.0" +MuladdMacro = "0.2.4" diff --git a/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/figures/figures.jl b/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/figures/figures.jl index 5173224..f6a7b52 100644 --- a/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/figures/figures.jl +++ b/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/figures/figures.jl @@ -54,9 +54,9 @@ function generate_min_time_vs_distance_figure(ph, gv, gm) if ph.ph == "clino-amphibole" ylims!((150.0, 1000)) elseif ph.ph == "spinel" - ylims!((50.0, 300)) + ylims!((0.0, 300)) elseif ph.ph == "clinopyroxene" - ylims!((50.0, 800)) + ylims!((0.0, 800)) end Plots.savefig("tms_vs_distance_" * ph.ph * ".png") @@ -68,9 +68,9 @@ function generate_min_time_vs_distance_figure(ph, gv, gm) if ph.ph == "clino-amphibole" ylims!((150.0, 600)) elseif ph.ph == "spinel" - ylims!((50.0, 300)) + ylims!((0.0, 300)) elseif ph.ph == "clinopyroxene" - ylims!((50.0, 400)) + ylims!((0.0, 400)) end Plots.savefig("tms_vs_nite_" * ph.ph * ".png") @@ -129,9 +129,9 @@ function generate_min_time_vs_normDeltaGamma_figure(ph, gv, gm) if ph.ph == "clino-amphibole" ylims!((150.0, 1000)) elseif ph.ph == "spinel" - ylims!((50.0, 300)) + ylims!((0.0, 300)) elseif ph.ph == "clinopyroxene" - ylims!((50.0, 800)) + ylims!((0.0, 800)) end Plots.savefig("tms_vs_distance_" * ph.ph * ".png") @@ -143,9 +143,9 @@ function generate_min_time_vs_normDeltaGamma_figure(ph, gv, gm) if ph.ph == "clino-amphibole" ylims!((150.0, 600)) elseif ph.ph == "spinel" - ylims!((50.0, 300)) + ylims!((0.0, 300)) elseif ph.ph == "clinopyroxene" - ylims!((50.0, 400)) + ylims!((0.0, 400)) end Plots.savefig("tms_vs_nite_" * ph.ph * ".png") diff --git a/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/gradient_method.jl b/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/gradient_method.jl index 103df5b..13e44e4 100644 --- a/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/gradient_method.jl +++ b/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/gradient_method.jl @@ -160,27 +160,23 @@ end function update_pk_BFGS!(gv,ph,gm) compute_G_dG!(gm,ph,gv); - gm.G0[1] = ph.G[1]; - gm.grad0 .= ph.grad; + gm.G0[1] = ph.G[1] + gm.grad0 .= ph.grad - gm.pk .= gm.BkI*ph.grad; + gm.pk .= gm.BkI * ph.grad # get nullspace projected descent direction. This part is critical to ensure that the descent direction respect at all time the equality constraints - i = length(ph.sf); j = i - size(ph.A,1) - ph.n_eq_off[1]; + i = length(ph.sf); j = i - size(ph.A,1) - ph.n_eq_off[1] # cannot use mul! to be allocation free here (variable Nullspace size) -> use old school style for k = 1:j - ph.v_nem[k] = 0.0; - for l = 1:i - ph.v_nem[k] += gm.pk[l]*gm.N[l,k] - end + gm_N = SVector{size(gm.N,1), eltype(gm.N)}(@inbounds gm.N[i, k] for i in axes(gm.N, 1)) + @inbounds ph.v_nem[k] = gm_N ⋅ gm.pk end for k = 1:i - gm.pk[k] = 0.0; - for l = 1:j - gm.pk[k] += ph.v_nem[l]*gm.N[k,l] - end + gm_N = SVector{size(ph.v_nem, 1), eltype(gm.N)}(@inbounds gm.N[k, i] for i in axes(ph.v_nem, 1)) + @inbounds gm.pk[k] = ph.v_nem ⋅ gm_N end return nothing diff --git a/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/phases/spn.jl b/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/phases/spn.jl index e0d08a5..668c7e7 100644 --- a/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/phases/spn.jl +++ b/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/phases/spn.jl @@ -52,13 +52,13 @@ end """ Get constant parameters """ -function init_phase(gam,test) +function init_phase(gam, test) ph = "spinel"; n_ox = 11 n_sf = 10; n_eq = 3; - n_eq_off = MVector{n_sf}(zeros(Int64,n_sf)); + n_eq_off = MVector{n_sf, Int64}(zeros(Int64, n_sf)); n_em = 8; n_xeos = 7; n_W = 28; # perhaps this can be computed somehow from the variables above? @@ -83,21 +83,25 @@ function init_phase(gam,test) emC = SMatrix{n_ox, n_em}( - [ +0.0 +1.0 +0.0 +1.0 +0.0 +0.0 +0.0 +0.0 +0.0 +0.0 +0.0 - +0.0 +1.0 +0.0 +1.0 +0.0 +0.0 +0.0 +0.0 +0.0 +0.0 +0.0; - +0.0 +1.0 +0.0 +0.0 +1.0 +0.0 +0.0 +0.0 +0.0 +0.0 +0.0; - +0.0 +1.0 +0.0 +0.0 +1.0 +0.0 +0.0 +0.0 +0.0 +0.0 +0.0; - +0.0 +0.0 +0.0 +0.0 +3.0 +0.0 +0.0 +0.0 +1.0 +0.0 +0.0; - +0.0 +0.0 +0.0 +0.0 +3.0 +0.0 +0.0 +0.0 +1.0 +0.0 +0.0; - +0.0 +0.0 +0.0 +1.0 +0.0 +0.0 +0.0 +0.0 +0.0 +1.0 +0.0; - +0.0 +0.0 +0.0 +2.0 +0.0 +0.0 +0.0 +1.0 +0.0 +0.0 +0.0] - ); + [ + +0.0 +1.0 +0.0 +1.0 +0.0 +0.0 +0.0 +0.0 +0.0 +0.0 +0.0 + +0.0 +1.0 +0.0 +1.0 +0.0 +0.0 +0.0 +0.0 +0.0 +0.0 +0.0 + +0.0 +1.0 +0.0 +0.0 +1.0 +0.0 +0.0 +0.0 +0.0 +0.0 +0.0 + +0.0 +1.0 +0.0 +0.0 +1.0 +0.0 +0.0 +0.0 +0.0 +0.0 +0.0 + +0.0 +0.0 +0.0 +0.0 +3.0 +0.0 +0.0 +0.0 +1.0 +0.0 +0.0 + +0.0 +0.0 +0.0 +0.0 +3.0 +0.0 +0.0 +0.0 +1.0 +0.0 +0.0 + +0.0 +0.0 +0.0 +1.0 +0.0 +0.0 +0.0 +0.0 +0.0 +1.0 +0.0 + +0.0 +0.0 +0.0 +2.0 +0.0 +0.0 +0.0 +1.0 +0.0 +0.0 +0.0 + ] + ); A = SMatrix{n_eq, n_sf}( - [ 1. 1. 1. 1. 0. 0. 0. 0. 0. 0.; - 0.5 0.5 0. 0. 2. 2. 1. 1. 1. 0.; - -0.5 -0.5 0. 0. -1. -1. 0. 0. 0. 1.] + [ + 1. 1. 1. 1. 0. 0. 0. 0. 0. 0. + 0.5 0.5 0. 0. 2. 2. 1. 1. 1. 0. + -0.5 -0.5 0. 0. -1. -1. 0. 0. 0. 1. + ] ); v = SVector{1}([0.]); @@ -198,10 +202,9 @@ function get_f!(ph,gv) #mul!(ph.v_nem,ph.emC,gv.apo); ph.v_nem .= ph.emC*gv.apo - - v = ph.p'*ph.v_nem - ph.f .= (ph.bulk'*gv.apo)/(v); - ph.df .= (ph.v_nem)./(v); + _v = inv(ph.p ⋅ ph.v_nem) + ph.f .= (ph.bulk ⋅ gv.apo) * _v + ph.df .= (ph.v_nem) .* _v return nothing end @@ -210,22 +213,33 @@ end """ Computes endmember proportions """ -function get_p!(ph::solution_phase{n_ox, n_sf, n_eq, n_em}) where {n_ox, n_sf, n_eq, n_em} +function get_p!(ph::solution_phase) - for i=1:lastindex(ph.sf) + for i in eachindex(ph.sf) if (ph.sf_off == 1) ph.sf[i] = 0.0; end end - ph.p[1] = -ph.sf[9] - 2*ph.sf[5]/3 + 2*ph.sf[1]/3 - 2*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) - 4*ph.sf[10]/3 - (2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) + 1/3; - ph.p[2] = 2*ph.sf[5]/3 - 2*ph.sf[1]/3 - 4*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) - 2*ph.sf[10]/3 - 2*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) + 2/3; - ph.p[3] = ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) - 2*ph.sf[8]/3 + 2*ph.sf[4]/3 - 2*ph.sf[6]/3 + 2*ph.sf[2]/3 + 2*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + 2*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) - (2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + (2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])); - ph.p[4] = 2*ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + 2*ph.sf[8]/3 - 2*ph.sf[4]/3 + 2*ph.sf[6]/3 - 2*ph.sf[2]/3 + 4*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + 4*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) - 2*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + 2*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])); - ph.p[5] = -ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + 2*ph.sf[8]/3 - 2*ph.sf[4]/3 - 2*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + (2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])); - ph.p[6] = -2*ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) - 2*ph.sf[8]/3 + 2*ph.sf[4]/3 - 4*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + 2*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])); - ph.p[7] = ph.sf[9]; - ph.p[8] = 2*ph.sf[10]; + c1 = @muladd (2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + c2 = @muladd (2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) + c3 = 2*ph.sf[1]/3 + c4 = 2*ph.sf[5]/3 + c6 = 2*ph.sf[4]/3 + c9 = 2*ph.sf[6]/3 + c10 = 2*ph.sf[10] + c11 = 2*ph.sf[2]/3 + c12 = 2*ph.sf[8]/3 + c13 = 4*ph.sf[10] + + ph.p[1] = @muladd -ph.sf[9] - c4 + c3 - c10 * c2 - 2*c10/3 - c2 + 1/3; + ph.p[2] = @muladd c4 - c3 - c13 * c2 - c10/3 - 2*c2 + 2/3; + ph.p[3] = @muladd ph.sf[9]*c1 - c12 + c6 - c9 + c11 + c10*c1 + c10*c2 - c1 + c2; + ph.p[4] = @muladd 2*ph.sf[9]*c1 + c12 - c6 + c9 - c11 + c13*c1 + c13*c2 - 2*c1 + 2*c2; + ph.p[5] = @muladd -ph.sf[9]*c1 + c12 - 2*ph.sf[4]/3 - 2*ph.sf[10]*c1 + c1; + ph.p[6] = @muladd -2*ph.sf[9]*c1 - c12 + 2*ph.sf[4]/3 - c13*c1 + 2*c1; + ph.p[7] = ph.sf[9]; + ph.p[8] = c10; return nothing end @@ -234,17 +248,26 @@ end """ Computes partial derivative of endmember fraction as function of site fraction """ -function get_dpdsf!(ph::solution_phase{n_ox, n_sf, n_eq, n_em}) where {n_ox, n_sf, n_eq, n_em} - - - ph.dpdsf[1,1] = 2*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) + (2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) + 2/3; ph.dpdsf[1,2] = 2*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) - 2*ph.sf[10]/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) + (2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) - 1/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])); ph.dpdsf[1,3] = 0; ph.dpdsf[1,4] = 0; ph.dpdsf[1,5] = 4*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) + 2*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) - 2/3; ph.dpdsf[1,6] = 4*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) - 4*ph.sf[10]/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) + 2*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) - 2/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])); ph.dpdsf[1,7] = 0; ph.dpdsf[1,8] = 0; ph.dpdsf[1,9] = -1; ph.dpdsf[1,10] = -2*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) - 4/3; - ph.dpdsf[2,1] = 4*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) + 2*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) - 2/3; ph.dpdsf[2,2] = 4*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) - 4*ph.sf[10]/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) + 2*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) - 2/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])); ph.dpdsf[2,3] = 0; ph.dpdsf[2,4] = 0; ph.dpdsf[2,5] = 8*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) + 4*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) + 2/3; ph.dpdsf[2,6] = 8*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) - 8*ph.sf[10]/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) + 4*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) - 4/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])); ph.dpdsf[2,7] = 0; ph.dpdsf[2,8] = 0; ph.dpdsf[2,9] = 0; ph.dpdsf[2,10] = -4*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) - 2/3; - ph.dpdsf[3,1] = -2*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) - (2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2); ph.dpdsf[3,2] = -2*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) + 2*ph.sf[10]/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) - (2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) + 2/3 + 1/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])); ph.dpdsf[3,3] = -ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 2*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + (2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2); ph.dpdsf[3,4] = -ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + ph.sf[9]/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) - 2*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 2*ph.sf[10]/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + (2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 2/3 - 1/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])); ph.dpdsf[3,5] = -4*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) - 2*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2); ph.dpdsf[3,6] = -4*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) + 4*ph.sf[10]/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) - 2*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) - 2/3 + 2/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])); ph.dpdsf[3,7] = -2*ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 4*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 2*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2); ph.dpdsf[3,8] = -2*ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 2*ph.sf[9]/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) - 4*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 4*ph.sf[10]/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + 2*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 2/3 - 2/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])); ph.dpdsf[3,9] = (2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])); ph.dpdsf[3,10] = 2*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + 2*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])); - ph.dpdsf[4,1] = -4*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) - 2*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2); ph.dpdsf[4,2] = -4*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) + 4*ph.sf[10]/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) - 2*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) - 2/3 + 2/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])); ph.dpdsf[4,3] = -2*ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 4*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 2*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2); ph.dpdsf[4,4] = -2*ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 2*ph.sf[9]/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) - 4*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 4*ph.sf[10]/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + 2*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 2/3 - 2/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])); ph.dpdsf[4,5] = -8*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) - 4*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2); ph.dpdsf[4,6] = -8*ph.sf[10]*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) + 8*ph.sf[10]/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])) - 4*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])^2) + 2/3 + 4/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])); ph.dpdsf[4,7] = -4*ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 8*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 4*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2); ph.dpdsf[4,8] = -4*ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 4*ph.sf[9]/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) - 8*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 8*ph.sf[10]/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + 4*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 2/3 - 4/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])); ph.dpdsf[4,9] = 2*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])); ph.dpdsf[4,10] = 4*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + 4*(2*ph.sf[6] + ph.sf[2])/(3*(2*ph.sf[6] + ph.sf[2] + 2*ph.sf[5] + ph.sf[1])); - ph.dpdsf[5,1] = 0; ph.dpdsf[5,2] = 0; ph.dpdsf[5,3] = ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 2*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - (2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2); ph.dpdsf[5,4] = ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - ph.sf[9]/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + 2*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 2*ph.sf[10]/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) - (2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 2/3 + 1/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])); ph.dpdsf[5,5] = 0; ph.dpdsf[5,6] = 0; ph.dpdsf[5,7] = 2*ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 4*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 2*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2); ph.dpdsf[5,8] = 2*ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 2*ph.sf[9]/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + 4*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 4*ph.sf[10]/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) - 2*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 2/3 + 2/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])); ph.dpdsf[5,9] = -(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])); ph.dpdsf[5,10] = -2*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])); - ph.dpdsf[6,1] = 0; ph.dpdsf[6,2] = 0; ph.dpdsf[6,3] = 2*ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 4*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 2*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2); ph.dpdsf[6,4] = 2*ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 2*ph.sf[9]/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + 4*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 4*ph.sf[10]/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) - 2*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 2/3 + 2/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])); ph.dpdsf[6,5] = 0; ph.dpdsf[6,6] = 0; ph.dpdsf[6,7] = 4*ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) + 8*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 4*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2); ph.dpdsf[6,8] = 4*ph.sf[9]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 4*ph.sf[9]/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) + 8*ph.sf[10]*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 8*ph.sf[10]/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])) - 4*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])^2) - 2/3 + 4/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])); ph.dpdsf[6,9] = -2*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])); ph.dpdsf[6,10] = -4*(2*ph.sf[8] + ph.sf[4])/(3*(2*ph.sf[7] + ph.sf[3] + 2*ph.sf[8] + ph.sf[4])); - ph.dpdsf[7,1] = 0; ph.dpdsf[7,2] = 0; ph.dpdsf[7,3] = 0; ph.dpdsf[7,4] = 0; ph.dpdsf[7,5] = 0; ph.dpdsf[7,6] = 0; ph.dpdsf[7,7] = 0; ph.dpdsf[7,8] = 0; ph.dpdsf[7,9] = 1; ph.dpdsf[7,10] = 0; - ph.dpdsf[8,1] = 0; ph.dpdsf[8,2] = 0; ph.dpdsf[8,3] = 0; ph.dpdsf[8,4] = 0; ph.dpdsf[8,5] = 0; ph.dpdsf[8,6] = 0; ph.dpdsf[8,7] = 0; ph.dpdsf[8,8] = 0; ph.dpdsf[8,9] = 0; ph.dpdsf[8,10] = 2; +@fastmath function get_dpdsf!(ph::solution_phase) + x = ph.sf + T = eltype(x) + # constants + c1 = @muladd (2*x[6] + x[2])/(3*(2*x[6] + x[2] + 2*x[5] + x[1])^2) + c21 = @muladd (3*(2*x[6] + x[2] + 2*x[5] + x[1])) + c2 = x[10]/c21 + c3 = @muladd (2*x[6] + x[2])/c21 + c6 = @muladd (2*x[8] + x[4]) + c4 = @muladd c6/(3*(2*x[7] + x[3] + 2*x[8] + x[4])^2) + c5 = @muladd (3*(2*x[7] + x[3] + 2*x[8] + x[4])) + # fill + ph.dpdsf[1,1] = 2*x[10]*c1 + c1 + 2/3; ph.dpdsf[1,2] = 2*x[10]*c1 - 2*c2 + c1 - 1/c21; ph.dpdsf[1,3] = zero(T); ph.dpdsf[1,4] = zero(T); ph.dpdsf[1,5] = 4*x[10]*c1 + 2*c1 - 2/3; ph.dpdsf[1,6] = 4*x[10]*c1 - 4*c2 + 2*c1 - 2/c21; ph.dpdsf[1,7] = zero(T); ph.dpdsf[1,8] = zero(T); ph.dpdsf[1,9] = -1; ph.dpdsf[1,10] = -2*c3 - 4/3; + ph.dpdsf[2,1] = 4*x[10]*c1 + 2*c1 - 2/3; ph.dpdsf[2,2] = 4*x[10]*c1 - 4*c2 + 2*c1 - 2/c21; ph.dpdsf[2,3] = zero(T); ph.dpdsf[2,4] = zero(T); ph.dpdsf[2,5] = 8*x[10]*c1 + 4*c1 + 2/3; ph.dpdsf[2,6] = 8*x[10]*c1 - 8*c2 + 4*c1 - 4/c21; ph.dpdsf[2,7] = zero(T); ph.dpdsf[2,8] = zero(T); ph.dpdsf[2,9] = zero(T); ph.dpdsf[2,10] = -4*c3 - 2/3; + ph.dpdsf[3,1] = -2*x[10]*c1 - c1; ph.dpdsf[3,2] = -2*x[10]*c1 + 2*c2 - c1 + 2/3 + 1/c21; ph.dpdsf[3,3] = -x[9]*c4 - 2*x[10]*c4 + c4; ph.dpdsf[3,4] = -x[9]*c4 + x[9]/c5 - 2*x[10]*c4 + 2*x[10]/c5 + c4 + 2/3 - 1/c5; ph.dpdsf[3,5] = -4*x[10]*c1 - 2*c1; ph.dpdsf[3,6] = -4*x[10]*c1 + 4*c2 - 2*c1 - 2/3 + 2/c21; ph.dpdsf[3,7] = -2*x[9]*c4 - 4*x[10]*c4 + 2*c4; ph.dpdsf[3,8] = -2*x[9]*c4 + 2*x[9]/c5 - 4*x[10]*c4 + 4*x[10]/c5 + 2*c4 - 2/3 - 2/c5; ph.dpdsf[3,9] = c6/c5; ph.dpdsf[3,10] = 2*c6/c5 + 2*c3; + ph.dpdsf[4,1] = -4*x[10]*c1 - 2*c1; ph.dpdsf[4,2] = -4*x[10]*c1 + 4*c2 - 2*c1 - 2/3 + 2/c21; ph.dpdsf[4,3] = -2*x[9]*c4 - 4*x[10]*c4 + 2*c4; ph.dpdsf[4,4] = -2*x[9]*c4 + 2*x[9]/c5 - 4*x[10]*c4 + 4*x[10]/c5 + 2*c4 - 2/3 - 2/c5; ph.dpdsf[4,5] = -8*x[10]*c1 - 4*c1; ph.dpdsf[4,6] = -8*x[10]*c1 + 8*c2 - 4*c1 + 2/3 + 4/c21; ph.dpdsf[4,7] = -4*x[9]*c4 - 8*x[10]*c4 + 4*c4; ph.dpdsf[4,8] = -4*x[9]*c4 + 4*x[9]/c5 - 8*x[10]*c4 + 8*x[10]/c5 + 4*c4 + 2/3 - 4/c5; ph.dpdsf[4,9] = 2*c6/c5; ph.dpdsf[4,10] = 4*c6/c5 + 4*c3; + ph.dpdsf[5,1] = zero(T); ph.dpdsf[5,2] = zero(T); ph.dpdsf[5,3] = x[9]*c4 + 2*x[10]*c4 - c4; ph.dpdsf[5,4] = x[9]*c4 - x[9]/c5 + 2*x[10]*c4 - 2*x[10]/c5 - c4 - 2/3 + 1/c5; ph.dpdsf[5,5] = zero(T); ph.dpdsf[5,6] = zero(T); ph.dpdsf[5,7] = 2*x[9]*c4 + 4*x[10]*c4 - 2*c4; ph.dpdsf[5,8] = 2*x[9]*c4 - 2*x[9]/c5 + 4*x[10]*c4 - 4*x[10]/c5 - 2*c4 + 2/3 + 2/c5; ph.dpdsf[5,9] = -c6/c5; ph.dpdsf[5,10] = -2*c6/c5; + ph.dpdsf[6,1] = zero(T); ph.dpdsf[6,2] = zero(T); ph.dpdsf[6,3] = 2*x[9]*c4 + 4*x[10]*c4 - 2*c4; ph.dpdsf[6,4] = 2*x[9]*c4 - 2*x[9]/c5 + 4*x[10]*c4 - 4*x[10]/c5 - 2*c4 + 2/3 + 2/c5; ph.dpdsf[6,5] = zero(T); ph.dpdsf[6,6] = zero(T); ph.dpdsf[6,7] = 4*x[9]*c4 + 8*x[10]*c4 - 4*c4; ph.dpdsf[6,8] = 4*x[9]*c4 - 4*x[9]/c5 + 8*x[10]*c4 - 8*x[10]/c5 - 4*c4 - 2/3 + 4/c5; ph.dpdsf[6,9] = -2*c6/c5; ph.dpdsf[6,10] = -4*c6/c5; + ph.dpdsf[7,1] = zero(T); ph.dpdsf[7,2] = zero(T); ph.dpdsf[7,3] = zero(T); ph.dpdsf[7,4] = zero(T); ph.dpdsf[7,5] = zero(T); ph.dpdsf[7,6] = zero(T); ph.dpdsf[7,7] = zero(T); ph.dpdsf[7,8] = zero(T); ph.dpdsf[7,9] = one(T); ph.dpdsf[7,10] = zero(T); + ph.dpdsf[8,1] = zero(T); ph.dpdsf[8,2] = zero(T); ph.dpdsf[8,3] = zero(T); ph.dpdsf[8,4] = zero(T); ph.dpdsf[8,5] = zero(T); ph.dpdsf[8,6] = zero(T); ph.dpdsf[8,7] = zero(T); ph.dpdsf[8,8] = zero(T); ph.dpdsf[8,9] = zero(T); ph.dpdsf[8,10] = T(2); return nothing end @@ -252,26 +275,29 @@ end """ Calculate G excess """ -function get_Gex!(ph::solution_phase{n_ox, n_sf, n_eq, n_em}) where {n_ox, n_sf, n_eq, n_em} - - a = ph.v_E; - b = ph.p; - c = ph.W; - - @inbounds for i=1:n_em - it = 1; - Gex_v = 0.0; - @inbounds for j=1:n_em-1 - tmp = (a[i,j]-b[j]); - for k=j+1:n_em - Gex_v -= tmp*(a[i,k]-b[k])*c[it]; - it = it + 1; +@generated function get_Gex!(ph::solution_phase{n_ox, n_sf, n_eq, n_em}) where {n_ox, n_sf, n_eq, n_em} + + quote + a = SMatrix(ph.v_E) + b = SVector(ph.p) + c = SVector(ph.W) + + # @inbounds for i=1:n_em + Base.@nexprs $n_em i -> begin + @inline + it = 1 + Gex_v = zero(eltype(a)) + for j=1:$n_em-1 + tmp = a[i,j] - b[j] + for k=j+1:$n_em + @inbounds Gex_v -= tmp*(a[i,k]-b[k])*c[it] + it += 1 + end end + @inbounds ph.Gex[i] = Gex_v; end - ph.Gex[i] = Gex_v; + return nothing end - - return nothing end """ @@ -279,44 +305,43 @@ end """ function get_idm!(ph::solution_phase{n_ox, n_sf, n_eq, n_em}) where {n_ox, n_sf, n_eq, n_em} - for i=1:n_sf - if (ph.sf_off[i] == 1.0) + + for i in eachindex(ph.sf) + if isone(ph.sf_off[i]) ph.sf[i] = 1.0; end end - sf5 = sqrt(ph.sf[5]); - sf6 = sqrt(ph.sf[6]); - sf7 = sqrt(ph.sf[7]); + sf5 = √ph.sf[5] + sf6 = √ph.sf[6] + sf7 = √ph.sf[7] - ph.idm[1] = ph.sf[7]*ph.sf[1]; - ph.idm[2] = 2*sf7*ph.sf[3]*sf5; - ph.idm[3] = ph.sf[7]*ph.sf[2]; - ph.idm[4] = 2*sf7*ph.sf[3]*sf6; - ph.idm[5] = ph.sf[8]*ph.sf[2]; - ph.idm[6] = 2*sqrt(ph.sf[8])*ph.sf[4]*sf6; - ph.idm[7] = ph.sf[9]*ph.sf[1]; - ph.idm[8] = 2*sf5*ph.sf[1]*sqrt(ph.sf[10]); + ph.idm[1] = ph.sf[7]*ph.sf[1]; + ph.idm[2] = 2*sf7*ph.sf[3]*sf5; + ph.idm[3] = ph.sf[7]*ph.sf[2]; + ph.idm[4] = 2*sf7*ph.sf[3]*sf6; + ph.idm[5] = ph.sf[8]*ph.sf[2]; + ph.idm[6] = 2*sqrt(ph.sf[8])*ph.sf[4]*sf6; + ph.idm[7] = ph.sf[9]*ph.sf[1]; + ph.idm[8] = 2*sf5*ph.sf[1]*sqrt(ph.sf[10]); return nothing - end """ compute chemical potential of endmembers """ -function get_mu!(ph::solution_phase{n_ox, n_sf, n_eq, n_em},gv) where {n_ox, n_sf, n_eq, n_em} - for i=1:lastindex(ph.idm) - if (ph.idm[i] == 0.0) - ph.idm[i] = 1.0; +@generated function get_mu!(ph::solution_phase{n_ox, n_sf, n_eq, n_em},gv) where {n_ox, n_sf, n_eq, n_em} + quote + Base.@nexprs $n_em i -> begin + @inline + @inbounds a = iszero(ph.idm[i]) ? 1.0 : ph.idm[i] + @inbounds ph.mu[i] = @muladd gv.R*ph.T*real(log(a)) + ph.gb[i] + ph.Gex[i]; + @inbounds a = ph.idm[i] end + return nothing end - - for i=1:lastindex(ph.idm) - ph.mu[i] = gv.R*ph.T*real(log(ph.idm[i])) + ph.gb[i] + ph.Gex[i]; - end - return nothing end """ @@ -329,23 +354,22 @@ function get_gb!(ph::solution_phase{n_ox, n_sf, n_eq, n_em}) where {n_ox, n_sf, return nothing end +@inline function get_cv!(ph::solution_phase) + c1 = ph.sf[6] + ph.sf[2] + c2 = ph.sf[8] + ph.sf[4] + c3 = ph.sf[5] + ph.sf[1] - -function get_cv!(ph::solution_phase{n_ox, n_sf, n_eq, n_em}) where {n_ox, n_sf, n_eq, n_em} - - ph.cv[1] = (2 *ph.sf[6] + ph.sf[2])/(2 *ph.sf[6] + ph.sf[2] + 2 *ph.sf[5] + ph.sf[1]) - ph.cv[2] = (2 *ph.sf[8] + ph.sf[4])/(2 *ph.sf[7] + ph.sf[3] + 2 *ph.sf[8] + ph.sf[4]) + ph.cv[1] = (2 *c1)/(2 *c1 + 2 *c3) + ph.cv[2] = (2 *c2)/(2 *ph.sf[7] + ph.sf[3] + 2 *c2) ph.cv[3] = ph.sf[9] ph.cv[4] = 2 *ph.sf[10] - ph.cv[5] = -ph.sf[5] + ph.sf[1] - ph.cv[6] = -ph.sf[6] + ph.sf[2] - ph.cv[7] = -ph.sf[8] + ph.sf[4] + ph.cv[5] = -c3 + ph.cv[6] = -c1 + ph.cv[7] = -c2 return nothing; end - - """ convert compositional variables to site fractions the original compositional variables names and site-fraction are used in order to make the code more readable @@ -360,16 +384,16 @@ function get_ig(cv) Q2 = cv[6]; Q3 = cv[7]; - xMgT = 1/3 + 1/3*t - 1/3*x + 2/3*Q1 + (-1/3*t)*x; - xFeT = 1/3*x + 2/3*Q2 + 1/3*t*x; - xAlT = 2/3 - 1/3*t - 2/3*Q1 - 2/3*Q2 - 2/3*Q3 - 2/3*y + 2/3*c*y + 2/3*t*y; - xFe3T = 2/3*Q3 + 2/3*y + (-2/3*c)*y + (-2/3*t)*y; - xMgM = 1/3 - 1/3*Q1 + 1/3*t - 1/3*x + (-1/3*t)*x; - xFeM = -1/3*Q2 + 1/3*x + 1/3*t*x; - xAlM = 2/3 + 1/3*Q1 + 1/3*Q2 + 1/3*Q3 - c - 2/3*y - 5/6*t + 2/3*c*y + 2/3*t*y; - xFe3M = -1/3*Q3 + 2/3*y + (-2/3*c)*y + (-2/3*t)*y; - xCrM = c; - xTiM = 1/2*t; + xMgT = @muladd 1/3 + 1/3*t - 1/3*x + 2/3*Q1 + (-1/3*t)*x; + xFeT = @muladd 1/3*x + 2/3*Q2 + 1/3*t*x; + xAlT = @muladd 2/3 - 1/3*t - 2/3*Q1 - 2/3*Q2 - 2/3*Q3 - 2/3*y + 2/3*c*y + 2/3*t*y; + xFe3T = @muladd 2/3*Q3 + 2/3*y + (-2/3*c)*y + (-2/3*t)*y; + xMgM = @muladd 1/3 - 1/3*Q1 + 1/3*t - 1/3*x + (-1/3*t)*x; + xFeM = @muladd -1/3*Q2 + 1/3*x + 1/3*t*x; + xAlM = 2/3 + 1/3*Q1 + 1/3*Q2 + 1/3*Q3 - c - 2/3*y - 5/6*t + 2/3*c*y + 2/3*t*y; + xFe3M = @muladd -1/3*Q3 + 2/3*y + (-2/3*c)*y + (-2/3*t)*y; + xCrM = c; + xTiM = 1/2*t; #site fractions sf = [xMgT,xFeT,xAlT,xFe3T,xMgM,xFeM,xAlM,xFe3M,xCrM,xTiM]; @@ -377,8 +401,6 @@ function get_ig(cv) return sf end - - """ Computes Gibbs energy and first derivative of the solution phase """ @@ -423,20 +445,25 @@ function compute_G_dG!(gm,ph::solution_phase{n_ox, n_sf, n_eq, n_em},gv) where { i = n_sf; j = n_sf - n_eq - ph.n_eq_off[1]; # cannot use mul! to be allocation free here (variable Nullspace size) -> use old school style + a = SMatrix(gm.N) + b = SVector(ph.dGdsf) + c = SVector(ph.v_nem) for k = 1:j - ph.v_nem[k] = 0.0; + v = 0.0; for l = 1:i - ph.v_nem[k] += ph.dGdsf[l]*gm.N[l,k] + v += b[l]*a[l,k] end + ph.v_nem[k] = v end + c = SVector(ph.v_nem) for k = 1:i - ph.grad[k] = 0.0; + v = 0.0; for l = 1:j - ph.grad[k] += ph.v_nem[l]*gm.N[k,l] + v += c[l]*a[k,l] end + ph.grad[k] = v end - return nothing diff --git a/GradientBasedMinimizers/unconstrained_CG_BFGS/nullMin.jl b/GradientBasedMinimizers/unconstrained_CG_BFGS/nullMin.jl index 93a4f08..271ba04 100644 --- a/GradientBasedMinimizers/unconstrained_CG_BFGS/nullMin.jl +++ b/GradientBasedMinimizers/unconstrained_CG_BFGS/nullMin.jl @@ -5,64 +5,62 @@ using LinearAlgebra; using BenchmarkTools using Statistics using Plots - +using MuladdMacro # change path to the location of this file cd(@__DIR__) include("functions/sys_info.jl") include("functions/figures/figures.jl") -""" - select_ph!(ph::Symbol) +#choose gradient based minimization method: cg, BFGS (conjugate-gradient, BFGS) +gopt = :BFGS -Selects and includes the appropriate phase and gradient method files based on the provided phase symbol. -""" -function select_ph!(ph::Symbol) - if ph == :hb - include("functions/phases/hb.jl") - include("functions/gradient_method.jl") - elseif ph == :cpx - include("functions/phases/cpx.jl") - include("functions/gradient_method.jl") - elseif ph == :spn - include("functions/phases/spn.jl") - include("functions/gradient_method.jl") - else - error("Unknown phase: $ph") - end +const null_min! = @static if gopt == :BFGS + ((gv,ph,gm)) -> null_min_BFGS!(gv,ph,gm); +elseif gopt == :CG + ((gv,ph,gm)) -> null_min_CG!(gv,ph,gm); end -#choose the reference Gibbs hyperplane: em, pc, eq (endmember only, endmember+pseudocompounds, equilibrium): -gam = "eq"; -#choose gradient based minimization method: cg, BFGS (conjugate-gradient, BFGS) -gopt = :BFGS; -gv = init_sys_infos(); - # select phase (:hb, :cpx, :spn) ph = :spn; -select_ph!(ph); -#choose test (only for spinel, choose 1 or 2. 2 -> solvus) -test = 1; +@static if ph == :hb + include("functions/phases/hb.jl") + include("functions/gradient_method.jl") +elseif ph == :cpx + include("functions/phases/cpx.jl") + include("functions/gradient_method.jl") +elseif ph == :spn + include("functions/phases/spn.jl") + include("functions/gradient_method.jl") +else + error("Unknown phase: $ph") +end + +function main() + #choose the reference Gibbs hyperplane: em, pc, eq (endmember only, endmember+pseudocompounds, equilibrium): + gam = "eq"; -#Initialize system informations -ph = init_phase(gam,test); #initialize phase to minimize -gm = init_gradient_methods(ph); #initialize gradient method + gv = init_sys_infos(); -if gopt == :BFGS - null_min! = ((gv,ph,gm)) -> null_min_BFGS!(gv,ph,gm); -elseif gopt == :CG - null_min! = ((gv,ph,gm)) -> null_min_CG!(gv,ph,gm); -end + #choose test (only for spinel, choose 1 or 2. 2 -> solvus) + test = 1; -# retrieve the nullspace -update_Nullspace!(gm,ph); + #Initialize system informations + ph = init_phase(gam, test); #initialize phase to minimize + gm = init_gradient_methods(ph); #initialize gradient method -# generate figures -generate_min_time_vs_distance_figure(ph, gv, gm) -generate_min_time_vs_normDeltaGamma_figure(ph, gv, gm) -create_box_plot() + # retrieve the nullspace + update_Nullspace!(gm,ph); + + # generate figures + generate_min_time_vs_distance_figure(ph, gv, gm) + generate_min_time_vs_normDeltaGamma_figure(ph, gv, gm) + # create_box_plot() # this crashes on my workstation + + # if test == 2 + # generate_figure_solvus(ph, gv, gm) + # end +end -if test == 2 - generate_figure_solvus(ph, gv, gm) -end \ No newline at end of file +main() From 15666fa6ba23ec24d7c7ddcbb660f401c65fec2b Mon Sep 17 00:00:00 2001 From: albert-de-montserrat Date: Thu, 28 Nov 2024 15:41:51 +0100 Subject: [PATCH 2/3] a couple of extra improvements --- .../functions/phases/spn.jl | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/phases/spn.jl b/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/phases/spn.jl index 668c7e7..4752a2d 100644 --- a/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/phases/spn.jl +++ b/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/phases/spn.jl @@ -249,8 +249,8 @@ end Computes partial derivative of endmember fraction as function of site fraction """ @fastmath function get_dpdsf!(ph::solution_phase) - x = ph.sf - T = eltype(x) + x = SVector(ph.sf) + T = eltype(x) # constants c1 = @muladd (2*x[6] + x[2])/(3*(2*x[6] + x[2] + 2*x[5] + x[1])^2) c21 = @muladd (3*(2*x[6] + x[2] + 2*x[5] + x[1])) @@ -259,15 +259,21 @@ end c6 = @muladd (2*x[8] + x[4]) c4 = @muladd c6/(3*(2*x[7] + x[3] + 2*x[8] + x[4])^2) c5 = @muladd (3*(2*x[7] + x[3] + 2*x[8] + x[4])) + c7 = 2*x[10] + c8 = 4*x[10] + c9 = x[9]*c4 + c10 = x[9]/c5 + c11 = 8*x[10]*c1 + c12 = 8*x[10]*c4 # fill - ph.dpdsf[1,1] = 2*x[10]*c1 + c1 + 2/3; ph.dpdsf[1,2] = 2*x[10]*c1 - 2*c2 + c1 - 1/c21; ph.dpdsf[1,3] = zero(T); ph.dpdsf[1,4] = zero(T); ph.dpdsf[1,5] = 4*x[10]*c1 + 2*c1 - 2/3; ph.dpdsf[1,6] = 4*x[10]*c1 - 4*c2 + 2*c1 - 2/c21; ph.dpdsf[1,7] = zero(T); ph.dpdsf[1,8] = zero(T); ph.dpdsf[1,9] = -1; ph.dpdsf[1,10] = -2*c3 - 4/3; - ph.dpdsf[2,1] = 4*x[10]*c1 + 2*c1 - 2/3; ph.dpdsf[2,2] = 4*x[10]*c1 - 4*c2 + 2*c1 - 2/c21; ph.dpdsf[2,3] = zero(T); ph.dpdsf[2,4] = zero(T); ph.dpdsf[2,5] = 8*x[10]*c1 + 4*c1 + 2/3; ph.dpdsf[2,6] = 8*x[10]*c1 - 8*c2 + 4*c1 - 4/c21; ph.dpdsf[2,7] = zero(T); ph.dpdsf[2,8] = zero(T); ph.dpdsf[2,9] = zero(T); ph.dpdsf[2,10] = -4*c3 - 2/3; - ph.dpdsf[3,1] = -2*x[10]*c1 - c1; ph.dpdsf[3,2] = -2*x[10]*c1 + 2*c2 - c1 + 2/3 + 1/c21; ph.dpdsf[3,3] = -x[9]*c4 - 2*x[10]*c4 + c4; ph.dpdsf[3,4] = -x[9]*c4 + x[9]/c5 - 2*x[10]*c4 + 2*x[10]/c5 + c4 + 2/3 - 1/c5; ph.dpdsf[3,5] = -4*x[10]*c1 - 2*c1; ph.dpdsf[3,6] = -4*x[10]*c1 + 4*c2 - 2*c1 - 2/3 + 2/c21; ph.dpdsf[3,7] = -2*x[9]*c4 - 4*x[10]*c4 + 2*c4; ph.dpdsf[3,8] = -2*x[9]*c4 + 2*x[9]/c5 - 4*x[10]*c4 + 4*x[10]/c5 + 2*c4 - 2/3 - 2/c5; ph.dpdsf[3,9] = c6/c5; ph.dpdsf[3,10] = 2*c6/c5 + 2*c3; - ph.dpdsf[4,1] = -4*x[10]*c1 - 2*c1; ph.dpdsf[4,2] = -4*x[10]*c1 + 4*c2 - 2*c1 - 2/3 + 2/c21; ph.dpdsf[4,3] = -2*x[9]*c4 - 4*x[10]*c4 + 2*c4; ph.dpdsf[4,4] = -2*x[9]*c4 + 2*x[9]/c5 - 4*x[10]*c4 + 4*x[10]/c5 + 2*c4 - 2/3 - 2/c5; ph.dpdsf[4,5] = -8*x[10]*c1 - 4*c1; ph.dpdsf[4,6] = -8*x[10]*c1 + 8*c2 - 4*c1 + 2/3 + 4/c21; ph.dpdsf[4,7] = -4*x[9]*c4 - 8*x[10]*c4 + 4*c4; ph.dpdsf[4,8] = -4*x[9]*c4 + 4*x[9]/c5 - 8*x[10]*c4 + 8*x[10]/c5 + 4*c4 + 2/3 - 4/c5; ph.dpdsf[4,9] = 2*c6/c5; ph.dpdsf[4,10] = 4*c6/c5 + 4*c3; - ph.dpdsf[5,1] = zero(T); ph.dpdsf[5,2] = zero(T); ph.dpdsf[5,3] = x[9]*c4 + 2*x[10]*c4 - c4; ph.dpdsf[5,4] = x[9]*c4 - x[9]/c5 + 2*x[10]*c4 - 2*x[10]/c5 - c4 - 2/3 + 1/c5; ph.dpdsf[5,5] = zero(T); ph.dpdsf[5,6] = zero(T); ph.dpdsf[5,7] = 2*x[9]*c4 + 4*x[10]*c4 - 2*c4; ph.dpdsf[5,8] = 2*x[9]*c4 - 2*x[9]/c5 + 4*x[10]*c4 - 4*x[10]/c5 - 2*c4 + 2/3 + 2/c5; ph.dpdsf[5,9] = -c6/c5; ph.dpdsf[5,10] = -2*c6/c5; - ph.dpdsf[6,1] = zero(T); ph.dpdsf[6,2] = zero(T); ph.dpdsf[6,3] = 2*x[9]*c4 + 4*x[10]*c4 - 2*c4; ph.dpdsf[6,4] = 2*x[9]*c4 - 2*x[9]/c5 + 4*x[10]*c4 - 4*x[10]/c5 - 2*c4 + 2/3 + 2/c5; ph.dpdsf[6,5] = zero(T); ph.dpdsf[6,6] = zero(T); ph.dpdsf[6,7] = 4*x[9]*c4 + 8*x[10]*c4 - 4*c4; ph.dpdsf[6,8] = 4*x[9]*c4 - 4*x[9]/c5 + 8*x[10]*c4 - 8*x[10]/c5 - 4*c4 - 2/3 + 4/c5; ph.dpdsf[6,9] = -2*c6/c5; ph.dpdsf[6,10] = -4*c6/c5; - ph.dpdsf[7,1] = zero(T); ph.dpdsf[7,2] = zero(T); ph.dpdsf[7,3] = zero(T); ph.dpdsf[7,4] = zero(T); ph.dpdsf[7,5] = zero(T); ph.dpdsf[7,6] = zero(T); ph.dpdsf[7,7] = zero(T); ph.dpdsf[7,8] = zero(T); ph.dpdsf[7,9] = one(T); ph.dpdsf[7,10] = zero(T); - ph.dpdsf[8,1] = zero(T); ph.dpdsf[8,2] = zero(T); ph.dpdsf[8,3] = zero(T); ph.dpdsf[8,4] = zero(T); ph.dpdsf[8,5] = zero(T); ph.dpdsf[8,6] = zero(T); ph.dpdsf[8,7] = zero(T); ph.dpdsf[8,8] = zero(T); ph.dpdsf[8,9] = zero(T); ph.dpdsf[8,10] = T(2); + ph.dpdsf[1,1] = c7*c1 + c1 + 2/3; ph.dpdsf[1,2] = c7*c1 - 2*c2 + c1 - 1/c21; ph.dpdsf[1,3] = zero(T); ph.dpdsf[1,4] = zero(T); ph.dpdsf[1,5] = c8*c1 + 2*c1 - 2/3; ph.dpdsf[1,6] = c8*c1 - 4*c2 + 2*c1 - 2/c21; ph.dpdsf[1,7] = zero(T); ph.dpdsf[1,8] = zero(T); ph.dpdsf[1,9] = -1; ph.dpdsf[1,10] = -2*c3 - 4/3; + ph.dpdsf[2,1] = c8*c1 + 2*c1 - 2/3; ph.dpdsf[2,2] = c8*c1 - 4*c2 + 2*c1 - 2/c21; ph.dpdsf[2,3] = zero(T); ph.dpdsf[2,4] = zero(T); ph.dpdsf[2,5] = c11 + 4*c1 + 2/3; ph.dpdsf[2,6] = c11 - 8*c2 + 4*c1 - 4/c21; ph.dpdsf[2,7] = zero(T); ph.dpdsf[2,8] = zero(T); ph.dpdsf[2,9] = zero(T); ph.dpdsf[2,10] = -4*c3 - 2/3; + ph.dpdsf[3,1] = -c7*c1 - c1; ph.dpdsf[3,2] = -c7*c1 + 2*c2 - c1 + 2/3 + 1/c21; ph.dpdsf[3,3] = -c9 - c7*c4 + c4; ph.dpdsf[3,4] = -c9 + c10 - c7*c4 + c7/c5 + c4 + 2/3 - 1/c5; ph.dpdsf[3,5] = -c8*c1 - 2*c1; ph.dpdsf[3,6] = -c8*c1 + 4*c2 - 2*c1 - 2/3 + 2/c21; ph.dpdsf[3,7] = -2*c9 - c8*c4 + 2*c4; ph.dpdsf[3,8] = -2*c9 + 2*c10 - c8*c4 + c8/c5 + 2*c4 - 2/3 - 2/c5; ph.dpdsf[3,9] = c6/c5; ph.dpdsf[3,10] = 2*c6/c5 + 2*c3; + ph.dpdsf[4,1] = -c8*c1 - 2*c1; ph.dpdsf[4,2] = -c8*c1 + 4*c2 - 2*c1 - 2/3 + 2/c21; ph.dpdsf[4,3] = -2*c9 - c8*c4 + 2*c4; ph.dpdsf[4,4] = -2*c9 + 2*c10 - c8*c4 + c8/c5 + 2*c4 - 2/3 - 2/c5; ph.dpdsf[4,5] = -c11 - 4*c1; ph.dpdsf[4,6] = -c11 + 8*c2 - 4*c1 + 2/3 + 4/c21; ph.dpdsf[4,7] = -4*c9 - c12 + 4*c4; ph.dpdsf[4,8] = -4*c9 + 4*c10 - c12 + 8*x[10]/c5 + 4*c4 + 2/3 - 4/c5; ph.dpdsf[4,9] = 2*c6/c5; ph.dpdsf[4,10] = 4*c6/c5 + 4*c3; + ph.dpdsf[5,1] = zero(T); ph.dpdsf[5,2] = zero(T); ph.dpdsf[5,3] = c9 + c7*c4 - c4; ph.dpdsf[5,4] = c9 - c10 + c7*c4 - c7/c5 - c4 - 2/3 + 1/c5; ph.dpdsf[5,5] = zero(T); ph.dpdsf[5,6] = zero(T); ph.dpdsf[5,7] = 2*c9 + c8*c4 - 2*c4; ph.dpdsf[5,8] = 2*c9 - 2*c10 + c8*c4 - c8/c5 - 2*c4 + 2/3 + 2/c5; ph.dpdsf[5,9] = -c6/c5; ph.dpdsf[5,10] = -2*c6/c5; + ph.dpdsf[6,1] = zero(T); ph.dpdsf[6,2] = zero(T); ph.dpdsf[6,3] = 2*c9 + c8*c4 - 2*c4; ph.dpdsf[6,4] = 2*c9 - 2*c10 + c8*c4 - c8/c5 - 2*c4 + 2/3 + 2/c5; ph.dpdsf[6,5] = zero(T); ph.dpdsf[6,6] = zero(T); ph.dpdsf[6,7] = 4*c9 + c12 - 4*c4; ph.dpdsf[6,8] = 4*c9 - 4*c10 + c12 - 8*x[10]/c5 - 4*c4 - 2/3 + 4/c5; ph.dpdsf[6,9] = -2*c6/c5; ph.dpdsf[6,10] = -4*c6/c5; + ph.dpdsf[7,1] = zero(T); ph.dpdsf[7,2] = zero(T); ph.dpdsf[7,3] = zero(T); ph.dpdsf[7,4] = zero(T); ph.dpdsf[7,5] = zero(T); ph.dpdsf[7,6] = zero(T); ph.dpdsf[7,7] = zero(T); ph.dpdsf[7,8] = zero(T); ph.dpdsf[7,9] = one(T); ph.dpdsf[7,10] = zero(T); + ph.dpdsf[8,1] = zero(T); ph.dpdsf[8,2] = zero(T); ph.dpdsf[8,3] = zero(T); ph.dpdsf[8,4] = zero(T); ph.dpdsf[8,5] = zero(T); ph.dpdsf[8,6] = zero(T); ph.dpdsf[8,7] = zero(T); ph.dpdsf[8,8] = zero(T); ph.dpdsf[8,9] = zero(T); ph.dpdsf[8,10] = T(2); return nothing end @@ -433,8 +439,8 @@ function compute_G_dG!(gm,ph::solution_phase{n_ox, n_sf, n_eq, n_em},gv) where { # rest of routine: ~300 ns # Compute raw and normalized Gibbs energy - ph.Graw .= ph.mu'*ph.p; - ph.G .= ph.Graw[1]*ph.f[1]; + ph.Graw .= ph.mu ⋅ ph.p; + ph.G .= ph.Graw[1] * ph.f[1]; # compute first derivatives ph.v_nem .= (ph.mu .- ph.df .*ph.Graw).*ph.f; From 6314b05604d992f3ab0aa335f646efe3f2273f4d Mon Sep 17 00:00:00 2001 From: Albert de Montserrat Date: Thu, 28 Nov 2024 23:25:25 +0100 Subject: [PATCH 3/3] few more tweaks --- .../functions/phases/spn.jl | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/phases/spn.jl b/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/phases/spn.jl index 4752a2d..d82ceaa 100644 --- a/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/phases/spn.jl +++ b/GradientBasedMinimizers/unconstrained_CG_BFGS/functions/phases/spn.jl @@ -282,26 +282,28 @@ end Calculate G excess """ @generated function get_Gex!(ph::solution_phase{n_ox, n_sf, n_eq, n_em}) where {n_ox, n_sf, n_eq, n_em} - quote a = SMatrix(ph.v_E) b = SVector(ph.p) c = SVector(ph.W) # @inbounds for i=1:n_em - Base.@nexprs $n_em i -> begin - @inline - it = 1 - Gex_v = zero(eltype(a)) + x = Base.@ntuple $n_em i -> begin + @inline + it = 1 + v = zero(eltype(a)) + aᵢ = a[i,:] for j=1:$n_em-1 - tmp = a[i,j] - b[j] + tmp = aᵢ[j] - b[j] for k=j+1:$n_em - @inbounds Gex_v -= tmp*(a[i,k]-b[k])*c[it] + @inbounds v = @muladd v - tmp*(aᵢ[k]-b[k])*c[it] it += 1 end end - @inbounds ph.Gex[i] = Gex_v; + v end + ph.Gex .= x + return nothing end end