From f2b5d2c5a8927514986eb9fd1aa772afbb4bacfc Mon Sep 17 00:00:00 2001 From: Kim Louisa Auth Date: Fri, 6 Oct 2023 09:42:51 +0200 Subject: [PATCH] FerriteCon 2023 code --- Project.toml | 5 + examples/Manifest.toml | 1722 +++++++++++++++++ examples/Project.toml | 9 + examples/figures_cellsets.jl | 114 ++ examples/graphics/base_logo.svg | 176 ++ examples/graphics/base_logo_tris.svg | 181 ++ examples/graphics/highlight_all_other.svg | 347 ++++ examples/graphics/highlight_center.svg | 347 ++++ examples/graphics/highlight_quads.svg | 347 ++++ .../graphics/incompressible_vonMises_logo.svg | 494 +++++ examples/graphics/mixed_grid.svg | 216 +++ examples/logo.geo | 52 + examples/logo_quads.geo | 53 + examples/logo_refined.geo | 53 + examples/mixed_grid.jl | 139 ++ .../paraview/incompressible_center_grain.vtu | Bin 0 -> 14814 bytes examples/paraview/linear_elasticity_quads.vtu | Bin 0 -> 6898 bytes examples/subdomain.jl | 238 +++ src/element_routines.jl | 68 + src/material.jl | 11 + test/runtests.jl | 6 - 21 files changed, 4572 insertions(+), 6 deletions(-) create mode 100644 examples/Manifest.toml create mode 100644 examples/Project.toml create mode 100644 examples/figures_cellsets.jl create mode 100644 examples/graphics/base_logo.svg create mode 100644 examples/graphics/base_logo_tris.svg create mode 100644 examples/graphics/highlight_all_other.svg create mode 100644 examples/graphics/highlight_center.svg create mode 100644 examples/graphics/highlight_quads.svg create mode 100644 examples/graphics/incompressible_vonMises_logo.svg create mode 100644 examples/graphics/mixed_grid.svg create mode 100644 examples/logo.geo create mode 100644 examples/logo_quads.geo create mode 100644 examples/logo_refined.geo create mode 100644 examples/mixed_grid.jl create mode 100644 examples/paraview/incompressible_center_grain.vtu create mode 100644 examples/paraview/linear_elasticity_quads.vtu create mode 100644 examples/subdomain.jl create mode 100644 src/element_routines.jl create mode 100644 src/material.jl delete mode 100644 test/runtests.jl diff --git a/Project.toml b/Project.toml index d49dd46..646dbd6 100644 --- a/Project.toml +++ b/Project.toml @@ -3,6 +3,11 @@ uuid = "8b6177d4-baca-44ee-a0fb-9570f97f30e9" authors = ["Kim Louisa Auth and contributors"] version = "1.0.0-DEV" +[deps] +BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" +Ferrite = "c061ca5d-56c9-439f-9c0e-210fe06d3992" +Tensors = "48a634ad-e948-5137-8d70-aa71f2a747f4" + [compat] julia = "1.7" diff --git a/examples/Manifest.toml b/examples/Manifest.toml new file mode 100644 index 0000000..c2a675f --- /dev/null +++ b/examples/Manifest.toml @@ -0,0 +1,1722 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.9.3" +manifest_format = "2.0" +project_hash = "e8e4508ef265d04080d26a99a3174347788e3630" + +[[deps.AbstractFFTs]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.5.0" +weakdeps = ["ChainRulesCore", "Test"] + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" + +[[deps.AbstractLattices]] +git-tree-sha1 = "f35684b7349da49fcc8a9e520e30e45dbb077166" +uuid = "398f06c4-4d28-53ec-89ca-5b2656b7603d" +version = "0.2.1" + +[[deps.AbstractTrees]] +git-tree-sha1 = "faa260e4cb5aba097a73fab382dd4b5819d8ec8c" +uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" +version = "0.4.4" + +[[deps.Adapt]] +deps = ["LinearAlgebra", "Requires"] +git-tree-sha1 = "76289dc51920fdc6e0013c872ba9551d54961c24" +uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" +version = "3.6.2" +weakdeps = ["StaticArrays"] + + [deps.Adapt.extensions] + AdaptStaticArraysExt = "StaticArrays" + +[[deps.Animations]] +deps = ["Colors"] +git-tree-sha1 = "e81c509d2c8e49592413bfb0bb3b08150056c79d" +uuid = "27a7e980-b3e6-11e9-2bcd-0b925532e340" +version = "0.4.1" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.1" + +[[deps.ArrayInterface]] +deps = ["Adapt", "LinearAlgebra", "Requires", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "f83ec24f76d4c8f525099b2ac475fc098138ec31" +uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" +version = "7.4.11" + + [deps.ArrayInterface.extensions] + ArrayInterfaceBandedMatricesExt = "BandedMatrices" + ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" + ArrayInterfaceCUDAExt = "CUDA" + ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" + ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" + ArrayInterfaceTrackerExt = "Tracker" + + [deps.ArrayInterface.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" + GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" + StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" + Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" + +[[deps.ArrayLayouts]] +deps = ["FillArrays", "LinearAlgebra"] +git-tree-sha1 = "9a731850434825d183af39c6e6cd0a1c32dd7e20" +uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" +version = "1.4.2" +weakdeps = ["SparseArrays"] + + [deps.ArrayLayouts.extensions] + ArrayLayoutsSparseArraysExt = "SparseArrays" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + +[[deps.Automa]] +deps = ["TranscodingStreams"] +git-tree-sha1 = "ef9997b3d5547c48b41c7bd8899e812a917b409d" +uuid = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b" +version = "0.8.4" + +[[deps.AxisAlgorithms]] +deps = ["LinearAlgebra", "Random", "SparseArrays", "WoodburyMatrices"] +git-tree-sha1 = "66771c8d21c8ff5e3a93379480a2307ac36863f7" +uuid = "13072b0f-2c55-5437-9ae7-d433b7a33950" +version = "1.0.1" + +[[deps.AxisArrays]] +deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"] +git-tree-sha1 = "16351be62963a67ac4083f748fdb3cca58bfd52f" +uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9" +version = "0.4.7" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" + +[[deps.BlockArrays]] +deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra"] +git-tree-sha1 = "54cd829dd26330c42e1cf9df68470dd4df602c61" +uuid = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" +version = "0.16.38" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "19a35467a82e236ff51bc17a3a44b69ef35185a2" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.8+0" + +[[deps.CEnum]] +git-tree-sha1 = "eb4cb44a499229b3b8426dcfb5dd85333951ff90" +uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" +version = "0.4.2" + +[[deps.CRC32c]] +uuid = "8bf52ea8-c179-5cab-976a-9e18b702a9bc" + +[[deps.CRlibm]] +deps = ["CRlibm_jll"] +git-tree-sha1 = "32abd86e3c2025db5172aa182b982debed519834" +uuid = "96374032-68de-5a5b-8d9e-752f78720389" +version = "1.0.1" + +[[deps.CRlibm_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e329286945d0cfc04456972ea732551869af1cfc" +uuid = "4e9b3aee-d8a1-5a3d-ad8b-7d824db253f0" +version = "1.0.1+0" + +[[deps.Cairo]] +deps = ["Cairo_jll", "Colors", "Glib_jll", "Graphics", "Libdl", "Pango_jll"] +git-tree-sha1 = "d0b3f8b4ad16cb0a2988c6788646a5e6a17b6b1b" +uuid = "159f3aea-2a34-519c-b102-8c37f9878175" +version = "1.0.5" + +[[deps.CairoMakie]] +deps = ["Base64", "Cairo", "Colors", "FFTW", "FileIO", "FreeType", "GeometryBasics", "LinearAlgebra", "Makie", "PrecompileTools", "SHA"] +git-tree-sha1 = "6f2fa27e8609b72e97e36ede7e6aa981d8c7c98d" +uuid = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" +version = "0.10.10" + +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "4b859a208b2397a7a623a03449e4636bdb17bcf2" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.16.1+1" + +[[deps.Calculus]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "f641eb0a4f00c343bbc32346e1217b86f3ce9dad" +uuid = "49dc2e85-a5d0-5ad3-a950-438e2897f1b9" +version = "0.5.1" + +[[deps.ChainRulesCore]] +deps = ["Compat", "LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "e30f2f4e20f7f186dc36529910beaedc60cfa644" +uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" +version = "1.16.0" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "02aa26a4cf76381be7f66e020a3eddeb27b0a092" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.2" + +[[deps.ColorBrewer]] +deps = ["Colors", "JSON", "Test"] +git-tree-sha1 = "61c5334f33d91e570e1d0c3eb5465835242582c4" +uuid = "a2cac450-b92f-5266-8821-25eda20663c8" +version = "0.4.0" + +[[deps.ColorSchemes]] +deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] +git-tree-sha1 = "67c1f244b991cad9b0aa4b7540fb758c2488b129" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.24.0" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "eb7f0f8307f71fac7c606984ea5fb2817275d6e4" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.11.4" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "SpecialFunctions", "Statistics", "TensorCore"] +git-tree-sha1 = "600cc5508d66b78aae350f7accdb58763ac18589" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.9.10" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "fc08e5930ee9a4e03f84bfb5211cb54e7769758a" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.12.10" + +[[deps.Combinatorics]] +git-tree-sha1 = "08c8b6831dc00bfea825826be0bc8336fc369860" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.0.2" + +[[deps.CommonSubexpressions]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" +uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" +version = "0.3.0" + +[[deps.Compat]] +deps = ["UUIDs"] +git-tree-sha1 = "8a62af3e248a8c4bad6b32cbbe663ae02275e32c" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.10.0" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.0.5+0" + +[[deps.ConstructionBase]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "c53fc348ca4d40d7b371e71fd52251839080cbc9" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.5.4" +weakdeps = ["IntervalSets", "StaticArrays"] + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseStaticArraysExt = "StaticArrays" + +[[deps.Contour]] +git-tree-sha1 = "d05d9e7b7aedff4e5b51a029dced05cfb6125781" +uuid = "d38c429a-6771-53c6-b99e-75d170b6e991" +version = "0.6.2" + +[[deps.DataAPI]] +git-tree-sha1 = "8da84edb865b0b5b0100c0666a9bc9a0b71c553c" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.15.0" + +[[deps.DataStructures]] +deps = ["Compat", "InteractiveUtils", "OrderedCollections"] +git-tree-sha1 = "3dbd312d370723b6bb43ba9d02fc36abade4518d" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.18.15" + +[[deps.DataValueInterfaces]] +git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" +uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" +version = "1.0.0" + +[[deps.Dates]] +deps = ["Printf"] +uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" + +[[deps.DelaunayTriangulation]] +deps = ["DataStructures", "EnumX", "ExactPredicates", "Random", "SimpleGraphs"] +git-tree-sha1 = "bea7984f7e09aeb28a3b071c420a0186cb4fabad" +uuid = "927a84f5-c5f4-47a5-9785-b46e178433df" +version = "0.8.8" + +[[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.Distances]] +deps = ["LinearAlgebra", "Statistics", "StatsAPI"] +git-tree-sha1 = "b6def76ffad15143924a2199f72a5cd883a2e8a9" +uuid = "b4f34e82-e78d-54a5-968a-f98e89d6e8f7" +version = "0.10.9" +weakdeps = ["SparseArrays"] + + [deps.Distances.extensions] + DistancesSparseArraysExt = "SparseArrays" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" + +[[deps.Distributions]] +deps = ["FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns", "Test"] +git-tree-sha1 = "3d5873f811f582873bb9871fc9c451784d5dc8c7" +uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" +version = "0.25.102" + + [deps.Distributions.extensions] + DistributionsChainRulesCoreExt = "ChainRulesCore" + DistributionsDensityInterfaceExt = "DensityInterface" + + [deps.Distributions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DensityInterface = "b429d917-457f-4dbc-8f4c-0cc954292b1d" + +[[deps.DocStringExtensions]] +deps = ["LibGit2"] +git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.3" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.6.0" + +[[deps.DualNumbers]] +deps = ["Calculus", "NaNMath", "SpecialFunctions"] +git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" +uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" +version = "0.6.8" + +[[deps.EarCut_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e3290f2d49e661fbd94046d7e3726ffcb2d41053" +uuid = "5ae413db-bbd1-5e63-b57d-d24a61df00f5" +version = "2.2.4+0" + +[[deps.EnumX]] +git-tree-sha1 = "bdb1942cd4c45e3c678fd11569d5cccd80976237" +uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" +version = "1.0.4" + +[[deps.ErrorfreeArithmetic]] +git-tree-sha1 = "d6863c556f1142a061532e79f611aa46be201686" +uuid = "90fa49ef-747e-5e6f-a989-263ba693cf1a" +version = "0.5.2" + +[[deps.ExactPredicates]] +deps = ["IntervalArithmetic", "Random", "StaticArraysCore", "Test"] +git-tree-sha1 = "276e83bc8b21589b79303b9985c321024ffdf59c" +uuid = "429591f6-91af-11e9-00e2-59fbe8cec110" +version = "2.2.5" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "4558ab818dcceaab612d1bb8c19cee87eda2b83c" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.5.0+0" + +[[deps.Extents]] +git-tree-sha1 = "5e1e4c53fa39afe63a7d356e30452249365fba99" +uuid = "411431e0-e8b7-467b-b5e0-f676ba4f2910" +version = "0.1.1" + +[[deps.FFMPEG_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "JLLWrappers", "LAME_jll", "Libdl", "Ogg_jll", "OpenSSL_jll", "Opus_jll", "PCRE2_jll", "Pkg", "Zlib_jll", "libaom_jll", "libass_jll", "libfdk_aac_jll", "libvorbis_jll", "x264_jll", "x265_jll"] +git-tree-sha1 = "74faea50c1d007c85837327f6775bea60b5492dd" +uuid = "b22a6f82-2f65-5046-a5b2-351ab43fb4e5" +version = "4.4.2+2" + +[[deps.FFTW]] +deps = ["AbstractFFTs", "FFTW_jll", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] +git-tree-sha1 = "b4fbdd20c889804969571cc589900803edda16b7" +uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" +version = "1.7.1" + +[[deps.FFTW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "c6033cc3892d0ef5bb9cd29b7f2f0331ea5184ea" +uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" +version = "3.3.10+0" + +[[deps.FLTK_jll]] +deps = ["Artifacts", "Fontconfig_jll", "FreeType2_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll", "Xorg_libXfixes_jll", "Xorg_libXft_jll", "Xorg_libXinerama_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "72a4842f93e734f378cf381dae2ca4542f019d23" +uuid = "4fce6fc7-ba6a-5f4c-898f-77e99806d6f8" +version = "1.3.8+0" + +[[deps.FastRounding]] +deps = ["ErrorfreeArithmetic", "LinearAlgebra"] +git-tree-sha1 = "6344aa18f654196be82e62816935225b3b9abe44" +uuid = "fa42c844-2597-5d31-933b-ebd51ab2693f" +version = "0.3.1" + +[[deps.Ferrite]] +deps = ["EnumX", "LinearAlgebra", "NearestNeighbors", "Preferences", "Reexport", "SparseArrays", "StaticArrays", "Tensors", "WriteVTK"] +git-tree-sha1 = "e429c3855494b5d9a4b8d047f1475801eb668c6a" +repo-rev = "master" +repo-url = "https://github.com/Ferrite-FEM/Ferrite.jl.git" +uuid = "c061ca5d-56c9-439f-9c0e-210fe06d3992" +version = "0.3.14" + + [deps.Ferrite.extensions] + FerriteBlockArrays = "BlockArrays" + FerriteMetis = "Metis" + + [deps.Ferrite.weakdeps] + BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" + Metis = "2679e427-3c69-5b7f-982b-ece356f1e94b" + +[[deps.FerriteCon2023]] +deps = ["BlockArrays", "Ferrite", "Tensors"] +path = ".." +uuid = "8b6177d4-baca-44ee-a0fb-9570f97f30e9" +version = "1.0.0-DEV" + +[[deps.FerriteGmsh]] +deps = ["Ferrite", "Gmsh"] +git-tree-sha1 = "702427f9f6b2d3e39da3bfab4eea7d02f459e404" +uuid = "4f95f4f8-b27c-4ae5-9a39-ea55e634e36b" +version = "1.0.1" + +[[deps.FileIO]] +deps = ["Pkg", "Requires", "UUIDs"] +git-tree-sha1 = "299dc33549f68299137e51e6d49a13b5b1da9673" +uuid = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" +version = "1.16.1" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" + +[[deps.FillArrays]] +deps = ["LinearAlgebra", "Random"] +git-tree-sha1 = "a20eaa3ad64254c61eeb5f230d9306e937405434" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.6.1" +weakdeps = ["SparseArrays", "Statistics"] + + [deps.FillArrays.extensions] + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStatisticsExt = "Statistics" + +[[deps.FiniteDiff]] +deps = ["ArrayInterface", "LinearAlgebra", "Requires", "Setfield", "SparseArrays"] +git-tree-sha1 = "c6e4a1fbe73b31a3dea94b1da449503b8830c306" +uuid = "6a86dc24-6348-571c-b903-95158fe2bd41" +version = "2.21.1" + + [deps.FiniteDiff.extensions] + FiniteDiffBandedMatricesExt = "BandedMatrices" + FiniteDiffBlockBandedMatricesExt = "BlockBandedMatrices" + FiniteDiffStaticArraysExt = "StaticArrays" + + [deps.FiniteDiff.weakdeps] + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.FixedPointNumbers]] +deps = ["Statistics"] +git-tree-sha1 = "335bfdceacc84c5cdf16aadc768aa5ddfc5383cc" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.4" + +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "21efd19106a55620a188615da6d3d06cd7f6ee03" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.13.93+0" + +[[deps.Formatting]] +deps = ["Printf"] +git-tree-sha1 = "8339d61043228fdd3eb658d86c926cb282ae72a8" +uuid = "59287772-0a20-5a39-b81b-1366585eb4c0" +version = "0.4.2" + +[[deps.ForwardDiff]] +deps = ["CommonSubexpressions", "DiffResults", "DiffRules", "LinearAlgebra", "LogExpFunctions", "NaNMath", "Preferences", "Printf", "Random", "SpecialFunctions"] +git-tree-sha1 = "cf0fe81336da9fb90944683b8c41984b08793dad" +uuid = "f6369f11-7733-5829-9624-2563aa707210" +version = "0.10.36" +weakdeps = ["StaticArrays"] + + [deps.ForwardDiff.extensions] + ForwardDiffStaticArraysExt = "StaticArrays" + +[[deps.FreeType]] +deps = ["CEnum", "FreeType2_jll"] +git-tree-sha1 = "50351f83f95282cf903e968d7c6e8d44a5f83d0b" +uuid = "b38be410-82b0-50bf-ab77-7b57e271db43" +version = "4.1.0" + +[[deps.FreeType2_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "d8db6a5a2fe1381c1ea4ef2cab7c69c2de7f9ea0" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.13.1+0" + +[[deps.FreeTypeAbstraction]] +deps = ["ColorVectorSpace", "Colors", "FreeType", "GeometryBasics"] +git-tree-sha1 = "38a92e40157100e796690421e34a11c107205c86" +uuid = "663a7486-cb36-511b-a19d-713bb74d65c9" +version = "0.10.0" + +[[deps.FriBidi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "aa31987c2ba8704e23c6c8ba8a4f769d5d7e4f91" +uuid = "559328eb-81f9-559d-9380-de523a88c83c" +version = "1.0.10+0" + +[[deps.Future]] +deps = ["Random"] +uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" + +[[deps.GLU_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg"] +git-tree-sha1 = "65af046f4221e27fb79b28b6ca89dd1d12bc5ec7" +uuid = "bd17208b-e95e-5925-bf81-e2f59b3e5c61" +version = "9.0.1+0" + +[[deps.GMP_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "781609d7-10c4-51f6-84f2-b8444358ff6d" +version = "6.2.1+2" + +[[deps.GPUArraysCore]] +deps = ["Adapt"] +git-tree-sha1 = "2d6ca471a6c7b536127afccfa7564b5b39227fe0" +uuid = "46192b85-c4d5-4398-a991-12ede77f4527" +version = "0.1.5" + +[[deps.GeoInterface]] +deps = ["Extents"] +git-tree-sha1 = "bb198ff907228523f3dee1070ceee63b9359b6ab" +uuid = "cf35fbd7-0cd7-5166-be24-54bfbe79505f" +version = "1.3.1" + +[[deps.GeometryBasics]] +deps = ["EarCut_jll", "Extents", "GeoInterface", "IterTools", "LinearAlgebra", "StaticArrays", "StructArrays", "Tables"] +git-tree-sha1 = "424a5a6ce7c5d97cca7bcc4eac551b97294c54af" +uuid = "5c1252a2-5f33-56bf-86c9-59e7332b4326" +version = "0.4.9" + +[[deps.Gettext_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] +git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" +uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" +version = "0.21.0+0" + +[[deps.Glib_jll]] +deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "e94c92c7bf4819685eb80186d51c43e71d4afa17" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.76.5+0" + +[[deps.Gmsh]] +deps = ["gmsh_jll"] +git-tree-sha1 = "4d4dedef84147934837c683538467cea54c44d44" +uuid = "705231aa-382f-11e9-3f0c-b7cb4346fdeb" +version = "0.2.2" + +[[deps.Graphics]] +deps = ["Colors", "LinearAlgebra", "NaNMath"] +git-tree-sha1 = "d61890399bc535850c4bf08e4e0d3a7ad0f21cbd" +uuid = "a2bd30eb-e257-5431-a919-1863eab51364" +version = "1.1.2" + +[[deps.Graphite2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "344bf40dcab1073aca04aa0df4fb092f920e4011" +uuid = "3b182d85-2403-5c21-9c21-1e1f0cc25472" +version = "1.3.14+0" + +[[deps.GridLayoutBase]] +deps = ["GeometryBasics", "InteractiveUtils", "Observables"] +git-tree-sha1 = "f57a64794b336d4990d90f80b147474b869b1bc4" +uuid = "3955a311-db13-416c-9275-1d80ed98e5e9" +version = "0.9.2" + +[[deps.Grisu]] +git-tree-sha1 = "53bb909d1151e57e2484c3d1b53e19552b887fb2" +uuid = "42e2da0e-8278-4e71-bc24-59509adca0fe" +version = "1.0.2" + +[[deps.HDF5_jll]] +deps = ["Artifacts", "JLLWrappers", "LibCURL_jll", "Libdl", "OpenSSL_jll", "Pkg", "Zlib_jll"] +git-tree-sha1 = "4cc2bb72df6ff40b055295fdef6d92955f9dede8" +uuid = "0234f1f7-429e-5d53-9886-15a909be8d59" +version = "1.12.2+2" + +[[deps.HarfBuzz_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "Graphite2_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Pkg"] +git-tree-sha1 = "129acf094d168394e80ee1dc4bc06ec835e510a3" +uuid = "2e76f6c2-a576-52d4-95c1-20adfe4de566" +version = "2.8.1+1" + +[[deps.HypergeometricFunctions]] +deps = ["DualNumbers", "LinearAlgebra", "OpenLibm_jll", "SpecialFunctions"] +git-tree-sha1 = "f218fe3736ddf977e0e772bc9a586b2383da2685" +uuid = "34004b35-14d8-5ef3-9330-4cdb6864b03a" +version = "0.3.23" + +[[deps.ImageAxes]] +deps = ["AxisArrays", "ImageBase", "ImageCore", "Reexport", "SimpleTraits"] +git-tree-sha1 = "2e4520d67b0cef90865b3ef727594d2a58e0e1f8" +uuid = "2803e5a7-5153-5ecf-9a86-9b4c37f5f5ac" +version = "0.6.11" + +[[deps.ImageBase]] +deps = ["ImageCore", "Reexport"] +git-tree-sha1 = "b51bb8cae22c66d0f6357e3bcb6363145ef20835" +uuid = "c817782e-172a-44cc-b673-b171935fbb9e" +version = "0.1.5" + +[[deps.ImageCore]] +deps = ["AbstractFFTs", "ColorVectorSpace", "Colors", "FixedPointNumbers", "Graphics", "MappedArrays", "MosaicViews", "OffsetArrays", "PaddedViews", "Reexport"] +git-tree-sha1 = "acf614720ef026d38400b3817614c45882d75500" +uuid = "a09fc81d-aa75-5fe9-8630-4744c3626534" +version = "0.9.4" + +[[deps.ImageIO]] +deps = ["FileIO", "IndirectArrays", "JpegTurbo", "LazyModules", "Netpbm", "OpenEXR", "PNGFiles", "QOI", "Sixel", "TiffImages", "UUIDs"] +git-tree-sha1 = "bca20b2f5d00c4fbc192c3212da8fa79f4688009" +uuid = "82e4d734-157c-48bb-816b-45c225c6df19" +version = "0.6.7" + +[[deps.ImageMetadata]] +deps = ["AxisArrays", "ImageAxes", "ImageBase", "ImageCore"] +git-tree-sha1 = "355e2b974f2e3212a75dfb60519de21361ad3cb7" +uuid = "bc367c6b-8a6b-528e-b4bd-a4b897500b49" +version = "0.9.9" + +[[deps.Imath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "3d09a9f60edf77f8a4d99f9e015e8fbf9989605d" +uuid = "905a6f67-0a94-5f89-b386-d35d92009cd1" +version = "3.1.7+0" + +[[deps.IndirectArrays]] +git-tree-sha1 = "012e604e1c7458645cb8b436f8fba789a51b257f" +uuid = "9b13fd28-a010-5f03-acff-a1bbcff69959" +version = "1.0.0" + +[[deps.Inflate]] +git-tree-sha1 = "5cd07aab533df5170988219191dfad0519391428" +uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" +version = "0.1.3" + +[[deps.IntegerMathUtils]] +git-tree-sha1 = "b8ffb903da9f7b8cf695a8bead8e01814aa24b30" +uuid = "18e54dd8-cb9d-406c-a71d-865a43cbb235" +version = "0.1.2" + +[[deps.IntelOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ad37c091f7d7daf900963171600d7c1c5c3ede32" +uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" +version = "2023.2.0+0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" + +[[deps.Interpolations]] +deps = ["Adapt", "AxisAlgorithms", "ChainRulesCore", "LinearAlgebra", "OffsetArrays", "Random", "Ratios", "Requires", "SharedArrays", "SparseArrays", "StaticArrays", "WoodburyMatrices"] +git-tree-sha1 = "721ec2cf720536ad005cb38f50dbba7b02419a15" +uuid = "a98d9a8b-a2ab-59e6-89dd-64a1c18fca59" +version = "0.14.7" + +[[deps.IntervalArithmetic]] +deps = ["CRlibm", "FastRounding", "LinearAlgebra", "Markdown", "Random", "RecipesBase", "RoundingEmulator", "SetRounding", "StaticArrays"] +git-tree-sha1 = "5ab7744289be503d76a944784bac3f2df7b809af" +uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" +version = "0.20.9" + +[[deps.IntervalSets]] +deps = ["Dates", "Random"] +git-tree-sha1 = "8e59ea773deee525c99a8018409f64f19fb719e6" +uuid = "8197267c-284f-5f27-9208-e0e47529a953" +version = "0.7.7" +weakdeps = ["Statistics"] + + [deps.IntervalSets.extensions] + IntervalSetsStatisticsExt = "Statistics" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.2" + +[[deps.Isoband]] +deps = ["isoband_jll"] +git-tree-sha1 = "f9b6d97355599074dc867318950adaa6f9946137" +uuid = "f1662d9f-8043-43de-a69a-05efc1cc6ff4" +version = "0.1.1" + +[[deps.IterTools]] +git-tree-sha1 = "4ced6667f9974fc5c5943fa5e2ef1ca43ea9e450" +uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" +version = "1.8.0" + +[[deps.IteratorInterfaceExtensions]] +git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" +uuid = "82899510-4779-5014-852e-03e436cf321d" +version = "1.0.0" + +[[deps.JLLWrappers]] +deps = ["Artifacts", "Preferences"] +git-tree-sha1 = "7e5d6779a1e09a36db2a7b6cff50942a0a7d0fca" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.5.0" + +[[deps.JSON]] +deps = ["Dates", "Mmap", "Parsers", "Unicode"] +git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" +uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" +version = "0.21.4" + +[[deps.JpegTurbo]] +deps = ["CEnum", "FileIO", "ImageCore", "JpegTurbo_jll", "TOML"] +git-tree-sha1 = "d65930fa2bc96b07d7691c652d701dcbe7d9cf0b" +uuid = "b835a17e-a41a-41e7-81f0-2f016b05efe0" +version = "0.1.4" + +[[deps.JpegTurbo_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6f2675ef130a300a112286de91973805fcc5ffbc" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "2.1.91+0" + +[[deps.KernelDensity]] +deps = ["Distributions", "DocStringExtensions", "FFTW", "Interpolations", "StatsBase"] +git-tree-sha1 = "90442c50e202a5cdf21a7899c66b240fdef14035" +uuid = "5ab0869b-81aa-558d-bb23-cbf5423bbe9b" +version = "0.6.7" + +[[deps.LAME_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "f6250b16881adf048549549fba48b1161acdac8c" +uuid = "c1c5ebd0-6772-5130-a774-d5fcae4a789d" +version = "3.100.1+0" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "f689897ccbe049adb19a065c495e75f372ecd42b" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "15.0.4+0" + +[[deps.LZO_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "e5b909bcf985c5e2605737d2ce278ed791b89be6" +uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" +version = "2.10.1+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "f2355693d6778a178ade15952b7ac47a4ff97996" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.3.0" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" + +[[deps.LazyModules]] +git-tree-sha1 = "a560dd966b386ac9ae60bdd3a3d3a326062d3c3e" +uuid = "8cdb02fc-e678-4876-92c5-9defec4f444e" +version = "0.3.1" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.3" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "7.84.0+0" + +[[deps.LibGit2]] +deps = ["Base64", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.10.2+0" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + +[[deps.Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.2.2+1" + +[[deps.Libgcrypt_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll", "Pkg"] +git-tree-sha1 = "64613c82a59c120435c067c2b809fc61cf5166ae" +uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" +version = "1.8.7+0" + +[[deps.Libglvnd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "6f73d1dd803986947b2c750138528a999a6c7733" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.6.0+0" + +[[deps.Libgpg_error_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "c333716e46366857753e273ce6a69ee0945a6db9" +uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" +version = "1.42.0+0" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "f9557a255370125b405568f9767d6d195822a175" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.17.0+0" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "9c30530bf0effd46e15e0fdcf2b8636e78cbbd73" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.35.0+0" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "7f3efec06033682db852f8b3bc3c1d2b0a0ab066" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.36.0+0" + +[[deps.LightXML]] +deps = ["Libdl", "XML2_jll"] +git-tree-sha1 = "e129d9391168c677cd4800f5c0abb1ed8cb3794f" +uuid = "9c8b4983-aa76-5018-a973-4c85ecc9e179" +version = "0.9.0" + +[[deps.LineSearches]] +deps = ["LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "Printf"] +git-tree-sha1 = "7bbea35cec17305fc70a0e5b4641477dc0789d9d" +uuid = "d3d80556-e9d4-5f37-9878-2ab0fcc64255" +version = "7.2.0" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + +[[deps.LinearAlgebraX]] +deps = ["LinearAlgebra", "Mods", "Permutations", "Primes", "SimplePolynomials"] +git-tree-sha1 = "558a338f1eeabe933f9c2d4052aa7c2c707c3d52" +uuid = "9b3f67b0-2d00-526e-9884-9e4938f8fb88" +version = "0.1.12" + +[[deps.LinearElasticity_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "71e8ee0f9fe0e86a8f8c7f28361e5118eab2f93f" +uuid = "18c40d15-f7cd-5a6d-bc92-87468d86c5db" +version = "5.0.0+0" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "7d6dd4e9212aebaeed356de34ccf262a3cd415aa" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "0.3.26" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" + +[[deps.METIS_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "1fd0a97409e418b78c53fac671cf4622efdf0f21" +uuid = "d00139f3-1899-568f-a2f0-47f597d42d70" +version = "5.1.2+0" + +[[deps.MKL_jll]] +deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "Pkg"] +git-tree-sha1 = "eb006abbd7041c28e0d16260e50a24f8f9104913" +uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" +version = "2023.2.0+0" + +[[deps.MMG_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "LinearElasticity_jll", "Pkg", "SCOTCH_jll"] +git-tree-sha1 = "70a59df96945782bb0d43b56d0fbfdf1ce2e4729" +uuid = "86086c02-e288-5929-a127-40944b0018b7" +version = "5.6.0+0" + +[[deps.MacroTools]] +deps = ["Markdown", "Random"] +git-tree-sha1 = "9ee1618cbf5240e6d4e0371d6f24065083f60c48" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.11" + +[[deps.Makie]] +deps = ["Animations", "Base64", "CRC32c", "ColorBrewer", "ColorSchemes", "ColorTypes", "Colors", "Contour", "DelaunayTriangulation", "Distributions", "DocStringExtensions", "Downloads", "FFMPEG_jll", "FileIO", "FixedPointNumbers", "Formatting", "FreeType", "FreeTypeAbstraction", "GeometryBasics", "GridLayoutBase", "ImageIO", "InteractiveUtils", "IntervalSets", "Isoband", "KernelDensity", "LaTeXStrings", "LinearAlgebra", "MacroTools", "MakieCore", "Markdown", "Match", "MathTeXEngine", "Observables", "OffsetArrays", "Packing", "PlotUtils", "PolygonOps", "PrecompileTools", "Printf", "REPL", "Random", "RelocatableFolders", "Setfield", "ShaderAbstractions", "Showoff", "SignedDistanceFields", "SparseArrays", "StableHashTraits", "Statistics", "StatsBase", "StatsFuns", "StructArrays", "TriplotBase", "UnicodeFun"] +git-tree-sha1 = "cf10f4b9d09da50f124ab7bcb530e57f700328f0" +uuid = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" +version = "0.19.10" + +[[deps.MakieCore]] +deps = ["Observables"] +git-tree-sha1 = "17d51182db2667962bc7e1d18b74881d0d0adbe6" +uuid = "20f20a25-4f0e-4fdf-b5d1-57303727442b" +version = "0.6.7" + +[[deps.MappedArrays]] +git-tree-sha1 = "2dab0221fe2b0f2cb6754eaa743cc266339f527e" +uuid = "dbb5928d-eab1-5f90-85c2-b9b0edb7c900" +version = "0.4.2" + +[[deps.Markdown]] +deps = ["Base64"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" + +[[deps.Match]] +git-tree-sha1 = "1d9bc5c1a6e7ee24effb93f175c9342f9154d97f" +uuid = "7eb4fadd-790c-5f42-8a69-bfa0b872bfbf" +version = "1.2.0" + +[[deps.MathTeXEngine]] +deps = ["AbstractTrees", "Automa", "DataStructures", "FreeTypeAbstraction", "GeometryBasics", "LaTeXStrings", "REPL", "RelocatableFolders", "Test", "UnicodeFun"] +git-tree-sha1 = "8f52dbaa1351ce4cb847d95568cb29e62a307d93" +uuid = "0a4f8689-d25c-4efe-a92b-7142dfc1aa53" +version = "0.5.6" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.2+0" + +[[deps.Missings]] +deps = ["DataAPI"] +git-tree-sha1 = "f66bdc5de519e8f8ae43bdc598782d35a25b1272" +uuid = "e1d29d7a-bbdc-5cf2-9ac0-f12de2c33e28" +version = "1.1.0" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" + +[[deps.Mods]] +git-tree-sha1 = "61be59e4daffff43a8cec04b5e0dc773cbb5db3a" +uuid = "7475f97c-0381-53b1-977b-4c60186c8d62" +version = "1.3.3" + +[[deps.MosaicViews]] +deps = ["MappedArrays", "OffsetArrays", "PaddedViews", "StackViews"] +git-tree-sha1 = "7b86a5d4d70a9f5cdf2dacb3cbe6d251d1a61dbe" +uuid = "e94cdb99-869f-56ef-bcf0-1ae2bcbe0389" +version = "0.3.4" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2022.10.11" + +[[deps.Multisets]] +git-tree-sha1 = "8d852646862c96e226367ad10c8af56099b4047e" +uuid = "3b2b4ff1-bcff-5658-a3ee-dbcf1ce5ac09" +version = "0.4.4" + +[[deps.NLSolversBase]] +deps = ["DiffResults", "Distributed", "FiniteDiff", "ForwardDiff"] +git-tree-sha1 = "a0b464d183da839699f4c79e7606d9d186ec172c" +uuid = "d41bc354-129a-5804-8e4c-c37616107c6c" +version = "7.8.3" + +[[deps.NaNMath]] +deps = ["OpenLibm_jll"] +git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" +uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +version = "1.0.2" + +[[deps.NearestNeighbors]] +deps = ["Distances", "StaticArrays"] +git-tree-sha1 = "2c3726ceb3388917602169bed973dbc97f1b51a8" +uuid = "b8a86587-4115-5ab1-83bc-aa920d37bbce" +version = "0.4.13" + +[[deps.Netpbm]] +deps = ["FileIO", "ImageCore", "ImageMetadata"] +git-tree-sha1 = "d92b107dbb887293622df7697a2223f9f8176fcd" +uuid = "f09324ee-3d7c-5217-9330-fc30815ba969" +version = "1.1.1" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.2.0" + +[[deps.OCCT_jll]] +deps = ["Artifacts", "FreeType2_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll", "Xorg_libXfixes_jll", "Xorg_libXft_jll", "Xorg_libXinerama_jll", "Xorg_libXrender_jll"] +git-tree-sha1 = "acc8099ae8ed10226dc8424fb256ec9fe367a1f0" +uuid = "baad4e97-8daa-5946-aac2-2edac59d34e1" +version = "7.6.2+2" + +[[deps.Observables]] +git-tree-sha1 = "6862738f9796b3edc1c09d0890afce4eca9e7e93" +uuid = "510215fc-4207-5dde-b226-833fc4488ee2" +version = "0.5.4" + +[[deps.OffsetArrays]] +deps = ["Adapt"] +git-tree-sha1 = "2ac17d29c523ce1cd38e27785a7d23024853a4bb" +uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" +version = "1.12.10" + +[[deps.Ogg_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "887579a3eb005446d514ab7aeac5d1d027658b8f" +uuid = "e7412a2a-1a6e-54c0-be00-318e2571c051" +version = "1.3.5+1" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.21+4" + +[[deps.OpenEXR]] +deps = ["Colors", "FileIO", "OpenEXR_jll"] +git-tree-sha1 = "327f53360fdb54df7ecd01e96ef1983536d1e633" +uuid = "52e1d378-f018-4a11-a4be-720524705ac7" +version = "0.3.2" + +[[deps.OpenEXR_jll]] +deps = ["Artifacts", "Imath_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "a4ca623df1ae99d09bc9868b008262d0c0ac1e4f" +uuid = "18a262bb-aa17-5467-a713-aee519bc75cb" +version = "3.1.4+0" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.1+0" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a12e56c72edee3ce6b96667745e6cbbe5498f200" +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "1.1.23+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.5+0" + +[[deps.Optim]] +deps = ["Compat", "FillArrays", "ForwardDiff", "LineSearches", "LinearAlgebra", "NLSolversBase", "NaNMath", "Parameters", "PositiveFactorizations", "Printf", "SparseArrays", "StatsBase"] +git-tree-sha1 = "963b004d15216f8129f6c0f7d187efa136570be0" +uuid = "429524aa-4258-5aef-a3af-852621145aeb" +version = "1.7.7" + +[[deps.Opus_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51a08fb14ec28da2ec7a927c4337e4332c2a4720" +uuid = "91d4177d-7536-5919-b921-800302f37372" +version = "1.3.2+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "2e73fe17cac3c62ad1aebe70d44c963c3cfdc3e3" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.6.2" + +[[deps.PCRE2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" +version = "10.42.0+0" + +[[deps.PDMats]] +deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] +git-tree-sha1 = "bf6085e8bd7735e68c210c6e5d81f9a6fe192060" +uuid = "90014a1f-27ba-587c-ab20-58faa44d9150" +version = "0.11.19" + +[[deps.PNGFiles]] +deps = ["Base64", "CEnum", "ImageCore", "IndirectArrays", "OffsetArrays", "libpng_jll"] +git-tree-sha1 = "9b02b27ac477cad98114584ff964e3052f656a0f" +uuid = "f57f5aa1-a3ce-4bc8-8ab9-96f992907883" +version = "0.4.0" + +[[deps.Packing]] +deps = ["GeometryBasics"] +git-tree-sha1 = "ec3edfe723df33528e085e632414499f26650501" +uuid = "19eb6ba3-879d-56ad-ad62-d5c202156566" +version = "0.5.0" + +[[deps.PaddedViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "0fac6313486baae819364c52b4f483450a9d793f" +uuid = "5432bcbf-9aad-5242-b902-cca2824c8663" +version = "0.5.12" + +[[deps.Pango_jll]] +deps = ["Artifacts", "Cairo_jll", "Fontconfig_jll", "FreeType2_jll", "FriBidi_jll", "Glib_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "4745216e94f71cb768d58330b059c9b76f32cb66" +uuid = "36c8627f-9965-5494-a995-c6b170f724f3" +version = "1.50.14+0" + +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "716e24b21538abc91f6205fd1d8363f39b442851" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.7.2" + +[[deps.Permutations]] +deps = ["Combinatorics", "LinearAlgebra", "Random"] +git-tree-sha1 = "25e2bb0973689836bf164ecb960762f1bb8794dd" +uuid = "2ae35dd2-176d-5d53-8349-f30d82d94d4f" +version = "0.4.17" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] +git-tree-sha1 = "64779bc4c9784fee475689a1752ef4d5747c5e87" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.42.2+0" + +[[deps.Pkg]] +deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Serialization", "TOML", "Tar", "UUIDs", "p7zip_jll"] +uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" +version = "1.9.2" + +[[deps.PkgVersion]] +deps = ["Pkg"] +git-tree-sha1 = "f9501cc0430a26bc3d156ae1b5b0c1b47af4d6da" +uuid = "eebad327-c553-4316-9ea0-9fa01ccd7688" +version = "0.3.3" + +[[deps.PlotUtils]] +deps = ["ColorSchemes", "Colors", "Dates", "PrecompileTools", "Printf", "Random", "Reexport", "Statistics"] +git-tree-sha1 = "f92e1315dadf8c46561fb9396e525f7200cdc227" +uuid = "995b91a9-d308-5afd-9ec6-746e21dbc043" +version = "1.3.5" + +[[deps.PolygonOps]] +git-tree-sha1 = "77b3d3605fc1cd0b42d95eba87dfcd2bf67d5ff6" +uuid = "647866c9-e3ac-4575-94e7-e3d426903924" +version = "0.1.2" + +[[deps.Polynomials]] +deps = ["LinearAlgebra", "RecipesBase", "Setfield", "SparseArrays"] +git-tree-sha1 = "ea78a2764f31715093de7ab495e12c0187f231d1" +uuid = "f27b6e38-b328-58d1-80ce-0feddd5e7a45" +version = "4.0.4" + + [deps.Polynomials.extensions] + PolynomialsChainRulesCoreExt = "ChainRulesCore" + PolynomialsFFTWExt = "FFTW" + PolynomialsMakieCoreExt = "MakieCore" + PolynomialsMutableArithmeticsExt = "MutableArithmetics" + + [deps.Polynomials.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" + MakieCore = "20f20a25-4f0e-4fdf-b5d1-57303727442b" + MutableArithmetics = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" + +[[deps.PositiveFactorizations]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "17275485f373e6673f7e7f97051f703ed5b15b20" +uuid = "85a6dd25-e78a-55b7-8502-1745935b8125" +version = "0.2.4" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "03b4c25b43cb84cee5c90aa9b5ea0a78fd848d2f" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.2.0" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "00805cd429dcb4870060ff49ef443486c262e38e" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.4.1" + +[[deps.Primes]] +deps = ["IntegerMathUtils"] +git-tree-sha1 = "4c9f306e5d6603ae203c2000dd460d81a5251489" +uuid = "27ebfcd6-29c5-5fa9-bf4b-fb8fc14df3ae" +version = "0.5.4" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" + +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "00099623ffee15972c16111bcf84c58a0051257c" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.9.0" + +[[deps.QOI]] +deps = ["ColorTypes", "FileIO", "FixedPointNumbers"] +git-tree-sha1 = "18e8f4d1426e965c7b532ddd260599e1510d26ce" +uuid = "4b34888f-f399-49d4-9bb3-47ed5cae4e65" +version = "1.0.0" + +[[deps.QuadGK]] +deps = ["DataStructures", "LinearAlgebra"] +git-tree-sha1 = "9ebcd48c498668c7fa0e97a9cae873fbee7bfee1" +uuid = "1fd47b50-473d-5c70-9696-f719f8f3bcdc" +version = "2.9.1" + +[[deps.REPL]] +deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[[deps.Random]] +deps = ["SHA", "Serialization"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" + +[[deps.RangeArrays]] +git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5" +uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d" +version = "0.3.2" + +[[deps.Ratios]] +deps = ["Requires"] +git-tree-sha1 = "1342a47bf3260ee108163042310d26f2be5ec90b" +uuid = "c84ed2f1-dad5-54f0-aa8e-dbefe2724439" +version = "0.4.5" +weakdeps = ["FixedPointNumbers"] + + [deps.Ratios.extensions] + RatiosFixedPointNumbersExt = "FixedPointNumbers" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.RelocatableFolders]] +deps = ["SHA", "Scratch"] +git-tree-sha1 = "90bc7a7c96410424509e4263e277e43250c05691" +uuid = "05181044-ff0b-4ac5-8273-598c1e38db00" +version = "1.0.0" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.0" + +[[deps.RingLists]] +deps = ["Random"] +git-tree-sha1 = "f39da63aa6d2d88e0c1bd20ed6a3ff9ea7171ada" +uuid = "286e9d63-9694-5540-9e3c-4e6708fa07b2" +version = "0.2.8" + +[[deps.Rmath]] +deps = ["Random", "Rmath_jll"] +git-tree-sha1 = "f65dcb5fa46aee0cf9ed6274ccbd597adc49aa7b" +uuid = "79098fc4-a85e-5d69-aa6a-4863f24498fa" +version = "0.7.1" + +[[deps.Rmath_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "6ed52fdd3382cf21947b15e8870ac0ddbff736da" +uuid = "f50d1b31-88e8-58de-be2c-1cc44531875f" +version = "0.4.0+0" + +[[deps.RoundingEmulator]] +git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b" +uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705" +version = "0.2.1" + +[[deps.SCOTCH_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "7110b749766853054ce8a2afaa73325d72d32129" +uuid = "a8d0f55d-b80e-548d-aff6-1a04c175f0f9" +version = "6.1.3+0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.SIMD]] +deps = ["PrecompileTools"] +git-tree-sha1 = "0e270732477b9e551d884e6b07e23bb2ec947790" +uuid = "fdea26ae-647d-5447-a871-4b548cad5224" +version = "3.4.5" + +[[deps.Scratch]] +deps = ["Dates"] +git-tree-sha1 = "30449ee12237627992a99d5e30ae63e4d78cd24a" +uuid = "6c6a2e73-6563-6170-7368-637461726353" +version = "1.2.0" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" + +[[deps.SetRounding]] +git-tree-sha1 = "d7a25e439d07a17b7cdf97eecee504c50fedf5f6" +uuid = "3cc68bcd-71a2-5612-b932-767ffbe40ab0" +version = "0.2.1" + +[[deps.Setfield]] +deps = ["ConstructionBase", "Future", "MacroTools", "StaticArraysCore"] +git-tree-sha1 = "e2cc6d8c88613c05e1defb55170bf5ff211fbeac" +uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" +version = "1.1.1" + +[[deps.ShaderAbstractions]] +deps = ["ColorTypes", "FixedPointNumbers", "GeometryBasics", "LinearAlgebra", "Observables", "StaticArrays", "StructArrays", "Tables"] +git-tree-sha1 = "db0219befe4507878b1a90e07820fed3e62c289d" +uuid = "65257c39-d410-5151-9873-9b3e5be5013e" +version = "0.4.0" + +[[deps.SharedArrays]] +deps = ["Distributed", "Mmap", "Random", "Serialization"] +uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" + +[[deps.Showoff]] +deps = ["Dates", "Grisu"] +git-tree-sha1 = "91eddf657aca81df9ae6ceb20b959ae5653ad1de" +uuid = "992d4aef-0814-514b-bc4d-f2e9a6c4116f" +version = "1.0.3" + +[[deps.SignedDistanceFields]] +deps = ["Random", "Statistics", "Test"] +git-tree-sha1 = "d263a08ec505853a5ff1c1ebde2070419e3f28e9" +uuid = "73760f76-fbc4-59ce-8f25-708e95d2df96" +version = "0.4.0" + +[[deps.SimpleGraphs]] +deps = ["AbstractLattices", "Combinatorics", "DataStructures", "IterTools", "LightXML", "LinearAlgebra", "LinearAlgebraX", "Optim", "Primes", "Random", "RingLists", "SimplePartitions", "SimplePolynomials", "SimpleRandom", "SparseArrays", "Statistics"] +git-tree-sha1 = "b608903049d11cc557c45e03b3a53e9260579c19" +uuid = "55797a34-41de-5266-9ec1-32ac4eb504d3" +version = "0.8.4" + +[[deps.SimplePartitions]] +deps = ["AbstractLattices", "DataStructures", "Permutations"] +git-tree-sha1 = "dcc02923a53f316ab97da8ef3136e80b4543dbf1" +uuid = "ec83eff0-a5b5-5643-ae32-5cbf6eedec9d" +version = "0.3.0" + +[[deps.SimplePolynomials]] +deps = ["Mods", "Multisets", "Polynomials", "Primes"] +git-tree-sha1 = "d537c31cf9995236166e3e9afc424a5a1c59ff9d" +uuid = "cc47b68c-3164-5771-a705-2bc0097375a0" +version = "0.2.14" + +[[deps.SimpleRandom]] +deps = ["Distributions", "LinearAlgebra", "Random"] +git-tree-sha1 = "3a6fb395e37afab81aeea85bae48a4db5cd7244a" +uuid = "a6525b86-64cd-54fa-8f65-62fc48bdc0e8" +version = "0.3.1" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "5d7e3f4e11935503d3ecaf7186eac40602e7d231" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.4" + +[[deps.Sixel]] +deps = ["Dates", "FileIO", "ImageCore", "IndirectArrays", "OffsetArrays", "REPL", "libsixel_jll"] +git-tree-sha1 = "2da10356e31327c7096832eb9cd86307a50b1eb6" +uuid = "45858cf5-a6b0-47a3-bbea-62219f50df47" +version = "0.1.3" + +[[deps.Sockets]] +uuid = "6462fe0b-24de-5631-8697-dd941f90decc" + +[[deps.SortingAlgorithms]] +deps = ["DataStructures"] +git-tree-sha1 = "c60ec5c62180f27efea3ba2908480f8055e17cee" +uuid = "a2af1166-a08f-5f64-846c-94a0d3cef48c" +version = "1.1.1" + +[[deps.SparseArrays]] +deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] +uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "e2cfc4012a19088254b3950b85c3c1d8882d864d" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.3.1" +weakdeps = ["ChainRulesCore"] + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + +[[deps.StableHashTraits]] +deps = ["Compat", "SHA", "Tables", "TupleTools"] +git-tree-sha1 = "19df33ca14f24a3ad2df9e89124bd5f5cc8467a2" +uuid = "c5dd0088-6c3f-4803-b00e-f31a60c170fa" +version = "1.0.1" + +[[deps.StackViews]] +deps = ["OffsetArrays"] +git-tree-sha1 = "46e589465204cd0c08b4bd97385e4fa79a0c770c" +uuid = "cae243ae-269e-4f55-b966-ac2d0dc13c15" +version = "0.1.1" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "Random", "StaticArraysCore"] +git-tree-sha1 = "0adf069a2a490c47273727e029371b31d44b72b2" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.6.5" +weakdeps = ["Statistics"] + + [deps.StaticArrays.extensions] + StaticArraysStatisticsExt = "Statistics" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "36b3d696ce6366023a0ea192b4cd442268995a0d" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.2" + +[[deps.Statistics]] +deps = ["LinearAlgebra", "SparseArrays"] +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.9.0" + +[[deps.StatsAPI]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1ff449ad350c9c4cbc756624d6f8a8c3ef56d3ed" +uuid = "82ae8749-77ed-4fe6-ae5f-f523153014b0" +version = "1.7.0" + +[[deps.StatsBase]] +deps = ["DataAPI", "DataStructures", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] +git-tree-sha1 = "1d77abd07f617c4868c33d4f5b9e1dbb2643c9cf" +uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" +version = "0.34.2" + +[[deps.StatsFuns]] +deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] +git-tree-sha1 = "f625d686d5a88bcd2b15cd81f18f98186fdc0c9a" +uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" +version = "1.3.0" + + [deps.StatsFuns.extensions] + StatsFunsChainRulesCoreExt = "ChainRulesCore" + StatsFunsInverseFunctionsExt = "InverseFunctions" + + [deps.StatsFuns.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.StructArrays]] +deps = ["Adapt", "ConstructionBase", "DataAPI", "GPUArraysCore", "StaticArraysCore", "Tables"] +git-tree-sha1 = "0a3db38e4cce3c54fe7a71f831cd7b6194a54213" +uuid = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" +version = "0.6.16" + +[[deps.SuiteSparse]] +deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] +uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "Pkg", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "5.10.1+6" + +[[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", "LinearAlgebra", "OrderedCollections", "TableTraits"] +git-tree-sha1 = "a1f34829d5ac0ef499f6d84428bd6b4c71f02ead" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.11.0" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.TensorCore]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" +uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" +version = "0.1.1" + +[[deps.Tensors]] +deps = ["ForwardDiff", "LinearAlgebra", "PrecompileTools", "SIMD", "StaticArrays", "Statistics"] +git-tree-sha1 = "bcbb366323add300742c9e4a5447e584640aeff2" +uuid = "48a634ad-e948-5137-8d70-aa71f2a747f4" +version = "1.15.0" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.TiffImages]] +deps = ["ColorTypes", "DataStructures", "DocStringExtensions", "FileIO", "FixedPointNumbers", "IndirectArrays", "Inflate", "Mmap", "OffsetArrays", "PkgVersion", "ProgressMeter", "UUIDs"] +git-tree-sha1 = "b7dc44cb005a7ef743b8fe98970afef003efdce7" +uuid = "731e570b-9d59-4bfa-96dc-6df516fadf69" +version = "0.6.6" + +[[deps.TranscodingStreams]] +deps = ["Random", "Test"] +git-tree-sha1 = "9a6ae7ed916312b41236fcef7e0af564ef934769" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.9.13" + +[[deps.TriplotBase]] +git-tree-sha1 = "4d4ed7f294cda19382ff7de4c137d24d16adc89b" +uuid = "981d1d27-644d-49a2-9326-4793e63143c3" +version = "0.1.0" + +[[deps.TupleTools]] +git-tree-sha1 = "155515ed4c4236db30049ac1495e2969cc06be9d" +uuid = "9d95972d-f1c8-5527-a6e0-b4b365fa01f6" +version = "1.4.3" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" + +[[deps.UnPack]] +git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" +uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" +version = "1.0.2" + +[[deps.Unicode]] +uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.UnicodeFun]] +deps = ["REPL"] +git-tree-sha1 = "53915e50200959667e78a92a418594b428dffddf" +uuid = "1cfade01-22cf-5700-b092-accc4b62d6e1" +version = "0.4.1" + +[[deps.VTKBase]] +git-tree-sha1 = "c2d0db3ef09f1942d08ea455a9e252594be5f3b6" +uuid = "4004b06d-e244-455f-a6ce-a5f9919cc534" +version = "1.0.1" + +[[deps.WoodburyMatrices]] +deps = ["LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "de67fa59e33ad156a590055375a30b23c40299d3" +uuid = "efce3f68-66dc-5838-9240-27a6d6f5f9b6" +version = "0.5.5" + +[[deps.WriteVTK]] +deps = ["Base64", "CodecZlib", "FillArrays", "LightXML", "TranscodingStreams", "VTKBase"] +git-tree-sha1 = "7b46936613e41cfe1c6a5897d243ddcab8feabec" +uuid = "64499a7a-5c06-52f2-abe2-ccb03c286192" +version = "1.18.0" + +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] +git-tree-sha1 = "24b81b59bd35b3c42ab84fa589086e19be919916" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.11.5+0" + +[[deps.XSLT_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "Pkg", "XML2_jll", "Zlib_jll"] +git-tree-sha1 = "91844873c4085240b95e795f692c4cec4d805f8a" +uuid = "aed1982a-8fda-507f-9586-7b0439959a61" +version = "1.1.34+0" + +[[deps.Xorg_libX11_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] +git-tree-sha1 = "afead5aba5aa507ad5a3bf01f58f82c8d1403495" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.8.6+0" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6035850dcc70518ca32f012e46015b9beeda49d8" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.11+0" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "34d526d318358a859d7de23da945578e8e8727b7" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.4+0" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "b7c0aa8c376b31e4852b360222848637f481f8c3" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.4+4" + +[[deps.Xorg_libXfixes_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "0e0dc7431e7a0587559f9294aeec269471c991a4" +uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" +version = "5.0.3+4" + +[[deps.Xorg_libXft_jll]] +deps = ["Fontconfig_jll", "Libdl", "Pkg", "Xorg_libXrender_jll"] +git-tree-sha1 = "754b542cdc1057e0a2f1888ec5414ee17a4ca2a1" +uuid = "2c808117-e144-5220-80d1-69d4eaa9352c" +version = "2.3.3+1" + +[[deps.Xorg_libXinerama_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libXext_jll"] +git-tree-sha1 = "26be8b1c342929259317d8b9f7b53bf2bb73b123" +uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" +version = "1.1.4+4" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Xorg_libX11_jll"] +git-tree-sha1 = "19560f30fd49f4d4efbe7002a1037f8c43d43b96" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.10+4" + +[[deps.Xorg_libpthread_stubs_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9" +uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" +version = "0.1.1+0" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] +git-tree-sha1 = "b4bfde5d5b652e22b9c790ad00af08b6d042b97d" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.15.0+0" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e92a1a012a10506618f10b7047e478403a046c77" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.5.0+0" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+0" + +[[deps.gmsh_jll]] +deps = ["Artifacts", "Cairo_jll", "CompilerSupportLibraries_jll", "FLTK_jll", "FreeType2_jll", "GLU_jll", "GMP_jll", "HDF5_jll", "JLLWrappers", "JpegTurbo_jll", "LLVMOpenMP_jll", "Libdl", "Libglvnd_jll", "METIS_jll", "MMG_jll", "OCCT_jll", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll", "Xorg_libXfixes_jll", "Xorg_libXft_jll", "Xorg_libXinerama_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "d4cf3bb87fa0669f569e51f6f06cd083771bab65" +uuid = "630162c2-fc9b-58b3-9910-8442a8a132e6" +version = "4.10.2+1" + +[[deps.isoband_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "51b5eeb3f98367157a7a12a1fb0aa5328946c03c" +uuid = "9a68df92-36a6-505f-a73e-abb412b6bfb4" +version = "0.2.3+0" + +[[deps.libaom_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "3a2ea60308f0996d26f1e5354e10c24e9ef905d4" +uuid = "a4ae2306-e953-59d6-aa16-d00cac43593b" +version = "3.4.0+0" + +[[deps.libass_jll]] +deps = ["Artifacts", "Bzip2_jll", "FreeType2_jll", "FriBidi_jll", "HarfBuzz_jll", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "5982a94fcba20f02f42ace44b9894ee2b140fe47" +uuid = "0ac62f75-1d6f-5e53-bd7c-93b484bb37c0" +version = "0.15.1+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.8.0+0" + +[[deps.libfdk_aac_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "daacc84a041563f965be61859a36e17c4e4fcd55" +uuid = "f638f0a6-7fb0-5443-88ba-1cc74229b280" +version = "2.0.2+0" + +[[deps.libpng_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "94d180a6d2b5e55e447e2d27a29ed04fe79eb30c" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.38+0" + +[[deps.libsixel_jll]] +deps = ["Artifacts", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Pkg", "libpng_jll"] +git-tree-sha1 = "d4f63314c8aa1e48cd22aa0c17ed76cd1ae48c3c" +uuid = "075b6546-f08a-558a-be8f-8157d0f608a5" +version = "1.10.3+0" + +[[deps.libvorbis_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Ogg_jll", "Pkg"] +git-tree-sha1 = "b910cb81ef3fe6e78bf6acee440bda86fd6ae00c" +uuid = "f27f6e37-5d2b-51aa-960f-b287f2bc3b7a" +version = "1.3.7+1" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.48.0+0" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.4.0+0" + +[[deps.x264_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "4fea590b89e6ec504593146bf8b988b2c00922b2" +uuid = "1270edf5-f2f9-52d2-97e9-ab00b5d0237a" +version = "2021.5.5+0" + +[[deps.x265_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "ee567a171cce03570d77ad3a43e90218e38937a9" +uuid = "dfaa095f-4041-5dcd-9319-2fabd8486b76" +version = "3.5.0+0" diff --git a/examples/Project.toml b/examples/Project.toml new file mode 100644 index 0000000..5bea5cb --- /dev/null +++ b/examples/Project.toml @@ -0,0 +1,9 @@ +[deps] +BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" +CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" +Colors = "5ae59095-9a9b-59fe-a467-6f913c188581" +Ferrite = "c061ca5d-56c9-439f-9c0e-210fe06d3992" +FerriteCon2023 = "8b6177d4-baca-44ee-a0fb-9570f97f30e9" +FerriteGmsh = "4f95f4f8-b27c-4ae5-9a39-ea55e634e36b" +SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" +Tensors = "48a634ad-e948-5137-8d70-aa71f2a747f4" diff --git a/examples/figures_cellsets.jl b/examples/figures_cellsets.jl new file mode 100644 index 0000000..7878e14 --- /dev/null +++ b/examples/figures_cellsets.jl @@ -0,0 +1,114 @@ +using CairoMakie +using Colors + +grid = togrid("logo_quads.geo"); +data = [[Point2f(grid.nodes[i].x) for i in c.nodes] for c in grid.cells] + +logo_colors = Dict( + "1" => Colors.JULIA_LOGO_COLORS.purple, + "2" => Colors.JULIA_LOGO_COLORS.red, + "3" => Colors.JULIA_LOGO_COLORS.red, + "4" => Colors.JULIA_LOGO_COLORS.blue, + "5" => Colors.JULIA_LOGO_COLORS.purple, + "6" => Colors.JULIA_LOGO_COLORS.green, + ) + +isdir("graphics") || mkdir("graphics") + +################ +# base version # +################ +f = Figure(; backgroundcolor=:transparent) +ax = Axis(f[1,1]; backgroundcolor=:transparent) +colsize!(f.layout, 1, Aspect(1,1)) # correct aspect ratio +hidedecorations!(ax); hidespines!(ax) +resize_to_layout!(f) + +for (cellset_name, color) in pairs(logo_colors) + cellset = getcellset(grid, cellset_name) + _data = [[Point2f(grid.nodes[i].x) for i in grid.cells[cellidx].nodes] for cellidx in cellset] + poly!(_data; strokecolor=:black, strokewidth=1, color, transparency=true) +end +save("graphics/base_logo.svg", f) + +################### +# highlight quads # +################### +f = Figure(; backgroundcolor=:transparent) +ax = Axis(f[1,1]; backgroundcolor=:transparent) +colsize!(f.layout, 1, Aspect(1,1)) # correct aspect ratio +hidedecorations!(ax); hidespines!(ax) +resize_to_layout!(f) + +for (cellset_name, color) in pairs(logo_colors) + cellset = getcellset(grid, cellset_name) + _data = [[Point2f(grid.nodes[i].x) for i in grid.cells[cellidx].nodes] for cellidx in cellset] + poly!(_data; strokecolor=:grey, strokewidth=1, color, transparency=true) +end + +highlight_cellset = getcellset(grid, "quadrilaterals") +other_cells = setdiff(1:getncells(grid), highlight_cellset) +poly!(data[collect(other_cells)]; color=(:black, 0.5), transparency=true) +poly!(data[collect(highlight_cellset)]; strokecolor=:black, strokewidth=2, color=:transparent, transparency=true) +save("graphics/highlight_quads.svg", f) + +########################## +# highlight center grain # +########################## +f = Figure(; backgroundcolor=:transparent) +ax = Axis(f[1,1]; backgroundcolor=:transparent) +colsize!(f.layout, 1, Aspect(1,1)) # correct aspect ratio +hidedecorations!(ax); hidespines!(ax) +resize_to_layout!(f) + +for (cellset_name, color) in pairs(logo_colors) + cellset = getcellset(grid, cellset_name) + _data = [[Point2f(grid.nodes[i].x) for i in grid.cells[cellidx].nodes] for cellidx in cellset] + poly!(_data; strokecolor=:grey, strokewidth=1, color, transparency=true) +end + +highlight_cellset = getcellset(grid, "green") +other_cells = setdiff(1:getncells(grid), highlight_cellset) +poly!(data[collect(other_cells)]; color=(:black, 0.5), transparency=true) +poly!(data[collect(highlight_cellset)]; strokecolor=:black, strokewidth=2, color=:transparent, transparency=true) +save("graphics/highlight_center.svg", f) + +####################### +# highlight all other # +####################### +f = Figure(; backgroundcolor=:transparent) +ax = Axis(f[1,1]; backgroundcolor=:transparent) +colsize!(f.layout, 1, Aspect(1,1)) # correct aspect ratio +hidedecorations!(ax); hidespines!(ax) +resize_to_layout!(f) + +for (cellset_name, color) in pairs(logo_colors) + cellset = getcellset(grid, cellset_name) + _data = [[Point2f(grid.nodes[i].x) for i in grid.cells[cellidx].nodes] for cellidx in cellset] + poly!(_data; strokecolor=:grey, strokewidth=1, color, transparency=true) +end + +other_cells = union(getcellset(grid, "quadrilaterals"), getcellset(grid, "6")) +highlight_cellset = setdiff(1:getncells(grid), other_cells) +poly!(data[collect(other_cells)]; color=(:black, 0.5), transparency=true) +poly!(data[collect(highlight_cellset)]; strokecolor=:black, strokewidth=2, color=:transparent, transparency=true) +save("graphics/highlight_all_other.svg", f) + +########################## +# base version triangles # +########################## +grid = togrid("logo.geo"); +data = [[Point2f(grid.nodes[i].x) for i in c.nodes] for c in grid.cells] + +f = Figure(; backgroundcolor=:transparent) +ax = Axis(f[1,1]; backgroundcolor=:transparent) +colsize!(f.layout, 1, Aspect(1,1)) # correct aspect ratio +hidedecorations!(ax); hidespines!(ax) +resize_to_layout!(f) + +for (cellset_name, color) in pairs(logo_colors) + cellset = getcellset(grid, cellset_name) + _data = [[Point2f(grid.nodes[i].x) for i in grid.cells[cellidx].nodes] for cellidx in cellset] + poly!(_data; strokecolor=:black, strokewidth=1, color, transparency=true) +end +save("graphics/base_logo_tris.svg", f) diff --git a/examples/graphics/base_logo.svg b/examples/graphics/base_logo.svg new file mode 100644 index 0000000..906e5f2 --- /dev/null +++ b/examples/graphics/base_logo.svg @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/graphics/base_logo_tris.svg b/examples/graphics/base_logo_tris.svg new file mode 100644 index 0000000..77f5696 --- /dev/null +++ b/examples/graphics/base_logo_tris.svg @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/graphics/highlight_all_other.svg b/examples/graphics/highlight_all_other.svg new file mode 100644 index 0000000..bf2fa4e --- /dev/null +++ b/examples/graphics/highlight_all_other.svg @@ -0,0 +1,347 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/graphics/highlight_center.svg b/examples/graphics/highlight_center.svg new file mode 100644 index 0000000..a54d600 --- /dev/null +++ b/examples/graphics/highlight_center.svg @@ -0,0 +1,347 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/graphics/highlight_quads.svg b/examples/graphics/highlight_quads.svg new file mode 100644 index 0000000..4af5b20 --- /dev/null +++ b/examples/graphics/highlight_quads.svg @@ -0,0 +1,347 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/graphics/incompressible_vonMises_logo.svg b/examples/graphics/incompressible_vonMises_logo.svg new file mode 100644 index 0000000..db250a6 --- /dev/null +++ b/examples/graphics/incompressible_vonMises_logo.svg @@ -0,0 +1,494 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/graphics/mixed_grid.svg b/examples/graphics/mixed_grid.svg new file mode 100644 index 0000000..174a7f1 --- /dev/null +++ b/examples/graphics/mixed_grid.svg @@ -0,0 +1,216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/logo.geo b/examples/logo.geo new file mode 100644 index 0000000..9e4f45b --- /dev/null +++ b/examples/logo.geo @@ -0,0 +1,52 @@ +Point (1) = {1.000000000000,1.000000000000,0.000000000000}; +Point (2) = {1.000000000000,0.379757979263,-0.000000000000}; +Point (3) = {0.801534880751,0.454963545532,-0.000000000000}; +Point (4) = {0.656107331955,1.000000000000,-0.000000000000}; +Point (5) = {0.600672553037,0.775245709538,-0.000000000000}; +Point (6) = {0.000000000000,1.000000000000,0.000000000000}; +Point (7) = {0.392825178821,0.672136259831,-0.000000000000}; +Point (8) = {1.000000000000,0.000000000000,0.000000000000}; +Point (9) = {0.547800422194,-0.000000000000,-0.000000000000}; +Point (10) = {0.488710023938,0.224380304618,-0.000000000000}; +Point (11) = {0.000000000000,0.000000000000,0.000000000000}; +Point (12) = {-0.000000000000,0.324566579562,-0.000000000000}; +Point (13) = {0.172066723668,0.367888021869,-0.000000000000}; +Line (1) = {2,1}; +Line (2) = {1,4}; +Line (3) = {2,3}; +Line (4) = {3,5}; +Line (5) = {5,4}; +Line (6) = {4,6}; +Line (7) = {7,6}; +Line (8) = {5,7}; +Line (9) = {8,2}; +Line (10) = {9,8}; +Line (11) = {9,10}; +Line (12) = {10,3}; +Line (13) = {12,11}; +Line (14) = {11,9}; +Line (15) = {12,13}; +Line (16) = {13,10}; +Line (17) = {6,12}; +Line (18) = {7,13}; +Line Loop (1) = {-1,3,4,5,-2}; +Plane Surface (1) = {1}; Physical Surface (1) = {1}; +Line Loop (2) = {7,-6,-5,8}; +Plane Surface (2) = {2}; Physical Surface (2) = {2}; +Line Loop (3) = {-10,11,12,-3,-9}; +Plane Surface (3) = {3}; Physical Surface (3) = {3}; +Line Loop (4) = {-11,-14,-13,15,16}; +Plane Surface (4) = {4}; Physical Surface (4) = {4}; +Line Loop (5) = {-7,18,-15,-17}; +Plane Surface (5) = {5}; Physical Surface (5) = {5}; +Line Loop (6) = {-16,-18,-8,-4,-12}; +Plane Surface (6) = {6}; Physical Surface (6) = {6}; + +ReverseMesh Surface{1,2,3,4,5,6}; + +Physical Curve("left") = {17,13}; +Physical Curve("bottom") = {14,10}; +Physical Curve("right") = {9,1}; +Physical Curve("top") = {2,6}; + +Physical Surface("green") = {6}; diff --git a/examples/logo_quads.geo b/examples/logo_quads.geo new file mode 100644 index 0000000..dfee0c3 --- /dev/null +++ b/examples/logo_quads.geo @@ -0,0 +1,53 @@ +Point (1) = {1.000000000000,1.000000000000,0.000000000000}; +Point (2) = {1.000000000000,0.379757979263,-0.000000000000}; +Point (3) = {0.801534880751,0.454963545532,-0.000000000000}; +Point (4) = {0.656107331955,1.000000000000,-0.000000000000}; +Point (5) = {0.600672553037,0.775245709538,-0.000000000000}; +Point (6) = {0.000000000000,1.000000000000,0.000000000000}; +Point (7) = {0.392825178821,0.672136259831,-0.000000000000}; +Point (8) = {1.000000000000,0.000000000000,0.000000000000}; +Point (9) = {0.547800422194,-0.000000000000,-0.000000000000}; +Point (10) = {0.488710023938,0.224380304618,-0.000000000000}; +Point (11) = {0.000000000000,0.000000000000,0.000000000000}; +Point (12) = {-0.000000000000,0.324566579562,-0.000000000000}; +Point (13) = {0.172066723668,0.367888021869,-0.000000000000}; +Line (1) = {2,1}; +Line (2) = {1,4}; +Line (3) = {2,3}; +Line (4) = {3,5}; +Line (5) = {5,4}; +Line (6) = {4,6}; +Line (7) = {7,6}; +Line (8) = {5,7}; +Line (9) = {8,2}; +Line (10) = {9,8}; +Line (11) = {9,10}; +Line (12) = {10,3}; +Line (13) = {12,11}; +Line (14) = {11,9}; +Line (15) = {12,13}; +Line (16) = {13,10}; +Line (17) = {6,12}; +Line (18) = {7,13}; +Line Loop (1) = {-1,3,4,5,-2}; +Plane Surface (1) = {1}; Physical Surface (1) = {1}; +Line Loop (2) = {7,-6,-5,8}; +Plane Surface (2) = {2}; Physical Surface (2) = {2}; +Line Loop (3) = {-10,11,12,-3,-9}; +Plane Surface (3) = {3}; Physical Surface (3) = {3}; +Line Loop (4) = {-11,-14,-13,15,16}; +Plane Surface (4) = {4}; Physical Surface (4) = {4}; +Line Loop (5) = {-7,18,-15,-17}; +Plane Surface (5) = {5}; Physical Surface (5) = {5}; +Line Loop (6) = {-16,-18,-8,-4,-12}; +Plane Surface (6) = {6}; Physical Surface (6) = {6}; +Recombine Surface{5}; + +ReverseMesh Surface{1,2,3,4,5,6}; + +Physical Curve("left") = {17,13}; +Physical Curve("bottom") = {14,10}; +Physical Curve("right") = {9,1}; +Physical Curve("top") = {2,6}; + +Physical Surface("green") = {6}; diff --git a/examples/logo_refined.geo b/examples/logo_refined.geo new file mode 100644 index 0000000..e214c89 --- /dev/null +++ b/examples/logo_refined.geo @@ -0,0 +1,53 @@ +lc = 0.1; +Point (1) = {1.000000000000,1.000000000000,0.000000000000, lc}; +Point (2) = {1.000000000000,0.379757979263,-0.000000000000, lc}; +Point (3) = {0.801534880751,0.454963545532,-0.000000000000, lc}; +Point (4) = {0.656107331955,1.000000000000,-0.000000000000, lc}; +Point (5) = {0.600672553037,0.775245709538,-0.000000000000, lc}; +Point (6) = {0.000000000000,1.000000000000,0.000000000000, lc}; +Point (7) = {0.392825178821,0.672136259831,-0.000000000000, lc}; +Point (8) = {1.000000000000,0.000000000000,0.000000000000, lc}; +Point (9) = {0.547800422194,-0.000000000000,-0.000000000000, lc}; +Point (10) = {0.488710023938,0.224380304618,-0.000000000000, lc}; +Point (11) = {0.000000000000,0.000000000000,0.000000000000, lc}; +Point (12) = {-0.000000000000,0.324566579562,-0.000000000000, lc}; +Point (13) = {0.172066723668,0.367888021869,-0.000000000000, lc}; +Line (1) = {2,1}; +Line (2) = {1,4}; +Line (3) = {2,3}; +Line (4) = {3,5}; +Line (5) = {5,4}; +Line (6) = {4,6}; +Line (7) = {7,6}; +Line (8) = {5,7}; +Line (9) = {8,2}; +Line (10) = {9,8}; +Line (11) = {9,10}; +Line (12) = {10,3}; +Line (13) = {12,11}; +Line (14) = {11,9}; +Line (15) = {12,13}; +Line (16) = {13,10}; +Line (17) = {6,12}; +Line (18) = {7,13}; +Line Loop (1) = {-1,3,4,5,-2}; +Plane Surface (1) = {1}; Physical Surface (1) = {1}; +Line Loop (2) = {7,-6,-5,8}; +Plane Surface (2) = {2}; Physical Surface (2) = {2}; +Line Loop (3) = {-10,11,12,-3,-9}; +Plane Surface (3) = {3}; Physical Surface (3) = {3}; +Line Loop (4) = {-11,-14,-13,15,16}; +Plane Surface (4) = {4}; Physical Surface (4) = {4}; +Line Loop (5) = {-7,18,-15,-17}; +Plane Surface (5) = {5}; Physical Surface (5) = {5}; +Line Loop (6) = {-16,-18,-8,-4,-12}; +Plane Surface (6) = {6}; Physical Surface (6) = {6}; + +ReverseMesh Surface{1,2,3,4,5,6}; + +Physical Curve("left") = {17,13}; +Physical Curve("bottom") = {14,10}; +Physical Curve("right") = {9,1}; +Physical Curve("top") = {2,6}; + +Physical Surface("green") = {6}; diff --git a/examples/mixed_grid.jl b/examples/mixed_grid.jl new file mode 100644 index 0000000..8e46f56 --- /dev/null +++ b/examples/mixed_grid.jl @@ -0,0 +1,139 @@ +# First we load Ferrite, and some other packages we need. +using Ferrite, FerriteGmsh, SparseArrays +using FerriteCon2023 +using Colors, CairoMakie + +grid = togrid("logo_quads.geo"); + +# we will need cellsets of Triangles + Quadrilaterals +tris = findall(cell -> cell isa Triangle, grid.cells) +addcellset!(grid, "triangles", Set(tris)) +quads = findall(cell -> cell isa Quadrilateral, grid.cells) +addcellset!(grid, "quadrilaterals", Set(quads)) + +# Trial and test functions +dim = 2 +order = 1 # linear interpolation +ip_tri = Lagrange{RefTriangle, order}() +qr_tri = QuadratureRule{RefTriangle}(1) # 1 quadrature point +cv_tri = CellValues(qr_tri, ip_tri^dim); + +ip_quad = Lagrange{RefQuadrilateral, order}() +qr_quad = QuadratureRule{RefQuadrilateral}(2) # 2x2 quadrature points +cv_quad = CellValues(qr_quad, ip_quad^dim) + +cellvalues = (cv_tri, cv_quad) + +# ### Degrees of freedom +dh = DofHandler(grid) + +# subdomains can only consist of a single element type +sdh_tri = SubDofHandler(dh, getcellset(grid, "triangles")) +add!(sdh_tri, :u, ip_tri^dim) + +sdh_quad = SubDofHandler(dh, getcellset(grid, "quadrilaterals")) +add!(sdh_quad, :u, ip_quad^dim) + +close!(dh); + +# ### Boundary conditions +ch = ConstraintHandler(dh) +add!(ch, Dirichlet(:u, getfaceset(grid, "bottom"), (x, t) -> 0.0, 2)) +add!(ch, Dirichlet(:u, getfaceset(grid, "left"), (x, t) -> 0.0, 1)) +add!(ch, Dirichlet(:u, getfaceset(grid, "top"), (x, t) -> 0.1, 2)) +close!(ch); + +E = 200e3 # Young's modulus [MPa] +ν = 0.3 # Poisson's ratio [-] +material = Elasticity(E/2(1+ν), E/3(1-2ν)); + +# #### Global assembly +function assemble_global!(assembler, dh, cellvalues, material) + ## Create an assembler + for (sdh, cv) in zip(dh.subdofhandlers, cellvalues) + assemble_subdofhandler!(assembler, sdh, cv, material) + end +end + +function assemble_subdofhandler!(assembler, sdh, cv, material) + n_basefuncs = getnbasefunctions(cv) + ke = zeros(n_basefuncs, n_basefuncs) + fe = zeros(n_basefuncs) + ## Loop over all cells + for cell in CellIterator(sdh) + ## Compute element contribution + assemble_cell!(ke, cv, material, cell.coords) + ## Assemble ke and fe into K and f + assemble!(assembler, cell.dofs, ke) + end +end + +# ### Solution of the system +K = create_sparsity_pattern(dh) +f = zeros(ndofs(dh)) +assembler = start_assemble(K, f) +assemble_global!(assembler, dh, cellvalues, material); + +apply!(K, f, ch) +u = K \ f; + +# ### Exporting to VTK +isdir("paraview") || mkdir("paraview") +vtk_grid("paraview/linear_elasticity_quads", dh) do vtk + vtk_point_data(vtk, dh, u) + vtk_cellset(vtk, grid) +end + +################## +# Makie plotting # +################## +logo_colors = Dict( + "1" => Colors.JULIA_LOGO_COLORS.purple, + "2" => Colors.JULIA_LOGO_COLORS.red, + "3" => Colors.JULIA_LOGO_COLORS.red, + "4" => Colors.JULIA_LOGO_COLORS.blue, + "5" => Colors.JULIA_LOGO_COLORS.purple, + "6" => Colors.JULIA_LOGO_COLORS.green, + ) + +f = Figure(; backgroundcolor=:transparent) +ax = Axis(f[1,1]; backgroundcolor=:transparent) +colsize!(f.layout, 1, Aspect(1,1)) # correct aspect ratio +hidedecorations!(ax); hidespines!(ax) +resize_to_layout!(f) + +u_nodal = Ferrite._evaluate_at_grid_nodes(dh, u, :u) +data = [[Point2f(grid.nodes[i].x + u_nodal[i]) for i in c.nodes] for c in grid.cells] +ux_min, ux_max = extrema(u->u[1], u_nodal) +uy_min, uy_max = extrema(u->u[2], u_nodal) + +size_cm = (10.0, 9.51) +size_pt = 72 .* size_cm ./ 2.54 +f = Figure(; resolution=size_pt, backgroundcolor=:transparent) +ax = Axis(f[1,1]; + backgroundcolor=:transparent, + xtickalign=1, + ytickalign=1, + xticks=0.0:0.2:1.0, + yticks=0.0:0.2:1.0, + xticklabelsvisible=false, + yticklabelsvisible=false, + bottomspinecolor=:white, + rightspinecolor=:white, + topspinecolor=:white, + leftspinecolor=:white, + xtickcolor=:white, + ytickcolor=:white, + xticksmirrored=true, + yticksmirrored=true, + ) + +colsize!(f.layout, 1, Aspect(1,(1.0+ux_min)/(1.0+uy_max))) # correct aspect ratio + +for (cellset_name, color) in pairs(logo_colors) + cellset = collect(getcellset(grid, cellset_name)) + _data = data[cellset] + poly!(_data; strokecolor=:black, strokewidth=1, color, transparency=true) +end +isdir("graphics") || mkdir("graphics") +save("graphics/mixed_grid.svg", f) diff --git a/examples/paraview/incompressible_center_grain.vtu b/examples/paraview/incompressible_center_grain.vtu new file mode 100644 index 0000000000000000000000000000000000000000..c37bfa75bd442d4b21e1aab75d0693e808a88652 GIT binary patch literal 14814 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 literal 0 HcmV?d00001 diff --git a/examples/paraview/linear_elasticity_quads.vtu b/examples/paraview/linear_elasticity_quads.vtu new file mode 100644 index 0000000000000000000000000000000000000000..c7b38e884385edf4dd210329f2280f8405dbf516 GIT binary patch literal 6898 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 Luw;Jx!P592T->Lk literal 0 HcmV?d00001 diff --git a/examples/subdomain.jl b/examples/subdomain.jl new file mode 100644 index 0000000..d0b015a --- /dev/null +++ b/examples/subdomain.jl @@ -0,0 +1,238 @@ +# First we load Ferrite, and some other packages we need. +using FerriteGmsh, Ferrite, FerriteCon2023 +using SparseArrays, BlockArrays +using CairoMakie, Colors + +grid = togrid("logo_refined.geo"); + +# Trial and test functions +dim = 2 +order_u = 2 # quadratic interpolation +order_p = 1 # linear interpolation + +qr = QuadratureRule{RefTriangle}(2) # 3 quadrature points in total +ip_u = Lagrange{RefTriangle, order_u}()^dim +cv_u = CellValues(qr, ip_u); +ip_p = Lagrange{RefTriangle, order_p}() +cv_p = CellValues(qr, ip_p) + +cv_up = (cv_u, cv_p) + +# ### Degrees of freedom +dh = DofHandler(grid) + +# subdomains can only consist of a single element type +sdh_up = SubDofHandler(dh, getcellset(grid, "green")) +add!(sdh_up, :u, ip_u) +add!(sdh_up, :p, ip_p) + +sdh_u = SubDofHandler(dh, setdiff!(Set(1:getncells(grid)), getcellset(grid, "green"))) +add!(sdh_u, :u, ip_u) + +close!(dh); + +# ### Boundary conditions +ch = ConstraintHandler(dh) +add!(ch, Dirichlet(:u, getfaceset(grid, "bottom"), (x, t) -> 0.0, 2)) +add!(ch, Dirichlet(:u, getfaceset(grid, "left"), (x, t) -> 0.0, 1)) +add!(ch, Dirichlet(:u, getfaceset(grid, "top"), (x, t) -> 0.1, 2)) +close!(ch); + +######################## +# material definitions # +######################## +E = 200e3 # Young's modulus [MPa] +ν = 0.3 # Poisson's ratio [-] +compressible = Elasticity(E/2(1+ν), E/3(1-2ν)); + +ν = 0.5 # Poisson's ratio [-] +incompressible = Elasticity(E/2(1+ν), E/3(1-2ν)); + +materials = (incompressible, compressible) + +################################# +# Pre-allocate element matrices # +################################# +ke_u = zeros(ndofs_per_cell(sdh_u), ndofs_per_cell(sdh_u)) +re_u = zeros(ndofs_per_cell(sdh_u)) + +n = ndofs_per_cell(sdh_up) +blocks = [length(dof_range(sdh_up, :u)), length(dof_range(sdh_up, :p))] +ke_up = PseudoBlockArray(zeros(n, n), blocks, blocks) +re_up = PseudoBlockArray(zeros(n), blocks) + +buffers = ((cv_up, ke_up, re_up), (cv_u, ke_u, re_u)) + +################### +# Global assembly # +################### +function assemble_global!(assembler, dh, buffers, materials) + for (sdh, _buffers, material) in zip(dh.subdofhandlers, buffers, materials) + assemble_subdofhandler!(assembler, sdh, _buffers, material) + end +end + +function assemble_subdofhandler!(assembler, sdh, buffers, material) + cv, ke = buffers + ## Loop over all cells + for cell in CellIterator(sdh) + ## Compute element contribution + assemble_cell!(ke, cv, material, getcoordinates(cell)) + ## Assemble ke and fe into K and f + assemble!(assembler, celldofs(cell), ke) + end +end + +########################## +# Solution of the system # +########################## +K = create_sparsity_pattern(dh) +f = zeros(ndofs(dh)) +assembler = start_assemble(K, f) +assemble_global!(assembler, dh, buffers, materials); + +apply!(K, f, ch) +u = K \ f + +################## +# postprocessing # +################## +function compute_pressure_vonmises(cellvalues::CellValues, material, xe, ue) + reinit!(cellvalues, xe) + + n_basefuncs = getnbasefunctions(cellvalues) + + p = zero(eltype(ue)) + σᵥₘ = 0.0 + area = 0.0 + for q_point in 1:getnquadpoints(cellvalues) + dΩ = getdetJdV(cellvalues, q_point) + area += dΩ + ## For each integration point, compute strain, stress and material stiffness + ε = function_symmetric_gradient(cellvalues, q_point, ue) + ε_3D = SymmetricTensor{2,3}((i,j)->i<3 && j<3 ? ε[i,j] : zero(eltype(ε))) + σ, = material_routine(material, ε_3D) + σᵥₘ += sqrt(3/2 * dev(σ) ⊡ dev(σ)) * dΩ + p += -tr(σ)/3 * dΩ + end + return p/area, σᵥₘ/area +end + +function compute_mixed_von_mises(cv_u, cv_p, material, xe, ue, pe) + reinit!(cv_u, xe) + reinit!(cv_p, xe) + + (; G, K) = material + + σᵥₘ = 0.0 + area = 0.0 + for q_point in 1:getnquadpoints(cv_u) + dΩ = getdetJdV(cv_u, q_point) + area += dΩ + ## For each integration point, compute strain, stress and material stiffness + p = function_value(cv_p, q_point, pe) + ε = function_symmetric_gradient(cv_u, q_point, ue) + ε_3D = SymmetricTensor{2,3}((i,j)->i<3 && j<3 ? ε[i,j] : zero(eltype(ε))) + σ = 2G * dev(ε_3D) + p * one(ε_3D) + σᵥₘ += sqrt(3/2 * dev(σ) ⊡ dev(σ)) * dΩ + end + return σᵥₘ/area +end + +pressures = Vector{Float64}(undef, getncells(grid)) +fill!(pressures, NaN) +von_mises_stresses = Vector{Float64}(undef, getncells(grid)) +fill!(von_mises_stresses, NaN) + +dofrange_u = dof_range(sdh_up, :u) +dofrange_p = dof_range(sdh_up, :p) +# ### Exporting to VTK +for cell in CellIterator(sdh_u) + @views ue = u[cell.dofs] + p, σᵥₘ = compute_pressure_vonmises(cv_u, compressible, cell.coords, ue) + pressures[cellid(cell)] = p + von_mises_stresses[cellid(cell)] = σᵥₘ +end +for cell in CellIterator(sdh_up) + @views ue = u[cell.dofs][dofrange_u] + @views pe = u[cell.dofs][dofrange_p] + σᵥₘ = compute_mixed_von_mises(cv_u, cv_p, compressible, cell.coords, ue, pe) + von_mises_stresses[cellid(cell)] = σᵥₘ +end + +isdir("paraview") || mkdir("paraview") +vtk_grid("paraview/incompressible_center_grain", dh) do vtk + vtk_point_data(vtk, dh, u) + vtk_cell_data(vtk, pressures, "pressure") + vtk_cell_data(vtk, von_mises_stresses, "vonMises") + vtk_cellset(vtk, grid) +end + +################## +# Makie plotting # +################## +logo_colormaps = Dict( + "1" => :jpurple, + "2" => :jred, + "3" => :jred, + "4" => :jblue, + "5" => :jpurple, + "6" => :jgreen, + ) + +u_nodal = Ferrite._evaluate_at_grid_nodes(dh, u, :u) +data = [[Point2f(grid.nodes[i].x + u_nodal[i]) for i in c.nodes] for c in grid.cells] +ux_min, ux_max = extrema(u->u[1], u_nodal) +uy_min, uy_max = extrema(u->u[2], u_nodal) + +size_cm = (10.0, 9.51) +size_pt = 72 .* size_cm ./ 2.54 +f = Figure(; resolution=size_pt, backgroundcolor=:transparent) +ax = Axis(f[1,1]; + backgroundcolor=:transparent, + xtickalign=1, + ytickalign=1, + xticks=0.0:0.2:1.0, + yticks=0.0:0.2:1.0, + xticklabelsvisible=false, + yticklabelsvisible=false, + bottomspinecolor=:white, + rightspinecolor=:white, + topspinecolor=:white, + leftspinecolor=:white, + xtickcolor=:white, + ytickcolor=:white, + ) + +colsize!(f.layout, 1, Aspect(1,(1.0+ux_min)/(1.0+uy_max))) # correct aspect ratio +σᵥₘ_limits = extrema(von_mises_stresses) + +# plot in julia logo colors +for (cellset_name, colormap) in pairs(logo_colormaps) + cellset = collect(getcellset(grid, cellset_name)) + _data = data[cellset] + poly!(_data; strokecolor=:black, strokewidth=1, color=von_mises_stresses[cellset], transparency=true, colormap, colorrange=σᵥₘ_limits) +end + +cb_layout = GridLayout() +f.layout[1,2] = cb_layout +for (i, colormap) in pairs((:jgreen, :jred, :jblue, :jpurple)) + cb = Colorbar(cb_layout[1,i]; + colormap, + ticklabelsvisible=false, + tickalign=1, + limits=σᵥₘ_limits, + bottomspinecolor=:white, + rightspinecolor=:white, + topspinecolor=:white, + leftspinecolor=:white, + tickcolor=:white, + labelcolor=:white, + ) + i == 4 && (cb.label = "von Mises stress") +end +colgap!(cb_layout, 0.0) +resize_to_layout!(f) + +isdir("graphics") || mkdir("graphics") +save("graphics/incompressible_vonMises_logo.svg", f, pt_per_unit=1) diff --git a/src/element_routines.jl b/src/element_routines.jl new file mode 100644 index 0000000..7cf2735 --- /dev/null +++ b/src/element_routines.jl @@ -0,0 +1,68 @@ +# compressible linear elasticity +function assemble_cell!(ke, cellvalues::CellValues, material, xe) + fill!(ke, 0.0) + + reinit!(cellvalues, xe) + + n_basefuncs = getnbasefunctions(cellvalues) + for q_point in 1:getnquadpoints(cellvalues) + ## For each integration point, compute strain, stress and material stiffness + _ε = shape_symmetric_gradient(cellvalues, q_point, 1) + _, ∂σ∂ε = material_routine(material, _ε) # _ε needed for dimension of stiffness + + dΩ = getdetJdV(cellvalues, q_point) + for i in 1:n_basefuncs + ∇Nᵢ = shape_gradient(cellvalues, q_point, i) + for j in 1:n_basefuncs + ∇ˢʸᵐNⱼ = shape_symmetric_gradient(cellvalues, q_point, j) + ke[i, j] += (∂σ∂ε ⊡ ∇ˢʸᵐNⱼ) ⊡ ∇Nᵢ * dΩ + end + end + end +end + +# incompressible elasticity +function assemble_cell!(ke, values::Tuple{<:CellValues, <:CellValues}, material, xe) + fill!(ke, 0.0) + + (cellvalues_u, cellvalues_p) = values + (; G, K) = material + + n_basefuncs_u = getnbasefunctions(cellvalues_u) + n_basefuncs_p = getnbasefunctions(cellvalues_p) + + u▄, p▄ = 1, 2 + + reinit!(cellvalues_u, xe) + reinit!(cellvalues_p, xe) + + for q_point in 1:getnquadpoints(cellvalues_u) + dΩ = getdetJdV(cellvalues_u, q_point) + for i in 1:n_basefuncs_u + δε = shape_symmetric_gradient(cellvalues_u, q_point, i) + divδu = shape_divergence(cellvalues_u, q_point, i) + δu = shape_value(cellvalues_u, q_point, i) + for j in 1:n_basefuncs_u + εdev = dev(shape_symmetric_gradient(cellvalues_u, q_point, j)) + ke[BlockIndex((u▄, u▄), (i, j))] += 2G * ɛdev ⊡ δɛ * dΩ + end + for j in 1:n_basefuncs_p + p = shape_value(cellvalues_p, q_point, j) + ke[BlockIndex((u▄, p▄), (i, j))] += -p * divδu * dΩ + end + end + + for i in 1:n_basefuncs_p + δp = shape_value(cellvalues_p, q_point, i) + for j in 1:n_basefuncs_u + divδu = shape_divergence(cellvalues_u, q_point, j) + ke[BlockIndex((p▄, u▄), (i, j))] += -δp * divδu * dΩ + end + for j in 1:n_basefuncs_p + p = shape_value(cellvalues_p, q_point, j) + ke[BlockIndex((p▄, p▄), (i, j))] += - p * δp / K * dΩ + end + + end + end +end diff --git a/src/material.jl b/src/material.jl new file mode 100644 index 0000000..88e0e79 --- /dev/null +++ b/src/material.jl @@ -0,0 +1,11 @@ +struct Elasticity + G::Float64 + K::Float64 +end + +function material_routine(material::Elasticity, ε::SymmetricTensor{2}) + (; G, K) = material + stress(ε) = 2G * dev(ε) + K * tr(ε) * one(ε) + ∂σ∂ε, σ = gradient(stress, ε, :all) + return σ, ∂σ∂ε +end diff --git a/test/runtests.jl b/test/runtests.jl deleted file mode 100644 index df70951..0000000 --- a/test/runtests.jl +++ /dev/null @@ -1,6 +0,0 @@ -using FerriteCon2023 -using Test - -@testset "FerriteCon2023.jl" begin - # Write your tests here. -end