From 304b215ba0bb1b3b7cc96f009106fd99725a7a7e Mon Sep 17 00:00:00 2001 From: "mauricio.vanzulli" Date: Mon, 11 Nov 2024 23:13:10 +0100 Subject: [PATCH 1/7] Refactor deps --- .gitignore | 2 +- Manifest.toml | 1479 --------------------------------- Project.toml | 10 +- test/{ => entities}/frames.jl | 0 4 files changed, 6 insertions(+), 1485 deletions(-) delete mode 100644 Manifest.toml rename test/{ => entities}/frames.jl (100%) diff --git a/.gitignore b/.gitignore index 53422b34f..be5d685f6 100644 --- a/.gitignore +++ b/.gitignore @@ -20,7 +20,7 @@ docs/site/ # File generated by Pkg, the package manager, based on a corresponding Project.toml # It records a fixed state of all packages used by the project. # Since we are not actively develpoing this pkg by now let's commit versions -#Manifest.toml +Manifest.toml # Msh files *.msh diff --git a/Manifest.toml b/Manifest.toml deleted file mode 100644 index 3662eb27e..000000000 --- a/Manifest.toml +++ /dev/null @@ -1,1479 +0,0 @@ -# This file is machine-generated - editing it directly is not advised - -julia_version = "1.11.1" -manifest_format = "2.0" -project_hash = "59486105b31266631618db57616437857d675760" - -[[deps.ADTypes]] -git-tree-sha1 = "eea5d80188827b35333801ef97a40c2ed653b081" -uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" -version = "1.9.0" - - [deps.ADTypes.extensions] - ADTypesChainRulesCoreExt = "ChainRulesCore" - ADTypesEnzymeCoreExt = "EnzymeCore" - - [deps.ADTypes.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" - -[[deps.Accessors]] -deps = ["CompositionsBase", "ConstructionBase", "InverseFunctions", "LinearAlgebra", "MacroTools", "Markdown"] -git-tree-sha1 = "b392ede862e506d451fc1616e79aa6f4c673dab8" -uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" -version = "0.1.38" - - [deps.Accessors.extensions] - AccessorsAxisKeysExt = "AxisKeys" - AccessorsDatesExt = "Dates" - AccessorsIntervalSetsExt = "IntervalSets" - AccessorsStaticArraysExt = "StaticArrays" - AccessorsStructArraysExt = "StructArrays" - AccessorsTestExt = "Test" - AccessorsUnitfulExt = "Unitful" - - [deps.Accessors.weakdeps] - AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" - Dates = "ade2ca70-3891-5945-98fb-dc099432e06a" - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - Requires = "ae029012-a4dd-5104-9daa-d747884805df" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" - Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" - -[[deps.Adapt]] -deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099" -uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "4.0.4" -weakdeps = ["StaticArrays"] - - [deps.Adapt.extensions] - AdaptStaticArraysExt = "StaticArrays" - -[[deps.ArgTools]] -uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.2" - -[[deps.ArrayInterface]] -deps = ["Adapt", "LinearAlgebra"] -git-tree-sha1 = "3640d077b6dafd64ceb8fd5c1ec76f7ca53bcf76" -uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.16.0" - - [deps.ArrayInterface.extensions] - ArrayInterfaceBandedMatricesExt = "BandedMatrices" - ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" - ArrayInterfaceCUDAExt = "CUDA" - ArrayInterfaceCUDSSExt = "CUDSS" - ArrayInterfaceChainRulesExt = "ChainRules" - ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" - ArrayInterfaceReverseDiffExt = "ReverseDiff" - ArrayInterfaceSparseArraysExt = "SparseArrays" - ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" - ArrayInterfaceTrackerExt = "Tracker" - - [deps.ArrayInterface.weakdeps] - BandedMatrices = "aae01518-5342-5314-be14-df237901396f" - BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" - CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" - CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" - ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" - GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" - ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" - Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" - -[[deps.ArrayLayouts]] -deps = ["FillArrays", "LinearAlgebra"] -git-tree-sha1 = "0dd7edaff278e346eb0ca07a7e75c9438408a3ce" -uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" -version = "1.10.3" -weakdeps = ["SparseArrays"] - - [deps.ArrayLayouts.extensions] - ArrayLayoutsSparseArraysExt = "SparseArrays" - -[[deps.Artifacts]] -uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" -version = "1.11.0" - -[[deps.AutoHashEquals]] -git-tree-sha1 = "4ec6b48702dacc5994a835c1189831755e4e76ef" -uuid = "15f4f7f2-30c1-5605-9d31-71845cf9641f" -version = "2.2.0" - -[[deps.Base64]] -uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" -version = "1.11.0" - -[[deps.BenchmarkTools]] -deps = ["JSON", "Logging", "Printf", "Profile", "Statistics", "UUIDs"] -git-tree-sha1 = "f1dff6729bc61f4d49e140da1af55dcd1ac97b2f" -uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" -version = "1.5.0" - -[[deps.BitTwiddlingConvenienceFunctions]] -deps = ["Static"] -git-tree-sha1 = "f21cfd4950cb9f0587d5067e69405ad2acd27b87" -uuid = "62783981-4cbd-42fc-bca8-16325de8dc4b" -version = "0.1.6" - -[[deps.Bzip2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "8873e196c2eb87962a2048b3b8e08946535864a1" -uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" -version = "1.0.8+2" - -[[deps.CPUSummary]] -deps = ["CpuId", "IfElse", "PrecompileTools", "Static"] -git-tree-sha1 = "5a97e67919535d6841172016c9530fd69494e5ec" -uuid = "2a0fbf3d-bb9c-48f3-b0a9-814d99fd7ab9" -version = "0.2.6" - -[[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_jll]] -deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "009060c9a6168704143100f36ab08f06c2af4642" -uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" -version = "1.18.2+1" - -[[deps.ChainRulesCore]] -deps = ["Compat", "LinearAlgebra"] -git-tree-sha1 = "3e4b134270b372f2ed4d4d0e936aabaefc1802bc" -uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.25.0" -weakdeps = ["SparseArrays"] - - [deps.ChainRulesCore.extensions] - ChainRulesCoreSparseArraysExt = "SparseArrays" - -[[deps.CloseOpenIntervals]] -deps = ["Static", "StaticArrayInterface"] -git-tree-sha1 = "05ba0d07cd4fd8b7a39541e31a7b0254704ea581" -uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9" -version = "0.1.13" - -[[deps.CodecBzip2]] -deps = ["Bzip2_jll", "TranscodingStreams"] -git-tree-sha1 = "e7c529cc31bb85b97631b922fa2e6baf246f5905" -uuid = "523fee87-0ab8-5b00-afb7-3ecf72e48cfd" -version = "0.8.4" - -[[deps.CodecZlib]] -deps = ["TranscodingStreams", "Zlib_jll"] -git-tree-sha1 = "bce6804e5e6044c6daab27bb533d1295e4a2e759" -uuid = "944b1d66-785c-5afd-91f1-9de20f533193" -version = "0.7.6" - -[[deps.CommonSolve]] -git-tree-sha1 = "0eee5eb66b1cf62cd6ad1b460238e60e4b09400c" -uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" -version = "0.2.4" - -[[deps.CommonSubexpressions]] -deps = ["MacroTools"] -git-tree-sha1 = "cda2cfaebb4be89c9084adaca7dd7333369715c5" -uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" -version = "0.3.1" - -[[deps.CommonWorldInvalidations]] -git-tree-sha1 = "ae52d1c52048455e85a387fbee9be553ec2b68d0" -uuid = "f70d9fcc-98c5-4d4a-abd7-e4cdeebd8ca8" -version = "1.0.0" - -[[deps.Compat]] -deps = ["TOML", "UUIDs"] -git-tree-sha1 = "8ae8d32e09f0dcf42a36b90d4e17f5dd2e4c4215" -uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.16.0" -weakdeps = ["Dates", "LinearAlgebra"] - - [deps.Compat.extensions] - CompatLinearAlgebraExt = "LinearAlgebra" - -[[deps.CompilerSupportLibraries_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "1.1.1+0" - -[[deps.CompositionsBase]] -git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" -uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" -version = "0.1.2" -weakdeps = ["InverseFunctions"] - - [deps.CompositionsBase.extensions] - CompositionsBaseInverseFunctionsExt = "InverseFunctions" - -[[deps.ConcreteStructs]] -git-tree-sha1 = "f749037478283d372048690eb3b5f92a79432b34" -uuid = "2569d6c7-a4a2-43d3-a901-331e8e4be471" -version = "0.2.3" - -[[deps.ConstructionBase]] -git-tree-sha1 = "76219f1ed5771adbb096743bff43fb5fdd4c1157" -uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" -version = "1.5.8" - - [deps.ConstructionBase.extensions] - ConstructionBaseIntervalSetsExt = "IntervalSets" - ConstructionBaseLinearAlgebraExt = "LinearAlgebra" - ConstructionBaseStaticArraysExt = "StaticArrays" - - [deps.ConstructionBase.weakdeps] - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - -[[deps.CpuId]] -deps = ["Markdown"] -git-tree-sha1 = "fcbb72b032692610bfbdb15018ac16a36cf2e406" -uuid = "adafc99b-e345-5852-983c-f28acb93d879" -version = "0.3.1" - -[[deps.Crayons]] -git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" -uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" -version = "4.1.1" - -[[deps.DataAPI]] -git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" -uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" -version = "1.16.0" - -[[deps.DataStructures]] -deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "1d0a14036acb104d9e89698bd408f63ab58cdc82" -uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.20" - -[[deps.DataValueInterfaces]] -git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" -uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" -version = "1.0.0" - -[[deps.Dates]] -deps = ["Printf"] -uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" -version = "1.11.0" - -[[deps.Dictionaries]] -deps = ["Indexing", "Random", "Serialization"] -git-tree-sha1 = "35b66b6744b2d92c778afd3a88d2571875664a2a" -uuid = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4" -version = "0.4.2" - -[[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.Distributed]] -deps = ["Random", "Serialization", "Sockets"] -uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" -version = "1.11.0" - -[[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.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.Expat_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1c6317308b9dc757616f0b5cb379db10494443a7" -uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.6.2+0" - -[[deps.ExprTools]] -git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" -uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" -version = "0.1.10" - -[[deps.Expronicon]] -deps = ["MLStyle", "Pkg", "TOML"] -git-tree-sha1 = "fc3951d4d398b5515f91d7fe5d45fc31dccb3c9b" -uuid = "6b7a57c9-7cc1-4fdf-b7f5-e857abae3636" -version = "0.8.5" - -[[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.FastLapackInterface]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "cbf5edddb61a43669710cbc2241bc08b36d9e660" -uuid = "29a986be-02c6-4525-aec4-84b980013641" -version = "2.0.4" - -[[deps.FastRounding]] -deps = ["ErrorfreeArithmetic", "LinearAlgebra"] -git-tree-sha1 = "6344aa18f654196be82e62816935225b3b9abe44" -uuid = "fa42c844-2597-5d31-933b-ebd51ab2693f" -version = "0.3.1" - -[[deps.FileWatching]] -uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" -version = "1.11.0" - -[[deps.FillArrays]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "6a70198746448456524cb442b8af316927ff3e1a" -uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.13.0" - - [deps.FillArrays.extensions] - FillArraysPDMatsExt = "PDMats" - FillArraysSparseArraysExt = "SparseArrays" - FillArraysStatisticsExt = "Statistics" - - [deps.FillArrays.weakdeps] - PDMats = "90014a1f-27ba-587c-ab20-58faa44d9150" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" - -[[deps.Fontconfig_jll]] -deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] -git-tree-sha1 = "db16beca600632c95fc8aca29890d83788dd8b23" -uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" -version = "2.13.96+0" - -[[deps.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.FreeType2_jll]] -deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "5c1d8ae0efc6c2e7b1fc502cbe25def8f661b7bc" -uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" -version = "2.13.2+0" - -[[deps.FunctionWrappers]] -git-tree-sha1 = "d62485945ce5ae9c0c48f124a84998d755bae00e" -uuid = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e" -version = "1.1.3" - -[[deps.FunctionWrappersWrappers]] -deps = ["FunctionWrappers"] -git-tree-sha1 = "b104d487b34566608f8b4e1c39fb0b10aa279ff8" -uuid = "77dc65aa-8811-40c2-897b-53d922fa7daf" -version = "0.1.3" - -[[deps.Future]] -deps = ["Random"] -uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" -version = "1.11.0" - -[[deps.GLPK]] -deps = ["GLPK_jll", "MathOptInterface"] -git-tree-sha1 = "1d706bd23e5d2d407bfd369499ee6f96afb0c3ad" -uuid = "60bf3e95-4087-53dc-ae20-288a0d20c6a6" -version = "1.2.1" - -[[deps.GLPK_jll]] -deps = ["Artifacts", "GMP_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "fe68622f32828aa92275895fdb324a85894a5b1b" -uuid = "e8aa6df9-e6ca-548a-97ff-1f85fc5b8b98" -version = "5.0.1+0" - -[[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.3.0+0" - -[[deps.GPUArraysCore]] -deps = ["Adapt"] -git-tree-sha1 = "ec632f177c0d990e64d955ccc1b8c04c485a0950" -uuid = "46192b85-c4d5-4398-a991-12ede77f4527" -version = "0.1.6" - -[[deps.Gettext_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll", "Pkg", "XML2_jll"] -git-tree-sha1 = "9b02998aba7bf074d14de89f9d37ca24a1a0b046" -uuid = "78b55507-aeef-58d4-861c-77aaff3498b1" -version = "0.21.0+0" - -[[deps.Glib_jll]] -deps = ["Artifacts", "Gettext_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] -git-tree-sha1 = "674ff0db93fffcd11a3573986e550d66cd4fd71f" -uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" -version = "2.80.5+0" - -[[deps.Gmsh]] -deps = ["gmsh_jll"] -git-tree-sha1 = "6d815101e62722f4e323514c9fc704007d4da2e3" -uuid = "705231aa-382f-11e9-3f0c-b7cb4346fdeb" -version = "0.3.1" - -[[deps.HDF5_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "OpenSSL_jll", "TOML", "Zlib_jll", "libaec_jll"] -git-tree-sha1 = "82a471768b513dc39e471540fdadc84ff80ff997" -uuid = "0234f1f7-429e-5d53-9886-15a909be8d59" -version = "1.14.3+3" - -[[deps.HostCPUFeatures]] -deps = ["BitTwiddlingConvenienceFunctions", "IfElse", "Libdl", "Static"] -git-tree-sha1 = "8e070b599339d622e9a081d17230d74a5c473293" -uuid = "3e5b6fbb-0976-4d2c-9146-d79de83f2fb0" -version = "0.1.17" - -[[deps.Hwloc_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "dd3b49277ec2bb2c6b94eb1604d4d0616016f7a6" -uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" -version = "2.11.2+0" - -[[deps.IfElse]] -git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" -uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" -version = "0.1.1" - -[[deps.Indexing]] -git-tree-sha1 = "ce1566720fd6b19ff3411404d4b977acd4814f9f" -uuid = "313cdc1a-70c2-5d6a-ae34-0150d3930a38" -version = "1.1.1" - -[[deps.IntelOpenMP_jll]] -deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] -git-tree-sha1 = "10bd689145d2c3b2a9844005d01087cc1194e79e" -uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" -version = "2024.2.1+0" - -[[deps.InteractiveUtils]] -deps = ["Markdown"] -uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" -version = "1.11.0" - -[[deps.IntervalArithmetic]] -deps = ["CRlibm", "EnumX", "FastRounding", "LinearAlgebra", "Markdown", "Random", "RecipesBase", "RoundingEmulator", "SetRounding", "StaticArrays"] -git-tree-sha1 = "f59e639916283c1d2e106d2b00910b50f4dab76c" -uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" -version = "0.21.2" - -[[deps.InverseFunctions]] -git-tree-sha1 = "a779299d77cd080bf77b97535acecd73e1c5e5cb" -uuid = "3587e190-3f89-42d0-90ee-14403ec27112" -version = "0.1.17" -weakdeps = ["Dates", "Test"] - - [deps.InverseFunctions.extensions] - InverseFunctionsDatesExt = "Dates" - InverseFunctionsTestExt = "Test" - -[[deps.IrrationalConstants]] -git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" -uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" -version = "0.2.2" - -[[deps.IterativeSolvers]] -deps = ["LinearAlgebra", "Printf", "Random", "RecipesBase", "SparseArrays"] -git-tree-sha1 = "59545b0a2b27208b0650df0a46b8e3019f85055b" -uuid = "42fd0dbc-a981-5370-80f2-aaf504508153" -version = "0.9.4" - -[[deps.IteratorInterfaceExtensions]] -git-tree-sha1 = "a3f24677c21f5bbe9d2a714f95dcd58337fb2856" -uuid = "82899510-4779-5014-852e-03e436cf321d" -version = "1.0.0" - -[[deps.JLLWrappers]] -deps = ["Artifacts", "Preferences"] -git-tree-sha1 = "be3dc50a92e5a386872a493a10050136d4703f9b" -uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" -version = "1.6.1" - -[[deps.JSON]] -deps = ["Dates", "Mmap", "Parsers", "Unicode"] -git-tree-sha1 = "31e996f0a15c7b280ba9f76636b3ff9e2ae58c9a" -uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "0.21.4" - -[[deps.JpegTurbo_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "25ee0be4d43d0269027024d75a24c24d6c6e590c" -uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" -version = "3.0.4+0" - -[[deps.JuMP]] -deps = ["LinearAlgebra", "MacroTools", "MathOptInterface", "MutableArithmetics", "OrderedCollections", "PrecompileTools", "Printf", "SparseArrays"] -git-tree-sha1 = "c95f443d4641b128d626a429b51d5185050135b5" -uuid = "4076af6c-e467-56ae-b986-b466b2749572" -version = "1.23.2" - - [deps.JuMP.extensions] - JuMPDimensionalDataExt = "DimensionalData" - - [deps.JuMP.weakdeps] - DimensionalData = "0703355e-b756-11e9-17c0-8b28908087d0" - -[[deps.KLU]] -deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse_jll"] -git-tree-sha1 = "07649c499349dad9f08dde4243a4c597064663e9" -uuid = "ef3ab10e-7fda-4108-b977-705223b18434" -version = "0.6.0" - -[[deps.Krylov]] -deps = ["LinearAlgebra", "Printf", "SparseArrays"] -git-tree-sha1 = "71dd823bf0a5aaa8264e1143b96a0baa631f4ce0" -uuid = "ba0b0d4f-ebba-5204-a429-3ac8c609bfb7" -version = "0.9.7" - -[[deps.LLVMOpenMP_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "78211fb6cbc872f77cad3fc0b6cf647d923f4929" -uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" -version = "18.1.7+0" - -[[deps.LZO_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "854a9c268c43b77b0a27f22d7fab8d33cdb3a731" -uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" -version = "2.10.2+1" - -[[deps.LaTeXStrings]] -git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c" -uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" -version = "1.4.0" - -[[deps.LayoutPointers]] -deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] -git-tree-sha1 = "a9eaadb366f5493a5654e843864c13d8b107548c" -uuid = "10f19ff3-798f-405d-979b-55457f8fc047" -version = "0.1.17" - -[[deps.LazyArrays]] -deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "MacroTools", "SparseArrays"] -git-tree-sha1 = "360f6039babd6e4d6364eff0d4fc9120834a2d9a" -uuid = "5078a376-72f3-5289-bfd5-ec5146d43c02" -version = "2.2.1" - - [deps.LazyArrays.extensions] - LazyArraysBandedMatricesExt = "BandedMatrices" - LazyArraysBlockArraysExt = "BlockArrays" - LazyArraysBlockBandedMatricesExt = "BlockBandedMatrices" - LazyArraysStaticArraysExt = "StaticArrays" - - [deps.LazyArrays.weakdeps] - BandedMatrices = "aae01518-5342-5314-be14-df237901396f" - BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" - BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - -[[deps.LazyArtifacts]] -deps = ["Artifacts", "Pkg"] -uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" -version = "1.11.0" - -[[deps.LazySets]] -deps = ["Distributed", "GLPK", "IntervalArithmetic", "JuMP", "LinearAlgebra", "Random", "ReachabilityBase", "RecipesBase", "Reexport", "Requires", "SharedArrays", "SparseArrays", "StaticArraysCore"] -git-tree-sha1 = "c46bea04a8a94fb7fa4e3007506601fa34d6a711" -uuid = "b4f0291d-fe17-52bc-9479-3d1a343d9043" -version = "2.14.2" - -[[deps.LibCURL]] -deps = ["LibCURL_jll", "MozillaCACerts_jll"] -uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" -version = "0.6.4" - -[[deps.LibCURL_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] -uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.6.0+0" - -[[deps.LibGit2]] -deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] -uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" -version = "1.11.0" - -[[deps.LibGit2_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] -uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" -version = "1.7.2+0" - -[[deps.LibSSH2_jll]] -deps = ["Artifacts", "Libdl", "MbedTLS_jll"] -uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" -version = "1.11.0+1" - -[[deps.Libdl]] -uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" -version = "1.11.0" - -[[deps.Libffi_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" -uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" -version = "3.2.2+1" - -[[deps.Libgcrypt_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll"] -git-tree-sha1 = "9fd170c4bbfd8b935fdc5f8b7aa33532c991a673" -uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" -version = "1.8.11+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"] -git-tree-sha1 = "fbb1f2bef882392312feb1ede3615ddc1e9b99ed" -uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" -version = "1.49.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"] -git-tree-sha1 = "0c4f9c4f1a50d8f35048fa0532dabbadf702f81e" -uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" -version = "2.40.1+0" - -[[deps.Libuuid_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "5ee6203157c120d79034c748a2acba45b82b8807" -uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" -version = "2.40.1+0" - -[[deps.LightXML]] -deps = ["Libdl", "XML2_jll"] -git-tree-sha1 = "3a994404d3f6709610701c7dabfc03fed87a81f8" -uuid = "9c8b4983-aa76-5018-a973-4c85ecc9e179" -version = "0.9.1" - -[[deps.LinearAlgebra]] -deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] -uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" -version = "1.11.0" - -[[deps.LinearElasticity_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "71e8ee0f9fe0e86a8f8c7f28361e5118eab2f93f" -uuid = "18c40d15-f7cd-5a6d-bc92-87468d86c5db" -version = "5.0.0+0" - -[[deps.LinearSolve]] -deps = ["ArrayInterface", "ChainRulesCore", "ConcreteStructs", "DocStringExtensions", "EnumX", "FastLapackInterface", "GPUArraysCore", "InteractiveUtils", "KLU", "Krylov", "LazyArrays", "Libdl", "LinearAlgebra", "MKL_jll", "Markdown", "PrecompileTools", "Preferences", "RecursiveFactorization", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Sparspak", "StaticArraysCore", "UnPack"] -git-tree-sha1 = "fb9809bce89e18bde2ae47e468973d5354620191" -uuid = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae" -version = "2.36.0" - - [deps.LinearSolve.extensions] - LinearSolveBandedMatricesExt = "BandedMatrices" - LinearSolveBlockDiagonalsExt = "BlockDiagonals" - LinearSolveCUDAExt = "CUDA" - LinearSolveCUDSSExt = "CUDSS" - LinearSolveEnzymeExt = "EnzymeCore" - LinearSolveFastAlmostBandedMatricesExt = "FastAlmostBandedMatrices" - LinearSolveHYPREExt = "HYPRE" - LinearSolveIterativeSolversExt = "IterativeSolvers" - LinearSolveKernelAbstractionsExt = "KernelAbstractions" - LinearSolveKrylovKitExt = "KrylovKit" - LinearSolveMetalExt = "Metal" - LinearSolvePardisoExt = "Pardiso" - LinearSolveRecursiveArrayToolsExt = "RecursiveArrayTools" - - [deps.LinearSolve.weakdeps] - BandedMatrices = "aae01518-5342-5314-be14-df237901396f" - BlockDiagonals = "0a1fb500-61f7-11e9-3c65-f5ef3456f9f0" - CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" - CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" - EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" - FastAlmostBandedMatrices = "9d29842c-ecb8-4973-b1e9-a27b1157504e" - HYPRE = "b5ffcf37-a2bd-41ab-a3da-4bd9bc8ad771" - IterativeSolvers = "42fd0dbc-a981-5370-80f2-aaf504508153" - KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" - KrylovKit = "0b1a1467-8014-51b9-945f-bf0ae24f4b77" - Metal = "dde4c033-4e86-420c-a63e-0dd931031962" - Pardiso = "46dd5b70-b6fb-5a00-ae2d-e8fea33afaf2" - RecursiveArrayTools = "731186ca-8d62-57ce-b412-fbd966d074cd" - -[[deps.LogExpFunctions]] -deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "a2d09619db4e765091ee5c6ffe8872849de0feea" -uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.28" - - [deps.LogExpFunctions.extensions] - LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" - LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" - LogExpFunctionsInverseFunctionsExt = "InverseFunctions" - - [deps.LogExpFunctions.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" - InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" - -[[deps.Logging]] -uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" -version = "1.11.0" - -[[deps.LoopVectorization]] -deps = ["ArrayInterface", "CPUSummary", "CloseOpenIntervals", "DocStringExtensions", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] -git-tree-sha1 = "8084c25a250e00ae427a379a5b607e7aed96a2dd" -uuid = "bdcacae8-1622-11e9-2a5c-532679323890" -version = "0.12.171" -weakdeps = ["ChainRulesCore", "ForwardDiff", "SpecialFunctions"] - - [deps.LoopVectorization.extensions] - ForwardDiffExt = ["ChainRulesCore", "ForwardDiff"] - SpecialFunctionsExt = "SpecialFunctions" - -[[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", "oneTBB_jll"] -git-tree-sha1 = "f046ccd0c6db2832a9f639e2c669c6fe867e5f4f" -uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" -version = "2024.2.0+0" - -[[deps.MLStyle]] -git-tree-sha1 = "bc38dff0548128765760c79eb7388a4b37fae2c8" -uuid = "d8e11817-5142-5d16-987a-aa16d5891078" -version = "0.4.17" - -[[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.MPICH_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "7715e65c47ba3941c502bffb7f266a41a7f54423" -uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" -version = "4.2.3+0" - -[[deps.MPIPreferences]] -deps = ["Libdl", "Preferences"] -git-tree-sha1 = "c105fe467859e7f6e9a852cb15cb4301126fac07" -uuid = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" -version = "0.1.11" - -[[deps.MPItrampoline_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "70e830dab5d0775183c99fc75e4c24c614ed7142" -uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" -version = "5.5.1+0" - -[[deps.MacroTools]] -deps = ["Markdown", "Random"] -git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" -uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.13" - -[[deps.ManualMemory]] -git-tree-sha1 = "bcaef4fc7a0cfe2cba636d84cda54b5e4e4ca3cd" -uuid = "d125e4d3-2237-4719-b19c-fa641b8a4667" -version = "0.1.8" - -[[deps.Markdown]] -deps = ["Base64"] -uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" -version = "1.11.0" - -[[deps.MathOptInterface]] -deps = ["BenchmarkTools", "CodecBzip2", "CodecZlib", "DataStructures", "ForwardDiff", "JSON", "LinearAlgebra", "MutableArithmetics", "NaNMath", "OrderedCollections", "PrecompileTools", "Printf", "SparseArrays", "SpecialFunctions", "Test", "Unicode"] -git-tree-sha1 = "5b246fca5420ae176d65ed43a2d0ee5897775216" -uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" -version = "1.31.2" - -[[deps.MbedTLS_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.6+0" - -[[deps.MicrosoftMPI_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "f12a29c4400ba812841c6ace3f4efbb6dbb3ba01" -uuid = "9237b28f-5490-5468-be7b-bb81f5f5e6cf" -version = "10.1.4+2" - -[[deps.Mmap]] -uuid = "a63ad114-7e13-5084-954f-fe012c677804" -version = "1.11.0" - -[[deps.MozillaCACerts_jll]] -uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2023.12.12" - -[[deps.MshReader]] -git-tree-sha1 = "a5d74e71d0eb2bfe30a4cac7dccf1a0c9b969771" -uuid = "64cd2da2-d71d-431a-81e3-4cf84ef169dd" -version = "0.1.0" - -[[deps.MutableArithmetics]] -deps = ["LinearAlgebra", "SparseArrays", "Test"] -git-tree-sha1 = "90077f1e79de8c9c7c8a90644494411111f4e07b" -uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" -version = "1.5.2" - -[[deps.NaNMath]] -deps = ["OpenLibm_jll"] -git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" -uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" -version = "1.0.2" - -[[deps.NetworkOptions]] -uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" -version = "1.2.0" - -[[deps.OCCT_jll]] -deps = ["Artifacts", "FreeType2_jll", "JLLWrappers", "Libdl", "Libglvnd_jll", "Xorg_libX11_jll", "Xorg_libXext_jll", "Xorg_libXfixes_jll", "Xorg_libXft_jll", "Xorg_libXinerama_jll", "Xorg_libXrender_jll"] -git-tree-sha1 = "bef34b68c20cc34475c5cb464ab48555e74f4c61" -uuid = "baad4e97-8daa-5946-aac2-2edac59d34e1" -version = "7.7.2+0" - -[[deps.OffsetArrays]] -git-tree-sha1 = "1a27764e945a152f7ca7efa04de513d473e9542e" -uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" -version = "1.14.1" -weakdeps = ["Adapt"] - - [deps.OffsetArrays.extensions] - OffsetArraysAdaptExt = "Adapt" - -[[deps.OpenBLAS_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] -uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.27+1" - -[[deps.OpenLibm_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.1+2" - -[[deps.OpenMPI_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "e25c1778a98e34219a00455d6e4384e017ea9762" -uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" -version = "4.1.6+0" - -[[deps.OpenSSL_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "7493f61f55a6cce7325f197443aa80d32554ba10" -uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.0.15+1" - -[[deps.OpenSpecFun_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" -uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" -version = "0.5.5+0" - -[[deps.OrderedCollections]] -git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" -uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.6.3" - -[[deps.PCRE2_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" -version = "10.42.0+1" - -[[deps.Parsers]] -deps = ["Dates", "PrecompileTools", "UUIDs"] -git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821" -uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "2.8.1" - -[[deps.Pixman_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] -git-tree-sha1 = "35621f10a7531bc8fa58f74610b1bfb70a3cfc6b" -uuid = "30392449-352a-5448-841d-b1acce4e97dc" -version = "0.43.4+0" - -[[deps.Pkg]] -deps = ["Artifacts", "Dates", "Downloads", "FileWatching", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "Random", "SHA", "TOML", "Tar", "UUIDs", "p7zip_jll"] -uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" -version = "1.11.0" - - [deps.Pkg.extensions] - REPLExt = "REPL" - - [deps.Pkg.weakdeps] - REPL = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" - -[[deps.Polyester]] -deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] -git-tree-sha1 = "6d38fea02d983051776a856b7df75b30cf9a3c1f" -uuid = "f517fe37-dbe3-4b94-8317-1923a5111588" -version = "0.7.16" - -[[deps.PolyesterWeave]] -deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] -git-tree-sha1 = "645bed98cd47f72f67316fd42fc47dee771aefcd" -uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad" -version = "0.2.2" - -[[deps.PrecompileTools]] -deps = ["Preferences"] -git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" -uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" -version = "1.2.1" - -[[deps.Preferences]] -deps = ["TOML"] -git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" -uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.4.3" - -[[deps.PrettyTables]] -deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] -git-tree-sha1 = "1101cd475833706e4d0e7b122218257178f48f34" -uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -version = "2.4.0" - -[[deps.Printf]] -deps = ["Unicode"] -uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" -version = "1.11.0" - -[[deps.Profile]] -uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" -version = "1.11.0" - -[[deps.Random]] -deps = ["SHA"] -uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" -version = "1.11.0" - -[[deps.ReachabilityBase]] -deps = ["ExprTools", "InteractiveUtils", "LinearAlgebra", "Random", "Requires", "SparseArrays"] -git-tree-sha1 = "aee88cd9608e69310aa6b595e6303c450040e3fc" -uuid = "379f33d0-9447-4353-bd03-d664070e549f" -version = "0.3.1" - -[[deps.RecipesBase]] -deps = ["PrecompileTools"] -git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" -uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" -version = "1.3.4" - -[[deps.RecursiveArrayTools]] -deps = ["Adapt", "ArrayInterface", "DocStringExtensions", "GPUArraysCore", "IteratorInterfaceExtensions", "LinearAlgebra", "RecipesBase", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables"] -git-tree-sha1 = "b034171b93aebc81b3e1890a036d13a9c4a9e3e0" -uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" -version = "3.27.0" - - [deps.RecursiveArrayTools.extensions] - RecursiveArrayToolsFastBroadcastExt = "FastBroadcast" - RecursiveArrayToolsForwardDiffExt = "ForwardDiff" - RecursiveArrayToolsMeasurementsExt = "Measurements" - RecursiveArrayToolsMonteCarloMeasurementsExt = "MonteCarloMeasurements" - RecursiveArrayToolsReverseDiffExt = ["ReverseDiff", "Zygote"] - RecursiveArrayToolsSparseArraysExt = ["SparseArrays"] - RecursiveArrayToolsTrackerExt = "Tracker" - RecursiveArrayToolsZygoteExt = "Zygote" - - [deps.RecursiveArrayTools.weakdeps] - FastBroadcast = "7034ab61-46d4-4ed7-9d0f-46aef9175898" - ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" - Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" - MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" - ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" - Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" - -[[deps.RecursiveFactorization]] -deps = ["LinearAlgebra", "LoopVectorization", "Polyester", "PrecompileTools", "StrideArraysCore", "TriangularSolve"] -git-tree-sha1 = "6db1a75507051bc18bfa131fbc7c3f169cc4b2f6" -uuid = "f2c3362d-daeb-58d1-803e-2bc74f2840b4" -version = "0.2.23" - -[[deps.Reexport]] -git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" -uuid = "189a3867-3050-52da-a836-e630ba90ab69" -version = "1.2.2" - -[[deps.Requires]] -deps = ["UUIDs"] -git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" -uuid = "ae029012-a4dd-5104-9daa-d747884805df" -version = "1.3.0" - -[[deps.Roots]] -deps = ["Accessors", "CommonSolve", "Printf"] -git-tree-sha1 = "3a7c7e5c3f015415637f5debdf8a674aa2c979c4" -uuid = "f2b01f46-fcfa-551c-844a-d8ac1e96c665" -version = "2.2.1" - - [deps.Roots.extensions] - RootsChainRulesCoreExt = "ChainRulesCore" - RootsForwardDiffExt = "ForwardDiff" - RootsIntervalRootFindingExt = "IntervalRootFinding" - RootsSymPyExt = "SymPy" - RootsSymPyPythonCallExt = "SymPyPythonCall" - - [deps.Roots.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" - IntervalRootFinding = "d2bf35a9-74e0-55ec-b149-d360ff49b807" - SymPy = "24249f21-da20-56a4-8eb1-6a02cf4ae2e6" - SymPyPythonCall = "bc8888f7-b21e-4b7c-a06a-5d9c9496438c" - -[[deps.RoundingEmulator]] -git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b" -uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705" -version = "0.2.1" - -[[deps.RuntimeGeneratedFunctions]] -deps = ["ExprTools", "SHA", "Serialization"] -git-tree-sha1 = "04c968137612c4a5629fa531334bb81ad5680f00" -uuid = "7e49a35a-f44a-4d26-94aa-eba1b4ca6b47" -version = "0.5.13" - -[[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 = "98ca7c29edd6fc79cd74c61accb7010a4e7aee33" -uuid = "fdea26ae-647d-5447-a871-4b548cad5224" -version = "3.6.0" - -[[deps.SIMDTypes]] -git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" -uuid = "94e857df-77ce-4151-89e5-788b33177be4" -version = "0.1.0" - -[[deps.SLEEFPirates]] -deps = ["IfElse", "Static", "VectorizationBase"] -git-tree-sha1 = "456f610ca2fbd1c14f5fcf31c6bfadc55e7d66e0" -uuid = "476501e8-09a2-5ece-8869-fb82de89a1fa" -version = "0.6.43" - -[[deps.SafeTestsets]] -git-tree-sha1 = "81ec49d645af090901120a1542e67ecbbe044db3" -uuid = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" -version = "0.1.0" - -[[deps.SciMLBase]] -deps = ["ADTypes", "Accessors", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "Expronicon", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "PrecompileTools", "Preferences", "Printf", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLOperators", "SciMLStructures", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface"] -git-tree-sha1 = "26fea1911818cd480400f1a2b7f6b32c3cc3836a" -uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462" -version = "2.56.4" - - [deps.SciMLBase.extensions] - SciMLBaseChainRulesCoreExt = "ChainRulesCore" - SciMLBaseMakieExt = "Makie" - SciMLBasePartialFunctionsExt = "PartialFunctions" - SciMLBasePyCallExt = "PyCall" - SciMLBasePythonCallExt = "PythonCall" - SciMLBaseRCallExt = "RCall" - SciMLBaseZygoteExt = "Zygote" - - [deps.SciMLBase.weakdeps] - ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" - PartialFunctions = "570af359-4316-4cb7-8c74-252c00c2016b" - PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" - PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" - RCall = "6f49c342-dc21-5d91-9882-a32aef131414" - Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" - -[[deps.SciMLOperators]] -deps = ["Accessors", "ArrayInterface", "DocStringExtensions", "LinearAlgebra", "MacroTools"] -git-tree-sha1 = "ef388ca9e4921ec5614ce714f8aa59a5cd33d867" -uuid = "c0aeaf25-5076-4817-a8d5-81caf7dfa961" -version = "0.3.11" -weakdeps = ["SparseArrays", "StaticArraysCore"] - - [deps.SciMLOperators.extensions] - SciMLOperatorsSparseArraysExt = "SparseArrays" - SciMLOperatorsStaticArraysCoreExt = "StaticArraysCore" - -[[deps.SciMLStructures]] -deps = ["ArrayInterface"] -git-tree-sha1 = "25514a6f200219cd1073e4ff23a6324e4a7efe64" -uuid = "53ae85a6-f571-4167-b2af-e1d143709226" -version = "1.5.0" - -[[deps.Serialization]] -uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" -version = "1.11.0" - -[[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.SharedArrays]] -deps = ["Distributed", "Mmap", "Random", "Serialization"] -uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" -version = "1.11.0" - -[[deps.Sockets]] -uuid = "6462fe0b-24de-5631-8697-dd941f90decc" -version = "1.11.0" - -[[deps.SparseArrays]] -deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] -uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" -version = "1.11.0" - -[[deps.Sparspak]] -deps = ["Libdl", "LinearAlgebra", "Logging", "OffsetArrays", "Printf", "SparseArrays", "Test"] -git-tree-sha1 = "342cf4b449c299d8d1ceaf00b7a49f4fbc7940e7" -uuid = "e56a9233-b9d6-4f03-8d0f-1825330902ac" -version = "0.3.9" - -[[deps.SpecialFunctions]] -deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "2f5d4697f21388cbe1ff299430dd169ef97d7e14" -uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.4.0" -weakdeps = ["ChainRulesCore"] - - [deps.SpecialFunctions.extensions] - SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" - -[[deps.Static]] -deps = ["CommonWorldInvalidations", "IfElse", "PrecompileTools"] -git-tree-sha1 = "87d51a3ee9a4b0d2fe054bdd3fc2436258db2603" -uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" -version = "1.1.1" - -[[deps.StaticArrayInterface]] -deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "PrecompileTools", "Static"] -git-tree-sha1 = "96381d50f1ce85f2663584c8e886a6ca97e60554" -uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" -version = "1.8.0" -weakdeps = ["OffsetArrays", "StaticArrays"] - - [deps.StaticArrayInterface.extensions] - StaticArrayInterfaceOffsetArraysExt = "OffsetArrays" - StaticArrayInterfaceStaticArraysExt = "StaticArrays" - -[[deps.StaticArrays]] -deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] -git-tree-sha1 = "eeafab08ae20c62c44c8399ccb9354a04b80db50" -uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.9.7" -weakdeps = ["ChainRulesCore", "Statistics"] - - [deps.StaticArrays.extensions] - StaticArraysChainRulesCoreExt = "ChainRulesCore" - StaticArraysStatisticsExt = "Statistics" - -[[deps.StaticArraysCore]] -git-tree-sha1 = "192954ef1208c7019899fbf8049e717f92959682" -uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" -version = "1.4.3" - -[[deps.Statistics]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0" -uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" -version = "1.11.1" -weakdeps = ["SparseArrays"] - - [deps.Statistics.extensions] - SparseArraysExt = ["SparseArrays"] - -[[deps.StrideArraysCore]] -deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] -git-tree-sha1 = "f35f6ab602df8413a50c4a25ca14de821e8605fb" -uuid = "7792a7ef-975c-4747-a70f-980b88e8d1da" -version = "0.5.7" - -[[deps.StringManipulation]] -deps = ["PrecompileTools"] -git-tree-sha1 = "a6b1675a536c5ad1a60e5a5153e1fee12eb146e3" -uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" -version = "0.4.0" - -[[deps.SuiteSparse_jll]] -deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] -uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "7.7.0+0" - -[[deps.Suppressor]] -deps = ["Logging"] -git-tree-sha1 = "6dbb5b635c5437c68c28c2ac9e39b87138f37c0a" -uuid = "fd094767-a336-5f1f-9728-57cf17d0bbfb" -version = "0.2.8" - -[[deps.SymbolicIndexingInterface]] -deps = ["Accessors", "ArrayInterface", "RuntimeGeneratedFunctions", "StaticArraysCore"] -git-tree-sha1 = "4bc96df5d71515b1cb86dd626915f06f4c0d46f5" -uuid = "2efcf032-c050-4f8e-a9bb-153293bab1f5" -version = "0.3.33" - -[[deps.TOML]] -deps = ["Dates"] -uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" -version = "1.0.3" - -[[deps.TableTraits]] -deps = ["IteratorInterfaceExtensions"] -git-tree-sha1 = "c06b2f539df1c6efa794486abfb6ed2022561a39" -uuid = "3783bdb8-4a98-5b6b-af9a-565f29a5fe9c" -version = "1.0.1" - -[[deps.Tables]] -deps = ["DataAPI", "DataValueInterfaces", "IteratorInterfaceExtensions", "OrderedCollections", "TableTraits"] -git-tree-sha1 = "598cd7c1f68d1e205689b1c2fe65a9f85846f297" -uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" -version = "1.12.0" - -[[deps.Tar]] -deps = ["ArgTools", "SHA"] -uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" -version = "1.10.0" - -[[deps.Tensors]] -deps = ["ForwardDiff", "LinearAlgebra", "PrecompileTools", "SIMD", "StaticArrays", "Statistics"] -git-tree-sha1 = "957f256fb380cad64cae4da39e562ecfb5c3fec9" -uuid = "48a634ad-e948-5137-8d70-aa71f2a747f4" -version = "1.16.1" - -[[deps.Test]] -deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] -uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" -version = "1.11.0" - -[[deps.ThreadingUtilities]] -deps = ["ManualMemory"] -git-tree-sha1 = "eda08f7e9818eb53661b3deb74e3159460dfbc27" -uuid = "8290d209-cae3-49c0-8002-c8c24d57dab5" -version = "0.5.2" - -[[deps.TranscodingStreams]] -git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" -uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.11.3" - -[[deps.TriangularSolve]] -deps = ["CloseOpenIntervals", "IfElse", "LayoutPointers", "LinearAlgebra", "LoopVectorization", "Polyester", "Static", "VectorizationBase"] -git-tree-sha1 = "be986ad9dac14888ba338c2554dcfec6939e1393" -uuid = "d5829a12-d9aa-46ab-831f-fb7c9ab06edf" -version = "0.2.1" - -[[deps.UUIDs]] -deps = ["Random", "SHA"] -uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" -version = "1.11.0" - -[[deps.UnPack]] -git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" -uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" -version = "1.0.2" - -[[deps.Unicode]] -uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" -version = "1.11.0" - -[[deps.VTKBase]] -git-tree-sha1 = "c2d0db3ef09f1942d08ea455a9e252594be5f3b6" -uuid = "4004b06d-e244-455f-a6ce-a5f9919cc534" -version = "1.0.1" - -[[deps.VectorizationBase]] -deps = ["ArrayInterface", "CPUSummary", "HostCPUFeatures", "IfElse", "LayoutPointers", "Libdl", "LinearAlgebra", "SIMDTypes", "Static", "StaticArrayInterface"] -git-tree-sha1 = "e7f5b81c65eb858bed630fe006837b935518aca5" -uuid = "3d5dd08c-fd9d-11e8-17fa-ed2836048c2f" -version = "0.21.70" - -[[deps.WriteVTK]] -deps = ["Base64", "CodecZlib", "FillArrays", "LightXML", "TranscodingStreams", "VTKBase"] -git-tree-sha1 = "1d8042d58334ab7947ce505709df7009da6f3375" -uuid = "64499a7a-5c06-52f2-abe2-ccb03c286192" -version = "1.21.1" - -[[deps.XML2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] -git-tree-sha1 = "1165b0443d0eca63ac1e32b8c0eb69ed2f4f8127" -uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.13.3+0" - -[[deps.XSLT_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgcrypt_jll", "Libgpg_error_jll", "Libiconv_jll", "XML2_jll", "Zlib_jll"] -git-tree-sha1 = "a54ee957f4c86b526460a720dbc882fa5edcbefc" -uuid = "aed1982a-8fda-507f-9586-7b0439959a61" -version = "1.1.41+0" - -[[deps.Xorg_libX11_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] -git-tree-sha1 = "afead5aba5aa507ad5a3bf01f58f82c8d1403495" -uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" -version = "1.8.6+0" - -[[deps.Xorg_libXau_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "6035850dcc70518ca32f012e46015b9beeda49d8" -uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" -version = "1.0.11+0" - -[[deps.Xorg_libXdmcp_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "34d526d318358a859d7de23da945578e8e8727b7" -uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" -version = "1.1.4+0" - -[[deps.Xorg_libXext_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] -git-tree-sha1 = "d2d1a5c49fae4ba39983f63de6afcbea47194e85" -uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" -version = "1.3.6+0" - -[[deps.Xorg_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", "Xorg_libX11_jll"] -git-tree-sha1 = "47e45cd78224c53109495b3e324df0c37bb61fbe" -uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" -version = "0.9.11+0" - -[[deps.Xorg_libpthread_stubs_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9" -uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" -version = "0.1.1+0" - -[[deps.Xorg_libxcb_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] -git-tree-sha1 = "bcd466676fef0878338c61e655629fa7bbc69d8e" -uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" -version = "1.17.0+0" - -[[deps.Xorg_xtrans_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "e92a1a012a10506618f10b7047e478403a046c77" -uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" -version = "1.5.0+0" - -[[deps.Zlib_jll]] -deps = ["Libdl"] -uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.13+1" - -[[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", "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 = "1e7fe5c8dbe0e911931a18cdfbd2c7a1e01b68ef" -uuid = "630162c2-fc9b-58b3-9910-8442a8a132e6" -version = "4.13.1+0" - -[[deps.libaec_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "46bf7be2917b59b761247be3f317ddf75e50e997" -uuid = "477f73a3-ac25-53e9-8cc3-50b2fa2566f0" -version = "1.1.2+0" - -[[deps.libblastrampoline_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.11.0+0" - -[[deps.libpng_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "b70c870239dc3d7bc094eb2d6be9b73d27bef280" -uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" -version = "1.6.44+0" - -[[deps.nghttp2_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.59.0+0" - -[[deps.oneTBB_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "7d0ea0f4895ef2f5cb83645fa689e52cb55cf493" -uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e" -version = "2021.12.0+0" - -[[deps.p7zip_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+2" diff --git a/Project.toml b/Project.toml index f25f5157e..9185a892b 100644 --- a/Project.toml +++ b/Project.toml @@ -8,7 +8,6 @@ AutoHashEquals = "15f4f7f2-30c1-5605-9d31-71845cf9641f" CommonSolve = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" Dictionaries = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" -Gmsh = "705231aa-382f-11e9-3f0c-b7cb4346fdeb" InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240" IterativeSolvers = "42fd0dbc-a981-5370-80f2-aaf504508153" LazySets = "b4f0291d-fe17-52bc-9479-3d1a343d9043" @@ -16,13 +15,10 @@ LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" LinearSolve = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae" MshReader = "64cd2da2-d71d-431a-81e3-4cf84ef169dd" PrettyTables = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Reexport = "189a3867-3050-52da-a836-e630ba90ab69" -Roots = "f2b01f46-fcfa-551c-844a-d8ac1e96c665" SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" -Suppressor = "fd094767-a336-5f1f-9728-57cf17d0bbfb" Tensors = "48a634ad-e948-5137-8d70-aa71f2a747f4" WriteVTK = "64499a7a-5c06-52f2-abe2-ccb03c286192" @@ -47,7 +43,11 @@ WriteVTK = "1" julia = "1" [extras] +Gmsh = "705231aa-382f-11e9-3f0c-b7cb4346fdeb" +Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +Roots = "f2b01f46-fcfa-551c-844a-d8ac1e96c665" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +Suppressor = "fd094767-a336-5f1f-9728-57cf17d0bbfb" [targets] -test = ["Test"] +test = ["Gmsh", "Random", "Roots", "Test", "Suppressor"] diff --git a/test/frames.jl b/test/entities/frames.jl similarity index 100% rename from test/frames.jl rename to test/entities/frames.jl From d06c69753d1040755bb96fcc30c61d72bcad5c12 Mon Sep 17 00:00:00 2001 From: "mauricio.vanzulli" Date: Mon, 11 Nov 2024 23:14:44 +0100 Subject: [PATCH 2/7] Remove docs deps --- Project.toml | 5 +- docs/Manifest.toml | 1448 -------------------------------------------- docs/Project.toml | 6 - 3 files changed, 3 insertions(+), 1456 deletions(-) delete mode 100644 docs/Manifest.toml delete mode 100644 docs/Project.toml diff --git a/Project.toml b/Project.toml index 9185a892b..1160f3562 100644 --- a/Project.toml +++ b/Project.toml @@ -44,10 +44,11 @@ julia = "1" [extras] Gmsh = "705231aa-382f-11e9-3f0c-b7cb4346fdeb" +Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Roots = "f2b01f46-fcfa-551c-844a-d8ac1e96c665" -Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" Suppressor = "fd094767-a336-5f1f-9728-57cf17d0bbfb" +Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] -test = ["Gmsh", "Random", "Roots", "Test", "Suppressor"] +test = ["Gmsh", "Documenter", "Random", "Roots", "Test", "Suppressor"] diff --git a/docs/Manifest.toml b/docs/Manifest.toml deleted file mode 100644 index ac24a6462..000000000 --- a/docs/Manifest.toml +++ /dev/null @@ -1,1448 +0,0 @@ -# This file is machine-generated - editing it directly is not advised - -julia_version = "1.10.3" -manifest_format = "2.0" -project_hash = "a654a258047a4af46840cb4d6e5e88a1bceca4fe" - -[[deps.ADTypes]] -git-tree-sha1 = "401c87ea437e9d5b74dc283a77198ad75e50811f" -uuid = "47edcb42-4c32-4615-8424-f2b9edc5f35b" -version = "1.1.0" - - [deps.ADTypes.extensions] - ADTypesChainRulesCoreExt = "ChainRulesCore" - ADTypesEnzymeCoreExt = "EnzymeCore" - - [deps.ADTypes.weakdeps] - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" - -[[deps.ANSIColoredPrinters]] -git-tree-sha1 = "574baf8110975760d391c710b6341da1afa48d8c" -uuid = "a4c015fc-c6ff-483c-b24f-f7ea428134e9" -version = "0.0.1" - -[[deps.Accessors]] -deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "LinearAlgebra", "MacroTools", "Markdown", "Test"] -git-tree-sha1 = "c0d491ef0b135fd7d63cbc6404286bc633329425" -uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" -version = "0.1.36" - - [deps.Accessors.extensions] - AccessorsAxisKeysExt = "AxisKeys" - AccessorsIntervalSetsExt = "IntervalSets" - AccessorsStaticArraysExt = "StaticArrays" - AccessorsStructArraysExt = "StructArrays" - AccessorsUnitfulExt = "Unitful" - - [deps.Accessors.weakdeps] - AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - Requires = "ae029012-a4dd-5104-9daa-d747884805df" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" - Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" - -[[deps.Adapt]] -deps = ["LinearAlgebra", "Requires"] -git-tree-sha1 = "6a55b747d1812e699320963ffde36f1ebdda4099" -uuid = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" -version = "4.0.4" -weakdeps = ["StaticArrays"] - - [deps.Adapt.extensions] - AdaptStaticArraysExt = "StaticArrays" - -[[deps.ArgTools]] -uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" -version = "1.1.1" - -[[deps.ArrayInterface]] -deps = ["Adapt", "LinearAlgebra", "SparseArrays", "SuiteSparse"] -git-tree-sha1 = "133a240faec6e074e07c31ee75619c90544179cf" -uuid = "4fba245c-0d91-5ea0-9b3e-6abc04ee57a9" -version = "7.10.0" - - [deps.ArrayInterface.extensions] - ArrayInterfaceBandedMatricesExt = "BandedMatrices" - ArrayInterfaceBlockBandedMatricesExt = "BlockBandedMatrices" - ArrayInterfaceCUDAExt = "CUDA" - ArrayInterfaceCUDSSExt = "CUDSS" - ArrayInterfaceChainRulesExt = "ChainRules" - ArrayInterfaceGPUArraysCoreExt = "GPUArraysCore" - ArrayInterfaceReverseDiffExt = "ReverseDiff" - ArrayInterfaceStaticArraysCoreExt = "StaticArraysCore" - ArrayInterfaceTrackerExt = "Tracker" - - [deps.ArrayInterface.weakdeps] - BandedMatrices = "aae01518-5342-5314-be14-df237901396f" - BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" - CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" - CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" - ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" - GPUArraysCore = "46192b85-c4d5-4398-a991-12ede77f4527" - ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" - StaticArraysCore = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" - Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" - -[[deps.ArrayLayouts]] -deps = ["FillArrays", "LinearAlgebra"] -git-tree-sha1 = "33207a8be6267bc389d0701e97a9bce6a4de68eb" -uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" -version = "1.9.2" -weakdeps = ["SparseArrays"] - - [deps.ArrayLayouts.extensions] - ArrayLayoutsSparseArraysExt = "SparseArrays" - -[[deps.Artifacts]] -uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" - -[[deps.AutoHashEquals]] -deps = ["Pkg"] -git-tree-sha1 = "daaeb6f7f77b88c072a83a2451801818acb5c63b" -uuid = "15f4f7f2-30c1-5605-9d31-71845cf9641f" -version = "2.1.0" - -[[deps.Base64]] -uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" - -[[deps.BenchmarkTools]] -deps = ["JSON", "Logging", "Printf", "Profile", "Statistics", "UUIDs"] -git-tree-sha1 = "f1dff6729bc61f4d49e140da1af55dcd1ac97b2f" -uuid = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf" -version = "1.5.0" - -[[deps.BitTwiddlingConvenienceFunctions]] -deps = ["Static"] -git-tree-sha1 = "0c5f81f47bbbcf4aea7b2959135713459170798b" -uuid = "62783981-4cbd-42fc-bca8-16325de8dc4b" -version = "0.1.5" - -[[deps.Bzip2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "9e2a6b69137e6969bab0152632dcb3bc108c8bdd" -uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" -version = "1.0.8+1" - -[[deps.CPUSummary]] -deps = ["CpuId", "IfElse", "PrecompileTools", "Static"] -git-tree-sha1 = "601f7e7b3d36f18790e2caf83a882d88e9b71ff1" -uuid = "2a0fbf3d-bb9c-48f3-b0a9-814d99fd7ab9" -version = "0.2.4" - -[[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_jll]] -deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "LZO_jll", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] -git-tree-sha1 = "a4c43f59baa34011e303e76f5c8c91bf58415aaf" -uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" -version = "1.18.0+1" - -[[deps.ChainRulesCore]] -deps = ["Compat", "LinearAlgebra"] -git-tree-sha1 = "575cd02e080939a33b6df6c5853d14924c08e35b" -uuid = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" -version = "1.23.0" -weakdeps = ["SparseArrays"] - - [deps.ChainRulesCore.extensions] - ChainRulesCoreSparseArraysExt = "SparseArrays" - -[[deps.CloseOpenIntervals]] -deps = ["Static", "StaticArrayInterface"] -git-tree-sha1 = "70232f82ffaab9dc52585e0dd043b5e0c6b714f1" -uuid = "fb6a15b2-703c-40df-9091-08a04967cfa9" -version = "0.1.12" - -[[deps.CodecBzip2]] -deps = ["Bzip2_jll", "Libdl", "TranscodingStreams"] -git-tree-sha1 = "9b1ca1aa6ce3f71b3d1840c538a8210a043625eb" -uuid = "523fee87-0ab8-5b00-afb7-3ecf72e48cfd" -version = "0.8.2" - -[[deps.CodecZlib]] -deps = ["TranscodingStreams", "Zlib_jll"] -git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73" -uuid = "944b1d66-785c-5afd-91f1-9de20f533193" -version = "0.7.4" - -[[deps.CommonSolve]] -git-tree-sha1 = "0eee5eb66b1cf62cd6ad1b460238e60e4b09400c" -uuid = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" -version = "0.2.4" - -[[deps.CommonSubexpressions]] -deps = ["MacroTools", "Test"] -git-tree-sha1 = "7b8a93dba8af7e3b42fecabf646260105ac373f7" -uuid = "bbf7d656-a473-5ed7-a52c-81e309532950" -version = "0.3.0" - -[[deps.Compat]] -deps = ["TOML", "UUIDs"] -git-tree-sha1 = "b1c55339b7c6c350ee89f2c1604299660525b248" -uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" -version = "4.15.0" -weakdeps = ["Dates", "LinearAlgebra"] - - [deps.Compat.extensions] - CompatLinearAlgebraExt = "LinearAlgebra" - -[[deps.CompilerSupportLibraries_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" -version = "1.1.1+0" - -[[deps.CompositionsBase]] -git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" -uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" -version = "0.1.2" -weakdeps = ["InverseFunctions"] - - [deps.CompositionsBase.extensions] - CompositionsBaseInverseFunctionsExt = "InverseFunctions" - -[[deps.ConcreteStructs]] -git-tree-sha1 = "f749037478283d372048690eb3b5f92a79432b34" -uuid = "2569d6c7-a4a2-43d3-a901-331e8e4be471" -version = "0.2.3" - -[[deps.ConstructionBase]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "260fd2400ed2dab602a7c15cf10c1933c59930a2" -uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" -version = "1.5.5" - - [deps.ConstructionBase.extensions] - ConstructionBaseIntervalSetsExt = "IntervalSets" - ConstructionBaseStaticArraysExt = "StaticArrays" - - [deps.ConstructionBase.weakdeps] - IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" - StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" - -[[deps.CpuId]] -deps = ["Markdown"] -git-tree-sha1 = "fcbb72b032692610bfbdb15018ac16a36cf2e406" -uuid = "adafc99b-e345-5852-983c-f28acb93d879" -version = "0.3.1" - -[[deps.Crayons]] -git-tree-sha1 = "249fe38abf76d48563e2f4556bebd215aa317e15" -uuid = "a8cc5b0e-0ffa-5ad4-8c14-923d3ee1735f" -version = "4.1.1" - -[[deps.DataAPI]] -git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" -uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" -version = "1.16.0" - -[[deps.DataStructures]] -deps = ["Compat", "InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "1d0a14036acb104d9e89698bd408f63ab58cdc82" -uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.18.20" - -[[deps.DataValueInterfaces]] -git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" -uuid = "e2d170a0-9d28-54be-80f0-106bbe20a464" -version = "1.0.0" - -[[deps.Dates]] -deps = ["Printf"] -uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" - -[[deps.Dictionaries]] -deps = ["Indexing", "Random", "Serialization"] -git-tree-sha1 = "1f3b7b0d321641c1f2e519f7aed77f8e1f6cb133" -uuid = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4" -version = "0.3.29" - -[[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.Distributed]] -deps = ["Random", "Serialization", "Sockets"] -uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" - -[[deps.DocStringExtensions]] -deps = ["LibGit2"] -git-tree-sha1 = "2fb1e02f2b635d0845df5d7c167fec4dd739b00d" -uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" -version = "0.9.3" - -[[deps.Documenter]] -deps = ["ANSIColoredPrinters", "Base64", "Dates", "DocStringExtensions", "IOCapture", "InteractiveUtils", "JSON", "LibGit2", "Logging", "Markdown", "REPL", "Test", "Unicode"] -git-tree-sha1 = "39fd748a73dce4c05a9655475e437170d8fb1b67" -uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4" -version = "0.27.25" - -[[deps.Downloads]] -deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] -uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" -version = "1.6.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.Expat_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "1c6317308b9dc757616f0b5cb379db10494443a7" -uuid = "2e619515-83b5-522b-bb60-26c02a35a201" -version = "2.6.2+0" - -[[deps.ExprTools]] -git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" -uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" -version = "0.1.10" - -[[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.FastLapackInterface]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "f4102aab9c7df8691ed09f9c42e34f5ab5458ab9" -uuid = "29a986be-02c6-4525-aec4-84b980013641" -version = "2.0.3" - -[[deps.FastRounding]] -deps = ["ErrorfreeArithmetic", "LinearAlgebra"] -git-tree-sha1 = "6344aa18f654196be82e62816935225b3b9abe44" -uuid = "fa42c844-2597-5d31-933b-ebd51ab2693f" -version = "0.3.1" - -[[deps.FileWatching]] -uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" - -[[deps.FillArrays]] -deps = ["LinearAlgebra"] -git-tree-sha1 = "0653c0a2396a6da5bc4766c43041ef5fd3efbe57" -uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" -version = "1.11.0" - - [deps.FillArrays.extensions] - FillArraysPDMatsExt = "PDMats" - FillArraysSparseArraysExt = "SparseArrays" - FillArraysStatisticsExt = "Statistics" - - [deps.FillArrays.weakdeps] - PDMats = "90014a1f-27ba-587c-ab20-58faa44d9150" - SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" - -[[deps.Fontconfig_jll]] -deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] -git-tree-sha1 = "db16beca600632c95fc8aca29890d83788dd8b23" -uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" -version = "2.13.96+0" - -[[deps.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.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.FunctionWrappers]] -git-tree-sha1 = "d62485945ce5ae9c0c48f124a84998d755bae00e" -uuid = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e" -version = "1.1.3" - -[[deps.FunctionWrappersWrappers]] -deps = ["FunctionWrappers"] -git-tree-sha1 = "b104d487b34566608f8b4e1c39fb0b10aa279ff8" -uuid = "77dc65aa-8811-40c2-897b-53d922fa7daf" -version = "0.1.3" - -[[deps.Future]] -deps = ["Random"] -uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" - -[[deps.GLPK]] -deps = ["GLPK_jll", "MathOptInterface"] -git-tree-sha1 = "3ea2b8751474084c3c7a344a15ed725fb805dd2b" -uuid = "60bf3e95-4087-53dc-ae20-288a0d20c6a6" -version = "1.2.0" - -[[deps.GLPK_jll]] -deps = ["Artifacts", "GMP_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "fe68622f32828aa92275895fdb324a85894a5b1b" -uuid = "e8aa6df9-e6ca-548a-97ff-1f85fc5b8b98" -version = "5.0.1+0" - -[[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+6" - -[[deps.GPUArraysCore]] -deps = ["Adapt"] -git-tree-sha1 = "ec632f177c0d990e64d955ccc1b8c04c485a0950" -uuid = "46192b85-c4d5-4398-a991-12ede77f4527" -version = "0.1.6" - -[[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 = "359a1ba2e320790ddbe4ee8b4d54a305c0ea2aff" -uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" -version = "2.80.0+0" - -[[deps.Gmsh]] -deps = ["gmsh_jll"] -git-tree-sha1 = "6d815101e62722f4e323514c9fc704007d4da2e3" -uuid = "705231aa-382f-11e9-3f0c-b7cb4346fdeb" -version = "0.3.1" - -[[deps.HDF5_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "LibCURL_jll", "Libdl", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "OpenSSL_jll", "TOML", "Zlib_jll", "libaec_jll"] -git-tree-sha1 = "82a471768b513dc39e471540fdadc84ff80ff997" -uuid = "0234f1f7-429e-5d53-9886-15a909be8d59" -version = "1.14.3+3" - -[[deps.HostCPUFeatures]] -deps = ["BitTwiddlingConvenienceFunctions", "IfElse", "Libdl", "Static"] -git-tree-sha1 = "eb8fed28f4994600e29beef49744639d985a04b2" -uuid = "3e5b6fbb-0976-4d2c-9146-d79de83f2fb0" -version = "0.1.16" - -[[deps.Hwloc_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "ca0f6bf568b4bfc807e7537f081c81e35ceca114" -uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" -version = "2.10.0+0" - -[[deps.IOCapture]] -deps = ["Logging", "Random"] -git-tree-sha1 = "8b72179abc660bfab5e28472e019392b97d0985c" -uuid = "b5f81e59-6552-4d32-b1f0-c071b021bf89" -version = "0.2.4" - -[[deps.IfElse]] -git-tree-sha1 = "debdd00ffef04665ccbb3e150747a77560e8fad1" -uuid = "615f187c-cbe4-4ef1-ba3b-2fcf58d6d173" -version = "0.1.1" - -[[deps.Indexing]] -git-tree-sha1 = "ce1566720fd6b19ff3411404d4b977acd4814f9f" -uuid = "313cdc1a-70c2-5d6a-ae34-0150d3930a38" -version = "1.1.1" - -[[deps.IntelOpenMP_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "be50fe8df3acbffa0274a744f1a99d29c45a57f4" -uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" -version = "2024.1.0+0" - -[[deps.InteractiveUtils]] -deps = ["Markdown"] -uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" - -[[deps.IntervalArithmetic]] -deps = ["CRlibm", "EnumX", "FastRounding", "LinearAlgebra", "Markdown", "Random", "RecipesBase", "RoundingEmulator", "SetRounding", "StaticArrays"] -git-tree-sha1 = "f59e639916283c1d2e106d2b00910b50f4dab76c" -uuid = "d1acc4aa-44c8-5952-acd4-ba5d80a2a253" -version = "0.21.2" - -[[deps.InverseFunctions]] -deps = ["Test"] -git-tree-sha1 = "e7cbed5032c4c397a6ac23d1493f3289e01231c4" -uuid = "3587e190-3f89-42d0-90ee-14403ec27112" -version = "0.1.14" -weakdeps = ["Dates"] - - [deps.InverseFunctions.extensions] - DatesExt = "Dates" - -[[deps.IrrationalConstants]] -git-tree-sha1 = "630b497eafcc20001bba38a4651b327dcfc491d2" -uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" -version = "0.2.2" - -[[deps.IterativeSolvers]] -deps = ["LinearAlgebra", "Printf", "Random", "RecipesBase", "SparseArrays"] -git-tree-sha1 = "59545b0a2b27208b0650df0a46b8e3019f85055b" -uuid = "42fd0dbc-a981-5370-80f2-aaf504508153" -version = "0.9.4" - -[[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_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "c84a835e1a09b289ffcd2271bf2a337bbdda6637" -uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" -version = "3.0.3+0" - -[[deps.JuMP]] -deps = ["LinearAlgebra", "MacroTools", "MathOptInterface", "MutableArithmetics", "OrderedCollections", "PrecompileTools", "Printf", "SparseArrays"] -git-tree-sha1 = "07385c772da34d91fc55d6c704b6224302082ba0" -uuid = "4076af6c-e467-56ae-b986-b466b2749572" -version = "1.21.1" - - [deps.JuMP.extensions] - JuMPDimensionalDataExt = "DimensionalData" - - [deps.JuMP.weakdeps] - DimensionalData = "0703355e-b756-11e9-17c0-8b28908087d0" - -[[deps.KLU]] -deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse_jll"] -git-tree-sha1 = "07649c499349dad9f08dde4243a4c597064663e9" -uuid = "ef3ab10e-7fda-4108-b977-705223b18434" -version = "0.6.0" - -[[deps.Krylov]] -deps = ["LinearAlgebra", "Printf", "SparseArrays"] -git-tree-sha1 = "267dad6b4b7b5d529c76d40ff48d33f7e94cb834" -uuid = "ba0b0d4f-ebba-5204-a429-3ac8c609bfb7" -version = "0.9.6" - -[[deps.LLVMOpenMP_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "d986ce2d884d49126836ea94ed5bfb0f12679713" -uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" -version = "15.0.7+0" - -[[deps.LZO_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "70c5da094887fd2cae843b8db33920bac4b6f07d" -uuid = "dd4b983a-f0e5-5f8d-a1b7-129d4a5fb1ac" -version = "2.10.2+0" - -[[deps.LaTeXStrings]] -git-tree-sha1 = "50901ebc375ed41dbf8058da26f9de442febbbec" -uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" -version = "1.3.1" - -[[deps.LayoutPointers]] -deps = ["ArrayInterface", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface"] -git-tree-sha1 = "62edfee3211981241b57ff1cedf4d74d79519277" -uuid = "10f19ff3-798f-405d-979b-55457f8fc047" -version = "0.1.15" - -[[deps.LazyArrays]] -deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra", "MacroTools", "MatrixFactorizations", "SparseArrays"] -git-tree-sha1 = "35079a6a869eecace778bcda8641f9a54ca3a828" -uuid = "5078a376-72f3-5289-bfd5-ec5146d43c02" -version = "1.10.0" -weakdeps = ["StaticArrays"] - - [deps.LazyArrays.extensions] - LazyArraysStaticArraysExt = "StaticArrays" - -[[deps.LazyArtifacts]] -deps = ["Artifacts", "Pkg"] -uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" - -[[deps.LazySets]] -deps = ["Distributed", "GLPK", "IntervalArithmetic", "JuMP", "LinearAlgebra", "Random", "ReachabilityBase", "RecipesBase", "Reexport", "Requires", "SharedArrays", "SparseArrays", "StaticArraysCore"] -git-tree-sha1 = "6af2a576cbadcb28a4575202c495bc8e5289a38b" -uuid = "b4f0291d-fe17-52bc-9479-3d1a343d9043" -version = "2.12.1" - -[[deps.LibCURL]] -deps = ["LibCURL_jll", "MozillaCACerts_jll"] -uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" -version = "0.6.4" - -[[deps.LibCURL_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll", "Zlib_jll", "nghttp2_jll"] -uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.4.0+0" - -[[deps.LibGit2]] -deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] -uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" - -[[deps.LibGit2_jll]] -deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] -uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" -version = "1.6.4+0" - -[[deps.LibSSH2_jll]] -deps = ["Artifacts", "Libdl", "MbedTLS_jll"] -uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" -version = "1.11.0+1" - -[[deps.Libdl]] -uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" - -[[deps.Libffi_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "0b4a5d71f3e5200a7dff793393e09dfc2d874290" -uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" -version = "3.2.2+1" - -[[deps.Libgcrypt_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libgpg_error_jll"] -git-tree-sha1 = "9fd170c4bbfd8b935fdc5f8b7aa33532c991a673" -uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" -version = "1.8.11+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"] -git-tree-sha1 = "fbb1f2bef882392312feb1ede3615ddc1e9b99ed" -uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" -version = "1.49.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"] -git-tree-sha1 = "0c4f9c4f1a50d8f35048fa0532dabbadf702f81e" -uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" -version = "2.40.1+0" - -[[deps.Libuuid_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "5ee6203157c120d79034c748a2acba45b82b8807" -uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" -version = "2.40.1+0" - -[[deps.LightXML]] -deps = ["Libdl", "XML2_jll"] -git-tree-sha1 = "3a994404d3f6709610701c7dabfc03fed87a81f8" -uuid = "9c8b4983-aa76-5018-a973-4c85ecc9e179" -version = "0.9.1" - -[[deps.LinearAlgebra]] -deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] -uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - -[[deps.LinearElasticity_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "71e8ee0f9fe0e86a8f8c7f28361e5118eab2f93f" -uuid = "18c40d15-f7cd-5a6d-bc92-87468d86c5db" -version = "5.0.0+0" - -[[deps.LinearSolve]] -deps = ["ArrayInterface", "ChainRulesCore", "ConcreteStructs", "DocStringExtensions", "EnumX", "FastLapackInterface", "GPUArraysCore", "InteractiveUtils", "KLU", "Krylov", "LazyArrays", "Libdl", "LinearAlgebra", "MKL_jll", "Markdown", "PrecompileTools", "Preferences", "RecursiveFactorization", "Reexport", "SciMLBase", "SciMLOperators", "Setfield", "SparseArrays", "Sparspak", "StaticArraysCore", "UnPack"] -git-tree-sha1 = "efd815eaa56c0ffdf86581df5aaefb7e901323a0" -uuid = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae" -version = "2.30.0" - - [deps.LinearSolve.extensions] - LinearSolveBandedMatricesExt = "BandedMatrices" - LinearSolveBlockDiagonalsExt = "BlockDiagonals" - LinearSolveCUDAExt = "CUDA" - LinearSolveCUDSSExt = "CUDSS" - LinearSolveEnzymeExt = ["Enzyme", "EnzymeCore"] - LinearSolveFastAlmostBandedMatricesExt = ["FastAlmostBandedMatrices"] - LinearSolveHYPREExt = "HYPRE" - LinearSolveIterativeSolversExt = "IterativeSolvers" - LinearSolveKernelAbstractionsExt = "KernelAbstractions" - LinearSolveKrylovKitExt = "KrylovKit" - LinearSolveMetalExt = "Metal" - LinearSolvePardisoExt = "Pardiso" - LinearSolveRecursiveArrayToolsExt = "RecursiveArrayTools" - - [deps.LinearSolve.weakdeps] - BandedMatrices = "aae01518-5342-5314-be14-df237901396f" - BlockDiagonals = "0a1fb500-61f7-11e9-3c65-f5ef3456f9f0" - CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" - CUDSS = "45b445bb-4962-46a0-9369-b4df9d0f772e" - Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9" - EnzymeCore = "f151be2c-9106-41f4-ab19-57ee4f262869" - FastAlmostBandedMatrices = "9d29842c-ecb8-4973-b1e9-a27b1157504e" - HYPRE = "b5ffcf37-a2bd-41ab-a3da-4bd9bc8ad771" - IterativeSolvers = "42fd0dbc-a981-5370-80f2-aaf504508153" - KernelAbstractions = "63c18a36-062a-441e-b654-da1e3ab1ce7c" - KrylovKit = "0b1a1467-8014-51b9-945f-bf0ae24f4b77" - Metal = "dde4c033-4e86-420c-a63e-0dd931031962" - Pardiso = "46dd5b70-b6fb-5a00-ae2d-e8fea33afaf2" - RecursiveArrayTools = "731186ca-8d62-57ce-b412-fbd966d074cd" - -[[deps.LogExpFunctions]] -deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "18144f3e9cbe9b15b070288eef858f71b291ce37" -uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.27" - - [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.LoopVectorization]] -deps = ["ArrayInterface", "CPUSummary", "CloseOpenIntervals", "DocStringExtensions", "HostCPUFeatures", "IfElse", "LayoutPointers", "LinearAlgebra", "OffsetArrays", "PolyesterWeave", "PrecompileTools", "SIMDTypes", "SLEEFPirates", "Static", "StaticArrayInterface", "ThreadingUtilities", "UnPack", "VectorizationBase"] -git-tree-sha1 = "8f6786d8b2b3248d79db3ad359ce95382d5a6df8" -uuid = "bdcacae8-1622-11e9-2a5c-532679323890" -version = "0.12.170" -weakdeps = ["ChainRulesCore", "ForwardDiff", "SpecialFunctions"] - - [deps.LoopVectorization.extensions] - ForwardDiffExt = ["ChainRulesCore", "ForwardDiff"] - SpecialFunctionsExt = "SpecialFunctions" - -[[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", "oneTBB_jll"] -git-tree-sha1 = "80b2833b56d466b3858d565adcd16a4a05f2089b" -uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" -version = "2024.1.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.MPICH_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "4099bb6809ac109bfc17d521dad33763bcf026b7" -uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" -version = "4.2.1+1" - -[[deps.MPIPreferences]] -deps = ["Libdl", "Preferences"] -git-tree-sha1 = "c105fe467859e7f6e9a852cb15cb4301126fac07" -uuid = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" -version = "0.1.11" - -[[deps.MPItrampoline_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "ce0ca3dd147c43de175c5aff161315a424f4b8ac" -uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" -version = "5.3.3+1" - -[[deps.MacroTools]] -deps = ["Markdown", "Random"] -git-tree-sha1 = "2fa9ee3e63fd3a4f7a9a4f4744a52f4856de82df" -uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.13" - -[[deps.ManualMemory]] -git-tree-sha1 = "bcaef4fc7a0cfe2cba636d84cda54b5e4e4ca3cd" -uuid = "d125e4d3-2237-4719-b19c-fa641b8a4667" -version = "0.1.8" - -[[deps.Markdown]] -deps = ["Base64"] -uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" - -[[deps.MathOptInterface]] -deps = ["BenchmarkTools", "CodecBzip2", "CodecZlib", "DataStructures", "ForwardDiff", "JSON", "LinearAlgebra", "MutableArithmetics", "NaNMath", "OrderedCollections", "PrecompileTools", "Printf", "SparseArrays", "SpecialFunctions", "Test", "Unicode"] -git-tree-sha1 = "9cc5acd6b76174da7503d1de3a6f8cf639b6e5cb" -uuid = "b8f27783-ece8-5eb3-8dc8-9495eed66fee" -version = "1.29.0" - -[[deps.MatrixFactorizations]] -deps = ["ArrayLayouts", "LinearAlgebra", "Printf", "Random"] -git-tree-sha1 = "6731e0574fa5ee21c02733e397beb133df90de35" -uuid = "a3b82374-2e81-5b9e-98ce-41277c0e4c87" -version = "2.2.0" - -[[deps.MbedTLS_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.2+1" - -[[deps.MicrosoftMPI_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "f12a29c4400ba812841c6ace3f4efbb6dbb3ba01" -uuid = "9237b28f-5490-5468-be7b-bb81f5f5e6cf" -version = "10.1.4+2" - -[[deps.Mmap]] -uuid = "a63ad114-7e13-5084-954f-fe012c677804" - -[[deps.MozillaCACerts_jll]] -uuid = "14a3606d-f60d-562e-9121-12d972cd8159" -version = "2023.1.10" - -[[deps.MshReader]] -git-tree-sha1 = "a5d74e71d0eb2bfe30a4cac7dccf1a0c9b969771" -uuid = "64cd2da2-d71d-431a-81e3-4cf84ef169dd" -version = "0.1.0" - -[[deps.MutableArithmetics]] -deps = ["LinearAlgebra", "SparseArrays", "Test"] -git-tree-sha1 = "a3589efe0005fc4718775d8641b2de9060d23f73" -uuid = "d8a4904e-b15c-11e9-3269-09a3773c0cb0" -version = "1.4.4" - -[[deps.NaNMath]] -deps = ["OpenLibm_jll"] -git-tree-sha1 = "0877504529a3e5c3343c6f8b4c0381e57e4387e4" -uuid = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" -version = "1.0.2" - -[[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.ONSAS]] -deps = ["AutoHashEquals", "CommonSolve", "Dictionaries", "ForwardDiff", "Gmsh", "InteractiveUtils", "IterativeSolvers", "LazySets", "LinearAlgebra", "LinearSolve", "MshReader", "PrettyTables", "Random", "Reexport", "Roots", "SafeTestsets", "SparseArrays", "StaticArrays", "Suppressor", "Tensors", "WriteVTK"] -git-tree-sha1 = "ee7c59b2ba6057b1b12bc9bd2c8d16b4ea23055f" -uuid = "7d8da659-23aa-453a-9a19-a3d1f6c795f5" -version = "0.4.4" - -[[deps.OffsetArrays]] -git-tree-sha1 = "e64b4f5ea6b7389f6f046d13d4896a8f9c1ba71e" -uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" -version = "1.14.0" -weakdeps = ["Adapt"] - - [deps.OffsetArrays.extensions] - OffsetArraysAdaptExt = "Adapt" - -[[deps.OpenBLAS_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] -uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.23+4" - -[[deps.OpenLibm_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.1+2" - -[[deps.OpenMPI_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] -git-tree-sha1 = "e25c1778a98e34219a00455d6e4384e017ea9762" -uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" -version = "4.1.6+0" - -[[deps.OpenSSL_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "3da7367955dcc5c54c1ba4d402ccdc09a1a3e046" -uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" -version = "3.0.13+1" - -[[deps.OpenSpecFun_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Pkg"] -git-tree-sha1 = "13652491f6856acfd2db29360e1bbcd4565d04f1" -uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" -version = "0.5.5+0" - -[[deps.OrderedCollections]] -git-tree-sha1 = "dfdf5519f235516220579f949664f1bf44e741c5" -uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.6.3" - -[[deps.PCRE2_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" -version = "10.42.0+1" - -[[deps.Parsers]] -deps = ["Dates", "PrecompileTools", "UUIDs"] -git-tree-sha1 = "8489905bcdbcfac64d1daa51ca07c0d8f0283821" -uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "2.8.1" - -[[deps.Pixman_jll]] -deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] -git-tree-sha1 = "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.10.0" - -[[deps.Polyester]] -deps = ["ArrayInterface", "BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "ManualMemory", "PolyesterWeave", "Requires", "Static", "StaticArrayInterface", "StrideArraysCore", "ThreadingUtilities"] -git-tree-sha1 = "2ba5f33cbb51a85ef58a850749492b08f9bf2193" -uuid = "f517fe37-dbe3-4b94-8317-1923a5111588" -version = "0.7.13" - -[[deps.PolyesterWeave]] -deps = ["BitTwiddlingConvenienceFunctions", "CPUSummary", "IfElse", "Static", "ThreadingUtilities"] -git-tree-sha1 = "240d7170f5ffdb285f9427b92333c3463bf65bf6" -uuid = "1d0040c9-8b98-4ee7-8388-3f51789ca0ad" -version = "0.2.1" - -[[deps.PrecompileTools]] -deps = ["Preferences"] -git-tree-sha1 = "5aa36f7049a63a1528fe8f7c3f2113413ffd4e1f" -uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" -version = "1.2.1" - -[[deps.Preferences]] -deps = ["TOML"] -git-tree-sha1 = "9306f6085165d270f7e3db02af26a400d580f5c6" -uuid = "21216c6a-2e73-6563-6e65-726566657250" -version = "1.4.3" - -[[deps.PrettyTables]] -deps = ["Crayons", "LaTeXStrings", "Markdown", "PrecompileTools", "Printf", "Reexport", "StringManipulation", "Tables"] -git-tree-sha1 = "88b895d13d53b5577fd53379d913b9ab9ac82660" -uuid = "08abe8d2-0d0c-5749-adfa-8a2ac140af0d" -version = "2.3.1" - -[[deps.Printf]] -deps = ["Unicode"] -uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" - -[[deps.Profile]] -deps = ["Printf"] -uuid = "9abbd945-dff8-562f-b5e8-e1ebf5ef1b79" - -[[deps.REPL]] -deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] -uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" - -[[deps.Random]] -deps = ["SHA"] -uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" - -[[deps.ReachabilityBase]] -deps = ["ExprTools", "InteractiveUtils", "LinearAlgebra", "Random", "Requires", "SparseArrays"] -git-tree-sha1 = "1776bb10b34ece30627f84baa0224e6b74f3a415" -uuid = "379f33d0-9447-4353-bd03-d664070e549f" -version = "0.2.5" - -[[deps.RecipesBase]] -deps = ["PrecompileTools"] -git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" -uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" -version = "1.3.4" - -[[deps.RecursiveArrayTools]] -deps = ["Adapt", "ArrayInterface", "DocStringExtensions", "GPUArraysCore", "IteratorInterfaceExtensions", "LinearAlgebra", "RecipesBase", "SparseArrays", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables"] -git-tree-sha1 = "f599a896fb28043dd63a4d372231dfcbdd117394" -uuid = "731186ca-8d62-57ce-b412-fbd966d074cd" -version = "3.16.0" - - [deps.RecursiveArrayTools.extensions] - RecursiveArrayToolsFastBroadcastExt = "FastBroadcast" - RecursiveArrayToolsForwardDiffExt = "ForwardDiff" - RecursiveArrayToolsMeasurementsExt = "Measurements" - RecursiveArrayToolsMonteCarloMeasurementsExt = "MonteCarloMeasurements" - RecursiveArrayToolsReverseDiffExt = ["ReverseDiff", "Zygote"] - RecursiveArrayToolsTrackerExt = "Tracker" - RecursiveArrayToolsZygoteExt = "Zygote" - - [deps.RecursiveArrayTools.weakdeps] - FastBroadcast = "7034ab61-46d4-4ed7-9d0f-46aef9175898" - ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" - Measurements = "eff96d63-e80a-5855-80a2-b1b0885c5ab7" - MonteCarloMeasurements = "0987c9cc-fe09-11e8-30f0-b96dd679fdca" - ReverseDiff = "37e2e3b7-166d-5795-8a7a-e32c996b4267" - Tracker = "9f7883ad-71c0-57eb-9f7f-b5c9e6d3789c" - Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" - -[[deps.RecursiveFactorization]] -deps = ["LinearAlgebra", "LoopVectorization", "Polyester", "PrecompileTools", "StrideArraysCore", "TriangularSolve"] -git-tree-sha1 = "6db1a75507051bc18bfa131fbc7c3f169cc4b2f6" -uuid = "f2c3362d-daeb-58d1-803e-2bc74f2840b4" -version = "0.2.23" - -[[deps.Reexport]] -git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" -uuid = "189a3867-3050-52da-a836-e630ba90ab69" -version = "1.2.2" - -[[deps.Requires]] -deps = ["UUIDs"] -git-tree-sha1 = "838a3a4188e2ded87a4f9f184b4b0d78a1e91cb7" -uuid = "ae029012-a4dd-5104-9daa-d747884805df" -version = "1.3.0" - -[[deps.Roots]] -deps = ["Accessors", "ChainRulesCore", "CommonSolve", "Printf"] -git-tree-sha1 = "1ab580704784260ee5f45bffac810b152922747b" -uuid = "f2b01f46-fcfa-551c-844a-d8ac1e96c665" -version = "2.1.5" - - [deps.Roots.extensions] - RootsForwardDiffExt = "ForwardDiff" - RootsIntervalRootFindingExt = "IntervalRootFinding" - RootsSymPyExt = "SymPy" - RootsSymPyPythonCallExt = "SymPyPythonCall" - - [deps.Roots.weakdeps] - ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" - IntervalRootFinding = "d2bf35a9-74e0-55ec-b149-d360ff49b807" - SymPy = "24249f21-da20-56a4-8eb1-6a02cf4ae2e6" - SymPyPythonCall = "bc8888f7-b21e-4b7c-a06a-5d9c9496438c" - -[[deps.RoundingEmulator]] -git-tree-sha1 = "40b9edad2e5287e05bd413a38f61a8ff55b9557b" -uuid = "5eaf0fd0-dfba-4ccb-bf02-d820a40db705" -version = "0.2.1" - -[[deps.RuntimeGeneratedFunctions]] -deps = ["ExprTools", "SHA", "Serialization"] -git-tree-sha1 = "04c968137612c4a5629fa531334bb81ad5680f00" -uuid = "7e49a35a-f44a-4d26-94aa-eba1b4ca6b47" -version = "0.5.13" - -[[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 = "2803cab51702db743f3fda07dd1745aadfbf43bd" -uuid = "fdea26ae-647d-5447-a871-4b548cad5224" -version = "3.5.0" - -[[deps.SIMDTypes]] -git-tree-sha1 = "330289636fb8107c5f32088d2741e9fd7a061a5c" -uuid = "94e857df-77ce-4151-89e5-788b33177be4" -version = "0.1.0" - -[[deps.SLEEFPirates]] -deps = ["IfElse", "Static", "VectorizationBase"] -git-tree-sha1 = "3aac6d68c5e57449f5b9b865c9ba50ac2970c4cf" -uuid = "476501e8-09a2-5ece-8869-fb82de89a1fa" -version = "0.6.42" - -[[deps.SafeTestsets]] -git-tree-sha1 = "81ec49d645af090901120a1542e67ecbbe044db3" -uuid = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f" -version = "0.1.0" - -[[deps.SciMLBase]] -deps = ["ADTypes", "ArrayInterface", "CommonSolve", "ConstructionBase", "Distributed", "DocStringExtensions", "EnumX", "FunctionWrappersWrappers", "IteratorInterfaceExtensions", "LinearAlgebra", "Logging", "Markdown", "PrecompileTools", "Preferences", "Printf", "RecipesBase", "RecursiveArrayTools", "Reexport", "RuntimeGeneratedFunctions", "SciMLOperators", "SciMLStructures", "StaticArraysCore", "Statistics", "SymbolicIndexingInterface", "Tables"] -git-tree-sha1 = "397367599b9526a49cc06a4db70835807498b561" -uuid = "0bca4576-84f4-4d90-8ffe-ffa030f20462" -version = "2.36.1" - - [deps.SciMLBase.extensions] - SciMLBaseChainRulesCoreExt = "ChainRulesCore" - SciMLBaseMakieExt = "Makie" - SciMLBasePartialFunctionsExt = "PartialFunctions" - SciMLBasePyCallExt = "PyCall" - SciMLBasePythonCallExt = "PythonCall" - SciMLBaseRCallExt = "RCall" - SciMLBaseZygoteExt = "Zygote" - - [deps.SciMLBase.weakdeps] - ChainRules = "082447d4-558c-5d27-93f4-14fc19e9eca2" - ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" - Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a" - PartialFunctions = "570af359-4316-4cb7-8c74-252c00c2016b" - PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0" - PythonCall = "6099a3de-0909-46bc-b1f4-468b9a2dfc0d" - RCall = "6f49c342-dc21-5d91-9882-a32aef131414" - Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f" - -[[deps.SciMLOperators]] -deps = ["ArrayInterface", "DocStringExtensions", "LinearAlgebra", "MacroTools", "Setfield", "SparseArrays", "StaticArraysCore"] -git-tree-sha1 = "10499f619ef6e890f3f4a38914481cc868689cd5" -uuid = "c0aeaf25-5076-4817-a8d5-81caf7dfa961" -version = "0.3.8" - -[[deps.SciMLStructures]] -git-tree-sha1 = "5833c10ce83d690c124beedfe5f621b50b02ba4d" -uuid = "53ae85a6-f571-4167-b2af-e1d143709226" -version = "1.1.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.SharedArrays]] -deps = ["Distributed", "Mmap", "Random", "Serialization"] -uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" - -[[deps.Sockets]] -uuid = "6462fe0b-24de-5631-8697-dd941f90decc" - -[[deps.SparseArrays]] -deps = ["Libdl", "LinearAlgebra", "Random", "Serialization", "SuiteSparse_jll"] -uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" -version = "1.10.0" - -[[deps.Sparspak]] -deps = ["Libdl", "LinearAlgebra", "Logging", "OffsetArrays", "Printf", "SparseArrays", "Test"] -git-tree-sha1 = "342cf4b449c299d8d1ceaf00b7a49f4fbc7940e7" -uuid = "e56a9233-b9d6-4f03-8d0f-1825330902ac" -version = "0.3.9" - -[[deps.SpecialFunctions]] -deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "2f5d4697f21388cbe1ff299430dd169ef97d7e14" -uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.4.0" -weakdeps = ["ChainRulesCore"] - - [deps.SpecialFunctions.extensions] - SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" - -[[deps.Static]] -deps = ["IfElse"] -git-tree-sha1 = "d2fdac9ff3906e27f7a618d47b676941baa6c80c" -uuid = "aedffcd0-7271-4cad-89d0-dc628f76c6d3" -version = "0.8.10" - -[[deps.StaticArrayInterface]] -deps = ["ArrayInterface", "Compat", "IfElse", "LinearAlgebra", "PrecompileTools", "Requires", "SparseArrays", "Static", "SuiteSparse"] -git-tree-sha1 = "5d66818a39bb04bf328e92bc933ec5b4ee88e436" -uuid = "0d7ed370-da01-4f52-bd93-41d350b8b718" -version = "1.5.0" -weakdeps = ["OffsetArrays", "StaticArrays"] - - [deps.StaticArrayInterface.extensions] - StaticArrayInterfaceOffsetArraysExt = "OffsetArrays" - StaticArrayInterfaceStaticArraysExt = "StaticArrays" - -[[deps.StaticArrays]] -deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] -git-tree-sha1 = "bf074c045d3d5ffd956fa0a461da38a44685d6b2" -uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "1.9.3" -weakdeps = ["ChainRulesCore", "Statistics"] - - [deps.StaticArrays.extensions] - StaticArraysChainRulesCoreExt = "ChainRulesCore" - 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.10.0" - -[[deps.StrideArraysCore]] -deps = ["ArrayInterface", "CloseOpenIntervals", "IfElse", "LayoutPointers", "LinearAlgebra", "ManualMemory", "SIMDTypes", "Static", "StaticArrayInterface", "ThreadingUtilities"] -git-tree-sha1 = "25349bf8f63aa36acbff5e3550a86e9f5b0ef682" -uuid = "7792a7ef-975c-4747-a70f-980b88e8d1da" -version = "0.5.6" - -[[deps.StringManipulation]] -deps = ["PrecompileTools"] -git-tree-sha1 = "a04cabe79c5f01f4d723cc6704070ada0b9d46d5" -uuid = "892a3eda-7b42-436c-8928-eab12a02cf0e" -version = "0.3.4" - -[[deps.SuiteSparse]] -deps = ["Libdl", "LinearAlgebra", "Serialization", "SparseArrays"] -uuid = "4607b0f0-06f3-5cda-b6b1-a6196a1729e9" - -[[deps.SuiteSparse_jll]] -deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] -uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "7.2.1+1" - -[[deps.Suppressor]] -deps = ["Logging"] -git-tree-sha1 = "9143c41bd539a8885c79728b9dedb0ce47dc9819" -uuid = "fd094767-a336-5f1f-9728-57cf17d0bbfb" -version = "0.2.7" - -[[deps.SymbolicIndexingInterface]] -deps = ["Accessors", "ArrayInterface", "RuntimeGeneratedFunctions", "StaticArraysCore"] -git-tree-sha1 = "b479c7a16803f08779ac5b7f9844a42621baeeda" -uuid = "2efcf032-c050-4f8e-a9bb-153293bab1f5" -version = "0.3.21" - -[[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 = "cb76cf677714c095e535e3501ac7954732aeea2d" -uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" -version = "1.11.1" - -[[deps.Tar]] -deps = ["ArgTools", "SHA"] -uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" -version = "1.10.0" - -[[deps.Tensors]] -deps = ["ForwardDiff", "LinearAlgebra", "PrecompileTools", "SIMD", "StaticArrays", "Statistics"] -git-tree-sha1 = "957f256fb380cad64cae4da39e562ecfb5c3fec9" -uuid = "48a634ad-e948-5137-8d70-aa71f2a747f4" -version = "1.16.1" - -[[deps.Test]] -deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] -uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[[deps.ThreadingUtilities]] -deps = ["ManualMemory"] -git-tree-sha1 = "eda08f7e9818eb53661b3deb74e3159460dfbc27" -uuid = "8290d209-cae3-49c0-8002-c8c24d57dab5" -version = "0.5.2" - -[[deps.TranscodingStreams]] -git-tree-sha1 = "5d54d076465da49d6746c647022f3b3674e64156" -uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" -version = "0.10.8" -weakdeps = ["Random", "Test"] - - [deps.TranscodingStreams.extensions] - TestExt = ["Test", "Random"] - -[[deps.TriangularSolve]] -deps = ["CloseOpenIntervals", "IfElse", "LayoutPointers", "LinearAlgebra", "LoopVectorization", "Polyester", "Static", "VectorizationBase"] -git-tree-sha1 = "66c68a20907800c0b7c04ff8a6164115e8747de2" -uuid = "d5829a12-d9aa-46ab-831f-fb7c9ab06edf" -version = "0.2.0" - -[[deps.UUIDs]] -deps = ["Random", "SHA"] -uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" - -[[deps.UnPack]] -git-tree-sha1 = "387c1f73762231e86e0c9c5443ce3b4a0a9a0c2b" -uuid = "3a884ed6-31ef-47d7-9d2a-63182c4928ed" -version = "1.0.2" - -[[deps.Unicode]] -uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" - -[[deps.VTKBase]] -git-tree-sha1 = "c2d0db3ef09f1942d08ea455a9e252594be5f3b6" -uuid = "4004b06d-e244-455f-a6ce-a5f9919cc534" -version = "1.0.1" - -[[deps.VectorizationBase]] -deps = ["ArrayInterface", "CPUSummary", "HostCPUFeatures", "IfElse", "LayoutPointers", "Libdl", "LinearAlgebra", "SIMDTypes", "Static", "StaticArrayInterface"] -git-tree-sha1 = "6129a4faf6242e7c3581116fbe3270f3ab17c90d" -uuid = "3d5dd08c-fd9d-11e8-17fa-ed2836048c2f" -version = "0.21.67" - -[[deps.WriteVTK]] -deps = ["Base64", "CodecZlib", "FillArrays", "LightXML", "TranscodingStreams", "VTKBase"] -git-tree-sha1 = "48b9e8e9c83865e99e57f027d4edfa94e0acddae" -uuid = "64499a7a-5c06-52f2-abe2-ccb03c286192" -version = "1.19.1" - -[[deps.XML2_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] -git-tree-sha1 = "532e22cf7be8462035d092ff21fada7527e2c488" -uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.12.6+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", "Xorg_libX11_jll"] -git-tree-sha1 = "d2d1a5c49fae4ba39983f63de6afcbea47194e85" -uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" -version = "1.3.6+0" - -[[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", "Xorg_libX11_jll"] -git-tree-sha1 = "47e45cd78224c53109495b3e324df0c37bb61fbe" -uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" -version = "0.9.11+0" - -[[deps.Xorg_libpthread_stubs_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "8fdda4c692503d44d04a0603d9ac0982054635f9" -uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" -version = "0.1.1+0" - -[[deps.Xorg_libxcb_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll"] -git-tree-sha1 = "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+1" - -[[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", "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 = "f2f3f78c3bfeb660abfc7afa0f0a0170093256fb" -uuid = "630162c2-fc9b-58b3-9910-8442a8a132e6" -version = "4.13.0+0" - -[[deps.libaec_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "46bf7be2917b59b761247be3f317ddf75e50e997" -uuid = "477f73a3-ac25-53e9-8cc3-50b2fa2566f0" -version = "1.1.2+0" - -[[deps.libblastrampoline_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.8.0+1" - -[[deps.libpng_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] -git-tree-sha1 = "d7015d2e18a5fd9a4f47de711837e980519781a4" -uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" -version = "1.6.43+1" - -[[deps.nghttp2_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.52.0+1" - -[[deps.oneTBB_jll]] -deps = ["Artifacts", "JLLWrappers", "Libdl"] -git-tree-sha1 = "7d0ea0f4895ef2f5cb83645fa689e52cb55cf493" -uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e" -version = "2021.12.0+0" - -[[deps.p7zip_jll]] -deps = ["Artifacts", "Libdl"] -uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+2" diff --git a/docs/Project.toml b/docs/Project.toml deleted file mode 100644 index c414fd3e3..000000000 --- a/docs/Project.toml +++ /dev/null @@ -1,6 +0,0 @@ -[deps] -Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" -ONSAS = "7d8da659-23aa-453a-9a19-a3d1f6c795f5" - -[compat] -Documenter = "0.27" From e98bb1fb59f573fb9f3ad4a0051d896ee04612cf Mon Sep 17 00:00:00 2001 From: "mauricio.vanzulli" Date: Tue, 12 Nov 2024 19:15:42 +0100 Subject: [PATCH 3/7] Fix documenter --- .github/workflows/CI.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 5bd113a1b..4a05885ab 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -57,7 +57,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - julia --project=docs -e ' + julia --project -e ' using Documenter: DocMeta, doctest using ONSAS DocMeta.setdocmeta!(ONSAS, :DocTestSetup, :(using ONSAS); recursive=true) From 89e9080deba123557a5aef641a4463ff0902b8b7 Mon Sep 17 00:00:00 2001 From: "mauricio.vanzulli" Date: Tue, 12 Nov 2024 20:04:45 +0100 Subject: [PATCH 4/7] Add Aqua tests (#521) --- .github/workflows/CI.yml | 2 +- Project.toml | 18 - docs/Manifest.toml | 1511 ++++++++++++++++++++ docs/Project.toml | 6 + src/CrossSections/CrossSections.jl | 1 - src/Entities/Nodes.jl | 2 +- src/Entities/Tetrahedrons.jl | 2 +- src/StructuralSolvers/Assemblers.jl | 2 +- src/StructuralSolvers/Solutions.jl | 2 +- src/StructuralSolvers/StructuralSolvers.jl | 4 +- test/Project.toml | 44 + test/aqua.jl | 14 + 12 files changed, 1582 insertions(+), 26 deletions(-) create mode 100644 docs/Manifest.toml create mode 100644 docs/Project.toml create mode 100644 test/Project.toml create mode 100644 test/aqua.jl diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 4a05885ab..5bd113a1b 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -57,7 +57,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - julia --project -e ' + julia --project=docs -e ' using Documenter: DocMeta, doctest using ONSAS DocMeta.setdocmeta!(ONSAS, :DocTestSetup, :(using ONSAS); recursive=true) diff --git a/Project.toml b/Project.toml index 1160f3562..75fd31dad 100644 --- a/Project.toml +++ b/Project.toml @@ -4,7 +4,6 @@ authors = ["M.C. Vanzulli ", "M. Forets Date: Tue, 12 Nov 2024 20:26:27 +0100 Subject: [PATCH 5/7] Fix Aqua issues (#522) --- Project.toml | 6 +++++- src/Entities/Nodes.jl | 5 +++-- test/Project.toml | 4 +--- test/aqua.jl | 10 ++-------- 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/Project.toml b/Project.toml index 75fd31dad..6c9c6948a 100644 --- a/Project.toml +++ b/Project.toml @@ -25,6 +25,9 @@ CommonSolve = "0.2" Dictionaries = "0.4" ForwardDiff = "0.10" IterativeSolvers = "0.9" +InteractiveUtils = "1" +LinearAlgebra = "1" +SparseArrays = "1" LazySets = "2" LinearSolve = "2" MshReader = "0.1" @@ -33,4 +36,5 @@ Reexport = "1" StaticArrays = "1" Tensors = "1" WriteVTK = "1" -julia = "1" +julia = "1.11" + diff --git a/src/Entities/Nodes.jl b/src/Entities/Nodes.jl index f1519af6b..d35d30fb8 100644 --- a/src/Entities/Nodes.jl +++ b/src/Entities/Nodes.jl @@ -88,8 +88,9 @@ function Base.show(io::IO, ::MIME"text/plain", n::Node) end "Node constructor with a `NTuple`." -function Node(t::NTuple{dim,T}, - dofs::Dictionary=Dictionary{Field,Vector{Dof}}()) where {dim,T<:Real} +function Node(t::NTuple{dim,<:Real}, + dofs::Dictionary=Dictionary{Field,Vector{Dof}}()) where {dim} + @assert dim ≤ 3 "Unexpected point dimension $dim" Node(Point(t), dofs) end diff --git a/test/Project.toml b/test/Project.toml index 687c90fca..a0fd69400 100644 --- a/test/Project.toml +++ b/test/Project.toml @@ -1,6 +1,5 @@ [deps] Aqua = "4c88cf16-eb10-579e-8560-4a9242c79595" -AutoHashEquals = "15f4f7f2-30c1-5605-9d31-71845cf9641f" CommonSolve = "38540f10-b2f7-11e9-35d8-d573e4eb0ff2" Dictionaries = "85a47980-9c8c-11e8-2b9f-f7ca1fa99fb4" ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210" @@ -25,7 +24,6 @@ WriteVTK = "64499a7a-5c06-52f2-abe2-ccb03c286192" [compat] Aqua = "0.8" -AutoHashEquals = "0.2, 1, 2" CommonSolve = "0.2" Dictionaries = "0.4" ForwardDiff = "0.10" @@ -41,4 +39,4 @@ StaticArrays = "1" Suppressor = "0.2" Tensors = "1" WriteVTK = "1" -julia = "1" +julia = "1.11" diff --git a/test/aqua.jl b/test/aqua.jl index 58abec922..1b1a39b90 100644 --- a/test/aqua.jl +++ b/test/aqua.jl @@ -3,12 +3,6 @@ using ONSAS @testset "Aqua.jl" begin Aqua.test_all(ONSAS; - ambiguities=false, - unbound_args=true, - undefined_exports=true, - project_extras=true, - stale_deps=true, - deps_compat=true, - piracies=true, - persistent_tasks=true) + ambiguities=false) + Aqua.test_ambiguities(ONSAS; broken=true) end From 553d24cdfb300204430ae1a1f3098a6586408a5f Mon Sep 17 00:00:00 2001 From: "mauricio.vanzulli" Date: Sun, 17 Nov 2024 17:37:24 +0100 Subject: [PATCH 6/7] Reformat and fix broken tests --- .JuliaFormatter.toml | 19 +-- .vscode/settings.json | 2 +- Makefile | 15 ++- README.md | 6 +- benchmark/bench_utils.jl | 2 +- benchmark/benchmarks.jl | 29 ++-- ...bench_linear_cylinder_internal_pressure.jl | 9 +- .../bench_linear_extension.jl | 2 +- .../bench_uniaxial_compression.jl | 2 +- .../bench_uniaxial_compression_closure.jl | 23 ++-- .../bench_uniaxial_extension.jl | 2 +- docs/make.jl | 117 ++++++++-------- examples/cantilever/cantilever.jl | 10 +- examples/clamped_truss/clamped_truss.jl | 12 +- .../cylinder_internal_pressure.jl | 22 +-- .../cylinder_mesh.jl | 8 +- examples/linear_extension/linear_extension.jl | 53 ++++---- .../linear_extension/linear_extension_mesh.jl | 21 +-- .../self_weight_clamped_truss.jl | 30 ++--- .../uniaxial_compression.jl | 44 +++--- .../uniaxial_extension/uniaxial_extension.jl | 36 ++--- examples/uniaxial_extension/uniaxial_mesh.jl | 8 +- examples/von_misses_truss/von_misses_truss.jl | 28 ++-- src/BoundaryConditions/BoundaryConditions.jl | 3 +- .../DirichletBoundaryConditions.jl | 2 +- .../FixedFieldBoundaryConditions.jl | 4 +- .../GlobalLoadBoundaryConditions.jl | 8 +- .../LocalLoadBoundaryConditions.jl | 6 +- src/CrossSections/Circles.jl | 2 +- src/CrossSections/GenericCrossSections.jl | 2 +- src/CrossSections/Rectangles.jl | 2 +- src/CrossSections/Squares.jl | 5 +- src/Entities/Entities.jl | 19 +-- src/Entities/Frames.jl | 28 ++-- src/Entities/Nodes.jl | 32 ++--- src/Entities/Tetrahedrons.jl | 64 ++++----- src/Entities/TriangularFaces.jl | 18 +-- src/Entities/Trusses.jl | 49 ++++--- src/Interfaces/Gmsh.jl | 39 +++--- src/Interfaces/VTK.jl | 60 +++++---- src/Materials/HyperElasticMaterial.jl | 13 +- .../IsotropicLinearElasticMaterial.jl | 24 ++-- src/Materials/LinearElasticMaterials.jl | 4 +- src/Materials/Materials.jl | 2 +- src/Materials/NeoHookeanMaterial.jl | 33 +++-- src/Materials/SVKMaterial.jl | 21 +-- src/Meshes/Handlers.jl | 34 ++--- src/Meshes/Interpolators.jl | 49 +++---- src/Meshes/Meshes.jl | 48 +++---- src/Meshes/Searches.jl | 23 ++-- src/ONSAS.jl | 110 +++++++-------- src/StructuralAnalyses/DynamicStates.jl | 50 +++---- .../LinearStaticAnalyses.jl | 39 +++--- .../NonLinearStaticAnalyses.jl | 34 ++--- src/StructuralAnalyses/StaticAnalyses.jl | 5 +- src/StructuralAnalyses/StaticStates.jl | 44 +++--- src/StructuralAnalyses/StructuralAnalyses.jl | 22 +-- .../StructuralBoundaryConditions.jl | 125 +++++++++--------- src/StructuralModel/StructuralEntities.jl | 26 ++-- src/StructuralModel/StructuralMaterials.jl | 33 ++--- src/StructuralModel/Structures.jl | 36 ++--- src/StructuralSolvers/Assemblers.jl | 17 +-- src/StructuralSolvers/Solutions.jl | 54 ++++---- src/StructuralSolvers/StructuralSolvers.jl | 34 ++--- src/Utils.jl | 10 +- test/aqua.jl | 4 +- .../boundary_conditions.jl | 16 +-- test/cross_sections/cross_sections.jl | 3 +- test/entities/tetrahedrons.jl | 50 +++---- test/entities/triangular_faces.jl | 9 +- test/entities/trusses.jl | 30 +++-- test/interfaces/gmsh.jl | 5 +- test/interfaces/vtk.jl | 13 +- test/materials/materials.jl | 57 ++++---- test/meshes/handlers.jl | 6 +- test/meshes/interpolators.jl | 20 +-- test/meshes/meshes.jl | 8 +- test/meshes/searches.jl | 24 ++-- test/runtests.jl | 49 +++---- test/structural_analyses/dynamic_analyses.jl | 14 +- test/structural_analyses/static_analyses.jl | 43 +++--- test/structural_model/structures.jl | 26 ++-- test/structural_solvers/structural_solvers.jl | 23 ++-- 83 files changed, 1121 insertions(+), 1012 deletions(-) diff --git a/.JuliaFormatter.toml b/.JuliaFormatter.toml index 56094c726..580b7511e 100644 --- a/.JuliaFormatter.toml +++ b/.JuliaFormatter.toml @@ -1,18 +1 @@ -style = "yas" -always_use_return = false -indent = 4 -margin = 100 -always_for_in = true -remove_extra_newlines = true -short_to_long_function_def = true -whitespace_in_kwargs = false -annotate_untyped_fields_with_any = true -format_docstrings = false -separate_kwargs_with_semicolon = true -surround_whereop_typeparameters = true -whitespace_ops_in_indices = true -align_assignment = true -align_conditional = true -align_pair_arrow = true -align_matrix = true -import_to_using = false +style = "sciml" diff --git a/.vscode/settings.json b/.vscode/settings.json index 69689b4c1..8bd696c40 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,5 +10,5 @@ 92 ], "files.eol": "\n", - }, + } } diff --git a/Makefile b/Makefile index 2a21361d9..f898c5e53 100644 --- a/Makefile +++ b/Makefile @@ -6,22 +6,27 @@ PKG_NAME = ONSAS # Update dependecies update: - $(JULIA) --project=. -e 'import Pkg; Pkg.update()' && $(JULIA) --project=./docs/ -e 'import Pkg; Pkg.update()' + $(JULIA) --project=. -e 'import Pkg; Pkg.update()' && + $(JULIA) --project=./docs/ -e 'import Pkg; Pkg.update()' && + && $(JULIA) --project=./test/ -e 'import Pkg; Pkg.update()' # Update dependecies instantiate: - $(JULIA) --project=. -e 'import Pkg; Pkg.instantiate()' + $(JULIA) --project=. -e 'import Pkg; Pkg.instantiate()' && + $(JULIA) --project=./docs/ -e 'import Pkg; Pkg.instantiate()' && + && $(JULIA) --project=./test/ -e 'import Pkg; Pkg.instantiate()' # Run all tests tests: - $(JULIA) --project=. -e 'include("test/runtests.jl")' + $(JULIA) --project=. -e 'import Pkg; Pkg.test(;coverage=false, julia_args=["--check-bounds=yes", "--compiled-modules=yes"], force_latest_compatible_version=false, allow_reresolve=true)' # Make docs -pages: +pages: $(JULIA) --project=./docs/ -e 'import Pkg; Pkg.instantiate(); include("./docs/make.jl")' # Remove generated files clean: + find . -name "*.cov" -type f -exec rm -f {} + find . -name "*.msh" -type f -exec rm -f {} + find . -name "*.vti" -type f -exec rm -f {} + find . -name "*.vtu" -type f -exec rm -f {} + @@ -44,4 +49,4 @@ format: $(JULIA) --project=. -e 'using JuliaFormatter; format(".", overwrite=true, verbose=true)' # Run all tests -all: tests pages format-check clean \ No newline at end of file +all: tests pages format-check clean diff --git a/README.md b/README.md index 56ac852f4..9914d4309 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ ## *An Open Nonlinear Structural Analysis Solver written in Julia* -[![docs-dev][dev-img]][dev-url] [![CI][ci-img]][ci-url] [![codecov][cov-img]][cov-url] [![license][lic-img]][lic-url] +[![docs-dev][dev-img]][dev-url] [![CI][ci-img]][ci-url] [![codecov][cov-img]][cov-url] [![license][lic-img]][lic-url] [![SciML Code Style][style-img]][style-url] [dev-img]: https://img.shields.io/badge/docs-dev-blue.svg [dev-url]: https://ONSAS.github.io/ONSAS.jl/dev/ @@ -12,10 +12,12 @@ [cov-url]: https://codecov.io/gh/ONSAS/ONSAS.jl [lic-img]: https://img.shields.io/github/license/mashape/apistatus.svg?maxAge=2592000 [lic-url]: https://github.com/ONSAS/ONSAS.jl/blob/main/LICENSE +[style-img]: https://img.shields.io/static/v1?label=code%20style&message=SciML&color=9558b2&labelColor=389826 +[style-url]: https://github.com/SciML/SciMLStyle The original project [ONSAS](https://github.com/ONSAS/ONSAS/): Open Nonlinear Structural Analysis Solver for GNU-Octave/Matlab, which currently offers more features, served as the foundation for the implementation of ONSAS.jl. This Julia version aims to extend the capabilities and enhance the performance of the original solver within the Julia programming environment. -**Disclaimer:** This software is currently under development and may contain bugs or incomplete features. It is intended for testing and educational purposes only. +**Disclaimer:** This software is currently under development and may contain bugs or incomplete features. It is intended for testing and educational purposes only. ## Using ONSAS diff --git a/benchmark/bench_utils.jl b/benchmark/bench_utils.jl index bca55764b..c0f017e6e 100644 --- a/benchmark/bench_utils.jl +++ b/benchmark/bench_utils.jl @@ -8,7 +8,7 @@ end "Delete files with `extension` in a folder with `example_folder` path." function delete_files(example_folder::String, extension::String) - return foreach(rm, filter(endswith(extension), readdir(example_folder; join=true))) + return foreach(rm, filter(endswith(extension), readdir(example_folder; join = true))) end "Creates example folders paths from the example name. This assumes that the example folder diff --git a/benchmark/benchmarks.jl b/benchmark/benchmarks.jl index 6644d4360..6a2f6f06c 100644 --- a/benchmark/benchmarks.jl +++ b/benchmark/benchmarks.jl @@ -20,7 +20,7 @@ samples = 2; # Static analysis benchmarks # ======================================= # Alg to solve static problems -tols = ConvergenceSettings(; rel_U_tol=1e-8, rel_res_force_tol=1e-6, max_iter=20); +tols = ConvergenceSettings(; rel_U_tol = 1e-8, rel_res_force_tol = 1e-6, max_iter = 20); alg = NewtonRaphson(tols); # Static analysis number of steps to reach the final load factor value NSTEPS = 8; @@ -43,9 +43,10 @@ if uniaxial_extension structure = uniaxial_extension_structure(; ms) end nnodes, nelems = num_nodes(structure), num_elements(structure) - problem = NonLinearStaticAnalysis(structure; NSTEPS=NSTEPS) - SUITE[example_name]["solve, ms = $ms, nelems = $nelems, nnodes = $nnodes"] = @benchmarkable solve!($problem, - $alg) evals = evals samples = samples + problem = NonLinearStaticAnalysis(structure; NSTEPS = NSTEPS) + SUITE[example_name]["solve, ms = $ms, nelems = $nelems, nnodes = $nnodes"] = @benchmarkable solve!( + $problem, + $alg) evals=evals samples=samples end # Remove all .msh files from the example_folder @@ -68,9 +69,10 @@ if uniaxial_compression end # Extract the number of elements as an integer. nnodes, nelems = num_nodes(structure), num_elements(structure) - problem = NonLinearStaticAnalysis(structure; NSTEPS=NSTEPS) - SUITE[example_name]["solve, ms = $ms, nelems = $nelems, nnodes = $nnodes"] = @benchmarkable solve!($problem, - $alg) evals = evals samples = samples + problem = NonLinearStaticAnalysis(structure; NSTEPS = NSTEPS) + SUITE[example_name]["solve, ms = $ms, nelems = $nelems, nnodes = $nnodes"] = @benchmarkable solve!( + $problem, + $alg) evals=evals samples=samples end # Remove all .msh files from the example_folder @@ -93,8 +95,8 @@ if linear_extension end # Extract the number of elements as an integer. nnodes, nelems = num_nodes(structure), num_elements(structure) - problem = LinearStaticAnalysis(structure; NSTEPS=NSTEPS) - SUITE[example_name]["solve, ms = $ms, nelems = $nelems, nnodes = $nnodes"] = @benchmarkable solve!($problem) evals = evals samples = samples + problem = LinearStaticAnalysis(structure; NSTEPS = NSTEPS) + SUITE[example_name]["solve, ms = $ms, nelems = $nelems, nnodes = $nnodes"] = @benchmarkable solve!($problem) evals=evals samples=samples end # Remove all .msh files from the example_folder @@ -120,17 +122,18 @@ if linear_cylinder_internal_pressure structure = linear_cylinder_structure(; ms) nnodes, nelems = num_nodes(structure), num_elements(structure) - SUITE[example_name]["structure, ms = $ms, nelems = $nelems, nnodes = $nnodes"] = @benchmarkable linear_cylinder_structure(ms=$ms) evals = evals samples = samples + SUITE[example_name]["structure, ms = $ms, nelems = $nelems, nnodes = $nnodes"] = @benchmarkable linear_cylinder_structure(ms = $ms) evals=evals samples=samples problem = LinearStaticAnalysis(structure; NSTEPS) solution = solve!(problem) reset!(problem) - SUITE[example_name]["solve!, ms = $ms, nelems = $nelems, nnodes = $nnodes"] = @benchmarkable solve!($problem) evals = evals samples = samples + SUITE[example_name]["solve!, ms = $ms, nelems = $nelems, nnodes = $nnodes"] = @benchmarkable solve!($problem) evals=evals samples=samples ph = point_eval_handler(structure; NPOINTS) - SUITE[example_name]["point_eval_handler, ms = $ms, nelems = $nelems, nnodes = $nnodes, npoints = $(NPOINTS^3)"] = @benchmarkable point_eval_handler($structure, - NPOINTS=$NPOINTS) evals = evals samples = samples + SUITE[example_name]["point_eval_handler, ms = $ms, nelems = $nelems, nnodes = $nnodes, npoints = $(NPOINTS^3)"] = @benchmarkable point_eval_handler( + $structure, + NPOINTS = $NPOINTS) evals=evals samples=samples eval_solution = displacements(solution, ph) end end diff --git a/benchmark/linear_cylinder_internal_pressure/bench_linear_cylinder_internal_pressure.jl b/benchmark/linear_cylinder_internal_pressure/bench_linear_cylinder_internal_pressure.jl index 87af50b1c..7ed5d3787 100644 --- a/benchmark/linear_cylinder_internal_pressure/bench_linear_cylinder_internal_pressure.jl +++ b/benchmark/linear_cylinder_internal_pressure/bench_linear_cylinder_internal_pressure.jl @@ -1,12 +1,13 @@ # Include `create_mesh` function. -include(joinpath(pkgdir(ONSAS), "examples", "cylinder_internal_pressure", "cylinder_mesh.jl")) +include(joinpath( + pkgdir(ONSAS), "examples", "cylinder_internal_pressure", "cylinder_mesh.jl")) """ Cylinder with internal pressure GMSH mesh and `IsotropicLinearElastic` material. `ms` is the refinement factor of the mesh. """ -function linear_cylinder_structure(; ms::Real=0.5) +function linear_cylinder_structure(; ms::Real = 0.5) ## scalar parameters (dimensions in mm an MPa) Lₖ = 30.0 # cylinder length in 𝐞ₖ mm @@ -93,13 +94,13 @@ end; Hyper rectangle starting at `O` pint and + [Lᵢ,Lⱼ,Lₖ] to evaluate the solution with `NPOINTS` in each axis. """ function point_eval_handler(structure::Structure; - NPOINTS::Int=10) + NPOINTS::Int = 10) ## scalar parameters (dimensions in mm an MPa) Lₖ = 30.0 # cylinder length in 𝐞ₖ mm Rₑ = 200.0 # outer radius in mm Lᵢ = Lⱼ = 2.25Rₑ # hyper rectangle origin in 𝐞ᵢ,𝐞ⱼ and 𝐞ₖ in mm - O = (x=-Lᵢ / 2, y=-Lⱼ / 2, z=0.0) # hyper rectangle origin in 𝐞ᵢ,𝐞ⱼ and 𝐞ₖ in mm + O = (x = -Lᵢ / 2, y = -Lⱼ / 2, z = 0.0) # hyper rectangle origin in 𝐞ᵢ,𝐞ⱼ and 𝐞ₖ in mm # Create an hyper rectangle Lᵢ x Lⱼ x Lₖ x = LinRange(O.x, O.x + Lᵢ, NPOINTS) diff --git a/benchmark/linear_extension/bench_linear_extension.jl b/benchmark/linear_extension/bench_linear_extension.jl index 18e531ead..dbc0fd2f3 100644 --- a/benchmark/linear_extension/bench_linear_extension.jl +++ b/benchmark/linear_extension/bench_linear_extension.jl @@ -6,7 +6,7 @@ Linear extension GMSH mesh and `IsotropicLinearElastic` material. `ms` is the refinement factor of the mesh. """ -function linear_extension_structure(; ms=0.5) +function linear_extension_structure(; ms = 0.5) # x, y and z dimensions of the box in the mesh respectively. Lᵢ = 2.0 # Dimension in x of the box in m diff --git a/benchmark/uniaxial_compression/bench_uniaxial_compression.jl b/benchmark/uniaxial_compression/bench_uniaxial_compression.jl index 963f7073e..64f51b77f 100644 --- a/benchmark/uniaxial_compression/bench_uniaxial_compression.jl +++ b/benchmark/uniaxial_compression/bench_uniaxial_compression.jl @@ -19,7 +19,7 @@ Uniaxial compression Case 2 - GMSH mesh and `HyperElastic` material. `ms` is the refinement factor of the mesh. """ -function uniaxial_compression_structure(; ms=0.5) +function uniaxial_compression_structure(; ms = 0.5) # x, y and z dimensions of the box in the mesh respectively. Lᵢ = 2.0 diff --git a/benchmark/uniaxial_compression/bench_uniaxial_compression_closure.jl b/benchmark/uniaxial_compression/bench_uniaxial_compression_closure.jl index 8b05ec53f..efd111626 100644 --- a/benchmark/uniaxial_compression/bench_uniaxial_compression_closure.jl +++ b/benchmark/uniaxial_compression/bench_uniaxial_compression_closure.jl @@ -14,19 +14,19 @@ end "Runs the experiment and prints the times." function run_experiment(build_structure::Function, - analysis, - alg::AbstractSolver; - ms, NSTEPS, N_POINTS_EVAL) + analysis, + alg::AbstractSolver; + ms, NSTEPS, N_POINTS_EVAL) structure, t_structure, _ = @timed build_structure(; ms) - problem, t_problem = @timed analysis(structure, NSTEPS=NSTEPS) + problem, t_problem = @timed analysis(structure, NSTEPS = NSTEPS) reset!(problem) solution, t_solve, _ = @timed solve!(problem, alg) ph, t_point_eval_handler, _ = @timed PointEvalHandler(structure, - [Point(rand(3)...) - for i in 1:N_POINTS_EVAL]) + [Point(rand(3)...) + for i in 1:N_POINTS_EVAL]) _, t_eval_sol, _ = @timed displacements(solution, ph) @@ -34,7 +34,7 @@ function run_experiment(build_structure::Function, end # Alg to solve static problems -tols = ConvergenceSettings(; rel_U_tol=1e-8, rel_res_force_tol=1e-6, max_iter=20); +tols = ConvergenceSettings(; rel_U_tol = 1e-8, rel_res_force_tol = 1e-6, max_iter = 20); alg = NewtonRaphson(tols); # Static analysis number of steps to reach the final load factor value NSTEPS = 8; @@ -51,20 +51,21 @@ example_folder, bench_path = joinpath_example_folder(example_name); include(bench_path); # Compilation time -times_compilation = run_experiment(uniaxial_compression_structure, NonLinearStaticAnalysis, alg; - ms=ms, NSTEPS=NSTEPS, N_POINTS_EVAL=N_POINTS_EVAL); +times_compilation = run_experiment( + uniaxial_compression_structure, NonLinearStaticAnalysis, alg; + ms = ms, NSTEPS = NSTEPS, N_POINTS_EVAL = N_POINTS_EVAL); println("Compiling 🚧:") print_times(times_compilation...) # First experiment times₁ = run_experiment(uniaxial_compression_structure, NonLinearStaticAnalysis, alg; - ms=ms, NSTEPS=NSTEPS, N_POINTS_EVAL=N_POINTS_EVAL); + ms = ms, NSTEPS = NSTEPS, N_POINTS_EVAL = N_POINTS_EVAL); println("Experiment 1 🔨:") print_times(times₁...) # Second experiment times₂ = run_experiment(uniaxial_compression_structure, NonLinearStaticAnalysis, alg; - ms=ms, NSTEPS=NSTEPS, N_POINTS_EVAL=N_POINTS_EVAL); + ms = ms, NSTEPS = NSTEPS, N_POINTS_EVAL = N_POINTS_EVAL); println("Experiment 2 🔨:") print_times(times₂...) diff --git a/benchmark/uniaxial_extension/bench_uniaxial_extension.jl b/benchmark/uniaxial_extension/bench_uniaxial_extension.jl index 64cb0c2b0..fb16c1307 100644 --- a/benchmark/uniaxial_extension/bench_uniaxial_extension.jl +++ b/benchmark/uniaxial_extension/bench_uniaxial_extension.jl @@ -11,7 +11,7 @@ Uniaxial extension Case 2 - GMSH mesh and `SVK` material. `ms` is the refinement factor of the mesh. """ -function uniaxial_extension_structure(; ms=0.5) +function uniaxial_extension_structure(; ms = 0.5) # x, y and z dimensions of the box in the mesh respectively. Lᵢ = 2.0 Lⱼ = 1.0 diff --git a/docs/make.jl b/docs/make.jl index 688322555..7fe5902f1 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -1,63 +1,68 @@ using ONSAS using Documenter -DocMeta.setdocmeta!(ONSAS, :DocTestSetup, :(using ONSAS); recursive=true) +DocMeta.setdocmeta!(ONSAS, :DocTestSetup, :(using ONSAS); recursive = true) makedocs(; - modules=[ONSAS], - repo="https://github.com/ONSAS/ONSAS.jl/blob/{commit}{path}#{line}", - sitename="ONSAS.jl", - format=Documenter.HTML(; - prettyurls=get(ENV, "CI", "false") == "true", - canonical="https://ONSAS.github.io/ONSAS.jl", - edit_link="main", - assets=String[]), - pages=["Home" => "index.md", - "Modules" => ["BoundaryConditions" => ["BoundaryConditions" => "lib/BoundaryConditions/BoundaryConditions.md", - "DirichletBoundaryConditions" => "lib/BoundaryConditions/DirichletBoundaryConditions.md", - "FixedFieldBoundaryConditions" => "lib/BoundaryConditions/FixedFieldBoundaryConditions.md", - "GlobalLoadBoundaryConditions" => "lib/BoundaryConditions/GlobalLoadBoundaryConditions.md", - "LocalLoadBoundaryConditions" => "lib/BoundaryConditions/LocalLoadBoundaryConditions.md"], - "CrossSections" => ["Circles" => "lib/CrossSections/Circles.md", - "CrossSections" => "lib/CrossSections/CrossSections.md", - "GenericCrossSections" => "lib/CrossSections/GenericCrossSections.md", - "Rectangles" => "lib/CrossSections/Rectangles.md", - "Squares" => "lib/CrossSections/Squares.md"], - "Entities" => ["Entities" => "lib/Entities/Entities.md", - "Frames" => "lib/Entities/Frames.md", - "Nodes" => "lib/Entities/Nodes.md", - "Tetrahedrons" => "lib/Entities/Tetrahedrons.md", - "TriangularFaces" => "lib/Entities/TriangularFaces.md", - "Trusses" => "lib/Entities/Trusses.md"], - "Interfaces" => ["Gmsh" => "lib/Interfaces/Gmsh.md", - "VTK" => "lib/Interfaces/VTK.md"], - "Materials" => ["HyperElasticMaterial" => "lib/Materials/HyperElasticMaterial.md", - "HyperElasticMaterials" => "lib/Materials/HyperElasticMaterials.md", - "IsotropicLinearElasticMaterial" => "lib/Materials/IsotropicLinearElasticMaterial.md", - "LinearElasticMaterials" => "lib/Materials/LinearElasticMaterials.md", - "Materials" => "lib/Materials/Materials.md", - "NeoHookeanMaterial" => "lib/Materials/NeoHookeanMaterial.md", - "SVKMaterial" => "lib/Materials/SVKMaterial.md"], - "Meshes" => ["Handlers" => "lib/Meshes/Handlers.md", - "Interpolators" => "lib/Meshes/Interpolators.md", - "Meshes" => "lib/Meshes/Meshes.md", - "Searches" => "lib/Meshes/Searches.md"], - "StructuralAnalyses" => ["LinearStaticAnalyses" => "lib/StructuralAnalyses/LinearStaticAnalyses.md", - "NonLinearStaticAnalyses" => "lib/StructuralAnalyses/NonLinearStaticAnalyses.md", - "StaticAnalyses" => "lib/StructuralAnalyses/StaticAnalyses.md", - "StaticStates" => "lib/StructuralAnalyses/StaticStates.md", - "StructuralAnalyses" => "lib/StructuralAnalyses/StructuralAnalyses.md"], - "StructuralModel" => ["StructuralBoundaryConditions" => "lib/StructuralModel/StructuralBoundaryConditions.md", - "StructuralEntities" => "lib/StructuralModel/StructuralEntities.md", - "StructuralMaterials" => "lib/StructuralModel/StructuralMaterials.md", - "Structures" => "lib/StructuralModel/Structures.md"], - "StructuralSolvers" => ["Assemblers" => "lib/StructuralSolvers/Assemblers.md", - "Solutions" => "lib/StructuralSolvers/Solutions.md", - "Solvers" => "lib/StructuralSolvers/Solvers.md", - "StructuralSolvers" => "lib/StructuralSolvers/StructuralSolvers.md"], - "Utils" => ["Utils" => "lib/Utils/Utils.md"]], - "References" => "references.md"]) + modules = [ONSAS], + repo = "https://github.com/ONSAS/ONSAS.jl/blob/{commit}{path}#{line}", + sitename = "ONSAS.jl", + format = Documenter.HTML(; + prettyurls = get(ENV, "CI", "false") == "true", + canonical = "https://ONSAS.github.io/ONSAS.jl", + edit_link = "main", + assets = String[]), + pages = ["Home" => "index.md", + "Modules" => [ + "BoundaryConditions" => [ + "BoundaryConditions" => "lib/BoundaryConditions/BoundaryConditions.md", + "DirichletBoundaryConditions" => "lib/BoundaryConditions/DirichletBoundaryConditions.md", + "FixedFieldBoundaryConditions" => "lib/BoundaryConditions/FixedFieldBoundaryConditions.md", + "GlobalLoadBoundaryConditions" => "lib/BoundaryConditions/GlobalLoadBoundaryConditions.md", + "LocalLoadBoundaryConditions" => "lib/BoundaryConditions/LocalLoadBoundaryConditions.md"], + "CrossSections" => ["Circles" => "lib/CrossSections/Circles.md", + "CrossSections" => "lib/CrossSections/CrossSections.md", + "GenericCrossSections" => "lib/CrossSections/GenericCrossSections.md", + "Rectangles" => "lib/CrossSections/Rectangles.md", + "Squares" => "lib/CrossSections/Squares.md"], + "Entities" => ["Entities" => "lib/Entities/Entities.md", + "Frames" => "lib/Entities/Frames.md", + "Nodes" => "lib/Entities/Nodes.md", + "Tetrahedrons" => "lib/Entities/Tetrahedrons.md", + "TriangularFaces" => "lib/Entities/TriangularFaces.md", + "Trusses" => "lib/Entities/Trusses.md"], + "Interfaces" => ["Gmsh" => "lib/Interfaces/Gmsh.md", + "VTK" => "lib/Interfaces/VTK.md"], + "Materials" => [ + "HyperElasticMaterial" => "lib/Materials/HyperElasticMaterial.md", + "HyperElasticMaterials" => "lib/Materials/HyperElasticMaterials.md", + "IsotropicLinearElasticMaterial" => "lib/Materials/IsotropicLinearElasticMaterial.md", + "LinearElasticMaterials" => "lib/Materials/LinearElasticMaterials.md", + "Materials" => "lib/Materials/Materials.md", + "NeoHookeanMaterial" => "lib/Materials/NeoHookeanMaterial.md", + "SVKMaterial" => "lib/Materials/SVKMaterial.md"], + "Meshes" => ["Handlers" => "lib/Meshes/Handlers.md", + "Interpolators" => "lib/Meshes/Interpolators.md", + "Meshes" => "lib/Meshes/Meshes.md", + "Searches" => "lib/Meshes/Searches.md"], + "StructuralAnalyses" => [ + "LinearStaticAnalyses" => "lib/StructuralAnalyses/LinearStaticAnalyses.md", + "NonLinearStaticAnalyses" => "lib/StructuralAnalyses/NonLinearStaticAnalyses.md", + "StaticAnalyses" => "lib/StructuralAnalyses/StaticAnalyses.md", + "StaticStates" => "lib/StructuralAnalyses/StaticStates.md", + "StructuralAnalyses" => "lib/StructuralAnalyses/StructuralAnalyses.md"], + "StructuralModel" => [ + "StructuralBoundaryConditions" => "lib/StructuralModel/StructuralBoundaryConditions.md", + "StructuralEntities" => "lib/StructuralModel/StructuralEntities.md", + "StructuralMaterials" => "lib/StructuralModel/StructuralMaterials.md", + "Structures" => "lib/StructuralModel/Structures.md"], + "StructuralSolvers" => ["Assemblers" => "lib/StructuralSolvers/Assemblers.md", + "Solutions" => "lib/StructuralSolvers/Solutions.md", + "Solvers" => "lib/StructuralSolvers/Solvers.md", + "StructuralSolvers" => "lib/StructuralSolvers/StructuralSolvers.md"], + "Utils" => ["Utils" => "lib/Utils/Utils.md"]], + "References" => "references.md"]) deploydocs(; - repo="github.com/ONSAS/ONSAS.jl", - push_preview=true) + repo = "github.com/ONSAS/ONSAS.jl", + push_preview = true) diff --git a/examples/cantilever/cantilever.jl b/examples/cantilever/cantilever.jl index be809e23c..925134127 100644 --- a/examples/cantilever/cantilever.jl +++ b/examples/cantilever/cantilever.jl @@ -27,7 +27,7 @@ function structure() nodes = [Node(promote(xi, 0, 0.0)) for xi in x_coords] # to be safe when arguments supplied to Node command are not of same types S = Rectangle(h, b) frames = [Frame(nodes[j], nodes[j + 1], S) for j in 1:(length(nodes) - 1)] - mesh = Mesh(; nodes=nodes, elements=frames) + mesh = Mesh(; nodes = nodes, elements = frames) set_dofs!(mesh, :u, 3) set_dofs!(mesh, :θ, 3) # ------------------------ @@ -42,7 +42,7 @@ function structure() bc2 = FixedField(:θ, [1, 2, 3]) bc3 = GlobalLoad(:u, t -> [Px, -Py, 0]) boundary_conditions = StructuralBoundaryCondition(bc1 => [nodes[1]], bc2 => [nodes[1]], - bc3 => [nodes[end]]) + bc3 => [nodes[end]]) Structure(mesh, materials, boundary_conditions) end @@ -70,9 +70,9 @@ function test(sol::AbstractSolution) @testset "Displacements at the right-most node" begin Izz = b * h^3 / 12 A = b * h - @test displacements(sol, right_most_node, 2)[1] ≈ -Py * L^3 / (3 * E * Izz) rtol = RTOL - @test displacements(sol, right_most_node, 6)[1] ≈ -Py * L^2 / (2 * E * Izz) rtol = RTOL - @test displacements(sol, right_most_node, 1)[1] ≈ Px * L / (E * A) rtol = RTOL + @test displacements(sol, right_most_node, 2)[1]≈-Py * L^3 / (3 * E * Izz) rtol=RTOL + @test displacements(sol, right_most_node, 6)[1]≈-Py * L^2 / (2 * E * Izz) rtol=RTOL + @test displacements(sol, right_most_node, 1)[1]≈Px * L / (E * A) rtol=RTOL end end diff --git a/examples/clamped_truss/clamped_truss.jl b/examples/clamped_truss/clamped_truss.jl index c6c1da9f1..e9c8e78ef 100644 --- a/examples/clamped_truss/clamped_truss.jl +++ b/examples/clamped_truss/clamped_truss.jl @@ -41,7 +41,7 @@ function structure() # ------------------------------- # Materials # ------------------------------- - steel = SVK(; E=E, ν=ν, ρ=ρ, label="steel") + steel = SVK(; E = E, ν = ν, ρ = ρ, label = "steel") materials = StructuralMaterial(steel => elements) # ------------------------------- # Boundary conditions @@ -49,7 +49,8 @@ function structure() bc₁ = FixedField(:u, [1], "fixed_uₓ") bc₂ = GlobalLoad(:u, t -> [F * t], "load in j") # Apply bcs to the nodes - boundary_conditions = StructuralBoundaryCondition(bc₁ => [first(nodes)], bc₂ => [last(nodes)]) + boundary_conditions = StructuralBoundaryCondition( + bc₁ => [first(nodes)], bc₂ => [last(nodes)]) Structure(mesh, materials, boundary_conditions) end; @@ -61,7 +62,7 @@ function solve() # Structural Analysis # ------------------------------- (; NSTEPS) = parameters() - sa = NonLinearStaticAnalysis(s; NSTEPS=NSTEPS) + sa = NonLinearStaticAnalysis(s; NSTEPS = NSTEPS) # ------------------------------- # Numerical solution # ------------------------------- @@ -81,7 +82,8 @@ function test(sol::AbstractSolution) #----------------------------- # Compute the analytic values for the strain, stress and force at the tip "Analytic force given `uᵢ` towards x axis at the tip node" - function analytic_P(::Type{GreenStrain}, uᵢ::Real, E::Real=E, l₀::Real=L, A₀::Real=A) + function analytic_P( + ::Type{GreenStrain}, uᵢ::Real, E::Real = E, l₀::Real = L, A₀::Real = A) ϵ_green = 0.5 * ((l₀ + uᵢ)^2 - l₀^2) / (l₀^2) # Cosserat stress 𝐒₁₁ = E * ϵ_green @@ -92,7 +94,7 @@ function test(sol::AbstractSolution) # analytic_P_tip = analytic_P.(Ref(ϵ_model), numeric_uᵢ) @testset "Piola-Kirchoff tensor at the right-most node" begin - @test analytic_P_tip ≈ numeric_P_tip rtol = 1e-3 + @test analytic_P_tip≈numeric_P_tip rtol=1e-3 end end diff --git a/examples/cylinder_internal_pressure/cylinder_internal_pressure.jl b/examples/cylinder_internal_pressure/cylinder_internal_pressure.jl index 272685a4e..73cd3a963 100644 --- a/examples/cylinder_internal_pressure/cylinder_internal_pressure.jl +++ b/examples/cylinder_internal_pressure/cylinder_internal_pressure.jl @@ -113,7 +113,7 @@ function solve(::FirstCase) # ------------------------------- # Numerical solution # ------------------------------- - ONSAS.solve(sa; linear_solve_inplace=false) + ONSAS.solve(sa; linear_solve_inplace = false) end; "Return the problem solution" @@ -122,7 +122,7 @@ function solve(::SecondCase) # The material is replaced just to test the replace method liner_elastic = IsotropicLinearElastic(E, ν, material_label) s = structure(liner_elastic) - svk_material = SVK(; E=E, ν=ν, label=material_label) + svk_material = SVK(; E = E, ν = ν, label = material_label) replace!(s, svk_material) # ------------------------------- # Structural Analysis @@ -178,23 +178,23 @@ function booleans_solution_at_slice(sol::AbstractSolution) point_evaluator = PointEvalHandler(mesh(structure), vec_points) U = displacements(sol, point_evaluator) # Check uₖ = 0 ∀ p ∈ s - zero_uz = all([≈(norm(u[3]), 0.0; atol=ATOL) for u in U]) + zero_uz = all([≈(norm(u[3]), 0.0; atol = ATOL) for u in U]) # Check uᵢ = 0 ∀ p ∈ s & ∈ axis y index_p_rand_in_axis_y = findall([p == p_rand_in_axis_y for p in vec_points]) Uᵢ_in_axis_y = getindex(displacements(sol, point_evaluator, 1), index_p_rand_in_axis_y) - zero_ui_axis_y = all([≈(norm(ui_p_in_axis_y), 0.0; atol=ATOL) + zero_ui_axis_y = all([≈(norm(ui_p_in_axis_y), 0.0; atol = ATOL) for ui_p_in_axis_y in Uᵢ_in_axis_y]) # Check uⱼ = 0 ∀ p ∈ s & ∈ axis x index_p_rand_in_axis_x = findall([p == p_rand_in_axis_x for p in vec_points]) Uⱼ_in_axis_x = getindex(displacements(sol, point_evaluator, 2), index_p_rand_in_axis_x) - zero_uj_axis_x = all([≈(norm(uj_p_in_axis_y), 0.0; atol=ATOL) + zero_uj_axis_x = all([≈(norm(uj_p_in_axis_y), 0.0; atol = ATOL) for uj_p_in_axis_y in Uⱼ_in_axis_x]) # Check ur(r,θ₁) = ur(r,θ₁) at last time rand_index_1 = 3 u_rand_1 = sum(last.(U[rand_index_1][1:2]) .^ 2) rand_index_2 = 4 u_rand_2 = sum(last.(U[rand_index_2][1:2]) .^ 2) - ur_not_depends_on_θ = ≈(u_rand_1, u_rand_2; atol=ATOL) + ur_not_depends_on_θ = ≈(u_rand_1, u_rand_2; atol = ATOL) ur_not_depends_on_θ, zero_uz, zero_ui_axis_y, zero_uj_axis_x end; @@ -214,7 +214,7 @@ function ur(r::Real, t::Real) end; "Return analytic solution" -function analytic_solution(sol::AbstractSolution, p::Point{3,<:Real}, ur::Function=ur) +function analytic_solution(sol::AbstractSolution, p::Point{3, <:Real}, ur::Function = ur) rand_R, _, _ = p (; Ri, Re) = parameters() λvec = load_factors(analysis(sol)) @@ -226,7 +226,7 @@ function analytic_solution(sol::AbstractSolution, p::Point{3,<:Real}, ur::Functi end; "Return numercial solution" -function numerical_solution(sol::AbstractSolution, p::Point{3,<:Real}, ::FirstCase) +function numerical_solution(sol::AbstractSolution, p::Point{3, <:Real}, ::FirstCase) # Unwarp a random point rand_R, rand_θ, rand_z = p s = ONSAS.structure(analysis(sol)) @@ -262,9 +262,9 @@ function test(sol::AbstractSolution, case::FirstCase) end @testset "Radial displacement analytic solution case: $case" begin # A relaxed tolerace is defined, is normal to have a greater error interpolation - @test ur_numeric_p_rand ≈ ur_analytic_p_rand atol = ATOL - @test ur_numeric_ni ≈ ur_analytic_ni atol = ATOL - @test ur_numeric_ne ≈ -ur_analytic_ne atol = ATOL + @test ur_numeric_p_rand≈ur_analytic_p_rand atol=ATOL + @test ur_numeric_ni≈ur_analytic_ni atol=ATOL + @test ur_numeric_ne≈-ur_analytic_ne atol=ATOL end end; diff --git a/examples/cylinder_internal_pressure/cylinder_mesh.jl b/examples/cylinder_internal_pressure/cylinder_mesh.jl index 332b9e173..a8c5a5323 100644 --- a/examples/cylinder_internal_pressure/cylinder_mesh.jl +++ b/examples/cylinder_internal_pressure/cylinder_mesh.jl @@ -5,10 +5,10 @@ and fixed in k at (0,0,0) and (0,0,Lₖ), the boundary conditions and physical properties are passed into as `labels`. The .msh file is generated at `filename` at a given `dir`ectory with a refinement factor `ms`." function create_cylinder_mesh(Rᵢ::Real, Rₑ::Real, Lₖ::Real, - labels::Vector, - filename::String, - ms::Real=1, - dir=@__DIR__) + labels::Vector, + filename::String, + ms::Real = 1, + dir = @__DIR__) # Refinement factors for internal and external faces factorₑ = 0.015 diff --git a/examples/linear_extension/linear_extension.jl b/examples/linear_extension/linear_extension.jl index 973823583..c6be78cf7 100644 --- a/examples/linear_extension/linear_extension.jl +++ b/examples/linear_extension/linear_extension.jl @@ -105,8 +105,8 @@ end; "Return numerical results for testing" function numerical_solution(sol::AbstractSolution, - p1::Point{dim}, p2::Point{dim}, - e::ONSAS.AbstractElement{dim}) where {dim} + p1::Point{dim}, p2::Point{dim}, + e::ONSAS.AbstractElement{dim}) where {dim} s = ONSAS.structure(analysis(sol)) ## Displacements # Evaluate the solution at p1, p2 @@ -138,14 +138,14 @@ end; "Return analytical results for testing" function analytic_solution(sol::AbstractSolution, p1::Point{dim}, p2::Point{dim}, - e::AbstractElement{dim}) where {dim} + e::AbstractElement{dim}) where {dim} (; E, ν, λ, G, tension_load) = parameters() sa = analysis(sol) ## Displacements "Compute displacements νmeric solution ui, uj and uk for analytic validation." function u_ijk_analytic(λv::Vector{<:Real}, - x0::Real, y0::Real, z0::Real, - ν::Real=ν, E::Real=E) + x0::Real, y0::Real, z0::Real, + ν::Real = ν, E::Real = E) C(t) = tension_load(t) * (1 - ν - 2ν^2) / (1 - ν) ui(t) = C(t) / E * x0 @@ -166,8 +166,8 @@ function analytic_solution(sol::AbstractSolution, p1::Point{dim}, p2::Point{dim} uk_2 = u_2[3] ## Strains "Compute strains νmeric solution ϵi, ϵj and ϵk for analytic validation." - function ϵ_ijk_analytic(λv::Vector{<:Real}, x0::Real, y0::Real, z0::Real, ν::Real=ν, - E::Real=E) + function ϵ_ijk_analytic(λv::Vector{<:Real}, x0::Real, y0::Real, z0::Real, ν::Real = ν, + E::Real = E) C(t) = tension_load(t) * (1 - ν - 2ν^2) / (1 - ν) ϵi(t) = C(t) / E @@ -178,7 +178,8 @@ function analytic_solution(sol::AbstractSolution, p1::Point{dim}, p2::Point{dim} end ## Stresses "Compute strains νmeric solution ϵi, ϵj and ϵk for analytic validation." - function σ_ijk_analytic(λv::Vector{<:Real}, x0::Real, y0::Real, z0::Real, λ::Real, G::Real) + function σ_ijk_analytic( + λv::Vector{<:Real}, x0::Real, y0::Real, z0::Real, λ::Real, G::Real) C(t) = tension_load(t) * (1 - ν - 2ν^2) / (1 - ν) ϵi(t) = C(t) / E @@ -224,33 +225,33 @@ function test(sol::AbstractSolution) # Test booleans for CI #----------------------------- @testset "Linear Extension example displacements Point 1" begin - @test ui_1_num ≈ ui_1_analy rtol = RTOL - @test uj_1_num ≈ uj_1_analy atol = ATOL - @test norm(uj_1_analy) ≈ 0 atol = ATOL - @test uk_1_num ≈ uk_1_analy atol = ATOL - @test norm(uk_1_analy) ≈ 0 atol = ATOL + @test ui_1_num≈ui_1_analy rtol=RTOL + @test uj_1_num≈uj_1_analy atol=ATOL + @test norm(uj_1_analy)≈0 atol=ATOL + @test uk_1_num≈uk_1_analy atol=ATOL + @test norm(uk_1_analy)≈0 atol=ATOL end @testset "Linear Extension example displacements Point 2" begin - @test ui_2_num ≈ ui_2_analy rtol = RTOL - @test uj_2_num ≈ uj_2_analy atol = ATOL - @test norm(uj_2_analy) ≈ 0 atol = ATOL - @test uk_2_num ≈ uk_2_analy atol = ATOL - @test norm(uk_2_analy) ≈ 0 atol = ATOL + @test ui_2_num≈ui_2_analy rtol=RTOL + @test uj_2_num≈uj_2_analy atol=ATOL + @test norm(uj_2_analy)≈0 atol=ATOL + @test uk_2_num≈uk_2_analy atol=ATOL + @test norm(uk_2_analy)≈0 atol=ATOL end @testset "Linear Extension example strains random Point " begin - @test ϵi_num ≈ ϵi_analy rtol = RTOL - @test ϵj_num ≈ ϵj_analy atol = ATOL - @test norm(ϵj_analy) ≈ 0 atol = ATOL - @test ϵk_num ≈ ϵk_analy atol = ATOL - @test norm(ϵk_num) ≈ 0 atol = ATOL + @test ϵi_num≈ϵi_analy rtol=RTOL + @test ϵj_num≈ϵj_analy atol=ATOL + @test norm(ϵj_analy)≈0 atol=ATOL + @test ϵk_num≈ϵk_analy atol=ATOL + @test norm(ϵk_num)≈0 atol=ATOL end @testset "Linear Extension example stress random Point " begin - @test σi_num ≈ σi_analy rtol = RTOL - @test σj_num ≈ σj_analy rtol = RTOL skip = true - @test σk_num ≈ σk_analy rtol = RTOL skip = true + @test σi_num≈σi_analy rtol=RTOL + @test σj_num≈σj_analy rtol=RTOL skip=true + @test σk_num≈σk_analy rtol=RTOL skip=true end end; diff --git a/examples/linear_extension/linear_extension_mesh.jl b/examples/linear_extension/linear_extension_mesh.jl index 40cc94483..6dcd5cb08 100644 --- a/examples/linear_extension/linear_extension_mesh.jl +++ b/examples/linear_extension/linear_extension_mesh.jl @@ -2,10 +2,10 @@ using Gmsh "Creates a mesh for a cube with a loaded face and a fixed origin." function create_linear_extension_mesh(Lᵢ::Real, Lⱼ::Real, Lₖ::Real, - labels::Vector, - filename::String, - ms::Real=0.5, - dir::String=@__DIR__) + labels::Vector, + filename::String, + ms::Real = 0.5, + dir::String = @__DIR__) # Get Labels mat_label = labels[1] @@ -86,10 +86,10 @@ function create_linear_extension_mesh(Lᵢ::Real, Lⱼ::Real, Lₖ::Real, gmsh.model.addPhysicalGroup(dim_surface, [left_surface_index], fixed_ux_surfaces_index) fixed_uy_surfaces_index = 2 gmsh.model.addPhysicalGroup(dim_surface, [bottom_surface_index, top_surface_index], - fixed_uy_surfaces_index) + fixed_uy_surfaces_index) fixed_uz_surfaces_index = 3 gmsh.model.addPhysicalGroup(dim_surface, [front_surface_index, back_surface_index], - fixed_uz_surfaces_index) + fixed_uz_surfaces_index) load_surfaces_index = 4 gmsh.model.addPhysicalGroup(dim_surface, [right_surface_index], load_surfaces_index) @@ -98,12 +98,13 @@ function create_linear_extension_mesh(Lᵢ::Real, Lⱼ::Real, Lₖ::Real, gmsh.model.addPhysicalGroup(dim_vol, [1], 5) gmsh.model.setPhysicalName(dim_surface, fixed_ux_surfaces_index, - "_$(face_label)_$(ux_bc_label)") + "_$(face_label)_$(ux_bc_label)") gmsh.model.setPhysicalName(dim_surface, fixed_uy_surfaces_index, - "_$(face_label)_$(uy_bc_label)") + "_$(face_label)_$(uy_bc_label)") gmsh.model.setPhysicalName(dim_surface, fixed_uz_surfaces_index, - "_$(face_label)_$(uz_bc_label)") - gmsh.model.setPhysicalName(dim_surface, load_surfaces_index, "_$(face_label)_$(load_label)") + "_$(face_label)_$(uz_bc_label)") + gmsh.model.setPhysicalName( + dim_surface, load_surfaces_index, "_$(face_label)_$(load_label)") gmsh.model.setPhysicalName(dim_vol, 5, "$(mat_label)_$(element_label)_") gmsh.model.geo.synchronize() diff --git a/examples/self_weight_clamped_truss/self_weight_clamped_truss.jl b/examples/self_weight_clamped_truss/self_weight_clamped_truss.jl index 29c0724d3..e7acff05f 100644 --- a/examples/self_weight_clamped_truss/self_weight_clamped_truss.jl +++ b/examples/self_weight_clamped_truss/self_weight_clamped_truss.jl @@ -47,7 +47,7 @@ end "Analytic displacement uᵢ at the tip" function analytic_u(x::Real; F::Real, E::Real, - A::Real, L::Real, g::Real, ρ::Real) + A::Real, L::Real, g::Real, ρ::Real) b = ρ * g C = F / (E * A) + b * L / (E * A) -b / (2 * E * A) * x^2 + C * x @@ -55,7 +55,7 @@ end "Compute the analytical external force for a given node index `i`" function analytical_force(c::AbstractCase, i::Int; - F::Real, N::Int, ρ::Real, g::Real, A::Real, ΔL::Real) + F::Real, N::Int, ρ::Real, g::Real, A::Real, ΔL::Real) body_load = if i == 1 || i == N + 1 ρ * g * A * ΔL / 2 else @@ -88,7 +88,7 @@ end; "Return structure" function structure(N::Int; - E::Real, ν::Real, ρ::Real, L::Real, A::Real, g::Real, ϵ_model) + E::Real, ν::Real, ρ::Real, L::Real, A::Real, g::Real, ϵ_model) # ------------- # Mesh # ------------- @@ -96,14 +96,14 @@ function structure(N::Int; # ------------------------------- # Materials # ------------------------------- - material = SVK(; E, ν, ρ, label="material") + material = SVK(; E, ν, ρ, label = "material") materials = StructuralMaterial(material => elements(m)) # ------------------------------- # Boundary conditions # ------------------------------- fixed_bc = FixedField(:u, [1], "fixed") gravity_bc_ramp = GlobalLoad(:u, t -> t * [density(material) * g], "gravity") - node_bcs = Dictionary{AbstractBoundaryCondition,Vector{Node}}() + node_bcs = Dictionary{AbstractBoundaryCondition, Vector{Node}}() insert!(node_bcs, fixed_bc, [first(nodes(m))]) element_bcs = dictionary([gravity_bc_ramp => elements(m)]) boundary_conditions = StructuralBoundaryCondition(; node_bcs, element_bcs) @@ -116,7 +116,7 @@ end; function solve(::FirstCase) (; g, N, E, ν, ρ, L, A, F, ϵ_model) = parameters() s = structure(N; E, ν, ρ, L, A, g, ϵ_model) - a = LinearStaticAnalysis(s; NSTEPS=10) + a = LinearStaticAnalysis(s; NSTEPS = 10) ONSAS.solve(a) end; @@ -130,11 +130,11 @@ function test(c::FirstCase, sol::AbstractSolution) analytical_Fext[1] = analytical_Fext[end] = ρ * g * A / 2 * L / N # Displacement numerical_disp = last(displacements(sol, last(nodes(s)), 1)) - analytic_disp = analytic_u(L; F=0.0, E, A, L, g, ρ) + analytic_disp = analytic_u(L; F = 0.0, E, A, L, g, ρ) @testset "Displacements and external forces test $c" begin - @test numerical_Fext ≈ analytical_Fext atol = ATOL - @test numerical_disp ≈ analytic_disp atol = ATOL + @test numerical_Fext≈analytical_Fext atol=ATOL + @test numerical_disp≈analytic_disp atol=ATOL end end @@ -152,8 +152,8 @@ function solve(::SecondCase) insert!(boundary_conditions(s), tip_load_bc, last(nodes(s))) # Analysis load_analysis = LinearStaticAnalysis(s; - NSTEPS, - initial_state=last_state_analysis_self_weight) + NSTEPS, + initial_state = last_state_analysis_self_weight) solve!(load_analysis) end; @@ -163,7 +163,7 @@ function test(c::SecondCase, sol::AbstractSolution) s = ONSAS.structure(a) initial_state = first(sol.states) # Check displacement at the initial state - analytic_initial_disp = analytic_u(L; F=0.0, E, A, L, g, ρ) + analytic_initial_disp = analytic_u(L; F = 0.0, E, A, L, g, ρ) numeric_initial_disp = last(displacements(initial_state)) # TODO: The first state of the second analysis is not the initial state as it is mutated # along the resolution process. Hence, we need to store also the initial state of the @@ -177,9 +177,9 @@ function test(c::SecondCase, sol::AbstractSolution) analytic_disp = analytic_u(L; F, E, A, L, g, ρ) @testset "Displacements and external forces test $c" begin - @test_broken numeric_initial_disp ≈ analytic_initial_disp atol = ATOL - @test numerical_Fext ≈ analytical_Fext atol = ATOL - @test numerical_disp ≈ analytic_disp atol = ATOL + @test_broken numeric_initial_disp≈analytic_initial_disp atol=ATOL + @test numerical_Fext≈analytical_Fext atol=ATOL + @test numerical_disp≈analytic_disp atol=ATOL end end diff --git a/examples/uniaxial_compression/uniaxial_compression.jl b/examples/uniaxial_compression/uniaxial_compression.jl index bd5639abd..7e08482c3 100644 --- a/examples/uniaxial_compression/uniaxial_compression.jl +++ b/examples/uniaxial_compression/uniaxial_compression.jl @@ -51,7 +51,7 @@ function boundary_conditions() end; "Return the first case structural model" -function structure(::FirstCase=FirstCase()) +function structure(::FirstCase = FirstCase()) (; μ, K, Li, Lj, Lk) = parameters() # ------------- # Mesh @@ -65,7 +65,7 @@ function structure(::FirstCase=FirstCase()) n7 = Node(Li, Lj, Lk) n8 = Node(Li, Lj, 0.0) vec_nodes = [n1, n2, n3, n4, n5, n6, n7, n8] - mesh = Mesh(; nodes=vec_nodes) + mesh = Mesh(; nodes = vec_nodes) f1 = TriangularFace(n5, n8, n6, "loaded_face_1") f2 = TriangularFace(n6, n8, n7, "loaded_face_2") f3 = TriangularFace(n4, n1, n2, "x=0_face_1") @@ -97,9 +97,9 @@ function structure(::FirstCase=FirstCase()) # ------------------------------- (; bc_fixed_x, bc_fixed_y, bc_fixed_k, bc_load) = boundary_conditions() face_bc = [bc_fixed_x => [f3, f4], - bc_fixed_y => [f5, f6], - bc_fixed_k => [f7, f8], - bc_load => [f1, f2]] + bc_fixed_y => [f5, f6], + bc_fixed_k => [f7, f8], + bc_load => [f1, f2]] bcs = StructuralBoundaryCondition(face_bc) Structure(mesh, materials, bcs) @@ -229,9 +229,9 @@ end; "Computes displacements numeric solution uᵢ, uⱼ and uₖ for analytic validation." function u_ijk_numeric(numerical_α::Vector{<:Real}, - numerical_β::Vector{<:Real}, - numerical_γ::Vector{<:Real}, - x::Real, y::Real, z::Real) + numerical_β::Vector{<:Real}, + numerical_γ::Vector{<:Real}, + x::Real, y::Real, z::Real) x * (numerical_α .- 1), y * (numerical_β .- 1), z * (numerical_γ .- 1) end; @@ -242,15 +242,15 @@ function analytic_P(sol::AbstractSolution) # Test with Second Piola-Kirchoff stress tensor `P`. "Computes P(1,1) given α, β and γ." - function analytic_P11(α::Vector{<:Real}, β::Vector{<:Real}, μ::Real=μ, K::Real=K) + function analytic_P11(α::Vector{<:Real}, β::Vector{<:Real}, μ::Real = μ, K::Real = K) μ * α - μ * (α .^ (-1)) + K * (β .^ 2) .* (α .* (β .^ 2) .- 1) end "Computes P(2,2) given α, β and γ." - function analytic_P22(α::Vector{<:Real}, β::Vector{<:Real}, μ::Real=μ, K::Real=K) + function analytic_P22(α::Vector{<:Real}, β::Vector{<:Real}, μ::Real = μ, K::Real = K) μ * β - μ * (β .^ (-1)) + K * β .* ((α .^ 2) .* (β .^ 2) - α) end "Computes P(2,2) given α, β and γ." - function analytic_P33(α::Vector{<:Real}, β::Vector{<:Real}, μ::Real=μ, K::Real=K) + function analytic_P33(α::Vector{<:Real}, β::Vector{<:Real}, μ::Real = μ, K::Real = K) analytic_P22(α, β, μ, K) end P11_analytic = analytic_P11(numeric_α, numeric_β) @@ -266,12 +266,12 @@ function test(sol::AbstractSolution) a = analysis(sol) P11_numeric, P22_numeric, P33_numeric, _, _ = numerical_solution(sol) P11_analytic, P22_analytic, P33_analytic = analytic_P(sol) - @test P11_analytic ≈ P11_numeric rtol = RTOL - @test P22_analytic ≈ P22_numeric atol = ATOL - @test P33_analytic ≈ P33_numeric atol = ATOL - @test -p * load_factors(a) ≈ P11_analytic rtol = RTOL - @test norm(P22_numeric) ≈ 0 atol = ATOL - @test norm(P33_numeric) ≈ 0 atol = ATOL + @test P11_analytic≈P11_numeric rtol=RTOL + @test P22_analytic≈P22_numeric atol=ATOL + @test P33_analytic≈P33_numeric atol=ATOL + @test -p * load_factors(a)≈P11_analytic rtol=RTOL + @test norm(P22_numeric)≈0 atol=ATOL + @test norm(P33_numeric)≈0 atol=ATOL rand_point = [rand() * [Li, Lj, Lk]] ph = PointEvalHandler(mesh(ONSAS.structure(a)), rand_point) @@ -280,15 +280,15 @@ function test(sol::AbstractSolution) _, _, _, numeric_α, numeric_β, numeric_γ, _ = numerical_solution(sol) u1_case, u2_case, u3_case = u_ijk_numeric(numeric_α, numeric_β, numeric_γ, - rand_point[]...) + rand_point[]...) rand_point_u1 = displacements(sol, ph, 1) rand_point_u2 = displacements(sol, ph, 2) rand_point_u3 = displacements(sol, ph, 3) stress_point = stress(sol, ph)[] - @test u1_case ≈ rand_point_u1 rtol = RTOL - @test u2_case ≈ rand_point_u2 rtol = RTOL - @test u3_case ≈ rand_point_u3 rtol = RTOL - @test getindex.(stress_point, 1) ≈ P11_analytic rtol = RTOL + @test u1_case≈rand_point_u1 rtol=RTOL + @test u2_case≈rand_point_u2 rtol=RTOL + @test u3_case≈rand_point_u3 rtol=RTOL + @test getindex.(stress_point, 1)≈P11_analytic rtol=RTOL end; "Run the example" diff --git a/examples/uniaxial_extension/uniaxial_extension.jl b/examples/uniaxial_extension/uniaxial_extension.jl index edabe582c..148195cae 100644 --- a/examples/uniaxial_extension/uniaxial_extension.jl +++ b/examples/uniaxial_extension/uniaxial_extension.jl @@ -51,7 +51,7 @@ function structure(::FirstCase) n7 = Node(Lx, Ly, Lz) n8 = Node(Lx, Ly, 0.0) vec_nodes = [n1, n2, n3, n4, n5, n6, n7, n8] - m = Mesh(; nodes=vec_nodes) + m = Mesh(; nodes = vec_nodes) ## Faces f1 = TriangularFace(n5, n8, n6, "loaded_face_1") f2 = TriangularFace(n6, n8, n7, "loaded_face_2") @@ -81,7 +81,7 @@ function structure(::FirstCase) # ------------------------------- # Materials # ------------------------------- - svk = SVK(; E=E, ν=ν, label="svk") + svk = SVK(; E = E, ν = ν, label = "svk") mat = StructuralMaterial(svk => [t1, t2, t3, t4, t5, t6]) # ------------------------------- # Boundary conditions @@ -94,7 +94,7 @@ function structure(::FirstCase) bc4 = GlobalLoad(:u, t -> [p * t, 0, 0]) # Crete boundary conditions struct bcs = StructuralBoundaryCondition(bc1 => [f3, f4], bc2 => [f5, f6], - bc3 => [f7, f8], bc4 => [f1, f2]) + bc3 => [f7, f8], bc4 => [f1, f2]) # ------------------------------- # Structure # ------------------------------- @@ -143,7 +143,7 @@ end; "Computes displacements numeric solution uᵢ, uⱼ and uₖ for analytic validation." function u_ijk_numeric(α::Vector{<:Real}, β::Vector{<:Real}, γ::Vector{<:Real}, - x::Real, y::Real, z::Real) + x::Real, y::Real, z::Real) x * (α .- 1), y * (β .- 1), z * (γ .- 1) end; @@ -197,11 +197,11 @@ function test(::FirstCase, sol::AbstractSolution) # Test solution # ------------------------------- @testset "Case 1 Uniaxial Extension Example" begin - @test λ_analytic ≈ λ_numeric rtol = RTOL - @test α_analytic ≈ last(α_numeric) rtol = RTOL - @test β_analytic ≈ last(β_numeric) rtol = RTOL - @test C_analytic ≈ C_numeric rtol = RTOL - @test P_analytic ≈ P_numeric rtol = RTOL + @test λ_analytic≈λ_numeric rtol=RTOL + @test α_analytic≈last(α_numeric) rtol=RTOL + @test β_analytic≈last(β_numeric) rtol=RTOL + @test C_analytic≈C_numeric rtol=RTOL + @test P_analytic≈P_numeric rtol=RTOL end end @@ -304,12 +304,12 @@ function test(::SecondCase, sol::AbstractSolution) # Test solution # ------------------------------- @testset "Case 2 Uniaxial Extension Example" begin - @test λ_analytic ≈ λ_numeric rtol = RTOL + @test λ_analytic≈λ_numeric rtol=RTOL @test J > 0 - @test α_analytic ≈ last(α_numeric) rtol = RTOL - @test β_analytic ≈ last(β_numeric) rtol = RTOL - @test C_analytic ≈ C_numeric rtol = RTOL - @test P_analytic ≈ P_numeric rtol = RTOL + @test α_analytic≈last(α_numeric) rtol=RTOL + @test β_analytic≈last(β_numeric) rtol=RTOL + @test C_analytic≈C_numeric rtol=RTOL + @test P_analytic≈P_numeric rtol=RTOL end # ------------------------------- # Interpolator tests @@ -318,14 +318,14 @@ function test(::SecondCase, sol::AbstractSolution) ph = PointEvalHandler(mesh(s), rand_point) # Compute analytic solution at a random point uie, uje, uke = u_ijk_numeric(α_numeric, β_numeric, γ_numeric, - rand_point[]...) + rand_point[]...) r_ui = displacements(sol, ph, 1) r_uj = displacements(sol, ph, 2) r_uk = displacements(sol, ph, 3) @testset "Case 2 Uniaxial Extension Example Interpolation" begin - @test uie ≈ r_ui rtol = RTOL - @test uje ≈ r_uj rtol = RTOL - @test uke ≈ r_uk rtol = RTOL + @test uie≈r_ui rtol=RTOL + @test uje≈r_uj rtol=RTOL + @test uke≈r_uk rtol=RTOL end end diff --git a/examples/uniaxial_extension/uniaxial_mesh.jl b/examples/uniaxial_extension/uniaxial_mesh.jl index fb0629b0b..11131ddb5 100644 --- a/examples/uniaxial_extension/uniaxial_mesh.jl +++ b/examples/uniaxial_extension/uniaxial_mesh.jl @@ -3,10 +3,10 @@ using Gmsh "Creates a mesh for a cube with a loaded face and a fixed origin at (0,0,0) and (Lᵢ,Lⱼ,Lₖ) given some `labels` a `filename` and refinement factor `ms`." function create_uniaxial_mesh(Lᵢ::Real, Lⱼ::Real, Lₖ::Real, - labels::Vector, - filename::String, - ms::Real=0.5, - dir=@__DIR__) + labels::Vector, + filename::String, + ms::Real = 0.5, + dir = @__DIR__) # Get Labels mat_label = labels[1] diff --git a/examples/von_misses_truss/von_misses_truss.jl b/examples/von_misses_truss/von_misses_truss.jl index 2ae1ab3c5..3277f877f 100644 --- a/examples/von_misses_truss/von_misses_truss.jl +++ b/examples/von_misses_truss/von_misses_truss.jl @@ -22,7 +22,7 @@ function parameters() end; "Return the problem structural model" -function structure(strain_model::Type{<:AbstractStrainModel}=GreenStrain) +function structure(strain_model::Type{<:AbstractStrainModel} = GreenStrain) (; H, a, d, V, E, ν, Fk) = parameters() # ------------- # Mesh @@ -41,7 +41,7 @@ function structure(strain_model::Type{<:AbstractStrainModel}=GreenStrain) # ------------------------------- # Materials # ------------------------------- - steel = SVK(; E=E, ν=ν, label="steel") + steel = SVK(; E = E, ν = ν, label = "steel") materials = StructuralMaterial(steel => [truss_left, truss_right]) # ------------------------------- # Boundary conditions @@ -49,18 +49,19 @@ function structure(strain_model::Type{<:AbstractStrainModel}=GreenStrain) bc_fixed = FixedField(:u, [1, 2, 3], "all_u_fixed") bc_fixed_y = FixedField(:u, [2], "fixed_uy") bc_load = GlobalLoad(:u, t -> [0, 0, Fk * t], "load in j") - s_boundary_conditions = StructuralBoundaryCondition(bc_fixed => [n1, n3], bc_fixed_y => [n2], - bc_load => [n2]) + s_boundary_conditions = StructuralBoundaryCondition( + bc_fixed => [n1, n3], bc_fixed_y => [n2], + bc_load => [n2]) Structure(mesh, materials, s_boundary_conditions) end; "Return the problem solution" -function solve(strain_model::Type{<:AbstractStrainModel}=GreenStrain) +function solve(strain_model::Type{<:AbstractStrainModel} = GreenStrain) # ------------------------------- # Structural Analysis # ------------------------------- s = structure(strain_model) - sa = NonLinearStaticAnalysis(s; NSTEPS=1) + sa = NonLinearStaticAnalysis(s; NSTEPS = 1) # ------------------------------- # Solver # ------------------------------- @@ -76,7 +77,8 @@ function solve(strain_model::Type{<:AbstractStrainModel}=GreenStrain) end; "Test problem solution" -function test(sol::AbstractSolution, strain_model::Type{<:AbstractStrainModel}=GreenStrain) +function test( + sol::AbstractSolution, strain_model::Type{<:AbstractStrainModel} = GreenStrain) (; V, H, E, A, L, Fk, RTOL) = parameters() sa = analysis(sol) mesh = ONSAS.mesh(ONSAS.structure(sa)) @@ -97,15 +99,15 @@ function test(sol::AbstractSolution, strain_model::Type{<:AbstractStrainModel}=G ϵ_right_truss = strain(sol, right_truss) # Test stress and strain @testset "Stress and strain case: $strain_model" begin - @test σ_right_truss[1, 1] ≈ E * ϵ_right_truss[1, 1] rtol = RTOL skip = true + @test σ_right_truss[1, 1]≈E * ϵ_right_truss[1, 1] rtol=RTOL skip=true end # Analytic solution #----------------------------- "Analytic load factor solution for the displacement `uk` towards z axis at node `n2` `3otatedEngineeringStrain` " function load_factors_analytic(uk::Real, ::Type{RotatedEngineeringStrain}, - E::Real=E, A::Real=A, - H::Real=H, V::Real=V, l0=L) + E::Real = E, A::Real = A, + H::Real = H, V::Real = V, l0 = L) -2 * E * A * ((H + uk)^2 + V^2 - l0^2) / (l0 * (l0 + sqrt((H + uk)^2 + V^2))) * @@ -113,14 +115,14 @@ function test(sol::AbstractSolution, strain_model::Type{<:AbstractStrainModel}=G end "Analytic load factor solution for the displacement `uk` towards z axis at node `n2` `3otatedEngineeringStrain` " function load_factors_analytic(uk::Real, ::Type{GreenStrain}, - E::Real=E, A::Real=A, - H::Real=H, V::Real=V, l0=L) + E::Real = E, A::Real = A, + H::Real = H, V::Real = V, l0 = L) -2 * E * A * ((H + uk) * (2 * H * uk + uk^2)) / (2.0 * L^3) end analytics_λ = load_factors_analytic.(numerical_uk, strain_model) @testset "Analytic and numeric load factors case: $strain_model" begin - @test analytics_λ ≈ numerical_λ rtol = RTOL + @test analytics_λ≈numerical_λ rtol=RTOL end end; diff --git a/src/BoundaryConditions/BoundaryConditions.jl b/src/BoundaryConditions/BoundaryConditions.jl index fe2163435..195325e00 100644 --- a/src/BoundaryConditions/BoundaryConditions.jl +++ b/src/BoundaryConditions/BoundaryConditions.jl @@ -11,7 +11,8 @@ using ..Entities, ..Utils @reexport import ..Utils: dofs, label -export AbstractBoundaryCondition, AbstractNeumannBoundaryCondition, AbstractLoadBoundaryCondition, +export AbstractBoundaryCondition, AbstractNeumannBoundaryCondition, + AbstractLoadBoundaryCondition, AbstractDirichletBoundaryCondition, AbstractDisplacementBoundaryCondition, apply """ Abstract supertype for all elements. diff --git a/src/BoundaryConditions/DirichletBoundaryConditions.jl b/src/BoundaryConditions/DirichletBoundaryConditions.jl index d253909a8..5d04a7328 100644 --- a/src/BoundaryConditions/DirichletBoundaryConditions.jl +++ b/src/BoundaryConditions/DirichletBoundaryConditions.jl @@ -18,7 +18,7 @@ struct Dirichlet <: AbstractDirichletBoundaryCondition values::Function "Boundary condition label." name::Label - function Dirichlet(field::Field, values::Function, name::Label=NO_LABEL) + function Dirichlet(field::Field, values::Function, name::Label = NO_LABEL) new(field, values, name) end end diff --git a/src/BoundaryConditions/FixedFieldBoundaryConditions.jl b/src/BoundaryConditions/FixedFieldBoundaryConditions.jl index d457f182c..8203abfab 100644 --- a/src/BoundaryConditions/FixedFieldBoundaryConditions.jl +++ b/src/BoundaryConditions/FixedFieldBoundaryConditions.jl @@ -27,7 +27,7 @@ struct FixedField <: AbstractDirichletBoundaryCondition components::Vector{Int64} "Boundary condition label." name::Label - function FixedField(field::Field, components::Vector{Int64}, name::Label=NO_LABEL) + function FixedField(field::Field, components::Vector{Int64}, name::Label = NO_LABEL) new(field, components, name) end end @@ -42,7 +42,7 @@ function apply(bc::FixedField, n::AbstractNode) end "Return fixed `Dof`s of an `AbstractFace` or `AbstractElement` imposed in the `FixedField` `fbc`." -function apply(bc::FixedField, e::E) where {E<:Union{AbstractFace,AbstractElement}} +function apply(bc::FixedField, e::E) where {E <: Union{AbstractFace, AbstractElement}} # TODO Rename method to fixed_dofs ? reduce(vcat, apply(bc, n) for n in nodes(e)) end diff --git a/src/BoundaryConditions/GlobalLoadBoundaryConditions.jl b/src/BoundaryConditions/GlobalLoadBoundaryConditions.jl index b2cb03501..187cb3dce 100644 --- a/src/BoundaryConditions/GlobalLoadBoundaryConditions.jl +++ b/src/BoundaryConditions/GlobalLoadBoundaryConditions.jl @@ -25,7 +25,7 @@ struct GlobalLoad <: AbstractNeumannBoundaryCondition values::Function "Boundary condition label." name::Label - function GlobalLoad(field::Field, values::Function, name::Label=NO_LABEL) + function GlobalLoad(field::Field, values::Function, name::Label = NO_LABEL) new(field, values, name) end end @@ -38,7 +38,7 @@ function apply(bc::GlobalLoad, n::AbstractNode, t::Real) f = bc(t) # Repeat the values and build the force vector for all dofs - f_dofs = repeat(f; outer=Int(length(dofs_bc) / length(f))) + f_dofs = repeat(f; outer = Int(length(dofs_bc) / length(f))) @assert length(f_dofs) == length(dofs_bc) "The length of the force vector must be equal to the length of the dofs vector." @@ -59,7 +59,7 @@ function apply(bc::GlobalLoad, f::AbstractFace, t::Real) dofs_bc = reduce(vcat, values(dofs(n)[bc.field]) for n in nodes(f)) # Repeat the values and build the tension vector for all dofs - p_vec = repeat(p_nodal; outer=Int(length(dofs_bc) / length(p))) + p_vec = repeat(p_nodal; outer = Int(length(dofs_bc) / length(p))) @assert length(p_vec) == length(dofs_bc) "The length of the tension vector must be equal to the length of the dofs vector." @@ -80,7 +80,7 @@ function apply(bc::GlobalLoad, e::AbstractElement, t::Real) dofs_bc = reduce(vcat, values(dofs(n)[bc.field]) for n in nodes(e)) # Repeat the values and build the tension vector for all dofs - b_vec = repeat(b_nodal; outer=Int(length(dofs_bc) / length(b_nodal))) + b_vec = repeat(b_nodal; outer = Int(length(dofs_bc) / length(b_nodal))) @assert length(b_vec) == length(dofs_bc) "The length of the tension vector must be equal to the length of the dofs vector." diff --git a/src/BoundaryConditions/LocalLoadBoundaryConditions.jl b/src/BoundaryConditions/LocalLoadBoundaryConditions.jl index 4b419c661..f17e9ed6a 100644 --- a/src/BoundaryConditions/LocalLoadBoundaryConditions.jl +++ b/src/BoundaryConditions/LocalLoadBoundaryConditions.jl @@ -25,7 +25,7 @@ struct Pressure <: AbstractNeumannBoundaryCondition values::Function "Boundary condition label." name::Label - function Pressure(field::Field, values::Function, name::Label=NO_LABEL) + function Pressure(field::Field, values::Function, name::Label = NO_LABEL) # Check values is real function. @assert values(rand()) isa Real new(field, values, name) @@ -48,9 +48,9 @@ function apply(bc::Pressure, f::AbstractFace, t::Real) dofs_bc = reduce(vcat, values(dofs(n)[bc.field]) for n in nodes(f)) # Repeat the values and build the tension vector for all dofs - p_vec = repeat(p_nodal; outer=Int(length(dofs_bc) / length(p_nodal))) + p_vec = repeat(p_nodal; outer = Int(length(dofs_bc) / length(p_nodal))) - @assert length(p_vec) == length(dofs_bc) "The length of the tension vector must be equal to the length of the dofs vector." + @assert length(p_vec)==length(dofs_bc) "The length of the tension vector must be equal to the length of the dofs vector." dofs_bc, p_vec end diff --git a/src/CrossSections/Circles.jl b/src/CrossSections/Circles.jl index 60de8895b..f6a9c13b7 100644 --- a/src/CrossSections/Circles.jl +++ b/src/CrossSections/Circles.jl @@ -11,7 +11,7 @@ export Circle """ Circle cross-section. """ -struct Circle{T<:Real} <: AbstractCrossSection +struct Circle{T <: Real} <: AbstractCrossSection "Circle's diameter." d::T end diff --git a/src/CrossSections/GenericCrossSections.jl b/src/CrossSections/GenericCrossSections.jl index 43675c94b..b64b7fc1e 100644 --- a/src/CrossSections/GenericCrossSections.jl +++ b/src/CrossSections/GenericCrossSections.jl @@ -7,7 +7,7 @@ export GenericCrossSection """ This generic cross-section struct can be used to define a cross-section not belonging to the existing categories. """ -struct GenericCrossSection{T<:Real} <: AbstractCrossSection +struct GenericCrossSection{T <: Real} <: AbstractCrossSection "Cross section area." area::T "Moment of inertia respect to `x` axis." diff --git a/src/CrossSections/Rectangles.jl b/src/CrossSections/Rectangles.jl index 6a33f175e..fb6ef0ff8 100644 --- a/src/CrossSections/Rectangles.jl +++ b/src/CrossSections/Rectangles.jl @@ -9,7 +9,7 @@ export Rectangle """ Rectangle cross-section. """ -struct Rectangle{T<:Real} <: AbstractCrossSection +struct Rectangle{T <: Real} <: AbstractCrossSection "Width in `y` local axis." width_y::T "Width in `z` local axis." diff --git a/src/CrossSections/Squares.jl b/src/CrossSections/Squares.jl index 0232ee50f..13807c325 100644 --- a/src/CrossSections/Squares.jl +++ b/src/CrossSections/Squares.jl @@ -9,7 +9,7 @@ export Square """ Square cross-section. """ -struct Square{T<:Real} <: AbstractCrossSection +struct Square{T <: Real} <: AbstractCrossSection "Width in `y` and `z` axes." width::T end @@ -18,7 +18,8 @@ area(s::Square) = s.width^2 "Return the moment of inertia of a `Square` cross-section `s` with respect to the local x axis." function Ixx(s::Square) - return (0.5 * s.width)^4 * (16 / 3 - 3.36 * (1 - (0.5 * s.width)^4 / (12 * (0.5 * s.width)^4))) + return (0.5 * s.width)^4 * + (16 / 3 - 3.36 * (1 - (0.5 * s.width)^4 / (12 * (0.5 * s.width)^4))) end "Return the moment of inertia of a `Square` cross-section `s` with respect to the local y axis." diff --git a/src/Entities/Entities.jl b/src/Entities/Entities.jl index 370307a92..5f0212c69 100644 --- a/src/Entities/Entities.jl +++ b/src/Entities/Entities.jl @@ -19,8 +19,10 @@ using ..Materials export AbstractEntity, nodes, create_entity export AbstractFace, normal_direction, volume -export AbstractElement, AbstractElementCache, cross_section, internal_forces, inertial_forces, - local_dof_symbol, local_dofs, nodes, strain, stress, weights, num_nodes, elements_cache +export AbstractElement, AbstractElementCache, cross_section, internal_forces, + inertial_forces, + local_dof_symbol, local_dofs, nodes, strain, stress, weights, num_nodes, + elements_cache # ================= # Abstract Entity @@ -40,7 +42,7 @@ An `AbstractEntity` object is an entity defined by dofs and node/s with certain * nodes * label """ -abstract type AbstractEntity{dim,T} end +abstract type AbstractEntity{dim, T} end "Return the `AbstractEntity` `e` coordinates." coordinates(e::AbstractEntity) = coordinates.(nodes(e)) @@ -56,7 +58,7 @@ dimension(::AbstractEntity{dim}) where {dim} = dim "Return the dofs of an `AbstractEntity` `e`." function dofs(e::AbstractEntity) - mapfoldl(dofs, mergewith!(vcat), nodes(e); init=Dictionary{Symbol,Vector{Dof}}()) + mapfoldl(dofs, mergewith!(vcat), nodes(e); init = Dictionary{Symbol, Vector{Dof}}()) end "Return the dofs of a `Vector` `ve` with `AbstractEntity`es." @@ -90,7 +92,7 @@ An `AbstractFace` object facilitates the process of adding boundary conditions o * nodes * label """ -abstract type AbstractFace{dim,T} <: AbstractEntity{dim,T} end +abstract type AbstractFace{dim, T} <: AbstractEntity{dim, T} end "Return the `AbstractFace` `f` area." function area(f::AbstractFace) end @@ -132,7 +134,7 @@ This method is a hard contract and for dynamic analysis must be implemented to d * nodes * label """ -abstract type AbstractElement{dim,T} <: AbstractEntity{dim,T} end +abstract type AbstractElement{dim, T} <: AbstractEntity{dim, T} end "Return true if a point `p` is inside the `AbstractElement` `e`." function Base.:∈(p::AbstractVector, ::AbstractElement) end @@ -206,11 +208,12 @@ elements_cache(::Type{<:AbstractElement}) = nothing Concrete subtypes of `AbstractElement` should implement either the three-arg version (no cache) or the four-arg version (use the cache). """ -function internal_forces(mat::AbstractMaterial, e::AbstractElement, u_e::AbstractVector, ::Nothing) +function internal_forces( + mat::AbstractMaterial, e::AbstractElement, u_e::AbstractVector, ::Nothing) internal_forces(mat, e, u_e) end function internal_forces(mat::AbstractMaterial, e::AbstractElement, u_e::AbstractVector, - cache::AbstractElementCache) + cache::AbstractElementCache) error("Not implemented.") end diff --git a/src/Entities/Frames.jl b/src/Entities/Frames.jl index 1b08a4760..8cdb5de6c 100644 --- a/src/Entities/Frames.jl +++ b/src/Entities/Frames.jl @@ -11,15 +11,17 @@ using ..Nodes using ..Utils using ..IsotropicLinearElasticMaterial -@reexport import ..Entities: nodes, cross_section, create_entity, local_dof_symbol, internal_forces +@reexport import ..Entities: nodes, cross_section, create_entity, local_dof_symbol, + internal_forces export Frame, Consistent, Lumped "Type of mass matrix." @enum MassMatrix Consistent Lumped -struct Frame{dim,T<:Real,N<:AbstractNode{dim,T},VN<:AbstractVector{N},G<:AbstractCrossSection} <: - AbstractElement{dim,T} +struct Frame{dim, T <: Real, N <: AbstractNode{dim, T}, + VN <: AbstractVector{N}, G <: AbstractCrossSection} <: + AbstractElement{dim, T} "Nodes of the frame." nodes::VN "Cross section properties." @@ -28,16 +30,16 @@ struct Frame{dim,T<:Real,N<:AbstractNode{dim,T},VN<:AbstractVector{N},G<:Abstrac mass_matrix::MassMatrix "Label of the frame." label::Label - function Frame(nodes::VN, cross_section::G, mass_matrix::MassMatrix=Consistent, - label::Label=NO_LABEL) where {dim,T<:Real,N<:AbstractNode{dim,T}, - VN<:AbstractVector{N},G<:AbstractCrossSection} + function Frame(nodes::VN, cross_section::G, mass_matrix::MassMatrix = Consistent, + label::Label = NO_LABEL) where {dim, T <: Real, N <: AbstractNode{dim, T}, + VN <: AbstractVector{N}, G <: AbstractCrossSection} @assert length(nodes) == 2 || throw(ArgumentError("Expected two nodes, got $(length(nodes))")) - new{dim,T,N,VN,G}(nodes, cross_section, mass_matrix, Symbol(label)) + new{dim, T, N, VN, G}(nodes, cross_section, mass_matrix, Symbol(label)) end end -function Frame(n₁::N, n₂::N, g::G, mass_matrix::MassMatrix=Consistent, - label::Label=NO_LABEL) where {N<:AbstractNode,G<:AbstractCrossSection} +function Frame(n₁::N, n₂::N, g::G, mass_matrix::MassMatrix = Consistent, + label::Label = NO_LABEL) where {N <: AbstractNode, G <: AbstractCrossSection} Frame(SVector(n₁, n₂), g, mass_matrix, label) end @@ -82,10 +84,10 @@ function internal_forces(m::IsotropicLinearElastic, f::Frame, u_e::AbstractVecto Ks = zeros(12, 12) fint = zeros(12) - Kbend = [12 6*l -12 6*l - 6*l 4*l^2 -6*l 2*l^2 - -12 -6*l 12 -6*l - 6*l 2*l^2 -6*l 4*l^2] + Kbend = [12 6*l -12 6*l + 6*l 4*l^2 -6*l 2*l^2 + -12 -6*l 12 -6*l + 6*l 2*l^2 -6*l 4*l^2] # Bending along x-y. Ks[ind_bend_xy, ind_bend_xy] .+= E * Izz / l^3 * Kbend diff --git a/src/Entities/Nodes.jl b/src/Entities/Nodes.jl index d35d30fb8..0b13048c0 100644 --- a/src/Entities/Nodes.jl +++ b/src/Entities/Nodes.jl @@ -27,7 +27,7 @@ Construct a point given its coordinates. It is a type alias for a statically sized array of dimension `dim` and element type `T`. Use either as a vararg function, `Point(1, 2, 3)`, or by splatting `Point(x...)` if `x` is an (abstract) vector. """ -const Point{dim,T} = SVector{dim,T} where {dim,T<:Real} +const Point{dim, T} = SVector{dim, T} where {dim, T <: Real} """ An `AbstractNode` object is a point in space with degrees of freedom. @@ -42,7 +42,7 @@ An `AbstractNode` object is a point in space with degrees of freedom. * `dofs`: mapping from field labels to degrees of freedom """ -abstract type AbstractNode{dim,T} <: StaticArray{Tuple{dim},T,1} end +abstract type AbstractNode{dim, T} <: StaticArray{Tuple{dim}, T, 1} end "Return node coordinates." coordinates(n::AbstractNode) = n.x @@ -71,14 +71,15 @@ end A `Node` is a point in space. The coordinates of the node are stored using a static array. """ -struct Node{dim,T} <: AbstractNode{dim,T} +struct Node{dim, T} <: AbstractNode{dim, T} "Coordinates of the node." - x::Point{dim,T} + x::Point{dim, T} "Mapping from field labels to degrees of freedom." - dofs::Dictionary{Field,Vector{Dof}} - function Node(x::Point{dim,T}, dofs::Dictionary{Field,Vector{Dof}}) where {dim,T<:Real} - @assert dim ≤ 3 "Only 1D, 2D or 3D nodes are supported." - new{dim,T}(x, dofs) + dofs::Dictionary{Field, Vector{Dof}} + function Node( + x::Point{dim, T}, dofs::Dictionary{Field, Vector{Dof}}) where {dim, T <: Real} + @assert dim≤3 "Only 1D, 2D or 3D nodes are supported." + new{dim, T}(x, dofs) end end @@ -88,9 +89,9 @@ function Base.show(io::IO, ::MIME"text/plain", n::Node) end "Node constructor with a `NTuple`." -function Node(t::NTuple{dim,<:Real}, - dofs::Dictionary=Dictionary{Field,Vector{Dof}}()) where {dim} - @assert dim ≤ 3 "Unexpected point dimension $dim" +function Node(t::NTuple{dim, <:Real}, + dofs::Dictionary = Dictionary{Field, Vector{Dof}}()) where {dim} + @assert dim≤3 "Unexpected point dimension $dim" Node(Point(t), dofs) end @@ -99,7 +100,7 @@ function Node(t) dofs = if length(t) > 1 && t[end] isa Dictionary t[end] else - Dictionary{Field,Vector{Dof}}() + Dictionary{Field, Vector{Dof}}() end coords = length(t) > 1 ? t[1:(end - 1)] : (t) Node(promote(coords)..., dofs) @@ -107,12 +108,13 @@ end "`Node` constructor with an `AbstractVector` data type." function Node(v::AbstractVector{T}, - dofs::Dictionary=Dictionary{Field,Vector{Dof}}()) where {T<:Real} + dofs::Dictionary = Dictionary{Field, Vector{Dof}}()) where {T <: Real} Node(Point(v...), dofs) end "Method to inherit from StaticArrays for a node." -StaticArrays.similar_type(::Type{Node{dim,T}}, ::Type{T}, s::Size{dim}) where {dim,T} = Node{dim,T} -Base.length(::Type{Node{dim,T}}) where {dim,T} = dim +StaticArrays.similar_type(::Type{Node{dim, T}}, ::Type{T}, s::Size{dim}) where {dim, T} = Node{ + dim, T} +Base.length(::Type{Node{dim, T}}) where {dim, T} = dim end diff --git a/src/Entities/Tetrahedrons.jl b/src/Entities/Tetrahedrons.jl index bd3ef596d..93ef1939e 100644 --- a/src/Entities/Tetrahedrons.jl +++ b/src/Entities/Tetrahedrons.jl @@ -10,7 +10,8 @@ using ..Materials using ..IsotropicLinearElasticMaterial using ..HyperElasticMaterials -@reexport import ..Entities: create_entity, internal_forces, local_dof_symbol, strain, stress, +@reexport import ..Entities: create_entity, internal_forces, local_dof_symbol, strain, + stress, weights, volume, elements_cache export Tetrahedron @@ -20,27 +21,29 @@ A `Tetrahedron` represents a 3D volume element with four nodes. See [[Belytschko]](@ref) and [[Gurtin]](@ref) for more details. """ -struct Tetrahedron{dim,T<:Real,N<:AbstractNode{dim,T},VN<:AbstractVector{N}} <: - AbstractElement{dim,T} +struct Tetrahedron{dim, T <: Real, N <: AbstractNode{dim, T}, VN <: AbstractVector{N}} <: + AbstractElement{dim, T} "Tetrahedron nodes." nodes::VN "Tetrahedron label." label::Label function Tetrahedron(nodes::VN, - label::Label=NO_LABEL) where - {dim,T<:Real,N<:AbstractNode{dim,T},VN<:AbstractVector{N}} - @assert dim == 3 "Nodes of a tetrahedron element must be 3D." - new{dim,T,N,VN}(nodes, Symbol(label)) + label::Label = NO_LABEL) where + {dim, T <: Real, N <: AbstractNode{dim, T}, VN <: AbstractVector{N}} + @assert dim==3 "Nodes of a tetrahedron element must be 3D." + new{dim, T, N, VN}(nodes, Symbol(label)) end end -function Tetrahedron(n₁::N, n₂::N, n₃::N, n₄::N, label::Label=NO_LABEL) where {N<:AbstractNode} +function Tetrahedron( + n₁::N, n₂::N, n₃::N, n₄::N, label::Label = NO_LABEL) where {N <: AbstractNode} Tetrahedron(SVector(n₁, n₂, n₃, n₄), label) end -function Tetrahedron(nodes::AbstractVector{N}, label::Label=NO_LABEL) where {N<:AbstractNode} +function Tetrahedron( + nodes::AbstractVector{N}, label::Label = NO_LABEL) where {N <: AbstractNode} Tetrahedron(SVector(nodes...), label) end "Constructor for a `Tetrahedron` element without nodes and a `label`. This function is used to create meshes via GMSH." -function Tetrahedron(label::Label=NO_LABEL) +function Tetrahedron(label::Label = NO_LABEL) Tetrahedron(SVector(Node(0, 0, 0), Node(0, 0, 0), Node(0, 0, 0), Node(0, 0, 0)), label) end @@ -50,7 +53,7 @@ function create_entity(t::Tetrahedron, vn::AbstractVector{<:AbstractNode}) end "Contains the cache to compute the element internal forces and stiffness matrix." -struct TetrahedronCache{T,ST<:Symmetric{T}} <: AbstractElementCache +struct TetrahedronCache{T, ST <: Symmetric{T}} <: AbstractElementCache "Internal forces." fint::Vector{T} "Stiffness matrix." @@ -100,8 +103,8 @@ struct TetrahedronCache{T,ST<:Symmetric{T}} <: AbstractElementCache E = Symmetric(zeros(3, 3)) I₃₃ = eye(3) ones₃₃ = ones(3, 3) - new{Float64,Symmetric{Float64}}(fint, Ks, S, ∂S∂E, P, ε, F, H, X, J, - funder, B, aux_geometric_Ks, E, I₃₃, ones₃₃) + new{Float64, Symmetric{Float64}}(fint, Ks, S, ∂S∂E, P, ε, F, H, X, J, + funder, B, aux_geometric_Ks, E, I₃₃, ones₃₃) end end @@ -130,7 +133,7 @@ end "Computes volume element of a tetrahedron given J = det(F)." function _volume(jacobian_mat::Matrix) volume = det(jacobian_mat) / 6.0 - @assert volume > 0 throw(ArgumentError("Element with negative volume, check connectivity.")) + @assert volume>0 throw(ArgumentError("Element with negative volume, check connectivity.")) volume end @@ -154,7 +157,7 @@ end "Return the geometric stiffness." function geometric_stiffness!(Ks::Symmetric, aux_geometric_Ks::Matrix, - 𝕊::AbstractMatrix, funder::Matrix{<:Real}, vol::Real) + 𝕊::AbstractMatrix, funder::Matrix{<:Real}, vol::Real) aux_geometric_Ks .= funder' * 𝕊 * funder * vol for i in 1:4 for j in i:4 @@ -178,8 +181,9 @@ end "Return the internal force of a `Tetrahedron` element `t` doted with an `AbstractHyperElasticMaterial` `m` + and a an element displacement vector `u_e`. This function modifies the cache to avoid memory allocations." -function internal_forces(m::AbstractHyperElasticMaterial, t::Tetrahedron, u_e::AbstractVector, - cache::TetrahedronCache) +function internal_forces( + m::AbstractHyperElasticMaterial, t::Tetrahedron, u_e::AbstractVector, + cache::TetrahedronCache) (; fint, Ks, P, S, ∂S∂E, ε, F, H, X, J, funder, B, aux_geometric_Ks, E, I₃₃) = cache # Kinematics @@ -232,7 +236,7 @@ A 4-tuple containing: - `strain`: `Symmetric` type, the strain tensor of the tetrahedron element. " function internal_forces(m::IsotropicLinearElastic, t::Tetrahedron, u_e::AbstractVector, - cache::TetrahedronCache) + cache::TetrahedronCache) (; fint, Ks, S, ∂S∂E, ε, F, H, X, J, funder, B, I₃₃, ones₃₃) = cache # Kinematics @@ -249,7 +253,7 @@ function internal_forces(m::IsotropicLinearElastic, t::Tetrahedron, u_e::Abstrac # Stresses (due to stresses are all the same for linear elastic materials cosserat # is used as cache) - stress!(S, ∂S∂E, m, ε; cache_ones=ones₃₃, cache_eye=I₃₃) + stress!(S, ∂S∂E, m, ε; cache_ones = ones₃₃, cache_eye = I₃₃) # Stiffness matrix Ks .= Symmetric(B' * ∂S∂E * B * vol) @@ -260,27 +264,27 @@ function internal_forces(m::IsotropicLinearElastic, t::Tetrahedron, u_e::Abstrac end "Shape function derivatives." -const ∂X∂ζ_1 = [1.0 -1.0 0.0 0.0 - 0.0 -1.0 0.0 1.0 - 0.0 -1.0 1.0 0.0] +const ∂X∂ζ_1 = [1.0 -1.0 0.0 0.0 + 0.0 -1.0 0.0 1.0 + 0.0 -1.0 1.0 0.0] "Return the shape functions derivatives of a `Tetrahedron` element." -function _shape_functions_derivatives(::Tetrahedron, order::Int=1) +function _shape_functions_derivatives(::Tetrahedron, order::Int = 1) ∂X∂ζ = if order == 1 ∂X∂ζ_1 end end "Indices for computing the minors of the interpolation matrix, implemented as a hash table." -const MINOR_INDICES = [([2, 3, 4], [2, 3, 4]) ([2, 3, 4], [1, 3, 4]) ([2, 3, 4], [1, 2, 4]) ([2, 3, 4], [1, 2, 3]) - ([1, 3, 4], [2, 3, 4]) ([1, 3, 4], [1, 3, 4]) ([1, 3, 4], [1, 2, 4]) ([1, 3, 4], [1, 2, 3]) - ([1, 2, 4], [2, 3, 4]) ([1, 2, 4], [1, 3, 4]) ([1, 2, 4], [1, 2, 4]) ([1, 2, 4], [1, 2, 3]) - ([1, 2, 3], [2, 3, 4]) ([1, 2, 3], [1, 3, 4]) ([1, 2, 3], [1, 2, 4]) ([1, 2, 3], [1, 2, 3])] +const MINOR_INDICES = [([2, 3, 4], [2, 3, 4]) ([2, 3, 4], [1, 3, 4]) ([2, 3, 4], [1, 2, 4]) ([2, 3, 4], [1, 2, 3]) + ([1, 3, 4], [2, 3, 4]) ([1, 3, 4], [1, 3, 4]) ([1, 3, 4], [1, 2, 4]) ([1, 3, 4], [1, 2, 3]) + ([1, 2, 4], [2, 3, 4]) ([1, 2, 4], [1, 3, 4]) ([1, 2, 4], [1, 2, 4]) ([1, 2, 4], [1, 2, 3]) + ([1, 2, 3], [2, 3, 4]) ([1, 2, 3], [1, 3, 4]) ([1, 2, 3], [1, 2, 4]) ([1, 2, 3], [1, 2, 3])] "Return the interpolation matrix `𝑀` for a `Tetrahedron` element `t`." -function interpolation_matrix(t::Tetrahedron{3,T}) where {T<:Real} +function interpolation_matrix(t::Tetrahedron{3, T}) where {T <: Real} # Node coordinates matrix 𝐴. - 𝐴 = MMatrix{4,4,T}(undef) + 𝐴 = MMatrix{4, 4, T}(undef) @inbounds for (node_index, node) in enumerate(nodes(t)) 𝐴[node_index, 1] = one(T) @@ -288,7 +292,7 @@ function interpolation_matrix(t::Tetrahedron{3,T}) where {T<:Real} end # 𝑀 matrix. - 𝑀 = MMatrix{4,4,T}(undef) + 𝑀 = MMatrix{4, 4, T}(undef) V = det(𝐴) # Compute minors. diff --git a/src/Entities/TriangularFaces.jl b/src/Entities/TriangularFaces.jl index b9a2d59dd..d0200c4aa 100644 --- a/src/Entities/TriangularFaces.jl +++ b/src/Entities/TriangularFaces.jl @@ -14,29 +14,29 @@ export TriangularFace """ A `TriangularFace` represents an element composed by three `Node`s. """ -struct TriangularFace{dim,T<:Real,N<:AbstractNode{dim,T},VN<:AbstractVector{N}} <: - AbstractFace{dim,T} +struct TriangularFace{dim, T <: Real, N <: AbstractNode{dim, T}, VN <: AbstractVector{N}} <: + AbstractFace{dim, T} "Stores triangle nodes." nodes::VN "Stores the triangle label." label::Label function TriangularFace(nodes::VN, - label::Label=NO_LABEL) where - {dim,T<:Real,N<:AbstractNode{dim,T},VN<:AbstractVector{N}} - @assert 2 ≤ dim ≤ 3 "TriangularFace is only defined for 2 < dim ≤ 3" - new{dim,T,N,VN}(nodes, Symbol(label)) + label::Label = NO_LABEL) where + {dim, T <: Real, N <: AbstractNode{dim, T}, VN <: AbstractVector{N}} + @assert 2≤dim≤3 "TriangularFace is only defined for 2 < dim ≤ 3" + new{dim, T, N, VN}(nodes, Symbol(label)) end end "Constructor for a `TriangularFace` element considering the nodes `n₁` `n₂` and `n₃`." function TriangularFace(n₁::N, n₂::N, n₃::N, - label::Label=NO_LABEL) where - {dim,T<:Real,N<:AbstractNode{dim,T}} + label::Label = NO_LABEL) where + {dim, T <: Real, N <: AbstractNode{dim, T}} TriangularFace(SVector(n₁, n₂, n₃), label) end "Constructor for a `TriangularFace` element without nodes and a `label`. This function is used to create meshes via GMSH." -function TriangularFace(label::Label=NO_LABEL) +function TriangularFace(label::Label = NO_LABEL) TriangularFace(SVector(Node(0, 0), Node(0, 0), Node(0, 0)), label) end diff --git a/src/Entities/Trusses.jl b/src/Entities/Trusses.jl index 26dbfeef5..5a7d78911 100644 --- a/src/Entities/Trusses.jl +++ b/src/Entities/Trusses.jl @@ -14,7 +14,8 @@ using ..Entities using ..CrossSections using ..Utils -@reexport import ..Entities: nodes, create_entity, cross_section, internal_forces, local_dof_symbol, +@reexport import ..Entities: nodes, create_entity, cross_section, internal_forces, + local_dof_symbol, strain, stress, volume export Truss, strain_model @@ -50,9 +51,10 @@ A `Truss` represents an element composed by two `Node`s that transmits axial for ### References See [[ANLE]](@ref). """ -struct Truss{dim,E<:AbstractStrainModel,T<:Real,N<:AbstractNode{dim,T},VN<:AbstractVector{N}, - G<:AbstractCrossSection} <: - AbstractElement{dim,T} +struct Truss{dim, E <: AbstractStrainModel, T <: Real, + N <: AbstractNode{dim, T}, VN <: AbstractVector{N}, + G <: AbstractCrossSection} <: + AbstractElement{dim, T} "Stores the truss nodes." nodes::VN "Stores the truss cross-section properties." @@ -60,37 +62,39 @@ struct Truss{dim,E<:AbstractStrainModel,T<:Real,N<:AbstractNode{dim,T},VN<:Abstr "Stores the truss label." label::Label function Truss(nodes::VN, g::G, ::Type{E}, - label::Label) where - {dim,E<:AbstractStrainModel,T<:Real,N<:AbstractNode{dim,T},VN<:AbstractVector{N}, - G<:AbstractCrossSection} - @assert 1 ≤ dim ≤ 3 "Nodes of a truss element must comply 1 < dim < 3 ." - new{dim,E,T,N,VN,G}(nodes, g, Symbol(label)) + label::Label) where + {dim, E <: AbstractStrainModel, T <: Real, + N <: AbstractNode{dim, T}, VN <: AbstractVector{N}, + G <: AbstractCrossSection} + @assert 1≤dim≤3 "Nodes of a truss element must comply 1 < dim < 3 ." + new{dim, E, T, N, VN, G}(nodes, g, Symbol(label)) end end "Constructor for a `Truss` element considering the nodes `n₁` and `n₂` and the cross-section `g` and strain model." function Truss(n₁::N, n₂::N, g::G, strain::Type{E}, - label::Label=NO_LABEL) where - {dim,E<:AbstractStrainModel,T<:Real,N<:AbstractNode{dim,T},G<:AbstractCrossSection} + label::Label = NO_LABEL) where + {dim, E <: AbstractStrainModel, T <: Real, + N <: AbstractNode{dim, T}, G <: AbstractCrossSection} Truss(SVector(n₁, n₂), g, strain, label) end "Constructor for a `Truss` element considering the nodes `n₁` and `n₂` and the cross-section `g`." function Truss(n₁::N, n₂::N, g::G, - label::Label=NO_LABEL) where - {dim,T<:Real,N<:AbstractNode{dim,T},G<:AbstractCrossSection} + label::Label = NO_LABEL) where + {dim, T <: Real, N <: AbstractNode{dim, T}, G <: AbstractCrossSection} Truss(SVector(n₁, n₂), g, DEFAULT_STRAIN_MODEL, label) end "Constructor for a `Truss` element without nodes a `label` and `strain`. This function is used to create meshes via GMSH." function Truss(g::AbstractCrossSection, ::Type{E}, - label::Label=NO_LABEL) where {E<:AbstractStrainModel} + label::Label = NO_LABEL) where {E <: AbstractStrainModel} Truss(Node(0, 0, 0), Node(0, 0, 0), g, E, label) end "Constructor for a `Truss` element without nodes. This function is used to create meshes via GMSH." -function Truss(g::AbstractCrossSection, label::Label=NO_LABEL) +function Truss(g::AbstractCrossSection, label::Label = NO_LABEL) Truss(Node(0, 0, 0), Node(0, 0, 0), g, DEFAULT_STRAIN_MODEL, label) end @@ -106,7 +110,7 @@ end cross_section(t::Truss) = t.cross_section "Return the strain model used" -strain_model(::Truss{dim,E}) where {dim,E<:AbstractStrainModel} = E +strain_model(::Truss{dim, E}) where {dim, E <: AbstractStrainModel} = E "Return a `Tetrahedron` given an empty `Tetrahedron` `t` and a `Vector` of `Node`s `vn`." function create_entity(t::Truss, vn::AbstractVector{<:AbstractNode}) @@ -118,8 +122,9 @@ local_dof_symbol(::Truss) = [:u] "Return the internal force of a `Truss` element `t` formed by an `AbstractHyperElasticMaterial` `m` an element displacement vector `u_e` and `RotatedEngineeringStrain`." -function internal_forces(m::AbstractHyperElasticMaterial, e::Truss{dim,RotatedEngineeringStrain}, - u_e::AbstractVector) where {dim} +function internal_forces( + m::AbstractHyperElasticMaterial, e::Truss{dim, RotatedEngineeringStrain}, + u_e::AbstractVector) where {dim} E = elasticity_modulus(m) A = area(cross_section(e)) X_ref, X_def = _X_rows(e, u_e) @@ -150,8 +155,8 @@ end "Return the internal force of a `Truss` element `t` formed by an `AbstractHyperElasticMaterial` `m` an element displacement vector `u_e` and `GreenStrain`." -function internal_forces(m::AbstractHyperElasticMaterial, e::Truss{dim,GreenStrain}, - u_e::AbstractVector) where {dim} +function internal_forces(m::AbstractHyperElasticMaterial, e::Truss{dim, GreenStrain}, + u_e::AbstractVector) where {dim} E = elasticity_modulus(m) A = area(cross_section(e)) X_ref, X_def = _X_rows(e, u_e) @@ -188,7 +193,7 @@ function _strain(l_ini::Real, l_def::Real, ::Type{GreenStrain}) end "Return the strain of given `Truss` element `t` with a element displacement vector `u_e`. " -function strain(t::Truss{dim,E}, u_e::AbstractVector) where {dim,E<:AbstractStrainModel} +function strain(t::Truss{dim, E}, u_e::AbstractVector) where {dim, E <: AbstractStrainModel} X_ref, X_def = _X_rows(t, u_e) l_ref, l_def = _lengths(X_ref, X_def, dim) _strain(l_ref, l_def, E) @@ -213,7 +218,7 @@ end "Return auxiliar vectors b_ref and b_def of a truss element." function _aux_b(X_ref_row::AbstractVector, X_def_row::AbstractVector, u_e::AbstractVector, - G::AbstractMatrix, dim::Integer) + G::AbstractMatrix, dim::Integer) l_ref, l_def = _lengths(X_ref_row, X_def_row, dim) b_ref = 1 / (l_ref^2) * X_ref_row' * G diff --git a/src/Interfaces/Gmsh.jl b/src/Interfaces/Gmsh.jl index 9db2c4783..04daf66b3 100644 --- a/src/Interfaces/Gmsh.jl +++ b/src/Interfaces/Gmsh.jl @@ -22,11 +22,11 @@ export MshFile, material_label, entity_label, bc_label, physical_index, gmsh_pri """ Collection of `Node`s. """ -struct MshFile{dim,T,S,I1<:Integer,I2<:Integer} +struct MshFile{dim, T, S, I1 <: Integer, I2 <: Integer} "Path to the `.geo` file." filename::String "Nodes of the mesh." - vec_nodes::Vector{Node{dim,T}} + vec_nodes::Vector{Node{dim, T}} "Connectivity of the mesh." connectivity::Vector{Vector{I1}} "Physical names." @@ -37,18 +37,18 @@ struct MshFile{dim,T,S,I1<:Integer,I2<:Integer} entities_labels::Vector{S} "Boundary condition type labels." bc_labels::Vector{S} - function MshFile(filename::String, vec_nodes::Vector{Node{dim,T}}, - connectivity::Vector{Vector{I1}}, physical_index::Vector{I2}, - material_labels::Vector{S}, entities_labels::Vector{S}, - bc_labels::Vector{S}) where {dim,T,S,I1<:Integer,I2<:Integer} - @assert length(physical_index) == length(connectivity) "The number of physical - indexes = $(length(physical_index)) must be equal to the number of elements = $(length(connectivity))." - @assert length(material_labels) == length(entities_labels) == length(bc_labels) "The - number of material labels = $(length(material_labels)), entities labels = $(length(entities_labels)) - and boundary conditions labels = $(length(bc_labels)) must be equal." - - return new{dim,T,S,I1,I2}(filename, vec_nodes, connectivity, physical_index, - material_labels, entities_labels, bc_labels) + function MshFile(filename::String, vec_nodes::Vector{Node{dim, T}}, + connectivity::Vector{Vector{I1}}, physical_index::Vector{I2}, + material_labels::Vector{S}, entities_labels::Vector{S}, + bc_labels::Vector{S}) where {dim, T, S, I1 <: Integer, I2 <: Integer} + @assert length(physical_index)==length(connectivity) "The number of physical + indexes = $(length(physical_index)) must be equal to the number of elements = $(length(connectivity))." + @assert length(material_labels)==length(entities_labels)==length(bc_labels) "The + number of material labels = $(length(material_labels)), entities labels = $(length(entities_labels)) + and boundary conditions labels = $(length(bc_labels)) must be equal." + + return new{dim, T, S, I1, I2}(filename, vec_nodes, connectivity, physical_index, + material_labels, entities_labels, bc_labels) end end @@ -60,9 +60,12 @@ function _getlabels(physical_names::Vector{String}) # Entities material, types and boundary conditions length_labels_elements = 3 - material_labels = getindex.(filter(l -> length(l) == length_labels_elements, physical_names), 1) - entity_labels = getindex.(filter(l -> length(l) == length_labels_elements, physical_names), 2) - bcs_labels = getindex.(filter(l -> length(l) == length_labels_elements, physical_names), 3) + material_labels = getindex.( + filter(l -> length(l) == length_labels_elements, physical_names), 1) + entity_labels = getindex.( + filter(l -> length(l) == length_labels_elements, physical_names), 2) + bcs_labels = getindex.( + filter(l -> length(l) == length_labels_elements, physical_names), 3) return material_labels, entity_labels, bcs_labels end @@ -76,7 +79,7 @@ function MshFile(filename::String) vec_nodes = [Node(n) for n in eachrow(nodes_coords)] MshFile(filename, vec_nodes, connectivity, - physical_index, material_labels, entities_labels, bcs_labels) + physical_index, material_labels, entities_labels, bcs_labels) end "Return the connectivity defined in the MSH file." diff --git a/src/Interfaces/VTK.jl b/src/Interfaces/VTK.jl index 9e343c941..5d1c4c1c8 100644 --- a/src/Interfaces/VTK.jl +++ b/src/Interfaces/VTK.jl @@ -22,7 +22,7 @@ export VTKMeshFile, create_vtk_grid, write_node_data, write_cell_data, write_vtk Represents a VTK file for mesh data export. This structure is compatible with the `WriteVTK` library. """ -struct VTKMeshFile{VTK<:WriteVTK.DatasetFile} +struct VTKMeshFile{VTK <: WriteVTK.DatasetFile} "`WriteVTK` `VTK` native file." vtk::VTK end @@ -47,7 +47,7 @@ function Base.show(io::IO, ::MIME"text/plain", (; vtk)::VTKMeshFile) ncells = vtk.Ncls nnodes = vtk.Npts print(io, - "• VTKMeshFile file \"$(filename)\" is $open_str with $nnodes nodes and $ncells cells.") + "• VTKMeshFile file \"$(filename)\" is $open_str with $nnodes nodes and $ncells cells.") end """ @@ -82,15 +82,15 @@ function to_vtk_cell_nodes(e::AbstractEntity, msh::AbstractMesh) end function _vtk_write_node_data(vtk::WriteVTK.DatasetFile, - nodal_data::Vector{<:Real}, - name::AbstractString; - kwargs...) + nodal_data::Vector{<:Real}, + name::AbstractString; + kwargs...) WriteVTK.vtk_point_data(vtk, nodal_data, name; kwargs...) end function _vtk_write_node_data(vtk::WriteVTK.DatasetFile, - nodal_data::Matrix{<:Real}, - name::AbstractString; - kwargs...) + nodal_data::Matrix{<:Real}, + name::AbstractString; + kwargs...) WriteVTK.vtk_point_data(vtk, nodal_data, name; kwargs...) end """ @@ -112,8 +112,8 @@ function write_cell_data(vtk::VTKMeshFile, celldata, name; kwargs...) end INDEX_MAP = Dict("xx" => (1, 1), "yy" => (2, 2), "zz" => (3, 3), - "xy" => (1, 2), "yz" => (2, 3), "zx" => (3, 1), - "yx" => (2, 1), "zy" => (3, 2), "xz" => (1, 3)) + "xy" => (1, 2), "yz" => (2, 3), "zx" => (3, 1), + "yx" => (2, 1), "zy" => (3, 2), "xz" => (1, 3)) to_vtk(x::Vector) = x # const VTX_VOIGT_ORDER = [1, 6, 5, 9, 2, 4, 8, 7, 3] @@ -121,8 +121,8 @@ to_vtk(x::Vector) = x to_vtk(x::AbstractMatrix) = x function write_cell_data(vtk::VTKMeshFile, celldata::Vector{<:Matrix{<:Real}}, name; - component_names, - kwargs...) + component_names, + kwargs...) for label in component_names found = false for (key, (i, j)) in INDEX_MAP @@ -132,7 +132,7 @@ function write_cell_data(vtk::VTKMeshFile, celldata::Vector{<:Matrix{<:Real}}, n @assert !any(isnan, component_data) @assert !any(isinf, component_data) write_cell_data(vtk, reshape(component_data, length(component_data), 1, 1), - "$label") + "$label") end end !found && throw(ArgumentError("Unexpected label $label didnt match INDEX_MAP")) @@ -151,15 +151,16 @@ end const POINT_FIELDS = [:u, :θ] const CELL_FIELDS = Dict(:σ => (3, 3), :ϵ => (3, 3)) const FIELD_NAMES = Dict(:u => "Displacement" => ["ux", "uy", "uz"], - :θ => "Rotation" => ["θx", "θy", "θz"], - :σ => "Stress" => ["σxx", "σyy", "σzz", "τyz", "τxz", "τxy", "τzy", "τzx", - "τyx"], - :ϵ => "Strain" => ["ϵxx", "ϵyy", "ϵzz", "γyz", "γxz", "γxy", "γzy", "γzx", - "γyx"]) + :θ => "Rotation" => ["θx", "θy", "θz"], + :σ => "Stress" => ["σxx", "σyy", "σzz", "τyz", "τxz", "τxy", "τzy", "τzx", + "τyx"], + :ϵ => "Strain" => ["ϵxx", "ϵyy", "ϵzz", "γyz", "γxz", "γxy", "γzy", "γzx", + "γyx"]) -function _extract_node_data(sol::AbstractSolution, fields::Vector{Field}, msh, time_index::Integer) +function _extract_node_data( + sol::AbstractSolution, fields::Vector{Field}, msh, time_index::Integer) nodal_data = Dict(field => zeros(num_dofs(msh, field)) - for field in fields if field ∈ POINT_FIELDS) + for field in fields if field ∈ POINT_FIELDS) for node in nodes(msh) for field in fields if field ∈ POINT_FIELDS @@ -172,9 +173,9 @@ function _extract_node_data(sol::AbstractSolution, fields::Vector{Field}, msh, t nodal_data end function _extract_cell_data(sol::AbstractSolution, fields::Vector{Field}, - msh::AbstractMesh, time_index::Integer) + msh::AbstractMesh, time_index::Integer) cell_data = Dict(field => [zeros(CELL_FIELDS[field]...) for _ in 1:num_elements(msh)] - for field in fields if field ∈ keys(CELL_FIELDS)) + for field in fields if field ∈ keys(CELL_FIELDS)) for (i, elem) in enumerate(elements(msh)) for field in fields if haskey(CELL_FIELDS, field) @@ -204,9 +205,9 @@ The exported data typically includes: **DISCLAIMER:** The user is responsible for inspecting which strain and stress tensors are exported for each element formulation. It is essential to verify compatibility with the desired output before proceeding. """ function write_vtk(sol::AbstractSolution, filename::String, - time_index::Integer; - fields::Vector{Field}=default_dof_fields(sol), - kwargs...) + time_index::Integer; + fields::Vector{Field} = default_dof_fields(sol), + kwargs...) msh = mesh(structure(analysis(sol))) # Extract node and cell data using helper functions @@ -225,8 +226,9 @@ function write_vtk(sol::AbstractSolution, filename::String, end end -function WriteVTK.collection_add_timestep(pvd::WriteVTK.CollectionFile, datfile::VTKMeshFile, - time::Real) +function WriteVTK.collection_add_timestep( + pvd::WriteVTK.CollectionFile, datfile::VTKMeshFile, + time::Real) WriteVTK.collection_add_timestep(pvd, datfile.vtk, time) end function Base.setindex!(pvd::WriteVTK.CollectionFile, datfile::VTKMeshFile, time::Real) @@ -239,8 +241,8 @@ Each time step's VTK file is added to the collection for seamless visualization Returns the path to the generated ParaView collection file. """ function write_vtk(sol::AbstractSolution, base_filename::String; - fields::Vector{Field}=default_dof_fields(sol), - append=false) + fields::Vector{Field} = default_dof_fields(sol), + append = false) times_vector = times(analysis(sol)) # Extract the times from the solution analysis pvd = paraview_collection(base_filename) diff --git a/src/Materials/HyperElasticMaterial.jl b/src/Materials/HyperElasticMaterial.jl index 635bff6bb..3b4cd1e07 100644 --- a/src/Materials/HyperElasticMaterial.jl +++ b/src/Materials/HyperElasticMaterial.jl @@ -15,7 +15,7 @@ Material with hyperelastic properties. For context see the wikipedia article on [Hyperelastic_material](https://en.wikipedia.org/wiki/Hyperelastic_material). """ -struct HyperElastic{T<:Real,F<:Function} <: AbstractHyperElasticMaterial +struct HyperElastic{T <: Real, F <: Function} <: AbstractHyperElasticMaterial "Strain energy material parameters." params::Vector{T} "Strain energy function given `params` and the Green-Lagrange strain tensor `𝔼`." @@ -25,13 +25,14 @@ struct HyperElastic{T<:Real,F<:Function} <: AbstractHyperElasticMaterial "Material label." label::Label function HyperElastic(params::Vector{T}, Ψ::F, ρ::Density, - label::Label=NO_LABEL) where {T<:Real,F<:Function} - new{T,F}(params, Ψ, ρ, Symbol(label)) + label::Label = NO_LABEL) where {T <: Real, F <: Function} + new{T, F}(params, Ψ, ρ, Symbol(label)) end end "Constructor for `HyperElastic` material with no density." -function HyperElastic(params::Vector{T}, Ψ::F, label::Label=NO_LABEL) where {T<:Real,F<:Function} +function HyperElastic( + params::Vector{T}, Ψ::F, label::Label = NO_LABEL) where {T <: Real, F <: Function} HyperElastic(params, Ψ, nothing, label) end @@ -45,9 +46,9 @@ parameters(m::HyperElastic) = m.params considering a `SVK` material `m` and the Lagrangian Green strain tensor `𝔼`.Also this function provides `∂𝕊∂𝔼` for the iterative method." function cosserat_stress!(S::AbstractMatrix{<:Real}, ∂S∂E::AbstractMatrix{<:Real}, - m::HyperElastic, E::AbstractMatrix) + m::HyperElastic, E::AbstractMatrix) # Transform 𝔼 to a Tenor - 𝔼 = SymmetricTensor{2,3}(E) + 𝔼 = SymmetricTensor{2, 3}(E) # Closure strain energy function Ψ = E -> strain_energy(m)(E, parameters(m)...) diff --git a/src/Materials/IsotropicLinearElasticMaterial.jl b/src/Materials/IsotropicLinearElasticMaterial.jl index 397c7c723..3dddb0e63 100644 --- a/src/Materials/IsotropicLinearElasticMaterial.jl +++ b/src/Materials/IsotropicLinearElasticMaterial.jl @@ -19,7 +19,7 @@ For context see the wikipedia article on [Linear elasticity](https://en.wikipedi It is also possible to construct an `IsotropicLinearElastic` material given its Lamé parameters `λ`, `G` and density `ρ`. For context see the wikipedia article on [Lamé parameters](https://en.wikipedia.org/wiki/Lam%C3%A9_parameters). """ -struct IsotropicLinearElastic{ET<:Real,NT<:Real} <: AbstractLinearElasticMaterial +struct IsotropicLinearElastic{ET <: Real, NT <: Real} <: AbstractLinearElasticMaterial "Elasticity modulus." E::ET "Poisson's ratio." @@ -29,18 +29,20 @@ struct IsotropicLinearElastic{ET<:Real,NT<:Real} <: AbstractLinearElasticMateria "Material label." label::Label function IsotropicLinearElastic(E::ET, ν::NT, ρ::Density, - label::Label=NO_LABEL) where {ET<:Real,NT<:Real} - new{ET,NT}(E, ν, ρ, Symbol(label)) + label::Label = NO_LABEL) where {ET <: Real, NT <: Real} + new{ET, NT}(E, ν, ρ, Symbol(label)) end end "Constructor for `IsotropicLinearElastic` material with no density." -function IsotropicLinearElastic(E::ET, ν::NT, label::Label=NO_LABEL) where {ET<:Real,NT<:Real} +function IsotropicLinearElastic( + E::ET, ν::NT, label::Label = NO_LABEL) where {ET <: Real, NT <: Real} IsotropicLinearElastic(E, ν, nothing, label) end "Constructor for `IsotropicLinearElastic` from first Lamé `λ` and shear modulus `G`." -function IsotropicLinearElastic(; λ::Real, G::Real, ρ::Density=nothing, label::Label=NO_LABEL) +function IsotropicLinearElastic(; + λ::Real, G::Real, ρ::Density = nothing, label::Label = NO_LABEL) E = G * (3λ + 2G) / (λ + G) ν = λ / (2 * (λ + G)) IsotropicLinearElastic(E, ν, ρ, Symbol(label)) @@ -53,10 +55,12 @@ elasticity_modulus(m::IsotropicLinearElastic) = m.E poisson_ratio(m::IsotropicLinearElastic) = m.ν "Return the shear modulus `G` from a `IsotropicLinearElastic` material `m`." -shear_modulus(m::IsotropicLinearElastic) = elasticity_modulus(m) / (2 * (1 + poisson_ratio(m))) +shear_modulus(m::IsotropicLinearElastic) = elasticity_modulus(m) / + (2 * (1 + poisson_ratio(m))) "Return the bulk modulus `K` from a `IsotropicLinearElastic` material `m`." -bulk_modulus(m::IsotropicLinearElastic) = elasticity_modulus(m) / (3 * (1 - 2 * poisson_ratio(m))) +bulk_modulus(m::IsotropicLinearElastic) = elasticity_modulus(m) / + (3 * (1 - 2 * poisson_ratio(m))) "Return Lamé parameters `λ` and `G` from a `IsotropicLinearElastic` material `m`." function lame_parameters(m::IsotropicLinearElastic) @@ -70,9 +74,9 @@ end "Return the cauchy stress tensor `σ` and the constitutive driver `∂σ∂ϵ` considering a `IsotropicLinearElastic` material `m`." function stress!(σ::AbstractMatrix{<:Real}, ∂σ∂ϵ::Matrix{<:Real}, - m::IsotropicLinearElastic{<:Real}, ϵ::AbstractMatrix{<:Real}; - cache_eye::AbstractMatrix{<:Real}=eye(3), - cache_ones::Matrix{<:Real}=ones(3, 3)) + m::IsotropicLinearElastic{<:Real}, ϵ::AbstractMatrix{<:Real}; + cache_eye::AbstractMatrix{<:Real} = eye(3), + cache_ones::Matrix{<:Real} = ones(3, 3)) λ, G = lame_parameters(m) σ .= Symmetric(λ * tr(ϵ) * cache_eye + 2 * G * ϵ) diff --git a/src/Materials/LinearElasticMaterials.jl b/src/Materials/LinearElasticMaterials.jl index f90dd5e61..74b44a0ea 100644 --- a/src/Materials/LinearElasticMaterials.jl +++ b/src/Materials/LinearElasticMaterials.jl @@ -43,7 +43,7 @@ function bulk_modulus(m::AbstractLinearElasticMaterial) end "Return the stress tensor `σ` and the constitutive driver `∂σ∂ϵ` considering a `IsotropicLinearElastic` material `m`." function stress!(σ::AbstractMatrix, ∂σ∂ϵ::AbstractMatrix, - m::AbstractLinearElasticMaterial, - ϵ::AbstractMatrix) end + m::AbstractLinearElasticMaterial, + ϵ::AbstractMatrix) end end diff --git a/src/Materials/Materials.jl b/src/Materials/Materials.jl index 7d3181d66..dcb726031 100644 --- a/src/Materials/Materials.jl +++ b/src/Materials/Materials.jl @@ -28,7 +28,7 @@ Different material models leads to different constitutive laws, internal forces abstract type AbstractMaterial end "Return the parameters of type `Number` in the `AbstractMaterial` `m`." -function parameters(m::T) where {T<:AbstractMaterial} +function parameters(m::T) where {T <: AbstractMaterial} Tuple([getfield(f, n) for n in fieldlabels(T) if fieldtype(T, n) isa Number]) end diff --git a/src/Materials/NeoHookeanMaterial.jl b/src/Materials/NeoHookeanMaterial.jl index 6e9ffca65..a5febd511 100644 --- a/src/Materials/NeoHookeanMaterial.jl +++ b/src/Materials/NeoHookeanMaterial.jl @@ -6,7 +6,8 @@ using ForwardDiff, LinearAlgebra, Reexport using ..HyperElasticMaterials using ..Utils -@reexport import ..LinearElasticMaterials: lame_parameters, elasticity_modulus, shear_modulus, +@reexport import ..LinearElasticMaterials: lame_parameters, elasticity_modulus, + shear_modulus, bulk_modulus, poisson_ratio @reexport import ..HyperElasticMaterials: cosserat_stress!, strain_energy @@ -21,7 +22,7 @@ For context see the wikipedia article on [Neo-Hookean_solid](https://en.wikipedi It is also possible to construct a `NeoHookean` material given its elasticity and shear modulus `E`, `ν` respectively and its density `ρ`. For context see the wikipedia article on [Lamé parameters](https://en.wikipedia.org/wiki/Lam%C3%A9_parameters). """ -struct NeoHookean{T<:Real} <: AbstractHyperElasticMaterial +struct NeoHookean{T <: Real} <: AbstractHyperElasticMaterial "Bulk modulus." K::T "Shear modulus `G` or second Lamé parameter `μ`." @@ -30,23 +31,23 @@ struct NeoHookean{T<:Real} <: AbstractHyperElasticMaterial ρ::Density "Material label." label::Label - function NeoHookean(K::T, G::T, ρ::Density, label::Label=NO_LABEL) where {T<:Real} + function NeoHookean(K::T, G::T, ρ::Density, label::Label = NO_LABEL) where {T <: Real} if ρ isa Real ρ > 0 || error("Density must be positive.") end - @assert K ≥ 0 "The bulk modulus `K` must be positive." - @assert G ≥ 0 "The shear modulus or second Lamé parameter `μ` must be positive." + @assert K≥0 "The bulk modulus `K` must be positive." + @assert G≥0 "The shear modulus or second Lamé parameter `μ` must be positive." new{T}(K, G, ρ, Symbol(label)) end end "Constructor for `NeoHookean` material with no density." -function NeoHookean(K::T, G::T, label::Label=NO_LABEL) where {T<:Real} +function NeoHookean(K::T, G::T, label::Label = NO_LABEL) where {T <: Real} NeoHookean(K, G, nothing, label) end "Constructor for `NeoHookean` material given its elasticity and shear modulus `E`, `ν` respectively and its density `ρ`." -function NeoHookean(; E::Real, ν::Real, ρ::Density=nothing, label::Label=NO_LABEL) +function NeoHookean(; E::Real, ν::Real, ρ::Density = nothing, label::Label = NO_LABEL) # Compute λ, μ and K (μ = G) given E and ν. λ = E * ν / ((1 + ν) * (1 - 2 * ν)) G = E / (2 * (1 + ν)) @@ -90,7 +91,8 @@ end bulk_modulus(m::NeoHookean) = m.K "Return the Cosserat stress tensor `𝕊` given the Green-Lagrange `𝔼` strain tensor." -function _S_analytic(m::NeoHookean, E::AbstractMatrix; eye_cache::AbstractMatrix{<:Real}=eye(3)) +function _S_analytic( + m::NeoHookean, E::AbstractMatrix; eye_cache::AbstractMatrix{<:Real} = eye(3)) # Right hand Cauchy strain tensor C = Symmetric(2 * E + eye_cache) C⁻¹ = inv(C) @@ -101,7 +103,7 @@ end "Return the Cosserat stress tensor `𝕊` given the Green-Lagrange `𝔼` strain tensor." function _S_analytic!(S::AbstractMatrix, m::NeoHookean, E::AbstractMatrix; - eye_cache::AbstractMatrix{<:Real}=eye(3)) + eye_cache::AbstractMatrix{<:Real} = eye(3)) S .= Symmetric(_S_analytic(m, E; eye_cache)) end @@ -110,13 +112,16 @@ const aux_gradients = zeros(3, 3) "Return the `∂𝕊∂𝔼` for a material `m`, the Gree-Lagrange strain tensor `𝔼` and a function to compute 𝕊 analytically." -function _∂S∂E!(∂S∂E::Matrix, m::NeoHookean, 𝔼::AbstractMatrix, S_analytic::Function=_S_analytic) +function _∂S∂E!( + ∂S∂E::Matrix, m::NeoHookean, 𝔼::AbstractMatrix, S_analytic::Function = _S_analytic) row = 1 for index in INDEXES_TO_VOIGT i, j = index - ∂S∂E[row, :] .= voigt(ForwardDiff.gradient!(aux_gradients, - E -> S_analytic(m, E)[i, j], - collect(𝔼)), 0.5) + ∂S∂E[row, :] .= voigt( + ForwardDiff.gradient!(aux_gradients, + E -> S_analytic(m, E)[i, j], + collect(𝔼)), + 0.5) row += 1 end ∂S∂E @@ -126,7 +131,7 @@ end considering a `SVK` material `m` and the Green-Lagrange strain tensor `𝔼`.Also this function provides `∂𝕊∂𝔼` for the iterative method." function cosserat_stress!(S::AbstractMatrix{<:Real}, ∂S∂E::Matrix{<:Real}, - m::NeoHookean, E::AbstractMatrix; eye_cache=eye(3)) # Is used in a different method + m::NeoHookean, E::AbstractMatrix; eye_cache = eye(3)) # Is used in a different method _S_analytic!(S, m, E; eye_cache) _∂S∂E!(∂S∂E, m, E, _S_analytic) end diff --git a/src/Materials/SVKMaterial.jl b/src/Materials/SVKMaterial.jl index c57fbef5d..bc031e2d9 100644 --- a/src/Materials/SVKMaterial.jl +++ b/src/Materials/SVKMaterial.jl @@ -6,7 +6,8 @@ using LinearAlgebra, SparseArrays, Reexport using ..HyperElasticMaterials using ..Utils -@reexport import ..LinearElasticMaterials: lame_parameters, elasticity_modulus, shear_modulus, +@reexport import ..LinearElasticMaterials: lame_parameters, elasticity_modulus, + shear_modulus, bulk_modulus, poisson_ratio @reexport import ..HyperElasticMaterials: cosserat_stress!, strain_energy @@ -21,7 +22,7 @@ For context see the [Hyperelastic material](https://en.wikipedia.org/wiki/Hypere It is also possible to construct an `SVK` material given its elasticity and shear modulus `E`, `ν` respectively and its density `ρ`. For context see the [Lamé parameters](https://en.wikipedia.org/wiki/Lam%C3%A9_parameters) wikipedia article. """ -struct SVK{T<:Real} <: AbstractHyperElasticMaterial +struct SVK{T <: Real} <: AbstractHyperElasticMaterial "First Lamé parameter." λ::T "Shear modulus or second Lamé parameter (μ)." @@ -30,23 +31,23 @@ struct SVK{T<:Real} <: AbstractHyperElasticMaterial ρ::Density "Material label." label::Label - function SVK(λ::T, G::T, ρ::Density, label::Label=NO_LABEL) where {T<:Real} + function SVK(λ::T, G::T, ρ::Density, label::Label = NO_LABEL) where {T <: Real} if ρ isa Real ρ > 0 || error("Density must be positive.") end - @assert λ ≥ 0 "The first Lamé parameter `λ` must be positive." - @assert G ≥ 0 "The second Lamé parameter or shear modulus `G` must be positive." + @assert λ≥0 "The first Lamé parameter `λ` must be positive." + @assert G≥0 "The second Lamé parameter or shear modulus `G` must be positive." new{T}(λ, G, ρ, Symbol(label)) end end "Constructor for `SVK` material with no density." -function SVK(λ::T, G::T, label::Label=NO_LABEL) where {T<:Real} +function SVK(λ::T, G::T, label::Label = NO_LABEL) where {T <: Real} SVK(λ, G, nothing, label) end "Constructor from elasticity and shear modulus `E`, `ν` respectively and density `ρ`." -function SVK(; E::Real, ν::Real, ρ::Density=nothing, label::Label=NO_LABEL) +function SVK(; E::Real, ν::Real, ρ::Density = nothing, label::Label = NO_LABEL) λ = E * ν / ((1 + ν) * (1 - 2 * ν)) G = E / (2 * (1 + ν)) SVK(λ, G, ρ, label) @@ -86,9 +87,9 @@ end considering a `SVK` material `m` and the Lagrangian Green strain tensor `𝔼`.Also this function provides `∂S∂E` for the iterative method." function cosserat_stress!(S::AbstractMatrix{<:Real}, ∂S∂E::Matrix{<:Real}, - m::SVK, E::AbstractMatrix; - eye_cache::AbstractMatrix{<:Real}=eye(3), - ones_cache::AbstractMatrix{<:Real}=ones(3, 3)) + m::SVK, E::AbstractMatrix; + eye_cache::AbstractMatrix{<:Real} = eye(3), + ones_cache::AbstractMatrix{<:Real} = ones(3, 3)) λ, G = lame_parameters(m) S .= λ * tr(E) * eye_cache + 2 * G * E diff --git a/src/Meshes/Handlers.jl b/src/Meshes/Handlers.jl index 7bc5a1d18..3db1266e5 100644 --- a/src/Meshes/Handlers.jl +++ b/src/Meshes/Handlers.jl @@ -21,10 +21,10 @@ export PointEvalHandler, not_in_mesh_points, interpolator, mesh A `PointEvalHandler` facilitates the process of evaluating a solution at a given vector of points obtained at the `Node`s `Dof`s in a `Mesh`. """ -struct PointEvalHandler{dim,T,PT<:Point{dim,T},VPT<:AbstractVector{PT}, - WT<:AbstractVector{T}, - M<:AbstractMesh, - I<:AbstractInterpolator} +struct PointEvalHandler{dim, T, PT <: Point{dim, T}, VPT <: AbstractVector{PT}, + WT <: AbstractVector{T}, + M <: AbstractMesh, + I <: AbstractInterpolator} "`Mesh` where the solution is obtained." mesh::M "Vector of test points." @@ -44,7 +44,7 @@ struct PointEvalHandler{dim,T,PT<:Point{dim,T},VPT<:AbstractVector{PT}, "`Interpolator` object used to evaluate the solution." interpolator::I end -function PointEvalHandler(mesh::AbstractMesh, point::P) where {T,P<:Point{T}} +function PointEvalHandler(mesh::AbstractMesh, point::P) where {T, P <: Point{T}} PointEvalHandler(mesh, [point]) end function PointEvalHandler(mesh::AbstractMesh, vec_points::Vector{Vector{T}}) where {T} @@ -65,19 +65,20 @@ interpolator(peh::PointEvalHandler) = peh.interpolator "Constructor of a `PointEvalHandler` given a mesh and an array of points." function PointEvalHandler(mesh::AbstractMesh, vec_points::Vector{PT}; - alg::AbstractSearchAlgorithm=Serial()) where {dim,T,PT<:Point{dim,T}} - @assert dim ≤ 3 "Points must be 1D, 2D or 3D" + alg::AbstractSearchAlgorithm = Serial()) where {dim, T, PT <: Point{dim, T}} + @assert dim≤3 "Points must be 1D, 2D or 3D" # For each point, obtain the element(s) that it belongs to. # If a point belongs to more than one element, keep only the first matching element. # This is valid since the interpolation result will be the same for both elements. # This case occurs when the point is located on the boundary of two elements, face or node. - in_mesh_points_idx, in_mesh_elements_idx = evaluate_points_in_mesh(mesh, vec_points, alg) + in_mesh_points_idx, in_mesh_elements_idx = evaluate_points_in_mesh( + mesh, vec_points, alg) # For each element found, compute the associated weight used for interpolation. # Assume that the mesh has a unique element type. nnodes = num_nodes(element(mesh, 1)) - weights = Vector{SVector{nnodes,T}}() + weights = Vector{SVector{nnodes, T}}() @inbounds for (elem_idx, point_idx) in zip(in_mesh_elements_idx, in_mesh_points_idx) w = Entities.weights(element(mesh, elem_idx), vec_points[point_idx]) push!(weights, w) @@ -85,9 +86,9 @@ function PointEvalHandler(mesh::AbstractMesh, vec_points::Vector{PT}; PointEvalHandler(mesh, vec_points, in_mesh_points_idx, in_mesh_elements_idx, weights) end function PointEvalHandler(mesh::AbstractMesh, vec_points::Vector{PT}, - in_mesh_points_idx::Vector{Int64}, - in_mesh_elements_idx::Vector{Int64}, - weights::Vector{WT}) where {dim,T,PT<:Point{dim,T},WT<:AbstractVector{T}} + in_mesh_points_idx::Vector{Int64}, + in_mesh_elements_idx::Vector{Int64}, + weights::Vector{WT}) where {dim, T, PT <: Point{dim, T}, WT <: AbstractVector{T}} # Subset of `vec_points` that belong to the mesh. in_mesh_points = view(vec_points, in_mesh_points_idx) @@ -101,17 +102,18 @@ function PointEvalHandler(mesh::AbstractMesh, vec_points::Vector{PT}, # Dictionary with nodes as keys and corresponding weights as values. num_in_mesh_points = length(in_mesh_elements_idx) - node_to_weights = Vector{Dictionary{Node,T}}(undef, num_in_mesh_points) + node_to_weights = Vector{Dictionary{Node, T}}(undef, num_in_mesh_points) @inbounds for (i, elem_idx) in enumerate(in_mesh_elements_idx) elem = element(mesh, elem_idx) dict = dictionary([n => weights[i][j] for (j, n) in enumerate(nodes(elem))]) node_to_weights[i] = dict end interpolator = FEMInterpolator(view(vec_points, in_mesh_points_idx), node_to_weights, - points_to_element) + points_to_element) - PointEvalHandler(mesh, vec_points, in_mesh_points_idx, not_in_mesh_points_idx, in_mesh_points, - not_in_mesh_points, in_mesh_elements_idx, weights, interpolator) + PointEvalHandler( + mesh, vec_points, in_mesh_points_idx, not_in_mesh_points_idx, in_mesh_points, + not_in_mesh_points, in_mesh_elements_idx, weights, interpolator) end end # module diff --git a/src/Meshes/Interpolators.jl b/src/Meshes/Interpolators.jl index 9b610346e..d25a54f0d 100644 --- a/src/Meshes/Interpolators.jl +++ b/src/Meshes/Interpolators.jl @@ -26,30 +26,32 @@ by the element's shape functions. The index of each `Vector` is the index in the `Vector` of `Point`s where the magnitude is evaluated. """ struct FEMInterpolator{dim, - P<:Point{dim}, - VP<:AbstractVector{P}, - N<:AbstractNode, - TW<:Real, - E<:AbstractElement, - VE<:AbstractVector{E}} <: AbstractInterpolator + P <: Point{dim}, + VP <: AbstractVector{P}, + N <: AbstractNode, + TW <: Real, + E <: AbstractElement, + VE <: AbstractVector{E}} <: AbstractInterpolator "Vector of points where the solution is interpolated." points_interpolated::VP "Node`s as keys and the corresponding weights as values." - node_to_weights::Vector{Dictionary{N,TW}} + node_to_weights::Vector{Dictionary{N, TW}} "Elements where each point is located." points_to_element::VE # Check the lengths function FEMInterpolator(points_interpolated::VP, - node_to_weights::Vector{Dictionary{N,TW}}, - points_to_element::VE) where {dim, - P<:Point{dim}, - VP<:AbstractVector{P}, - N<:AbstractNode, - TW<:Real, - E<:AbstractElement, - VE<:AbstractVector{E}} - @assert length(points_interpolated) == length(node_to_weights) == length(points_to_element) "All FEMInterpolator inputs must have the same length" - new{dim,P,VP,N,TW,E,VE}(points_interpolated, node_to_weights, points_to_element) + node_to_weights::Vector{Dictionary{N, TW}}, + points_to_element::VE) where {dim, + P <: Point{dim}, + VP <: AbstractVector{P}, + N <: AbstractNode, + TW <: Real, + E <: AbstractElement, + VE <: AbstractVector{E}} + @assert length(points_interpolated)==length(node_to_weights)== + length(points_to_element) "All FEMInterpolator inputs must have the same length" + new{dim, P, VP, N, TW, E, VE}( + points_interpolated, node_to_weights, points_to_element) end end @@ -65,8 +67,8 @@ node_to_weights(fem_interpolator::FEMInterpolator) = fem_interpolator.node_to_we points_to_element(fem_interpolator::FEMInterpolator) = fem_interpolator.points_to_element "Return the interpolated nodal scalar magnitude in the points defined into the interpolator." -function interpolate(nodal_magnitude::Dictionary{<:AbstractNode{dim},<:Real}, - fem_interpolator::FEMInterpolator{dim}) where {dim} +function interpolate(nodal_magnitude::Dictionary{<:AbstractNode{dim}, <:Real}, + fem_interpolator::FEMInterpolator{dim}) where {dim} # Weights for each node node_to_w = node_to_weights(fem_interpolator) num_points_to_interpolate = length(points(fem_interpolator)) @@ -82,8 +84,9 @@ function interpolate(nodal_magnitude::Dictionary{<:AbstractNode{dim},<:Real}, end "Return the interpolated nodal vectorial magnitude in the points defined into the interpolator." -function interpolate(nodal_magnitude::Dictionary{<:AbstractNode{dim},<:AbstractVector{<:Real}}, - fem_interpolator::FEMInterpolator{dim}) where {dim} +function interpolate( + nodal_magnitude::Dictionary{<:AbstractNode{dim}, <:AbstractVector{<:Real}}, + fem_interpolator::FEMInterpolator{dim}) where {dim} # Weights for each node node_to_w = node_to_weights(fem_interpolator) num_points_to_interpolate = length(points(fem_interpolator)) @@ -107,8 +110,8 @@ end evaluated at each node in the points defined. The accessor function will be evaluated in the nodes defined in the node_to_weights dictionary." function interpolate(solution::SOL, - accessor::Function, - fem_interpolator::FEMInterpolator{dim}) where {dim,SOL} + accessor::Function, + fem_interpolator::FEMInterpolator{dim}) where {dim, SOL} # Weights for each node node_to_w = node_to_weights(fem_interpolator) num_points_to_interpolate = length(points(fem_interpolator)) diff --git a/src/Meshes/Meshes.jl b/src/Meshes/Meshes.jl index 12d879a0e..289b037c9 100644 --- a/src/Meshes/Meshes.jl +++ b/src/Meshes/Meshes.jl @@ -21,7 +21,8 @@ using ..Utils @reexport import ..Entities: dimension, dofs, nodes, num_nodes @reexport import ..Nodes: set_dofs! -export AbstractMesh, Mesh, EntitySet, connectivity, faces, face_set, node, element, elements, +export AbstractMesh, Mesh, EntitySet, connectivity, faces, face_set, node, element, + elements, element_set, num_dofs, num_elements, node_set, add_node_to_set!, add_element_to_set!, add_face_to_set!, add_entity_to_set!, node_matrix @@ -63,7 +64,7 @@ function num_dofs(m::AbstractMesh)::Int max_dof = 0 for n in nodes(m) # For each node, obtain the maximum dof over each field, then reduce over all fields. - max_n = mapreduce(maximum, max, dofs(n); init=0) + max_n = mapreduce(maximum, max, dofs(n); init = 0) max_dof = max(max_dof, max_n) end max_dof @@ -139,7 +140,7 @@ Base.length(m::AbstractMesh, ::AbstractElement) = length(elements(m)) Base.length(m::AbstractMesh, ::AbstractFace) = length(faces(m)) "Used to designate node, element and face sets mapping an entity string to a set of indices." -const EntitySet = Dictionary{String,Set{Int}} +const EntitySet = Dictionary{String, Set{Int}} """ A `Mesh` is a collection of `Element`s, `Face`s and `Node`s that cover the discretized domain, @@ -154,7 +155,8 @@ together with Sets of elements and nodes. * [`face_set`](@ref) * [`add_face_to_set!`](@ref) """ -struct Mesh{dim,N<:AbstractNode{dim},E<:AbstractElement,F<:AbstractFace,EX} <: AbstractMesh{dim} +struct Mesh{dim, N <: AbstractNode{dim}, E <: AbstractElement, F <: AbstractFace, EX} <: + AbstractMesh{dim} "`Node`s of the mesh with dimension `dim`." nodes::Vector{N} "`Element`s of the mesh." @@ -170,19 +172,19 @@ struct Mesh{dim,N<:AbstractNode{dim},E<:AbstractElement,F<:AbstractFace,EX} <: A "Additional data or mesh info." extra::EX end -function Mesh(; nodes::Vector{N}=Vector{AbstractNode}(), - elements::Vector{E}=Vector{AbstractElement}(), - faces::Vector{F}=Vector{AbstractFace}(), - node_sets::EntitySet=EntitySet(), - face_sets::EntitySet=EntitySet(), - element_sets::EntitySet=EntitySet(), - extra::EX=nothing) where - {N<:AbstractNode,F<:AbstractFace,E<:AbstractElement,EX} +function Mesh(; nodes::Vector{N} = Vector{AbstractNode}(), + elements::Vector{E} = Vector{AbstractElement}(), + faces::Vector{F} = Vector{AbstractFace}(), + node_sets::EntitySet = EntitySet(), + face_sets::EntitySet = EntitySet(), + element_sets::EntitySet = EntitySet(), + extra::EX = nothing) where + {N <: AbstractNode, F <: AbstractFace, E <: AbstractElement, EX} Mesh(nodes, elements, faces, node_sets, element_sets, face_sets, extra) end "Return the mesh node coordinates matrix. Each row is a node, each column a coordinate." -function node_matrix(mesh::Mesh{dim,T}) where {dim,T} +function node_matrix(mesh::Mesh{dim, T}) where {dim, T} nodes_coords_matrix = Matrix{eltype(T)}(undef, (dim, num_nodes(mesh))) for (i, n) in enumerate(nodes(mesh)) nodes_coords_matrix[:, i] = coordinates(n) @@ -191,14 +193,14 @@ function node_matrix(mesh::Mesh{dim,T}) where {dim,T} end "Return the mesh connectivity." -function connectivity(mesh::Mesh{dim,T}) where {dim,T} +function connectivity(mesh::Mesh{dim, T}) where {dim, T} # Check if a already contains the connectivity hasproperty(mesh.extra, :connectivity) && return mesh.extra.connectivity connectivity = Vector{Vector{Int}}(undef, num_elements(mesh)) - enumerate_nodes = Dictionary{AbstractNode,Int}() + enumerate_nodes = Dictionary{AbstractNode, Int}() for (i, n) in enumerate(nodes(mesh)) get!(enumerate_nodes, n, i) end @@ -312,25 +314,25 @@ end "Add an entity to a set, dispatching on the entity type." function add_entity_to_set!(mesh::AbstractMesh, entity_type_label::AbstractString, - entity_position::Int, - ::AbstractNode) + entity_position::Int, + ::AbstractNode) add_node_to_set!(mesh, entity_type_label, entity_position) end function add_entity_to_set!(mesh::AbstractMesh, entity_type_label::AbstractString, - entity_position::Int, - ::AbstractFace) + entity_position::Int, + ::AbstractFace) add_face_to_set!(mesh, entity_type_label, entity_position) end function add_entity_to_set!(mesh::AbstractMesh, entity_type_label::AbstractString, - entity_position::Int, - ::AbstractElement) + entity_position::Int, + ::AbstractElement) add_element_to_set!(mesh, entity_type_label, entity_position) end "Replace a node in the mesh." function Base.replace!(mesh::AbstractMesh{dim}, - node_idx::Int, - node_coordinates::Point{dim}) where {dim} + node_idx::Int, + node_coordinates::Point{dim}) where {dim} mesh_nodes = nodes(mesh) old_node = mesh_nodes[node_idx] new_node = Node(node_coordinates, dofs(old_node)) diff --git a/src/Meshes/Searches.jl b/src/Meshes/Searches.jl index 82da9d1e4..40d316852 100644 --- a/src/Meshes/Searches.jl +++ b/src/Meshes/Searches.jl @@ -52,8 +52,8 @@ end "Return indexes checking if points are inside the mesh." function evaluate_points_in_mesh(mesh::AbstractMesh{dim}, vec_points::Vector{P}, - alg::A=Serial()) where {dim,P<:Point{dim}, - A<:Union{Serial,Threaded}} + alg::A = Serial()) where {dim, P <: Point{dim}, + A <: Union{Serial, Threaded}} evaluate_points_in_elements(elements(mesh), vec_points, alg) end @@ -62,7 +62,7 @@ elements with a serial searching algorithm. Two integer vectors are returned, the first one contains the indexes of the points inside the mesh, the second one contains the indexes of the elements containing the points." function evaluate_points_in_elements(elements::Vector{E}, vec_points::Vector{P}, - ::Serial) where {dim,T,E<:AbstractElement,P<:Point{dim,T}} + ::Serial) where {dim, T, E <: AbstractElement, P <: Point{dim, T}} in_mesh_points_idx = Vector{Int64}() in_mesh_elements_idx = Vector{Int64}() @inbounds for (point_idx, point) in enumerate(vec_points) @@ -83,8 +83,8 @@ elements with a serial searching algorithm. Two vector of integers are returned, the first one contains the indexes of the points inside the mesh, the second one contains the indexes of the elements containing the points." function evaluate_points_in_elements(elements::Vector{E}, vec_points::Vector{P}, - ::Threaded) where {dim,E<:AbstractElement{dim}, - P<:Point{dim}} + ::Threaded) where {dim, E <: AbstractElement{dim}, + P <: Point{dim}} numthreads = Threads.nthreads() in_mesh_points_idx = [Vector{Int64}() for _ in 1:numthreads] in_mesh_elements_idx = [Vector{Int64}() for _ in 1:numthreads] @@ -119,7 +119,7 @@ end # end "Return a box approximation of a node's vector transforming them to LazySets singletons." -function bounding_box(nodes::Vector{N}) where {N<:AbstractNode} +function bounding_box(nodes::Vector{N}) where {N <: AbstractNode} # Allocates, but sufficiently fast for now. box_approximation(UnionSetArray([Singleton(n) for n in nodes])) end @@ -129,8 +129,8 @@ with a partitioned searching algorithm. Two integers vectors are returned, the first one contains the indexes of the points inside the mesh, the second one contains the indexes of the elements containing the points." function evaluate_points_in_mesh(mesh::AbstractMesh{dim}, - vec_points::Vector{P}, - alg::Partition) where {dim,T,P<:Point{dim,T}} + vec_points::Vector{P}, + alg::Partition) where {dim, T, P <: Point{dim, T}} # Array of hyperrectangles inside the bounding box. H = bounding_box(nodes(mesh)) (; Nx, Ny, Nz) = alg @@ -177,13 +177,14 @@ with a threaded partitioned searching algorithm. Two integers vectors are return the first one contains the indexes of the points inside the mesh, the second one contains the indexes of the elements containing the points." function evaluate_points_in_mesh(mesh::AbstractMesh, - vec_points::Vector{P}, - alg::PartitionThreaded) where {dim,T,P<:Point{dim,T}} + vec_points::Vector{P}, + alg::PartitionThreaded) where {dim, T, P <: Point{dim, T}} # Array of hyperrectangles inside the bounding box. H = bounding_box(nodes(mesh)) (; Nx, Ny, Nz) = alg Hpart = split(H, [Nx, Ny, Nz]) - Tboxes = [box_approximation(convert(LazySets.Tetrahedron, elem)) for elem in elements(mesh)] + Tboxes = [box_approximation(convert(LazySets.Tetrahedron, elem)) + for elem in elements(mesh)] # Mapping of elements with non-empty intersection with each hyperrectangle. elems_idx_in_box = [Vector{Int64}() for _ in 1:length(Hpart)] diff --git a/src/ONSAS.jl b/src/ONSAS.jl index 181587b1e..e2c1e628a 100644 --- a/src/ONSAS.jl +++ b/src/ONSAS.jl @@ -4,61 +4,61 @@ using Reexport: @reexport using CommonSolve FILES = ["Utils.jl", - # Materials - "Materials/Materials.jl", - "Materials/LinearElasticMaterials.jl", - "Materials/HyperElasticMaterials.jl", - "Materials/IsotropicLinearElasticMaterial.jl", - "Materials/SVKMaterial.jl", - "Materials/NeoHookeanMaterial.jl", - "Materials/HyperElasticMaterial.jl", - # Cross-sections - "CrossSections/CrossSections.jl", - "CrossSections/Circles.jl", - "CrossSections/Rectangles.jl", - "CrossSections/Squares.jl", - "CrossSections/GenericCrossSections.jl", - # Entities - "Entities/Nodes.jl", - "Entities/Entities.jl", - "Entities/Trusses.jl", - "Entities/Tetrahedrons.jl", - "Entities/TriangularFaces.jl", - "Entities/Frames.jl", - # Boundary conditions - "BoundaryConditions/BoundaryConditions.jl", - "BoundaryConditions/FixedFieldBoundaryConditions.jl", - "BoundaryConditions/DirichletBoundaryConditions.jl", - "BoundaryConditions/GlobalLoadBoundaryConditions.jl", - "BoundaryConditions/LocalLoadBoundaryConditions.jl", - # Meshes - "Meshes/Meshes.jl", - "Meshes/Searches.jl", - "Meshes/Interpolators.jl", - "Meshes/Handlers.jl", - # Interface Gmsh - "Interfaces/Gmsh.jl", - # Structural Model - "StructuralModel/StructuralEntities.jl", - "StructuralModel/StructuralBoundaryConditions.jl", - "StructuralModel/StructuralMaterials.jl", - "StructuralModel/Structures.jl", - # Structural Solvers - "StructuralSolvers/Assemblers.jl", - "StructuralAnalyses/StructuralAnalyses.jl", - "StructuralSolvers/StructuralSolvers.jl", - "StructuralSolvers/Solvers.jl", - # Structural States - "StructuralAnalyses/StaticStates.jl", - "StructuralAnalyses/DynamicStates.jl", - # Structural Solutions - "StructuralSolvers/Solutions.jl", - # Structural Analyses - "StructuralAnalyses/StaticAnalyses.jl", - "StructuralAnalyses/LinearStaticAnalyses.jl", - "StructuralAnalyses/NonLinearStaticAnalyses.jl", - # Interface VTK - "Interfaces/VTK.jl"] + # Materials + "Materials/Materials.jl", + "Materials/LinearElasticMaterials.jl", + "Materials/HyperElasticMaterials.jl", + "Materials/IsotropicLinearElasticMaterial.jl", + "Materials/SVKMaterial.jl", + "Materials/NeoHookeanMaterial.jl", + "Materials/HyperElasticMaterial.jl", + # Cross-sections + "CrossSections/CrossSections.jl", + "CrossSections/Circles.jl", + "CrossSections/Rectangles.jl", + "CrossSections/Squares.jl", + "CrossSections/GenericCrossSections.jl", + # Entities + "Entities/Nodes.jl", + "Entities/Entities.jl", + "Entities/Trusses.jl", + "Entities/Tetrahedrons.jl", + "Entities/TriangularFaces.jl", + "Entities/Frames.jl", + # Boundary conditions + "BoundaryConditions/BoundaryConditions.jl", + "BoundaryConditions/FixedFieldBoundaryConditions.jl", + "BoundaryConditions/DirichletBoundaryConditions.jl", + "BoundaryConditions/GlobalLoadBoundaryConditions.jl", + "BoundaryConditions/LocalLoadBoundaryConditions.jl", + # Meshes + "Meshes/Meshes.jl", + "Meshes/Searches.jl", + "Meshes/Interpolators.jl", + "Meshes/Handlers.jl", + # Interface Gmsh + "Interfaces/Gmsh.jl", + # Structural Model + "StructuralModel/StructuralEntities.jl", + "StructuralModel/StructuralBoundaryConditions.jl", + "StructuralModel/StructuralMaterials.jl", + "StructuralModel/Structures.jl", + # Structural Solvers + "StructuralSolvers/Assemblers.jl", + "StructuralAnalyses/StructuralAnalyses.jl", + "StructuralSolvers/StructuralSolvers.jl", + "StructuralSolvers/Solvers.jl", + # Structural States + "StructuralAnalyses/StaticStates.jl", + "StructuralAnalyses/DynamicStates.jl", + # Structural Solutions + "StructuralSolvers/Solutions.jl", + # Structural Analyses + "StructuralAnalyses/StaticAnalyses.jl", + "StructuralAnalyses/LinearStaticAnalyses.jl", + "StructuralAnalyses/NonLinearStaticAnalyses.jl", + # Interface VTK + "Interfaces/VTK.jl"] foreach(FILES) do m include(m) diff --git a/src/StructuralAnalyses/DynamicStates.jl b/src/StructuralAnalyses/DynamicStates.jl index 44136de4a..fd9c9b677 100644 --- a/src/StructuralAnalyses/DynamicStates.jl +++ b/src/StructuralAnalyses/DynamicStates.jl @@ -28,9 +28,9 @@ export FullDynamicState, DynamicState """ Stores the relevant Dynamic variables of the structure during the displacements iteration. """ -struct FullDynamicState{DU<:AbstractVector,U<:AbstractVector, - FE<:AbstractVector,FI<:AbstractVector,K<:AbstractMatrix, - E<:Dictionary,S<:Dictionary} <: AbstractDynamicState +struct FullDynamicState{DU <: AbstractVector, U <: AbstractVector, + FE <: AbstractVector, FI <: AbstractVector, K <: AbstractMatrix, + E <: Dictionary, S <: Dictionary} <: AbstractDynamicState "Free degrees of freedom." free_dofs::Vector{Dof} "Displacements vector increment." @@ -70,13 +70,13 @@ struct FullDynamicState{DU<:AbstractVector,U<:AbstractVector, "Linear system cache" linear_system::LinearSolve.LinearCache function FullDynamicState(fdofs::Vector{Dof}, - ΔUᵏ::DU, Uᵏ::U, Udotᵏ::U, Udotdotᵏ::U, - Fₑₓₜᵏ::FE, Fᵢₙₜᵏ::FI, Fᵢₙₑᵏ::FI, Fᵥᵢₛᵏ::FI, - Kᵏ::K, Mᵏ::K, Cᵏ::K, Kₛᵏ::K, res_forces::DU, - ϵᵏ::E, σᵏ::S, - assembler::Assembler, - iter_state::ResidualsIterationStep, - linear_system::LinearSolve.LinearCache) where {DU,U,FE,FI,K,E,S} + ΔUᵏ::DU, Uᵏ::U, Udotᵏ::U, Udotdotᵏ::U, + Fₑₓₜᵏ::FE, Fᵢₙₜᵏ::FI, Fᵢₙₑᵏ::FI, Fᵥᵢₛᵏ::FI, + Kᵏ::K, Mᵏ::K, Cᵏ::K, Kₛᵏ::K, res_forces::DU, + ϵᵏ::E, σᵏ::S, + assembler::Assembler, + iter_state::ResidualsIterationStep, + linear_system::LinearSolve.LinearCache) where {DU, U, FE, FI, K, E, S} # Check dimensions @assert length(ΔUᵏ) == length(fdofs) == length(res_forces) @assert begin @@ -85,17 +85,17 @@ struct FullDynamicState{DU<:AbstractVector,U<:AbstractVector, length(Uᵏ) end # Initialize linear system K.ΔU = R - new{DU,U,FE,FI,K,E,S}(fdofs, - ΔUᵏ, Uᵏ, Udotᵏ, Udotdotᵏ, - Fₑₓₜᵏ, Fᵢₙₜᵏ, Fᵢₙₑᵏ, Fᵥᵢₛᵏ, - Kᵏ, Mᵏ, Cᵏ, Kₛᵏ, res_forces, ϵᵏ, σᵏ, - assembler, iter_state, linear_system) + new{DU, U, FE, FI, K, E, S}(fdofs, + ΔUᵏ, Uᵏ, Udotᵏ, Udotdotᵏ, + Fₑₓₜᵏ, Fᵢₙₜᵏ, Fᵢₙₑᵏ, Fᵥᵢₛᵏ, + Kᵏ, Mᵏ, Cᵏ, Kₛᵏ, res_forces, ϵᵏ, σᵏ, + assembler, iter_state, linear_system) end end "Default constructor for Dynamic state given an structure and iteration state." function FullDynamicState(s::AbstractStructure, - iter_state::ResidualsIterationStep=ResidualsIterationStep()) + iter_state::ResidualsIterationStep = ResidualsIterationStep()) n_dofs = num_dofs(s) n_fdofs = num_free_dofs(s) @@ -117,7 +117,8 @@ function FullDynamicState(s::AbstractStructure, res_forces = zeros(n_fdofs) # Initialize pairs strains - ϵᵏ = dictionary([Pair(e, Symmetric(Matrix{Float64}(undef, (3, 3)))) for e in elements(s)]) + ϵᵏ = dictionary([Pair(e, Symmetric(Matrix{Float64}(undef, (3, 3)))) + for e in elements(s)]) σᵏ = dictionary([Pair(e, Matrix{Float64}(undef, (3, 3))) for e in elements(s)]) cache = dictionary(nameof(T) => elements_cache(T) for T in subtypes(AbstractElement)) @@ -127,10 +128,10 @@ function FullDynamicState(s::AbstractStructure, linear_system = init(LinearProblem(Kₛᵏ[fdofs, fdofs], res_forces)) FullDynamicState(fdofs, - ΔUᵏ, Uᵏ, Udotᵏ, Udotdotᵏ, - Fₑₓₜᵏ, Fᵢₙₜᵏ, Fᵢₙₑᵏ, Fᵥᵢₛᵏ, - Kᵏ, Mᵏ, Cᵏ, Kₛᵏ, res_forces, ϵᵏ, σᵏ, - assembler, iter_state, linear_system) + ΔUᵏ, Uᵏ, Udotᵏ, Udotdotᵏ, + Fₑₓₜᵏ, Fᵢₙₜᵏ, Fᵢₙₑᵏ, Fᵥᵢₛᵏ, + Kᵏ, Mᵏ, Cᵏ, Kₛᵏ, res_forces, ϵᵏ, σᵏ, + assembler, iter_state, linear_system) end function Base.show(io::IO, sc::FullDynamicState) @@ -171,7 +172,8 @@ function reset!(state::FullDynamicState) state end -struct DynamicState{U<:AbstractVector,E<:Dictionary,S<:Dictionary} <: AbstractDynamicState +struct DynamicState{U <: AbstractVector, E <: Dictionary, S <: Dictionary} <: + AbstractDynamicState "Displacements vector." Uᵏ::U "Velocity vector." @@ -182,8 +184,8 @@ struct DynamicState{U<:AbstractVector,E<:Dictionary,S<:Dictionary} <: AbstractDy ϵᵏ::E "Vector with stresses for each element." σᵏ::S - function DynamicState(Uᵏ::U, Udotᵏ::U, Udotdotᵏ::U, ϵᵏ::E, σᵏ::S) where {U,E,S} - new{U,E,S}(Uᵏ, Udotᵏ, Udotdotᵏ, ϵᵏ, σᵏ) + function DynamicState(Uᵏ::U, Udotᵏ::U, Udotdotᵏ::U, ϵᵏ::E, σᵏ::S) where {U, E, S} + new{U, E, S}(Uᵏ, Udotᵏ, Udotdotᵏ, ϵᵏ, σᵏ) end end diff --git a/src/StructuralAnalyses/LinearStaticAnalyses.jl b/src/StructuralAnalyses/LinearStaticAnalyses.jl index 6fe6e98e8..183356598 100644 --- a/src/StructuralAnalyses/LinearStaticAnalyses.jl +++ b/src/StructuralAnalyses/LinearStaticAnalyses.jl @@ -23,8 +23,9 @@ using ..Solutions @reexport import ..StructuralSolvers: _solve!, step! # Since linear analysis do not iterate, the iteration state is: -const LinearResidualsIterationStep = ResidualsIterationStep(nothing, nothing, nothing, nothing, 1, - ΔU_and_ResidualForce_Criteria()) +const LinearResidualsIterationStep = ResidualsIterationStep( + nothing, nothing, nothing, nothing, 1, + ΔU_and_ResidualForce_Criteria()) export LinearStaticAnalysis @@ -33,7 +34,7 @@ A linear analysis is a collection of parameters for defining the static analysis In the static analysis, the structure is analyzed at a given load factor (this variable is analog to time). As this analysis is linear the stiffness of the structure remains constant at each displacements iteration step. """ -mutable struct LinearStaticAnalysis{S<:AbstractStructure,R<:Real,LFV<:Vector{R}} <: +mutable struct LinearStaticAnalysis{S <: AbstractStructure, R <: Real, LFV <: Vector{R}} <: AbstractStaticAnalysis "Structure to be analyzed." const s::S @@ -47,20 +48,20 @@ end "Constructor for linear analysis with load factors, optional initial step and initial state." function LinearStaticAnalysis(s::S, λᵥ::LFV; - initial_state::FullStaticState=FullStaticState(s, - LinearResidualsIterationStep), - initial_step::Int=1) where {S<:AbstractStructure, - LFV<:Vector{<:Real}} + initial_state::FullStaticState = FullStaticState(s, + LinearResidualsIterationStep), + initial_step::Int = 1) where {S <: AbstractStructure, + LFV <: Vector{<:Real}} !(1 ≤ initial_step ≤ length(λᵥ)) && throw(ArgumentError("initial_step must be in [1, $(length(λᵥ))] but is: $initial_step.")) LinearStaticAnalysis(s, initial_state, λᵥ, initial_step) end "Constructor for linear analysis given a final time (or load factor) and the number of steps." -function LinearStaticAnalysis(s::AbstractStructure, final_time::Real=1.0; NSTEPS=10, - initial_state::FullStaticState=FullStaticState(s, - LinearResidualsIterationStep), - initial_step::Int=1) +function LinearStaticAnalysis(s::AbstractStructure, final_time::Real = 1.0; NSTEPS = 10, + initial_state::FullStaticState = FullStaticState(s, + LinearResidualsIterationStep), + initial_step::Int = 1) t₀ = final_time / NSTEPS λᵥ = collect(LinRange(t₀, final_time, NSTEPS)) LinearStaticAnalysis(s, λᵥ; initial_state, initial_step) @@ -75,9 +76,9 @@ end "Solves a linear analysis problem mutating the state." function _solve!(sa::LinearStaticAnalysis, - alg::Nothing, - linear_solver::LinearSolver; - linear_solve_inplace::Bool) + alg::Nothing, + linear_solver::LinearSolver; + linear_solve_inplace::Bool) s = structure(sa) # Initialize solution. @@ -114,8 +115,8 @@ end "Computes ΔU for solving the linear analysis." function step!(sa::LinearStaticAnalysis, - linear_solver::LinearSolver; - linear_solve_inplace::Bool) + linear_solver::LinearSolver; + linear_solve_inplace::Bool) # Extract state info state = current_state(sa) free_dofs_idx = free_dofs(state) @@ -132,17 +133,17 @@ function step!(sa::LinearStaticAnalysis, # Define tolerances abstol, reltol, maxiter = _default_linear_solver_tolerances(linear_system.A, - linear_system.b) + linear_system.b) # Compute ΔU # TODO: Solve it inplace sol = if linear_solve_inplace LinearSolve.solve!(linear_system, - linear_solver; abstol, reltol, maxiter) + linear_solver; abstol, reltol, maxiter) else lp = LinearProblem(linear_system.A, linear_system.b) LinearSolve.solve!(init(lp, linear_solver), - linear_solver; abstol, reltol, maxiter) + linear_solver; abstol, reltol, maxiter) end ΔU = Δ_displacements!(state, sol.u) diff --git a/src/StructuralAnalyses/NonLinearStaticAnalyses.jl b/src/StructuralAnalyses/NonLinearStaticAnalyses.jl index d46bd9deb..6b3f48ab2 100644 --- a/src/StructuralAnalyses/NonLinearStaticAnalyses.jl +++ b/src/StructuralAnalyses/NonLinearStaticAnalyses.jl @@ -29,7 +29,8 @@ A non linear static analysis is a collection of parameters for defining the stat In the static analysis, the structure is analyzed at a given load factor (this variable is analog to time). As this analysis is nonlinear the stiffness of the structure is updated at each iteration. """ -mutable struct NonLinearStaticAnalysis{S<:AbstractStructure,R<:Real,LFV<:Vector{R}} <: +mutable struct NonLinearStaticAnalysis{ + S <: AbstractStructure, R <: Real, LFV <: Vector{R}} <: AbstractStaticAnalysis "Structure to be analyzed." const s::S @@ -42,16 +43,17 @@ mutable struct NonLinearStaticAnalysis{S<:AbstractStructure,R<:Real,LFV<:Vector{ end "Constructor for a non linear analysis with load factors, optional initial step and initial state." function NonLinearStaticAnalysis(s::S, λᵥ::LFV; - initial_state::FullStaticState=FullStaticState(s), - initial_step::Int=1) where {S<:AbstractStructure, - LFV<:AbstractVector{<:Real}} + initial_state::FullStaticState = FullStaticState(s), + initial_step::Int = 1) where {S <: AbstractStructure, + LFV <: AbstractVector{<:Real}} !(1 ≤ initial_step ≤ length(λᵥ)) && throw(ArgumentError("initial_step must be in [1, $(length(λᵥ))] but is: $initial_step.")) NonLinearStaticAnalysis(s, initial_state, λᵥ, initial_step) end "Constructor for non linear static analysis given a final time (or load factor) and the number of steps." -function NonLinearStaticAnalysis(s::AbstractStructure, t₁::Real=1.0; NSTEPS=10, initial_step::Int=1) +function NonLinearStaticAnalysis( + s::AbstractStructure, t₁::Real = 1.0; NSTEPS = 10, initial_step::Int = 1) t₀ = t₁ / NSTEPS λᵥ = collect(LinRange(t₀, t₁, NSTEPS)) NonLinearStaticAnalysis(s, λᵥ; initial_step) @@ -66,9 +68,9 @@ end "Solves an non linear static analysis problem with a given solver." function _solve!(sa::NonLinearStaticAnalysis, - alg::AbstractSolver, - linear_solver::LinearSolver; - linear_solve_inplace::Bool) + alg::AbstractSolver, + linear_solver::LinearSolver; + linear_solve_inplace::Bool) s = structure(sa) # Initialize solution. sol = Solution(sa, alg) @@ -103,8 +105,8 @@ end "Computes ΔU for solving the non linear static analysis with a Newton Raphson method." function step!(sa::NonLinearStaticAnalysis, ::NewtonRaphson, - linear_solver::SciMLBase.AbstractLinearAlgorithm; - linear_solve_inplace::Bool) + linear_solver::SciMLBase.AbstractLinearAlgorithm; + linear_solve_inplace::Bool) # Extract state info state = current_state(sa) free_dofs_idx = free_dofs(state) @@ -118,8 +120,9 @@ function step!(sa::NonLinearStaticAnalysis, ::NewtonRaphson, linear_system.A .= view(tangent_matrix(state), free_dofs_idx, free_dofs_idx) # Define tolerances - abstol, reltol, maxiter = StructuralSolvers._default_linear_solver_tolerances(linear_system.A, - linear_system.b) + abstol, reltol, maxiter = StructuralSolvers._default_linear_solver_tolerances( + linear_system.A, + linear_system.b) # Compute ΔU sol = if linear_solve_inplace @@ -145,17 +148,18 @@ end "Show the solution when solved with an in-house algorithm." function Base.show(io::IO, ::MIME"text/plain", - solution::Solution{<:FullStaticState}) + solution::Solution{<:FullStaticState}) show(io, solution) println("\nStats:") println("----------") # Check convergence - is_any_step_not_converged = any([criterion_step isa Union{NotConvergedYet,MaxIterCriterion} + is_any_step_not_converged = any([criterion_step isa + Union{NotConvergedYet, MaxIterCriterion} for criterion_step in criterion(solution)]) num_iterations = reduce(+, iterations(solution)) - avg_iterations = round(num_iterations / length(states(solution)); digits=1) + avg_iterations = round(num_iterations / length(states(solution)); digits = 1) println("• Number of linear systems solved: $num_iterations") println("• Average of iterations per step : $avg_iterations") println("• Convergence success : $(!is_any_step_not_converged)") diff --git a/src/StructuralAnalyses/StaticAnalyses.jl b/src/StructuralAnalyses/StaticAnalyses.jl index 87b6cbd25..12528bac4 100644 --- a/src/StructuralAnalyses/StaticAnalyses.jl +++ b/src/StructuralAnalyses/StaticAnalyses.jl @@ -148,8 +148,9 @@ function Base.push!(st_sol::Solution{<:FullStaticState}, c_state::FullStaticStat assembler = c_state.assembler linear_system = c_state.linear_system - state_copy = FullStaticState(fdofs, ΔUᵏ, Uᵏ, fₑₓₜᵏ, fᵢₙₜᵏ, Kₛᵏ, res_forces, ϵᵏ, σᵏ, assembler, - iter_state, linear_system) + state_copy = FullStaticState( + fdofs, ΔUᵏ, Uᵏ, fₑₓₜᵏ, fᵢₙₜᵏ, Kₛᵏ, res_forces, ϵᵏ, σᵏ, assembler, + iter_state, linear_system) push!(states(st_sol), state_copy) end diff --git a/src/StructuralAnalyses/StaticStates.jl b/src/StructuralAnalyses/StaticStates.jl index 961f22fdc..03a5c9ead 100644 --- a/src/StructuralAnalyses/StaticStates.jl +++ b/src/StructuralAnalyses/StaticStates.jl @@ -30,9 +30,9 @@ export FullStaticState, StaticState """ Stores the relevant static variables of the structure during the displacements iteration. """ -struct FullStaticState{DU<:AbstractVector,U<:AbstractVector, - FE<:AbstractVector,FI<:AbstractVector,K<:AbstractMatrix, - E<:Dictionary,S<:Dictionary} <: AbstractStaticState +struct FullStaticState{DU <: AbstractVector, U <: AbstractVector, + FE <: AbstractVector, FI <: AbstractVector, K <: AbstractMatrix, + E <: Dictionary, S <: Dictionary} <: AbstractStaticState "Free degrees of freedom." free_dofs::Vector{Dof} "Displacements vector increment." @@ -58,26 +58,27 @@ struct FullStaticState{DU<:AbstractVector,U<:AbstractVector, "Linear system cache" linear_system::LinearSolve.LinearCache function FullStaticState(fdofs::Vector{Dof}, - ΔUᵏ::DU, Uᵏ::U, - Fₑₓₜᵏ::FE, Fᵢₙₜᵏ::FI, - Kₛᵏ::K, res_forces::DU, - ϵᵏ::E, σᵏ::S, - assembler::Assembler, - iter_state::ResidualsIterationStep, - linear_system::LinearSolve.LinearCache) where {DU,U,FE,FI,K,E,S} + ΔUᵏ::DU, Uᵏ::U, + Fₑₓₜᵏ::FE, Fᵢₙₜᵏ::FI, + Kₛᵏ::K, res_forces::DU, + ϵᵏ::E, σᵏ::S, + assembler::Assembler, + iter_state::ResidualsIterationStep, + linear_system::LinearSolve.LinearCache) where {DU, U, FE, FI, K, E, S} # Check dimensions @assert length(ΔUᵏ) == length(fdofs) == length(res_forces) @assert size(Kₛᵏ, 1) == size(Kₛᵏ, 2) == length(Fᵢₙₜᵏ) == length(Fₑₓₜᵏ) == length(Uᵏ) # Initialize linear system K.ΔU = R - new{DU,U,FE,FI,K,E,S}(fdofs, ΔUᵏ, Uᵏ, Fₑₓₜᵏ, Fᵢₙₜᵏ, Kₛᵏ, res_forces, ϵᵏ, σᵏ, assembler, - iter_state, linear_system) + new{DU, U, FE, FI, K, E, S}( + fdofs, ΔUᵏ, Uᵏ, Fₑₓₜᵏ, Fᵢₙₜᵏ, Kₛᵏ, res_forces, ϵᵏ, σᵏ, assembler, + iter_state, linear_system) end end "Default constructor for static state given an structure and iteration state." function FullStaticState(s::AbstractStructure, - iter_state::ResidualsIterationStep=ResidualsIterationStep(), - linear_solver=DEFAULT_LINEAR_SOLVER) + iter_state::ResidualsIterationStep = ResidualsIterationStep(), + linear_solver = DEFAULT_LINEAR_SOLVER) n_dofs = num_dofs(s) n_fdofs = num_free_dofs(s) Uᵏ = zeros(n_dofs) @@ -87,14 +88,16 @@ function FullStaticState(s::AbstractStructure, Kₛᵏ = spzeros(n_dofs, n_dofs) res_forces = zeros(n_fdofs) # Initialize pairs strains - ϵᵏ = dictionary([Pair(e, Symmetric(Matrix{Float64}(undef, (3, 3)))) for e in elements(s)]) + ϵᵏ = dictionary([Pair(e, Symmetric(Matrix{Float64}(undef, (3, 3)))) + for e in elements(s)]) σᵏ = dictionary([Pair(e, Matrix{Float64}(undef, (3, 3))) for e in elements(s)]) cache = dictionary(nameof(T) => elements_cache(T) for T in subtypes(AbstractElement)) assemblerᵏ = Assembler(s, cache) fdofs = free_dofs(s) linear_system = init(LinearProblem(Kₛᵏ[fdofs, fdofs], res_forces), linear_solver) - FullStaticState(fdofs, ΔUᵏ, Uᵏ, Fₑₓₜᵏ, Fᵢₙₜᵏ, Kₛᵏ, res_forces, ϵᵏ, σᵏ, assemblerᵏ, iter_state, - linear_system) + FullStaticState( + fdofs, ΔUᵏ, Uᵏ, Fₑₓₜᵏ, Fᵢₙₜᵏ, Kₛᵏ, res_forces, ϵᵏ, σᵏ, assemblerᵏ, iter_state, + linear_system) end function Base.show(io::IO, sc::FullStaticState) @@ -136,15 +139,16 @@ function reset!(state::FullStaticState) state end -struct StaticState{U<:AbstractVector,E<:Dictionary,S<:Dictionary} <: AbstractStaticState +struct StaticState{U <: AbstractVector, E <: Dictionary, S <: Dictionary} <: + AbstractStaticState "Displacements vector." Uᵏ::U "Vector with strains for each element." ϵᵏ::E "Vector with stresses for each element." σᵏ::S - function StaticState(Uᵏ::U, ϵᵏ::E, σᵏ::S) where {U,E,S} - new{U,E,S}(Uᵏ, ϵᵏ, σᵏ) + function StaticState(Uᵏ::U, ϵᵏ::E, σᵏ::S) where {U, E, S} + new{U, E, S}(Uᵏ, ϵᵏ, σᵏ) end end diff --git a/src/StructuralAnalyses/StructuralAnalyses.jl b/src/StructuralAnalyses/StructuralAnalyses.jl index 22deeb457..26a20a52a 100644 --- a/src/StructuralAnalyses/StructuralAnalyses.jl +++ b/src/StructuralAnalyses/StructuralAnalyses.jl @@ -16,15 +16,19 @@ using ..Structures using ..Utils @reexport import ..Utils: apply! -@reexport import ..Entities: internal_forces, inertial_forces, strain, stress, elements_cache +@reexport import ..Entities: internal_forces, inertial_forces, strain, stress, + elements_cache @reexport import ..Structures: free_dofs @reexport import ..Assemblers: assemble!, end_assemble! export AbstractStructuralState, AbstractStaticState, AbstractDynamicState, Δ_displacements, Δ_displacements!, residual_forces!, structure, assembler, residual_forces_norms, - residual_displacements_norms, AbstractStructuralAnalysis, initial_time, current_time, times, - final_time, is_done, current_state, current_iteration, displacements, external_forces, - iteration_residuals, tangent_matrix, internal_cache, elements_cache, velocity, acceleration, + residual_displacements_norms, AbstractStructuralAnalysis, initial_time, current_time, + times, + final_time, is_done, current_state, current_iteration, displacements, + external_forces, + iteration_residuals, tangent_matrix, internal_cache, elements_cache, velocity, + acceleration, viscous_forces, mass_matrix, damping_matrix, stiffness_matrix """ Abstract supertype to define a new structural state. @@ -109,14 +113,15 @@ end "Assembles the element `e` stress σₑ and strain ϵₑ into the structural state." function assemble!(st::AbstractStructuralState, σₑ::ST, ϵₑ::ET, - e::AbstractElement) where {ST<:Union{Real,AbstractMatrix}, - ET<:Union{Real,AbstractMatrix}} + e::AbstractElement) where {ST <: Union{Real, AbstractMatrix}, + ET <: Union{Real, AbstractMatrix}} stress(st)[e] .= σₑ strain(st)[e] .= ϵₑ end "Fill the system tangent matrix in the structural state once the assembler object is built." -end_assemble!(st::AbstractStructuralState) = end_assemble!(tangent_matrix(st), assembler(st)) +end_assemble!(st::AbstractStructuralState) = end_assemble!( + tangent_matrix(st), assembler(st)) "Return relative residual forces for the current structural state." function residual_forces_norms(st::AbstractStructuralState) @@ -226,7 +231,8 @@ function apply!(sa::AbstractStructuralAnalysis, lbc::AbstractNeumannBoundaryCond end "Apply a vector of load boundary conditions to the structure." -function apply!(sa::AbstractStructuralAnalysis, l_bcs::Vector{<:AbstractNeumannBoundaryCondition}) +function apply!( + sa::AbstractStructuralAnalysis, l_bcs::Vector{<:AbstractNeumannBoundaryCondition}) for lbc in l_bcs apply!(sa, lbc) end diff --git a/src/StructuralModel/StructuralBoundaryConditions.jl b/src/StructuralModel/StructuralBoundaryConditions.jl index 71511381a..5a72c8ebf 100644 --- a/src/StructuralModel/StructuralBoundaryConditions.jl +++ b/src/StructuralModel/StructuralBoundaryConditions.jl @@ -17,7 +17,7 @@ using ..FixedFieldBoundaryConditions using ..Nodes using ..Meshes -const BCtoEntities{BC,E} = Dictionary{BC,Vector{E}} where {BC,E} +const BCtoEntities{BC, E} = Dictionary{BC, Vector{E}} where {BC, E} @reexport import ..BoundaryConditions: apply @reexport import ..Entities: apply! @@ -28,27 +28,29 @@ export StructuralBoundaryCondition, BCtoEntities, all_bcs, fixed_dof_bcs, load_b Structural boundary conditions. A `StructuralBoundaryCondition` is a collection of `BoundaryConditions` defining the boundary conditions of the structure. """ -Base.@kwdef struct StructuralBoundaryCondition{NB<:AbstractBoundaryCondition, - FB<:AbstractBoundaryCondition, - EB<:AbstractBoundaryCondition, - N<:AbstractNode,F<:AbstractFace,E<:AbstractElement} +Base.@kwdef struct StructuralBoundaryCondition{NB <: AbstractBoundaryCondition, + FB <: AbstractBoundaryCondition, + EB <: AbstractBoundaryCondition, + N <: AbstractNode, F <: AbstractFace, E <: AbstractElement} "Maps each boundary conditions for a vector of nodes. " - node_bcs::BCtoEntities{NB,N} = BCtoEntities{AbstractBoundaryCondition,AbstractNode}() + node_bcs::BCtoEntities{NB, N} = BCtoEntities{AbstractBoundaryCondition, AbstractNode}() "Maps each boundary conditions for a vector of faces." - face_bcs::BCtoEntities{FB,F} = BCtoEntities{AbstractBoundaryCondition,AbstractFace}() + face_bcs::BCtoEntities{FB, F} = BCtoEntities{AbstractBoundaryCondition, AbstractFace}() "Maps each boundary conditions for a vector of elements. " - element_bcs::BCtoEntities{EB,E} = BCtoEntities{AbstractBoundaryCondition,AbstractElement}() + element_bcs::BCtoEntities{EB, E} = BCtoEntities{ + AbstractBoundaryCondition, AbstractElement}() end function StructuralBoundaryCondition(pairs::Pair...) # Lenient constructor allowing to handle different concrete subtypes. StructuralBoundaryCondition([pairs...]) end -function StructuralBoundaryCondition(pairs::Vector{Pair{B,Vector{E}}}) where {B<:AbstractBoundaryCondition, - E<:Union{AbstractEntity, - AbstractNode}} - node_bcs = BCtoEntities{AbstractBoundaryCondition,AbstractNode}() - face_bcs = BCtoEntities{AbstractBoundaryCondition,AbstractFace}() - element_bcs = BCtoEntities{AbstractBoundaryCondition,AbstractElement}() +function StructuralBoundaryCondition(pairs::Vector{Pair{B, + Vector{E}}}) where {B <: AbstractBoundaryCondition, + E <: Union{AbstractEntity, + AbstractNode}} + node_bcs = BCtoEntities{AbstractBoundaryCondition, AbstractNode}() + face_bcs = BCtoEntities{AbstractBoundaryCondition, AbstractFace}() + element_bcs = BCtoEntities{AbstractBoundaryCondition, AbstractElement}() for (k, v) in pairs for vi in v if vi isa AbstractNode @@ -64,7 +66,8 @@ function StructuralBoundaryCondition(pairs::Vector{Pair{B,Vector{E}}}) where {B< end "Constructor for empty `StructuralBoundaryCondition` with a `Vector` of `AbstractBoundaryCondition`s `vbc`." -function StructuralBoundaryCondition(vbc::Vector{BC}) where {BC<:AbstractBoundaryCondition} +function StructuralBoundaryCondition(vbc::Vector{BC}) where {BC <: + AbstractBoundaryCondition} bcs_nodes = dictionary(map(bc -> bc => Vector{AbstractNode}(), vbc)) bcs_faces = dictionary(map(bc -> bc => Vector{AbstractFace}(), vbc)) bcs_elements = dictionary(map(bc -> bc => Vector{AbstractElement}(), vbc)) @@ -86,7 +89,7 @@ element_bcs(se::StructuralBoundaryCondition) = se.element_bcs "Return all the boundary conditions applied to the structure." function all_bcs(se::StructuralBoundaryCondition) unique(vcat(collect(keys(node_bcs(se))), collect(keys(face_bcs(se))), - collect(keys(element_bcs(se))))) + collect(keys(element_bcs(se))))) end "Return the bc with the label `l` in the structural boundary conditions." @@ -95,11 +98,12 @@ function Base.getindex(sb::StructuralBoundaryCondition, l::Label) end "Return a the entities where the boundary condition is applied." -function Base.getindex(sb::StructuralBoundaryCondition{NB,NF,EB}, - bc::BC) where - {NB<:AbstractBoundaryCondition,NF<:AbstractBoundaryCondition,EB<:AbstractBoundaryCondition, - BC<:AbstractBoundaryCondition} - bc_entities = Vector{Union{AbstractNode,AbstractEntity}}() +function Base.getindex(sb::StructuralBoundaryCondition{NB, NF, EB}, + bc::BC) where + {NB <: AbstractBoundaryCondition, NF <: AbstractBoundaryCondition, + EB <: AbstractBoundaryCondition, + BC <: AbstractBoundaryCondition} + bc_entities = Vector{Union{AbstractNode, AbstractEntity}}() BC <: NB && bc ∈ keys(node_bcs(sb)) && push!(bc_entities, node_bcs(sb)[bc]...) BC <: NF && bc ∈ keys(face_bcs(sb)) && push!(bc_entities, face_bcs(sb)[bc]...) @@ -109,24 +113,24 @@ function Base.getindex(sb::StructuralBoundaryCondition{NB,NF,EB}, end function Base.push!(sb::StructuralBoundaryCondition, bc::AbstractBoundaryCondition, - n::AbstractNode) + n::AbstractNode) push!(node_bcs(sb)[bc], n) end function Base.push!(sb::StructuralBoundaryCondition, bc::AbstractBoundaryCondition, - e::AbstractElement) + e::AbstractElement) push!(element_bcs(sb)[bc], e) end function Base.push!(sb::StructuralBoundaryCondition, bc::AbstractBoundaryCondition, - f::AbstractFace) + f::AbstractFace) push!(face_bcs(sb)[bc], f) end "Return a the boundary conditions with the label `l` in the structural boundary conditions." function Base.getindex(sb::StructuralBoundaryCondition, - l::L) where {L<:Union{Symbol,AbstractString}} + l::L) where {L <: Union{Symbol, AbstractString}} bcs_label_l = collect(filter(bc -> Symbol(label(bc)) == Symbol(l), all_bcs(sb))) - @assert length(bcs_label_l) == 1 throw(ArgumentError("The label $l is not unique. - Please label each bc differently.")) + @assert length(bcs_label_l)==1 throw(ArgumentError("The label $l is not unique. + Please label each bc differently.")) first(bcs_label_l) end @@ -187,7 +191,8 @@ function load_bcs(bcs::StructuralBoundaryCondition) end "Return a vector of dofs and load values applied by the boundary condition at time t." -function apply(bcs::StructuralBoundaryCondition, lbc::AbstractLoadBoundaryCondition, t::Real) +function apply( + bcs::StructuralBoundaryCondition, lbc::AbstractLoadBoundaryCondition, t::Real) # Extract nodes, faces and elements entities = bcs[lbc] dofs_to_load = Dof[] @@ -222,11 +227,11 @@ function apply!(bcs::StructuralBoundaryCondition, m::AbstractMesh) end function _assign_entities_to_bc!(bc_to_entities::BCtoEntities{BC}, - set_accessor::Function, - mesh_entities::Vector{E}, - type_label::String, - m::AbstractMesh) where {BC<:AbstractBoundaryCondition, - E<:Union{AbstractEntity,AbstractNode}} + set_accessor::Function, + mesh_entities::Vector{E}, + type_label::String, + m::AbstractMesh) where {BC <: AbstractBoundaryCondition, + E <: Union{AbstractEntity, AbstractNode}} sets = set_accessor(m) for (dbc, entities) in pairs(bc_to_entities) dbc_label = string(label(dbc)) @@ -246,10 +251,10 @@ end boundary conditions set." function apply_node_bcs!(bcs::StructuralBoundaryCondition, m::AbstractMesh) _assign_entities_to_bc!(node_bcs(bcs), - node_set, - nodes(m), - "node", - m) + node_set, + nodes(m), + "node", + m) _delete_empty_bc(node_bcs(bcs)) end @@ -263,10 +268,10 @@ end boundary conditions set." function apply_face_bcs!(bcs::StructuralBoundaryCondition, m::AbstractMesh) _assign_entities_to_bc!(face_bcs(bcs), - face_set, - faces(m), - "face", - m) + face_set, + faces(m), + "face", + m) _delete_empty_bc(face_bcs(bcs)) end @@ -274,17 +279,17 @@ end boundary conditions set." function apply_element_bcs!(bcs::StructuralBoundaryCondition, m::AbstractMesh) _assign_entities_to_bc!(element_bcs(bcs), - element_set, - elements(m), - "element", - m) + element_set, + elements(m), + "element", + m) _delete_empty_bc(element_bcs(bcs)) end "Replace the boundary condition with the same label as the new." function Base.replace!(sb::StructuralBoundaryCondition, - new_bc::AbstractBoundaryCondition, - label::Label=label(new_bc)) + new_bc::AbstractBoundaryCondition, + label::Label = label(new_bc)) old_bc = sb[label] # node boundary conditions replacement @@ -317,7 +322,7 @@ end "Delete a boundary condition." function Base.delete!(sb::StructuralBoundaryCondition, - bc::AbstractBoundaryCondition) + bc::AbstractBoundaryCondition) haskey(node_bcs(sb), bc) && delete!(node_bcs(sb), bc) haskey(element_bcs(sb), bc) && delete!(element_bcs(sb), bc) haskey(face_bcs(sb), bc) && delete!(face_bcs(sb), bc) @@ -326,33 +331,33 @@ Base.delete!(sb::StructuralBoundaryCondition, label::Label) = delete!(sb, sb[lab "Insert a boundary condition." function Base.insert!(sb::StructuralBoundaryCondition, - bc::AbstractBoundaryCondition, - bc_entities::Vector{<:AbstractNode}) + bc::AbstractBoundaryCondition, + bc_entities::Vector{<:AbstractNode}) insert!(node_bcs(sb), bc, bc_entities) end function Base.insert!(sb::StructuralBoundaryCondition, - bc::AbstractBoundaryCondition, - bc_entities::AbstractNode...) + bc::AbstractBoundaryCondition, + bc_entities::AbstractNode...) insert!(sb, bc, collect(bc_entities)) end function Base.insert!(sb::StructuralBoundaryCondition, - bc::AbstractBoundaryCondition, - bc_entities::Vector{<:AbstractFace}) + bc::AbstractBoundaryCondition, + bc_entities::Vector{<:AbstractFace}) insert!(face_bcs(sb), bc, bc_entities) end function Base.insert!(sb::StructuralBoundaryCondition, - bc::AbstractBoundaryCondition, - bc_entities::AbstractFace...) + bc::AbstractBoundaryCondition, + bc_entities::AbstractFace...) insert!(sb, bc, collect(bc_entities)) end function Base.insert!(sb::StructuralBoundaryCondition, - bc::AbstractBoundaryCondition, - bc_entities::Vector{<:AbstractElement}) + bc::AbstractBoundaryCondition, + bc_entities::Vector{<:AbstractElement}) insert!(element_bcs(sb), bc, bc_entities) end function Base.insert!(sb::StructuralBoundaryCondition, - bc::AbstractBoundaryCondition, - bc_entities::AbstractElement...) + bc::AbstractBoundaryCondition, + bc_entities::AbstractElement...) insert!(sb, bc, collect(bc_entities)) end diff --git a/src/StructuralModel/StructuralEntities.jl b/src/StructuralModel/StructuralEntities.jl index 497d7d73f..630997adb 100644 --- a/src/StructuralModel/StructuralEntities.jl +++ b/src/StructuralModel/StructuralEntities.jl @@ -16,33 +16,34 @@ using ..Gmsh @reexport import ..Meshes: Mesh -export StructuralEntity, all_entities, face_types_to_faces, face_types, elem_types_to_elements, +export StructuralEntity, all_entities, face_types_to_faces, face_types, + elem_types_to_elements, elem_types """ Struct used to define meshes via GMSH. Consists of a collection of element and face types, each assigned to a corresponding vector of `Face`s and `Element`s. """ -struct StructuralEntity{F<:AbstractFace,VF<:Vector,E<:AbstractElement,VE<:Vector} +struct StructuralEntity{F <: AbstractFace, VF <: Vector, E <: AbstractElement, VE <: Vector} "Dictionary with `Element` types (`Element`s without assigned `Node`s) as keys and the corresponding elements created." - elem_types_to_elements::Dictionary{E,VE} + elem_types_to_elements::Dictionary{E, VE} "Dictionary with `Face` types (`Face`s without assigned `Node`s) as keys and the corresponding faces created." - face_types_to_faces::Dictionary{F,VF} - function StructuralEntity(elem_types_to_elements::Dictionary{E,VE}, - face_types_to_faces::Dictionary{F,VF}) where - {F<:AbstractFace,VF<:Vector,E<:AbstractElement,VE<:Vector} + face_types_to_faces::Dictionary{F, VF} + function StructuralEntity(elem_types_to_elements::Dictionary{E, VE}, + face_types_to_faces::Dictionary{F, VF}) where + {F <: AbstractFace, VF <: Vector, E <: AbstractElement, VE <: Vector} velems = collect(keys(elem_types_to_elements)) vfaces = collect(keys(face_types_to_faces)) vlabels = vcat(label.(velems), label.(vfaces)) # mapreduce - @assert length(vlabels) == length(unique(vlabels)) "Every `Face` and `Element` type labels must be different" # allunique - new{F,VF,E,VE}(elem_types_to_elements, face_types_to_faces) + @assert length(vlabels)==length(unique(vlabels)) "Every `Face` and `Element` type labels must be different" # allunique + new{F, VF, E, VE}(elem_types_to_elements, face_types_to_faces) end end "Constructor for an empty `StructuralEntity` with a `Vector` of `Element`s `velems` and `Face`s `vfaces`." function StructuralEntity(velems::Vector{E}, - vfaces::Vector{F}=Vector{AbstractFace}()) where {E<:AbstractElement, - F<:AbstractFace} + vfaces::Vector{F} = Vector{AbstractFace}()) where {E <: AbstractElement, + F <: AbstractFace} elem_types_to_elements = dictionary(map(elem -> elem => Vector{typeof(elem)}(), velems)) face_types_to_faces = dictionary(map(face -> face => Vector{typeof(face)}(), vfaces)) StructuralEntity(elem_types_to_elements, face_types_to_faces) @@ -66,7 +67,8 @@ function all_entities(entities::StructuralEntity) end "Return the `Entity` with the label `l` in the `StructuralEntity` `entities`." -function Base.getindex(entities::StructuralEntity, l::L) where {L<:Union{Symbol,AbstractString}} +function Base.getindex( + entities::StructuralEntity, l::L) where {L <: Union{Symbol, AbstractString}} first(filter(ent -> label(ent) == Symbol(l), all_entities(entities))) end diff --git a/src/StructuralModel/StructuralMaterials.jl b/src/StructuralModel/StructuralMaterials.jl index 81722cdf1..5d1ae5f00 100644 --- a/src/StructuralModel/StructuralMaterials.jl +++ b/src/StructuralModel/StructuralMaterials.jl @@ -17,19 +17,20 @@ using ..Meshes export StructuralMaterial, element_materials "Material associated to an array of elements." -const MEPair = Pair{<:AbstractMaterial,<:Vector{<:AbstractElement}} +const MEPair = Pair{<:AbstractMaterial, <:Vector{<:AbstractElement}} """ A `StructuralMaterial` is a collection of `Material`s and `Element`s assigning materials to a vector of elements. """ -struct StructuralMaterial{M<:AbstractMaterial,E<:AbstractElement} +struct StructuralMaterial{M <: AbstractMaterial, E <: AbstractElement} "Stores materials as keys and the corresponding elements as values" - mats_to_elems::Dictionary{M,Vector{E}} - function StructuralMaterial(mats_to_elems::Dictionary{M,Vector{E}}) where - {M<:AbstractMaterial,E<:AbstractElement} + mats_to_elems::Dictionary{M, Vector{E}} + function StructuralMaterial(mats_to_elems::Dictionary{ + M, Vector{E}}) where + {M <: AbstractMaterial, E <: AbstractElement} @assert _element_material_is_unique(mats_to_elems) error("Each element must have a single material") # Abstract is used to replace materials - new{AbstractMaterial,E}(mats_to_elems) + new{AbstractMaterial, E}(mats_to_elems) end end StructuralMaterial(vec::Vector{<:MEPair}) = StructuralMaterial(dictionary(vec)) @@ -39,7 +40,7 @@ StructuralMaterial(p::MEPair...) = StructuralMaterial(collect(p)) element_materials(sm::StructuralMaterial) = sm.mats_to_elems "Constructor for empty `StructuralMaterial` with a `Vector` of materials `vmats`. This will assign an empty `Vector` of `Element`s to each material." -function StructuralMaterial(vmats::Vector{M}) where {M<:AbstractMaterial} +function StructuralMaterial(vmats::Vector{M}) where {M <: AbstractMaterial} StructuralMaterial(dictionary(map(mat -> mat => Vector{AbstractElement}(), vmats))) end @@ -47,16 +48,17 @@ StructuralMaterial(vmats::AbstractMaterial...) = StructuralMaterial(collect(vmat "Return the `Material` mapped with the label `l`." function Base.getindex(sm::StructuralMaterial, l::Label) - materials_label_l = collect(filter(m -> label(m) == Symbol(l), keys(element_materials(sm)))) - @assert length(materials_label_l) == 1 throw(ArgumentError("The label $l is not found.")) + materials_label_l = collect(filter( + m -> label(m) == Symbol(l), keys(element_materials(sm)))) + @assert length(materials_label_l)==1 throw(ArgumentError("The label $l is not found.")) first(materials_label_l) end "Return the `Vector` of `Element`s that are conformed by the `Material `m`." -Base.getindex(sm::StructuralMaterial, m::M) where {M<:AbstractMaterial} = element_materials(sm)[m] +Base.getindex(sm::StructuralMaterial, m::M) where {M <: AbstractMaterial} = element_materials(sm)[m] "Return the `Vector` of `Material` of the element `e`." -function Base.getindex(sm::StructuralMaterial, e::E) where {E<:AbstractElement} +function Base.getindex(sm::StructuralMaterial, e::E) where {E <: AbstractElement} first([m for (m, es) in pairs(element_materials(sm)) if e in es]) end @@ -87,21 +89,22 @@ function apply!(sm::StructuralMaterial, m::AbstractMesh) end "Delete the `Material` `m` from the `StructuralMaterial` `sm`." -function Base.delete!(sm::StructuralMaterial, m::M) where {M<:AbstractMaterial} +function Base.delete!(sm::StructuralMaterial, m::M) where {M <: AbstractMaterial} delete!(element_materials(sm), m) end "Insert the `Material` `m` into the `StructuralMaterial` `sm`." function Base.insert!(sm::StructuralMaterial, m::M, - mat_elements::Vector{<:AbstractElement}=Vector{AbstractElement}()) where {M<:AbstractMaterial} + mat_elements::Vector{<:AbstractElement} = Vector{AbstractElement}()) where {M <: + AbstractMaterial} insert!(element_materials(sm), m, mat_elements) end "Replace the `AbstractMaterial` with the label `l` for the new material `new_m` in the `StructuralMaterial` `sm`. The previous material `Element`s are assigned to the new." function Base.replace!(sm::StructuralMaterial, - new_material::AbstractMaterial, - label::Label=label(new_material)) + new_material::AbstractMaterial, + label::Label = label(new_material)) old_material = sm[label] material_elements = sm[old_material] delete!(sm, old_material) diff --git a/src/StructuralModel/Structures.jl b/src/StructuralModel/Structures.jl index f87d80e31..53aaf1174 100644 --- a/src/StructuralModel/Structures.jl +++ b/src/StructuralModel/Structures.jl @@ -22,7 +22,8 @@ using ..Utils elements, num_elements @reexport import ..Handlers: PointEvalHandler, mesh -export AbstractStructure, Structure, materials, boundary_conditions, num_free_dofs, free_dofs +export AbstractStructure, Structure, materials, boundary_conditions, num_free_dofs, + free_dofs # ========== # Structure @@ -60,7 +61,7 @@ structural analysis. * [`materials`](@ref) """ -abstract type AbstractStructure{dim,M,E} end +abstract type AbstractStructure{dim, M, E} end # Mesh methods "Return the structure mesh." @@ -107,27 +108,27 @@ materials(s::AbstractStructure) = s.materials """ An `Structure` object facilitates the process of assembling and creating the structural analysis. """ -struct Structure{dim,MESH,MAT,E,NB,LB} <: AbstractStructure{dim,MAT,E} +struct Structure{dim, MESH, MAT, E, NB, LB} <: AbstractStructure{dim, MAT, E} "Stores the structure's mesh." mesh::MESH "Stores the structure's materials and elements assignments." - materials::StructuralMaterial{MAT,E} + materials::StructuralMaterial{MAT, E} "Stores the structure's boundary conditions and elements assignments." - bcs::StructuralBoundaryCondition{NB,LB} + bcs::StructuralBoundaryCondition{NB, LB} "Stores the structure's free degrees of freedom." free_dofs::Vector{Dof} function Structure(mesh::MESH, - materials::StructuralMaterial{MAT,E}, - bcs::StructuralBoundaryCondition{NB,LB}, - free_dofs::Vector{Dof}) where {dim,MESH<:AbstractMesh{dim},MAT,E,NB,LB} - new{dim,MESH,MAT,E,NB,LB}(mesh, materials, bcs, free_dofs) + materials::StructuralMaterial{MAT, E}, + bcs::StructuralBoundaryCondition{NB, LB}, + free_dofs::Vector{Dof}) where {dim, MESH <: AbstractMesh{dim}, MAT, E, NB, LB} + new{dim, MESH, MAT, E, NB, LB}(mesh, materials, bcs, free_dofs) end end "Constructor for a structure with mesh, materials and boundary conditions." function Structure(mesh::AbstractMesh{dim}, - materials::StructuralMaterial{M,E}, - bcs::StructuralBoundaryCondition{NB,LB}) where {dim,M,E,NB,LB} + materials::StructuralMaterial{M, E}, + bcs::StructuralBoundaryCondition{NB, LB}) where {dim, M, E, NB, LB} # Retrieve all (free) dofs in the mesh. default_free_dofs = Vector{Dof}() for n in nodes(mesh) @@ -143,9 +144,9 @@ end "Constructor for a structure given a mesh file, and their corresponding structural materials, structural elements and structural boundary conditions." function Structure(msh_file::MshFile, - materials::StructuralMaterial, bcs::StructuralBoundaryCondition, - s_entities::StructuralEntity, - dofs_to_dim::Dictionary{Field,<:Integer}=dictionary([:u => 3])) + materials::StructuralMaterial, bcs::StructuralBoundaryCondition, + s_entities::StructuralEntity, + dofs_to_dim::Dictionary{Field, <:Integer} = dictionary([:u => 3])) nodes = msh_file.vec_nodes mesh = Mesh(; nodes) @@ -194,15 +195,16 @@ function Base.show(io::IO, s::Structure) end "Constructor of a point eval handler from a structure and a vector of points ." -function PointEvalHandler(s::Structure, vec_points::AbstractVector{P}) where {T,P<:Point{T}} +function PointEvalHandler( + s::Structure, vec_points::AbstractVector{P}) where {T, P <: Point{T}} PointEvalHandler(mesh(s), vec_points) end "Replace a material with the a label for the new material in the structure. The previous material element's are assigned to the new." function Base.replace!(s::Structure, - new_material::AbstractMaterial, - label::Label=label(new_material)) + new_material::AbstractMaterial, + label::Label = label(new_material)) replace!(materials(s), new_material, label) end diff --git a/src/StructuralSolvers/Assemblers.jl b/src/StructuralSolvers/Assemblers.jl index 06a38f32f..44a928df0 100644 --- a/src/StructuralSolvers/Assemblers.jl +++ b/src/StructuralSolvers/Assemblers.jl @@ -13,7 +13,7 @@ using ..Structures export Assembler, assemble!, end_assemble, end_assemble!, reset! "Struct that stores column indexes, row indexes and values for the assemble process." -struct Assembler{T,DT} +struct Assembler{T, DT} "Column indexes." I::Vector{Int} "Row indexes." @@ -25,7 +25,7 @@ struct Assembler{T,DT} end "Constructor of an `Assembler` with size of the sparse matrix `N` ." -function Assembler(N::Integer, cache=nothing) +function Assembler(N::Integer, cache = nothing) I = Int[] J = Int[] V = Float64[] @@ -36,25 +36,26 @@ function Assembler(N::Integer, cache=nothing) return Assembler(I, J, V, cache) end -Assembler(s::AbstractStructure, cache=nothing) = Assembler(num_free_dofs(s), cache) +Assembler(s::AbstractStructure, cache = nothing) = Assembler(num_free_dofs(s), cache) function elements_cache(a::Assembler, e::AbstractElement) a.cache[nameof(typeof(e))] end "Assembles the element matrix `Ke` into the `Assembler` struct `a`." -function assemble!(a::Assembler{T}, dofs::AbstractVector{Dof}, Ke::AbstractMatrix{T}) where {T} +function assemble!( + a::Assembler{T}, dofs::AbstractVector{Dof}, Ke::AbstractMatrix{T}) where {T} return assemble!(a, dofs, dofs, Ke) end "Assembles the matrix `Ke` into `Assembler` `a` according to the dofs specified by `row_dof_indexes` and `col_dof_indexes`." function assemble!(a::Assembler{T}, - row_dof_indexes::AbstractVector{Int}, - col_dof_indexes::AbstractVector{Int}, - Ke::AbstractMatrix{T}) where {T} + row_dof_indexes::AbstractVector{Int}, + col_dof_indexes::AbstractVector{Int}, + Ke::AbstractMatrix{T}) where {T} nrows = length(row_dof_indexes) ncols = length(col_dof_indexes) - @assert size(Ke) == (nrows, ncols) "The size of the element matrix Ke does not match the number of dofs." + @assert size(Ke)==(nrows, ncols) "The size of the element matrix Ke does not match the number of dofs." append!(a.V, Ke) @inbounds for i in 1:ncols diff --git a/src/StructuralSolvers/Solutions.jl b/src/StructuralSolvers/Solutions.jl index 307ff2ace..f916482d2 100644 --- a/src/StructuralSolvers/Solutions.jl +++ b/src/StructuralSolvers/Solutions.jl @@ -23,10 +23,11 @@ using ..StaticStates using ..StructuralSolvers @reexport import ..StructuralAnalyses: displacements, external_forces, iteration_residuals -@reexport import ..StructuralSolvers: residual_forces_tol, displacement_tol, criterion, iterations +@reexport import ..StructuralSolvers: residual_forces_tol, displacement_tol, criterion, + iterations @reexport import ..Entities: internal_forces, inertial_forces, strain, stress -export AbstractSolution, Solution, analysis, solver, +export AbstractSolution, Solution, analysis, solver, states, displacements, external_forces, iteration_residuals, deformed_node_positions """ @@ -54,9 +55,9 @@ solver(sol::AbstractSolution) = sol.solver """ Solution that stores all intermediate arrays during the analysis. """ -struct Solution{ST<:AbstractStaticState, - A<:AbstractStructuralAnalysis, - SS<:Union{AbstractSolver,LinearSolver}} <: AbstractSolution +struct Solution{ST <: AbstractStaticState, + A <: AbstractStructuralAnalysis, + SS <: Union{AbstractSolver, LinearSolver}} <: AbstractSolution "Vector containing the converged structural states at each step." states::Vector{ST} "Analysis solved." @@ -67,8 +68,8 @@ end "Constructor with empty `AbstractStructuralState`s `Vector` and type `S`." function Solution(analysis::A, - solver::SS) where {A<:AbstractStructuralAnalysis, - SS<:Union{AbstractSolver,LinearSolver}} + solver::SS) where {A <: AbstractStructuralAnalysis, + SS <: Union{AbstractSolver, LinearSolver}} # TODO Use concrete types. state = current_state(analysis) @@ -86,12 +87,12 @@ function Solution(analysis::A, states[i] = StaticState(sol_Uᵏ, sol_ϵᵏ, sol_σᵏ) end - Solution{StaticState,A,SS}(states, analysis, solver) + Solution{StaticState, A, SS}(states, analysis, solver) end "Generic minimal show method for a generic `solution`" function Base.show(io::IO, ::MIME"text/plain", - solution::Solution) + solution::Solution) println("Analysis solved:") println("----------------\n") show(io, analysis(solution)) @@ -104,31 +105,32 @@ end "Print the solution table" function _print_table(solution::AbstractSolution) header = ["iter", "time", "||Uᵏ||", "||ΔUᵏ||/||Uᵏ||", "||ΔRᵏ||", "||ΔRᵏ||/||Fₑₓₜ||", - "convergence criterion", "iterations"] + "convergence criterion", "iterations"] ΔU_rel = getindex.(displacement_tol(solution), 1) ΔU = getindex.(displacement_tol(solution), 2) ΔR_rel = getindex.(residual_forces_tol(solution), 1) ΔR = getindex.(residual_forces_tol(solution), 2) t = analysis(solution).λᵥ - criterions = [string(criterion_step)[1:(end - 2)] for criterion_step in criterion(solution)] + criterions = [string(criterion_step)[1:(end - 2)] + for criterion_step in criterion(solution)] iters = iterations(solution) num_times = length(t) data = hcat(collect(1:num_times), t, ΔU, ΔU_rel, ΔR, ΔR_rel, criterions, iters) hl = Highlighter(; - f=(data, i, j) -> i % 2 == 0, - crayon=Crayon(; foreground=:white, background=:black, bold=:true)) + f = (data, i, j) -> i % 2 == 0, + crayon = Crayon(; foreground = :white, background = :black, bold = :true)) pretty_table(data; - highlighters=hl, - header=header, - display_size=(20, 1000), - vcrop_mode=:middle, - formatters=(ft_printf("%i", [1]), - ft_printf("%.2f", [2]), - ft_printf("%e", [3, 4, 5, 6])), - alignment=:c) + highlighters = hl, + header = header, + display_size = (20, 1000), + vcrop_mode = :middle, + formatters = (ft_printf("%i", [1]), + ft_printf("%.2f", [2]), + ft_printf("%e", [3, 4, 5, 6])), + alignment = :c) end "Return the solved states." @@ -142,11 +144,13 @@ for f in [:displacements, :internal_forces, :external_forces] @eval $f(st_sol::Solution, dof::Dof) = getindex.($f(st_sol), Utils.index(dof)) "Return the $f at a certain dof at `time_index` time step." - @eval $f(st_sol::Solution, dof::Dof, time_index::Integer) = getindex($f(st_sol)[time_index], - Utils.index(dof)) + @eval $f(st_sol::Solution, dof::Dof, time_index::Integer) = getindex( + $f(st_sol)[time_index], + Utils.index(dof)) "Return the $f at a certain dof's vector at `time_index` time step." - @eval $f(st_sol::Solution, vdof::Vector{Dof}, time_index::Integer) = [getindex($f(st_sol)[time_index], - Utils.index(dof)) + @eval $f(st_sol::Solution, vdof::Vector{Dof}, time_index::Integer) = [getindex( + $f(st_sol)[time_index], + Utils.index(dof)) for dof in vdof] "Return the $f at a certain dof's vector for every time step." diff --git a/src/StructuralSolvers/StructuralSolvers.jl b/src/StructuralSolvers/StructuralSolvers.jl index 3188246c8..3d477db8f 100644 --- a/src/StructuralSolvers/StructuralSolvers.jl +++ b/src/StructuralSolvers/StructuralSolvers.jl @@ -28,7 +28,7 @@ const INITIAL_Δ = 1e12 "Default LinearSolve.jl solver" const DEFAULT_LINEAR_SOLVER = IterativeSolversJL_CG "LinearSolve solver object. If is `nothing` default algorithm by `LinearSolve.jl`` is used." -const LinearSolver = Union{SciMLBase.AbstractLinearAlgorithm,Nothing} +const LinearSolver = Union{SciMLBase.AbstractLinearAlgorithm, Nothing} """ Facilitates the process of defining and checking numerical convergence. @@ -112,8 +112,9 @@ residual_forces_tol(ri_step::ResidualsIterationStep) = (ri_step.Δr_rel, ri_step displacement_tol(ri_step::ResidualsIterationStep) = (ri_step.ΔU_rel, ri_step.ΔU_norm) "Sets the iteration step to 0." -function reset!(ri_step::ResidualsIterationStep{T}) where {T<:Real} - ri_step.ΔU_norm = ri_step.Δr_norm = ri_step.ΔU_rel = ri_step.Δr_rel = INITIAL_Δ * ones(T)[1] +function reset!(ri_step::ResidualsIterationStep{T}) where {T <: Real} + ri_step.ΔU_norm = ri_step.Δr_norm = ri_step.ΔU_rel = ri_step.Δr_rel = INITIAL_Δ * + ones(T)[1] ri_step.iter = 0 ri_step.criterion = NotConvergedYet() ri_step @@ -132,8 +133,9 @@ function update!(ri_step::ResidualsIterationStep, criterion::AbstractConvergence end "Updates the iteration step with the current values of the displacement and forces residuals." -function update!(ri_step::ResidualsIterationStep, ΔU_norm::Real, ΔU_rel::Real, Δr_norm::Real, - Δr_rel::Real) +function update!( + ri_step::ResidualsIterationStep, ΔU_norm::Real, ΔU_rel::Real, Δr_norm::Real, + Δr_rel::Real) ri_step.ΔU_norm = ΔU_norm ri_step.ΔU_rel = ΔU_rel ri_step.Δr_norm = Δr_norm @@ -147,8 +149,8 @@ function isconverged!(ri_step::ResidualsIterationStep, cs::ConvergenceSettings) ΔU_relᵏ, ΔU_normᵏ = displacement_tol(ri_step) Δr_relᵏ, Δr_normᵏ = residual_forces_tol(ri_step) - @assert ΔU_relᵏ > 0 "Residual displacements norm must be greater than 0." - @assert Δr_relᵏ > 0 "Residual forces norm must be greater than 0." + @assert ΔU_relᵏ>0 "Residual displacements norm must be greater than 0." + @assert Δr_relᵏ>0 "Residual forces norm must be greater than 0." ΔU_rel_tol = displacement_tol(cs) Δr_rel_tol = residual_forces_tol(cs) @@ -185,7 +187,7 @@ tolerances(solver::AbstractSolver) = solver.tol "Computes a step in time on the `analysis` considering the numerical `AbstractSolver` `solver`." function step!(solver::AbstractSolver, - analysis::AbstractStructuralAnalysis) end + analysis::AbstractStructuralAnalysis) end "Increment the time step given of a structural analysis. Dispatch is done for different solvers." @@ -199,9 +201,9 @@ function tangent_matrix(st::AbstractStructuralState, alg::AbstractSolver) end # =============== function solve(problem::AbstractStructuralAnalysis, - solver::Union{AbstractSolver,Nothing}=nothing, - args...; - kwargs...) + solver::Union{AbstractSolver, Nothing} = nothing, + args...; + kwargs...) solve!(deepcopy(problem), solver, args...; kwargs...) end @@ -215,16 +217,16 @@ to be provided. Also a linear solver form LinearSolve.jl package can by provided By default `DEFAULT_LINEAR_SOLVER` is utilized. """ function solve!(problem::AbstractStructuralAnalysis, - solver::Union{AbstractSolver,Nothing}=nothing, - linear_solve::LinearSolver=DEFAULT_LINEAR_SOLVER(); - linear_solve_inplace::Bool=false) + solver::Union{AbstractSolver, Nothing} = nothing, + linear_solve::LinearSolver = DEFAULT_LINEAR_SOLVER(); + linear_solve_inplace::Bool = false) _solve!(problem, solver, linear_solve; linear_solve_inplace) end "Internal solve function to be overloaded by each analysis" function _solve!(problem::AbstractStructuralAnalysis, - solver::Union{AbstractSolver,Nothing}, - args...; kwargs...) end + solver::Union{AbstractSolver, Nothing}, + args...; kwargs...) end function _default_linear_solver_tolerances(A::AbstractMatrix{<:Real}, b::Vector{<:Real}) abstol = zero(real(eltype(b))) diff --git a/src/Utils.jl b/src/Utils.jl index c6c91e93b..fe369cc85 100644 --- a/src/Utils.jl +++ b/src/Utils.jl @@ -25,13 +25,13 @@ function apply! end #==================# "Return an eye matrix of size m and type T." -eye(m::Integer, T=Bool) = Diagonal(ones(T, m)) +eye(m::Integer, T = Bool) = Diagonal(ones(T, m)) "Transforms a vector of vectors into a 1D row vector." row_vector(v::Vector{<:AbstractVector{T}}) where {T} = reduce(vcat, v) function fill_symmetric_matrix!(S::Symmetric{T}, - S₁₁::T, S₂₂::T, S₃₃::T, S₂₃::T, S₁₃::T, S₁₂::T) where {T} + S₁₁::T, S₂₂::T, S₃₃::T, S₂₃::T, S₁₃::T, S₁₂::T) where {T} A = parent(S) S[1, 1] = S₁₁ S[2, 2] = S₂₂ @@ -46,7 +46,7 @@ const INDEXES_TO_VOIGT = [(1, 1), (2, 2), (3, 3), (2, 3), (1, 3), (1, 2)] #TODO: Replace indexes "Return the tensor `𝕋` in Voigt notation." -function voigt(𝕋::AbstractMatrix, α::Real=1) +function voigt(𝕋::AbstractMatrix, α::Real = 1) return [𝕋[1, 1], 𝕋[2, 2], 𝕋[3, 3], α * 𝕋[2, 3], α * 𝕋[1, 3], α * 𝕋[1, 2]] end @@ -68,13 +68,13 @@ end #==================# "Used to assign labels to geometric or physical entities." -const Label = Union{String,Symbol} +const Label = Union{String, Symbol} "Label to design an entity without assigned label." const NO_LABEL = :no_label "Physical paramater defining density of a material (`nothing` reserved for static cases)." -const Density = Union{Float64,Nothing} +const Density = Union{Float64, Nothing} "Type alias used for field labels as degree-of-freedom keys such as `:T` or `:θ`." const Field = Symbol diff --git a/test/aqua.jl b/test/aqua.jl index 1b1a39b90..7f3736b67 100644 --- a/test/aqua.jl +++ b/test/aqua.jl @@ -3,6 +3,6 @@ using ONSAS @testset "Aqua.jl" begin Aqua.test_all(ONSAS; - ambiguities=false) - Aqua.test_ambiguities(ONSAS; broken=true) + ambiguities = false) + Aqua.test_ambiguities(ONSAS; broken = true) end diff --git a/test/boundary_conditions/boundary_conditions.jl b/test/boundary_conditions/boundary_conditions.jl index 2267e314a..799f7376f 100644 --- a/test/boundary_conditions/boundary_conditions.jl +++ b/test/boundary_conditions/boundary_conditions.jl @@ -13,17 +13,17 @@ using ONSAS.Tetrahedrons # Entities n₁ = Node(0, 0, 0, - dictionary([:u => [Dof(1), Dof(2), Dof(3)], :θ => [Dof(13), Dof(14), Dof(15)], - :T => [Dof(25)]])) + dictionary([:u => [Dof(1), Dof(2), Dof(3)], :θ => [Dof(13), Dof(14), Dof(15)], + :T => [Dof(25)]])) n₂ = Node(0, 1, 0, - dictionary([:u => [Dof(4), Dof(5), Dof(6)], :θ => [Dof(16), Dof(17), Dof(18)], - :T => [Dof(26)]])) + dictionary([:u => [Dof(4), Dof(5), Dof(6)], :θ => [Dof(16), Dof(17), Dof(18)], + :T => [Dof(26)]])) n₃ = Node(0, 0, 1, - dictionary([:u => [Dof(7), Dof(8), Dof(9)], :θ => [Dof(19), Dof(20), Dof(21)], - :T => [Dof(27)]])) + dictionary([:u => [Dof(7), Dof(8), Dof(9)], :θ => [Dof(19), Dof(20), Dof(21)], + :T => [Dof(27)]])) n₄ = Node(2, 0, 1, - dictionary([:u => [Dof(10), Dof(11), Dof(12)], :θ => [Dof(22), Dof(23), Dof(24)], - :T => [Dof(28)]])) + dictionary([:u => [Dof(10), Dof(11), Dof(12)], :θ => [Dof(22), Dof(23), Dof(24)], + :T => [Dof(28)]])) t_face = TriangularFace(n₁, n₂, n₃) tetra = Tetrahedron(n₁, n₂, n₃, n₄) diff --git a/test/cross_sections/cross_sections.jl b/test/cross_sections/cross_sections.jl index e9b600ccb..93d3a63d8 100644 --- a/test/cross_sections/cross_sections.jl +++ b/test/cross_sections/cross_sections.jl @@ -16,7 +16,8 @@ const TOLERANCE = 1e-4 a = rand_dim_1 square = Square(a) @test area(square) == a^2 - @test Ixx(square) ≈ a / 2 * (a / 2)^3 * (16 / 3 - 3.36 * (1 - (a / 2)^4 / (12 * (a / 2)^4))) rtol = TOLERANCE + @test Ixx(square)≈a / 2 * (a / 2)^3 * + (16 / 3 - 3.36 * (1 - (a / 2)^4 / (12 * (a / 2)^4))) rtol=TOLERANCE @test Iyy(square) == Izz(square) == a^4 / 12 @test Ixy(square) == Ixz(square) == Iyz(square) == 0 end diff --git a/test/entities/tetrahedrons.jl b/test/entities/tetrahedrons.jl index 215cc9115..bb7eb9c0f 100644 --- a/test/entities/tetrahedrons.jl +++ b/test/entities/tetrahedrons.jl @@ -8,11 +8,14 @@ using ONSAS.Entities const RTOL = 1e-3 -n₁ = Node(0, 0, 0, dictionary([:u => [Dof(1), Dof(2), Dof(3)], :θ => [Dof(13), Dof(14), Dof(15)]])) -n₂ = Node(0, 1, 0, dictionary([:u => [Dof(4), Dof(5), Dof(6)], :θ => [Dof(16), Dof(17), Dof(18)]])) -n₃ = Node(0, 0, 1, dictionary([:u => [Dof(7), Dof(8), Dof(9)], :θ => [Dof(19), Dof(20), Dof(21)]])) +n₁ = Node(0, 0, 0, + dictionary([:u => [Dof(1), Dof(2), Dof(3)], :θ => [Dof(13), Dof(14), Dof(15)]])) +n₂ = Node(0, 1, 0, + dictionary([:u => [Dof(4), Dof(5), Dof(6)], :θ => [Dof(16), Dof(17), Dof(18)]])) +n₃ = Node(0, 0, 1, + dictionary([:u => [Dof(7), Dof(8), Dof(9)], :θ => [Dof(19), Dof(20), Dof(21)]])) n₄ = Node(2, 0, 1, - dictionary([:u => [Dof(10), Dof(11), Dof(12)], :θ => [Dof(22), Dof(23), Dof(24)]])) + dictionary([:u => [Dof(10), Dof(11), Dof(12)], :θ => [Dof(22), Dof(23), Dof(24)]])) λ = 0.5769 G = 0.3846 @@ -32,15 +35,15 @@ u_global₄_u = [1.0, 1.1, 1.2] u_global₄_θ = rand(3) u_global_structure = vcat(u_global₁_u, u_global₂_u, u_global₃_u, u_global₄_u, - u_global₁_θ, u_global₂_θ, u_global₃_θ, u_global₄_θ) + u_global₁_θ, u_global₂_θ, u_global₃_θ, u_global₄_θ) n₁ = Node(0.0, 0.0, 0.0, - dictionary([:u => [Dof(1), Dof(2), Dof(3)], :θ => [Dof(13), Dof(14), Dof(15)]])) + dictionary([:u => [Dof(1), Dof(2), Dof(3)], :θ => [Dof(13), Dof(14), Dof(15)]])) n₂ = Node(0.0, 1.0, 0.0, - dictionary([:u => [Dof(4), Dof(5), Dof(6)], :θ => [Dof(16), Dof(17), Dof(18)]])) + dictionary([:u => [Dof(4), Dof(5), Dof(6)], :θ => [Dof(16), Dof(17), Dof(18)]])) n₃ = Node(0.0, 0.0, 1.0, - dictionary([:u => [Dof(7), Dof(8), Dof(9)], :θ => [Dof(19), Dof(20), Dof(21)]])) + dictionary([:u => [Dof(7), Dof(8), Dof(9)], :θ => [Dof(19), Dof(20), Dof(21)]])) n₄ = Node(2.0, 0.0, 1.0, - dictionary([:u => [Dof(10), Dof(11), Dof(12)], :θ => [Dof(22), Dof(23), Dof(24)]])) + dictionary([:u => [Dof(10), Dof(11), Dof(12)], :θ => [Dof(22), Dof(23), Dof(24)]])) @testset "ONSAS.Entities.Tetrahedron 3D SVK" begin tetra_no_label = Tetrahedron(n₁, n₂, n₃, n₄) @@ -63,13 +66,13 @@ n₄ = Node(2.0, 0.0, 1.0, @test volume(tetra) == 2 * 1 / 6 fᵢₙₜ_e, Kᵢₙₜ_e, σ_e, ϵ_e = internal_forces(my_svk_mat, tetra, - u_global_structure[local_dofs(tetra)]) + u_global_structure[local_dofs(tetra)]) # Values from ONSAS.m fᵢₙₜ_e_test = [-0.9160, -1.3446, -1.5253, 0.3319, 0.7067, 0.4415, - 0.3120, 0.5210, 0.9390, 0.2720, 0.1169, 0.1448] + 0.3120, 0.5210, 0.9390, 0.2720, 0.1169, 0.1448] - Kᵢₙₜ_e_test = [ 2.1635e+00 7.8458e-01 8.6150e-01 -9.4812e-01 -4.1633e-01 -2.8172e-01 -9.4668e-01 -2.1522e-01 -4.2675e-01 -2.6874e-01 -1.5304e-01 -1.5304e-01 + Kᵢₙₜ_e_test = [2.1635e+00 7.8458e-01 8.6150e-01 -9.4812e-01 -4.1633e-01 -2.8172e-01 -9.4668e-01 -2.1522e-01 -4.2675e-01 -2.6874e-01 -1.5304e-01 -1.5304e-01 7.8458e-01 3.1379e+00 1.5089e+00 -3.7787e-01 -1.6917e+00 -6.0222e-01 -1.8797e-01 -1.2976e+00 -8.6102e-01 -2.1874e-01 -1.4855e-01 -4.5671e-02 8.6150e-01 1.5089e+00 3.2917e+00 -3.0095e-01 -7.2401e-01 -1.1596e+00 -3.4181e-01 -7.3923e-01 -1.9835e+00 -2.1874e-01 -4.5671e-02 -1.4855e-01 -9.4812e-01 -3.7787e-01 -3.0095e-01 7.0582e-01 2.4326e-01 1.8557e-01 1.4951e-01 3.4454e-02 8.8939e-02 9.2785e-02 1.0016e-01 2.6441e-02 @@ -86,13 +89,13 @@ n₄ = Node(2.0, 0.0, 1.0, 0.585 1.87 1.44 1.02 1.44 3.28] - σ_e_test = [ -5.9378 -7.8126 -9.5331 + σ_e_test = [-5.9378 -7.8126 -9.5331 1.6136 1.2953 1.6735 1.7335 2.5078 4.0564] - @test fᵢₙₜ_e ≈ fᵢₙₜ_e_test rtol = RTOL - @test Kᵢₙₜ_e ≈ Kᵢₙₜ_e_test rtol = RTOL - @test 𝔼_e_test ≈ ϵ_e rtol = RTOL + @test fᵢₙₜ_e≈fᵢₙₜ_e_test rtol=RTOL + @test Kᵢₙₜ_e≈Kᵢₙₜ_e_test rtol=RTOL + @test 𝔼_e_test≈ϵ_e rtol=RTOL # @test σ_e_test ≈ σ_e rtol = RTOL skip = true # create entity for gmsh @@ -103,8 +106,8 @@ n₄ = Node(2.0, 0.0, 1.0, # at the nodes should be one w₁ = weights(tetra, coordinates(n₁)) w₄ = weights(tetra, coordinates(n₄)) - @test w₁ ≈ [1.0, 0.0, 0.0, 0.0] rtol = RTOL - @test w₄ ≈ [0.0, 0.0, 0.0, 1.0] rtol = RTOL + @test w₁≈[1.0, 0.0, 0.0, 0.0] rtol=RTOL + @test w₄≈[0.0, 0.0, 0.0, 1.0] rtol=RTOL # The interpolation for a linear scalar field shloud be exact scalar_linear_field(x, y, z) = 10x + 20y + 30z + 40 @@ -112,14 +115,15 @@ n₄ = Node(2.0, 0.0, 1.0, p = Point(0.5, 0.5, 0.5) exact_solution = scalar_linear_field(p...) interpolated_solution = dot(sol_at_tetra_nodes, weights(tetra, p)) - @test interpolated_solution ≈ exact_solution rtol = RTOL + @test interpolated_solution≈exact_solution rtol=RTOL end @testset "ONSAS.Entities.Tetrahedron 3D IsotropicLinearElastic" begin - my_lin_mat = IsotropicLinearElastic(elasticity_modulus(my_svk_mat), shear_modulus(my_svk_mat)) + my_lin_mat = IsotropicLinearElastic( + elasticity_modulus(my_svk_mat), shear_modulus(my_svk_mat)) fᵢₙₜ_e, Kᵢₙₜ_e, σ_e, ϵ_e = internal_forces(my_lin_mat, tetra, - u_global_structure[local_dofs(tetra)]) + u_global_structure[local_dofs(tetra)]) # Test internal forces with an HyperElastic material model and zero 𝑢 equivalent_svk = SVK(lame_parameters(my_lin_mat)...) @@ -127,6 +131,6 @@ end fᵢₙₜ_e_svk = Kᵢₙₜ_e_svk * u_global_structure[local_dofs(tetra)] - @test fᵢₙₜ_e_svk ≈ fᵢₙₜ_e rtol = RTOL - @test Kᵢₙₜ_e_svk ≈ Kᵢₙₜ_e rtol = RTOL + @test fᵢₙₜ_e_svk≈fᵢₙₜ_e rtol=RTOL + @test Kᵢₙₜ_e_svk≈Kᵢₙₜ_e rtol=RTOL end diff --git a/test/entities/triangular_faces.jl b/test/entities/triangular_faces.jl index 4b2e6b306..90eda6be6 100644 --- a/test/entities/triangular_faces.jl +++ b/test/entities/triangular_faces.jl @@ -9,9 +9,12 @@ using ONSAS.TriangularFaces x₂ = [1, 0, 0] x₃ = [0, 1, 0] - n₁ = Node(x₁, dictionary([:u => [Dof(1), Dof(2), Dof(3)], :θ => [Dof(13), Dof(14), Dof(15)]])) - n₂ = Node(x₂, dictionary([:u => [Dof(4), Dof(5), Dof(6)], :θ => [Dof(16), Dof(17), Dof(18)]])) - n₃ = Node(x₃, dictionary([:u => [Dof(7), Dof(8), Dof(9)], :θ => [Dof(19), Dof(20), Dof(21)]])) + n₁ = Node( + x₁, dictionary([:u => [Dof(1), Dof(2), Dof(3)], :θ => [Dof(13), Dof(14), Dof(15)]])) + n₂ = Node( + x₂, dictionary([:u => [Dof(4), Dof(5), Dof(6)], :θ => [Dof(16), Dof(17), Dof(18)]])) + n₃ = Node( + x₃, dictionary([:u => [Dof(7), Dof(8), Dof(9)], :θ => [Dof(19), Dof(20), Dof(21)]])) face_label = "my_face" f_empty_nodes = TriangularFace(face_label) diff --git a/test/entities/trusses.jl b/test/entities/trusses.jl index f6dc1219f..56cd913e5 100644 --- a/test/entities/trusses.jl +++ b/test/entities/trusses.jl @@ -9,7 +9,7 @@ using ONSAS.Entities E = 1.0 ν = 0.3 -my_svk_mat = SVK(; E=E, ν=ν) +my_svk_mat = SVK(; E = E, ν = ν) const RTOL = 1e-3 @@ -49,14 +49,15 @@ const RTOL = 1e-3 @test string(label(t)) == my_label @test strain_model(t) == strain - fᵢₙₜ_e, Kᵢₙₜ_e, σ_e, ϵ_e = internal_forces(my_svk_mat, t, u_global_structure[local_dofs(t)]) + fᵢₙₜ_e, Kᵢₙₜ_e, σ_e, ϵ_e = internal_forces( + my_svk_mat, t, u_global_structure[local_dofs(t)]) ϵ_rot_ing = (l_def^2 - l_ref^2) / (l_ref * (l_ref + l_def)) - @test ϵ_e[1, 1] ≈ ϵ_rot_ing rtol = RTOL - @test σ_e[1, 1] ≈ E * ϵ_rot_ing * l_def / l_ref rtol = RTOL - @test fᵢₙₜ_e[1] ≈ -E * ϵ_rot_ing * A rtol = RTOL - @test fᵢₙₜ_e[2] ≈ E * ϵ_rot_ing * A rtol = RTOL - @test Kᵢₙₜ_e ≈ Kᵢₙₜ_e[1, 1] * [1 -1; -1 1] rtol = RTOL + @test ϵ_e[1, 1]≈ϵ_rot_ing rtol=RTOL + @test σ_e[1, 1]≈E * ϵ_rot_ing * l_def / l_ref rtol=RTOL + @test fᵢₙₜ_e[1]≈-E * ϵ_rot_ing * A rtol=RTOL + @test fᵢₙₜ_e[2]≈E * ϵ_rot_ing * A rtol=RTOL + @test Kᵢₙₜ_e≈Kᵢₙₜ_e[1, 1] * [1 -1; -1 1] rtol=RTOL end @testset "ONSAS.Entities.Truss 3D" begin @@ -64,8 +65,10 @@ end # General case considering a mesh with rotations x₁ = [-1, 0, 0] x₂ = [1, 0, 0] - n₁ = Node(x₁, dictionary([:u => [Dof(1), Dof(3), Dof(5)], :θ => [Dof(2), Dof(4), Dof(6)]])) - n₂ = Node(x₂, dictionary([:u => [Dof(7), Dof(9), Dof(11)], :θ => [Dof(8), Dof(10), Dof(12)]])) + n₁ = Node( + x₁, dictionary([:u => [Dof(1), Dof(3), Dof(5)], :θ => [Dof(2), Dof(4), Dof(6)]])) + n₂ = Node( + x₂, dictionary([:u => [Dof(7), Dof(9), Dof(11)], :θ => [Dof(8), Dof(10), Dof(12)]])) # global displacements u_gobal_₁ = [0, 0, 0, 0, 0, 0]# uᵢ, θᵢ :uⱼ, θⱼ uₖ, θₖ (node 1) u_gobal_₂ = [0, 0, 0, 0, 0, 0]# uᵢ, θᵢ :uⱼ, θⱼ uₖ, θₖ (node 2) @@ -94,13 +97,16 @@ end @test all([n ∈ coordinates(t) for n in coordinates([n₁, n₂])]) @test cross_section(t) == square_cross_section truss_dofs = dofs(t) - @test all([d ∈ truss_dofs[:u] for d in [Dof(1), Dof(3), Dof(5), Dof(7), Dof(9), Dof(11)]]) - @test all([d ∈ truss_dofs[:θ] for d in [Dof(2), Dof(4), Dof(6), Dof(8), Dof(10), Dof(12)]]) + @test all([d ∈ truss_dofs[:u] + for d in [Dof(1), Dof(3), Dof(5), Dof(7), Dof(9), Dof(11)]]) + @test all([d ∈ truss_dofs[:θ] + for d in [Dof(2), Dof(4), Dof(6), Dof(8), Dof(10), Dof(12)]]) @test local_dof_symbol(t) == [:u] @test local_dofs(t) == [Dof(1), Dof(3), Dof(5), Dof(7), Dof(9), Dof(11)] @test string(label(t)) == my_label - fᵢₙₜ_e, Kᵢₙₜ_e, σ_e, ϵ_e = internal_forces(my_svk_mat, t, u_global_structure[local_dofs(t)]) + fᵢₙₜ_e, Kᵢₙₜ_e, σ_e, ϵ_e = internal_forces( + my_svk_mat, t, u_global_structure[local_dofs(t)]) strain(t, u_global_structure[local_dofs(t)]) == ϵ_e stress(t, u_global_structure[local_dofs(t)]) == σ_e @test norm(fᵢₙₜ_e) == 0 diff --git a/test/interfaces/gmsh.jl b/test/interfaces/gmsh.jl index 2d44260bc..1de004e23 100644 --- a/test/interfaces/gmsh.jl +++ b/test/interfaces/gmsh.jl @@ -41,13 +41,14 @@ include(path) end msh_path = joinpath(dir, file_name) msh_file = MshFile(msh_path) - rm(file_name; force=true) + rm(file_name; force = true) @test nodes(msh_file) == msh_file.vec_nodes @test length(physical_index(msh_file)) == length(connectivity(msh_file)) @test dimension(msh_file) == dimension(first(nodes(msh_file))) @test material_label(msh_file) == ["", "", "", "", "svkHyper"] - @test entity_label(msh_file) == ["triangle", "triangle", "triangle", "triangle", "tetrahedron"] + @test entity_label(msh_file) == + ["triangle", "triangle", "triangle", "triangle", "tetrahedron"] @test bc_label(msh_file) == ["fixed-ux", "fixed-uj", "fixed-uk", "tension", ""] entity_index = 100 diff --git a/test/interfaces/vtk.jl b/test/interfaces/vtk.jl index 5d1b710a3..84df36365 100644 --- a/test/interfaces/vtk.jl +++ b/test/interfaces/vtk.jl @@ -22,7 +22,7 @@ using ONSAS.Nodes n7 = Node(Lx, Ly, Lz) n8 = Node(Lx, Ly, 0.0) vec_nodes = [n1, n2, n3, n4, n5, n6, n7, n8] - msh = Mesh(; nodes=vec_nodes) + msh = Mesh(; nodes = vec_nodes) ## Faces f1 = TriangularFace(n5, n8, n6) @@ -63,11 +63,12 @@ using ONSAS.Nodes tensor_cell_data = [rand(3, 3) for _ in elements(msh)] VTKMeshFile(filename, msh) do vtx write_node_data(vtx, vec_nodal_dof_data, "vectorial_nodal_data"; - component_names=["sx", "sy", "sz"]) - write_node_data(vtx, scalar_nodal_dof_data, "scalar_nodal_data"; component_names=["T"]) - write_cell_data(vtx, scalar_cell_data, "scalar_cell_data"; component_names=["σ"]) + component_names = ["sx", "sy", "sz"]) + write_node_data( + vtx, scalar_nodal_dof_data, "scalar_nodal_data"; component_names = ["T"]) + write_cell_data(vtx, scalar_cell_data, "scalar_cell_data"; component_names = ["σ"]) write_cell_data(vtx, tensor_cell_data, "tensor_cell_data"; - component_names=["σxx", "σyy", "σzz", "τyz", "τxz", "τxy", "τzy", "τzx", - "τyx"]) + component_names = ["σxx", "σyy", "σzz", "τyz", "τxz", "τxy", "τzy", "τzx", + "τyx"]) end end diff --git a/test/materials/materials.jl b/test/materials/materials.jl index 11d49ea30..c4b43bead 100644 --- a/test/materials/materials.jl +++ b/test/materials/materials.jl @@ -32,13 +32,13 @@ mat_label = "steel" @test isnothing(density(linear_steel_no_density)) @test label(linear_steel_no_density) == NO_LABEL - linear_steel = IsotropicLinearElastic(; λ=λ, G=G, ρ=ρ, label=mat_label) + linear_steel = IsotropicLinearElastic(; λ = λ, G = G, ρ = ρ, label = mat_label) @test label(linear_steel) == Symbol(mat_label) @test density(linear_steel) == ρ - @test elasticity_modulus(linear_steel) ≈ E rtol = RTOL - @test poisson_ratio(linear_steel) ≈ ν rtol = RTOL - @test shear_modulus(linear_steel) ≈ G rtol = RTOL - @test bulk_modulus(linear_steel) ≈ K rtol = RTOL + @test elasticity_modulus(linear_steel)≈E rtol=RTOL + @test poisson_ratio(linear_steel)≈ν rtol=RTOL + @test shear_modulus(linear_steel)≈G rtol=RTOL + @test bulk_modulus(linear_steel)≈K rtol=RTOL # Test constitutive driver ϵᵢ = 0.18375 @@ -49,7 +49,7 @@ mat_label = "steel" γₖᵢ = 0.51 # Consitutive tensor - 𝐶 = [ λ+2G λ λ 0 0 0 + 𝐶 = [λ+2G λ λ 0 0 0 λ λ+2G λ 0 0 0 λ λ λ+2G 0 0 0 0 0 0 G 0 0 @@ -71,7 +71,7 @@ mat_label = "steel" σ, ∂σ∂ϵ = stress!(σ, ∂σ∂ϵ, linear_steel, ϵ) - @test σ ≈ σ_expected rtol = RTOL + @test σ≈σ_expected rtol=RTOL end # More soft hyperelastic material @@ -90,19 +90,20 @@ Khyper = λhyper + 2 * Ghyper / 3 @test lame_parameters(svk_static) == (λ, G) @test isnothing(density(svk_static)) - @test elasticity_modulus(svk_static) ≈ E rtol = RTOL + @test elasticity_modulus(svk_static)≈E rtol=RTOL @test shear_modulus(svk_static) == G - @test bulk_modulus(svk_static) ≈ K rtol = RTOL + @test bulk_modulus(svk_static)≈K rtol=RTOL @test poisson_ratio(svk_static) == ν # SVK for dynamic analysis - svk_dynamic = SVK(; E=E, ν=ν, ρ=ρ, label=mat_label) + svk_dynamic = SVK(; E = E, ν = ν, ρ = ρ, label = mat_label) @test density(svk_dynamic) == ρ - @test collect(lame_parameters(svk_dynamic)) ≈ [λ, G] rtol = RTOL + @test collect(lame_parameters(svk_dynamic))≈[λ, G] rtol=RTOL @test label(svk_dynamic) == Symbol(mat_label) # SVK strain energy strain_energy_svk(𝔼, λ::Real, G::Real) = (λ / 2) * tr(𝔼)^2 + G * tr(𝔼^2) - @test strain_energy(svk_dynamic, 𝔼) == strain_energy_svk(𝔼, lame_parameters(svk_static)...) + @test strain_energy(svk_dynamic, 𝔼) == + strain_energy_svk(𝔼, lame_parameters(svk_static)...) l = "svk_HyperElastic" svk_hyper = HyperElastic([λhyper, Ghyper], strain_energy_svk, l) @@ -127,31 +128,31 @@ Khyper = λhyper + 2 * Ghyper / 3 𝕊_svk = Symmetric(zeros(3, 3)) ∂𝕊∂𝔼_svk = zeros(6, 6) cosserat_stress!(𝕊_svk, ∂𝕊∂𝔼_svk, svk, 𝔼) - @test 𝕊_svk ≈ 𝕊_test rtol = RTOL - @test ∂𝕊∂𝔼_svk ≈ ∂𝕊∂𝔼_test rtol = RTOL + @test 𝕊_svk≈𝕊_test rtol=RTOL + @test ∂𝕊∂𝔼_svk≈∂𝕊∂𝔼_test rtol=RTOL # Constitutive driver HyperElasticMateiral 𝕊_hyper = Symmetric(zeros(3, 3)) ∂𝕊∂𝔼_hyper = zeros(6, 6) cosserat_stress!(𝕊_hyper, ∂𝕊∂𝔼_hyper, svk_hyper, 𝔼) - @test 𝕊_hyper ≈ 𝕊_test rtol = RTOL - @test ∂𝕊∂𝔼_svk ≈ ∂𝕊∂𝔼_test rtol = RTOL + @test 𝕊_hyper≈𝕊_test rtol=RTOL + @test ∂𝕊∂𝔼_svk≈∂𝕊∂𝔼_test rtol=RTOL end @testset "ONSAS.SVKMaterial + ONSAS.NeoHookeanMaterial" begin neo = NeoHookean(K, G) @test bulk_modulus(neo) == K @test shear_modulus(neo) == G - @test collect(lame_parameters(neo)) ≈ [λ, G] rtol = RTOL - @test poisson_ratio(neo) ≈ ν rtol = RTOL - @test elasticity_modulus(neo) ≈ E rtol = RTOL + @test collect(lame_parameters(neo))≈[λ, G] rtol=RTOL + @test poisson_ratio(neo)≈ν rtol=RTOL + @test elasticity_modulus(neo)≈E rtol=RTOL # NeoHookean defined with ρ E and ν - neo_withρ = NeoHookean(; E=E, ν=ν, ρ=ρ, label=mat_label) - @test bulk_modulus(neo_withρ) ≈ K rtol = RTOL - @test shear_modulus(neo_withρ) ≈ G rtol = RTOL - @test collect(lame_parameters(neo_withρ)) ≈ [λ, G] rtol = RTOL - @test poisson_ratio(neo_withρ) ≈ ν rtol = RTOL - @test elasticity_modulus(neo_withρ) ≈ E rtol = RTOL + neo_withρ = NeoHookean(; E = E, ν = ν, ρ = ρ, label = mat_label) + @test bulk_modulus(neo_withρ)≈K rtol=RTOL + @test shear_modulus(neo_withρ)≈G rtol=RTOL + @test collect(lame_parameters(neo_withρ))≈[λ, G] rtol=RTOL + @test poisson_ratio(neo_withρ)≈ν rtol=RTOL + @test elasticity_modulus(neo_withρ)≈E rtol=RTOL @test label(neo_withρ) == Symbol(mat_label) # More flexible noe-hookean to test strain and stresses @@ -170,7 +171,7 @@ end end neo_hyper = HyperElastic([bulk_modulus(neo_flexible), shear_modulus(neo_flexible)], - strain_energy_neo, l) + strain_energy_neo, l) 𝕊_hyper = Symmetric(zeros(3, 3)) ∂𝕊∂𝔼_hyper = zeros(6, 6) @@ -180,6 +181,6 @@ end cosserat_stress!(𝕊_hyper, ∂𝕊∂𝔼_hyper, neo_hyper, 𝔼) cosserat_stress!(𝕊_neo, ∂𝕊∂𝔼_neo, neo_flexible, 𝔼) - @test 𝕊_hyper ≈ 𝕊_neo rtol = RTOL - @test ∂𝕊∂𝔼_hyper ≈ ∂𝕊∂𝔼_neo rtol = RTOL + @test 𝕊_hyper≈𝕊_neo rtol=RTOL + @test ∂𝕊∂𝔼_hyper≈∂𝕊∂𝔼_neo rtol=RTOL end diff --git a/test/meshes/handlers.jl b/test/meshes/handlers.jl index 324ff9813..3786c7a0b 100644 --- a/test/meshes/handlers.jl +++ b/test/meshes/handlers.jl @@ -28,7 +28,7 @@ const RTOL = 1e-5 n₈ = Node(Lᵢ, Lⱼ, 0.0) vec_nodes = [n₁, n₂, n₃, n₄, n₅, n₆, n₇, n₈] # nothing is a placeholder for extra data - mesh = Mesh(; nodes=vec_nodes) + mesh = Mesh(; nodes = vec_nodes) ## Faces f₁ = TriangularFace(n₅, n₈, n₆) f₂ = TriangularFace(n₆, n₈, n₇) @@ -63,7 +63,7 @@ const RTOL = 1e-5 vec_points = coordinates.(nodes_to_interpolate) # Create point eval handler and tests - ph_nodes = PointEvalHandler(mesh, vec_points; alg=Partition()) + ph_nodes = PointEvalHandler(mesh, vec_points; alg = Partition()) @test ph_nodes.mesh == mesh in_mesh_indexes = [1, 2, 3, 4, 5, 6, 7, 8] @@ -88,5 +88,5 @@ const RTOL = 1e-5 node_to_interpolate_p₉ = first(node_2_weights) node_value_weighted = [weight * vec_linear_scalar_field[node] for (node, weight) in pairs(node_to_interpolate_p₉)] - @test linear_scalar_field(p₉...) ≈ reduce(+, node_value_weighted) rtol = RTOL + @test linear_scalar_field(p₉...)≈reduce(+, node_value_weighted) rtol=RTOL end diff --git a/test/meshes/interpolators.jl b/test/meshes/interpolators.jl index 33f6316d6..0d0fc6fe9 100644 --- a/test/meshes/interpolators.jl +++ b/test/meshes/interpolators.jl @@ -51,7 +51,7 @@ using ONSAS.Meshes ## weights to interpolate each point node_to_w = [dictionary([n₁ => 1.0, n₄ => 0.0, n₂ => 0.0, n₆ => 0.0]), - dictionary([n₆ => 0.0, n₂ => 0.0, n₃ => 1.0, n₄ => 0.0])] + dictionary([n₆ => 0.0, n₂ => 0.0, n₃ => 1.0, n₄ => 0.0])] ## Entities where each point is located point_to_elem = [t₁, t₂] @@ -64,8 +64,8 @@ using ONSAS.Meshes ## Interpolate a scalar magnitude nodal_scalar_magnitude = dictionary([n₁ => 1.0, n₂ => 2.0, n₃ => 3.0, - n₄ => 4.0, n₅ => 5.0, n₆ => 6.0, - n₇ => 7.0, n₈ => 8.0]) + n₄ => 4.0, n₅ => 5.0, n₆ => 6.0, + n₇ => 7.0, n₈ => 8.0]) ## Manufactured interpolation interpolated_magnitude = zeros(length(vec_points)) @@ -78,13 +78,13 @@ using ONSAS.Meshes ## Interpolate a dim-dimensional magnitude nodal_magnitude = dictionary([n₁ => [1.0, 0.0, 0.0], - n₂ => [2.0, 0.0, 0.0], - n₃ => [3.0, 0.0, 0.0], - n₄ => [4.0, 0.0, 0.0], - n₅ => [5.0, 0.0, 0.0], - n₆ => [6.0, 0.0, 0.0], - n₇ => [7.0, 0.0, 0.0], - n₈ => [8.0, 0.0, 0.0]]) + n₂ => [2.0, 0.0, 0.0], + n₃ => [3.0, 0.0, 0.0], + n₄ => [4.0, 0.0, 0.0], + n₅ => [5.0, 0.0, 0.0], + n₆ => [6.0, 0.0, 0.0], + n₇ => [7.0, 0.0, 0.0], + n₈ => [8.0, 0.0, 0.0]]) # Manufactured interpolation nodal_mag_dim = length(first(values(nodal_magnitude))) diff --git a/test/meshes/meshes.jl b/test/meshes/meshes.jl index 8d34007db..d723750f9 100644 --- a/test/meshes/meshes.jl +++ b/test/meshes/meshes.jl @@ -37,7 +37,7 @@ const RTOL = 1e-5 vec_elements = [t₁, t₂, t₃] # Constructors - mesh = Mesh(; nodes=vec_nodes, elements=vec_elements) + mesh = Mesh(; nodes = vec_nodes, elements = vec_elements) @test dimension(mesh) == dimension(n₁) @test all(isempty.(dofs(mesh))) @@ -74,7 +74,7 @@ const RTOL = 1e-5 end uniaxial_mesh_path = joinpath(@__DIR__, "..", "..", "examples", "uniaxial_extension", - "uniaxial_mesh.jl") + "uniaxial_mesh.jl") include(uniaxial_mesh_path) @testset "ONSAS.Meshes.GMSH.MshFile " begin @@ -105,7 +105,7 @@ include(uniaxial_mesh_path) end msh_path = joinpath(dir, file_name) msh_file = MshFile(msh_path) - rm(file_name; force=true) + rm(file_name; force = true) @test nodes(msh_file) == msh_file.vec_nodes @test length(physical_index(msh_file)) == length(connectivity(msh_file)) @@ -150,7 +150,7 @@ end n₈ = Node(Lᵢ, Lⱼ, 0.0) vec_nodes = [n₁, n₂, n₃, n₄, n₅, n₆, n₇, n₈] # nothing is a placeholder for extra data - mesh = Mesh(; nodes=vec_nodes) + mesh = Mesh(; nodes = vec_nodes) ## Faces f₁ = TriangularFace(n₅, n₈, n₆) f₂ = TriangularFace(n₆, n₈, n₇) diff --git a/test/meshes/searches.jl b/test/meshes/searches.jl index dbf397637..342aff5e5 100644 --- a/test/meshes/searches.jl +++ b/test/meshes/searches.jl @@ -48,38 +48,38 @@ using ONSAS.Tetrahedrons # Search #-------------------------------- points_to_check = [Point(coordinates(n₁)...), - Point(n₁ .- SVector(1, 1, 1)), - Point(n₇ .+ SVector(10, 10, 10)), - Point(coordinates(n₇)...), - Point(coordinates(n₄)...)] + Point(n₁ .- SVector(1, 1, 1)), + Point(n₇ .+ SVector(10, 10, 10)), + Point(coordinates(n₇)...), + Point(coordinates(n₄)...)] # Serial implementation in_mesh_points_idx, in_mesh_elements_idx = evaluate_points_in_mesh(mesh, - points_to_check, - Serial()) + points_to_check, + Serial()) @test all([p ∈ mesh for p in view(points_to_check, in_mesh_points_idx)]) @test in_mesh_elements_idx == [1, 3, 1] # Parallel implementation in_mesh_points_idx, in_mesh_elements_idx = evaluate_points_in_mesh(mesh, - points_to_check, - Threaded()) + points_to_check, + Threaded()) @test all([p ∈ mesh for p in view(points_to_check, in_mesh_points_idx)]) # the order can be altered @test all(index ∈ in_mesh_elements_idx for index in [1, 3, 1]) # Partitioned implementation in_mesh_points_idx, in_mesh_elements_idx = evaluate_points_in_mesh(mesh, - points_to_check, - Partition()) + points_to_check, + Partition()) @test all([p ∈ mesh for p in view(points_to_check, in_mesh_points_idx)]) @test in_mesh_elements_idx == [1, 3, 1] # Partitioned thread implementation in_mesh_points_idx, in_mesh_elements_idx = evaluate_points_in_mesh(mesh, - points_to_check, - PartitionThreaded()) + points_to_check, + PartitionThreaded()) @test all([p ∈ mesh for p in view(points_to_check, in_mesh_points_idx)]) # the order can be altered @test all(index ∈ in_mesh_elements_idx for index in [1, 3, 1]) diff --git a/test/runtests.jl b/test/runtests.jl index b77cde556..a11fd3ea2 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -2,33 +2,36 @@ using Test using SafeTestsets: @safetestset MODULES = ["boundary_conditions/boundary_conditions.jl", - "cross_sections/cross_sections.jl", - "entities/nodes.jl", - "entities/tetrahedrons.jl", - "entities/triangular_faces.jl", - "entities/trusses.jl", - "interfaces/gmsh.jl", - "interfaces/vtk.jl", - "materials/materials.jl", - "meshes/handlers.jl", - "meshes/interpolators.jl", - "meshes/meshes.jl", - "meshes/searches.jl", - "structural_analyses/static_analyses.jl", - "structural_model/structures.jl", - "structural_solvers/structural_solvers.jl", - "utils.jl"] + "cross_sections/cross_sections.jl", + "entities/frames.jl", + "entities/nodes.jl", + "entities/tetrahedrons.jl", + "entities/triangular_faces.jl", + "entities/trusses.jl", + "interfaces/gmsh.jl", + "interfaces/vtk.jl", + "materials/materials.jl", + "meshes/handlers.jl", + "meshes/interpolators.jl", + "meshes/meshes.jl", + "meshes/searches.jl", + "structural_analyses/dynamic_analyses.jl", + "structural_analyses/static_analyses.jl", + "structural_model/structures.jl", + "structural_solvers/structural_solvers.jl", + "aqua.jl", + "utils.jl"] EXAMPLES_FOLDER = joinpath("..", "examples") EXAMPLE_NAMES = ["von_misses_truss", - "linear_extension", - "uniaxial_extension", - "uniaxial_compression", - "cylinder_internal_pressure", - "clamped_truss", - "cantilever", - "self_weight_clamped_truss"] + "linear_extension", + "uniaxial_extension", + "uniaxial_compression", + "cylinder_internal_pressure", + "clamped_truss", + "cantilever", + "self_weight_clamped_truss"] EXAMPLES = [joinpath(EXAMPLES_FOLDER, name, name * ".jl") for name in EXAMPLE_NAMES] diff --git a/test/structural_analyses/dynamic_analyses.jl b/test/structural_analyses/dynamic_analyses.jl index b87147c21..c5168e959 100644 --- a/test/structural_analyses/dynamic_analyses.jl +++ b/test/structural_analyses/dynamic_analyses.jl @@ -41,13 +41,13 @@ iter_state = ResidualsIterationStep() linear_system = init(LinearProblem(Kₛᵏ, res_forces)) sst_rand = FullDynamicState(free_dofs, - ΔUᵏ, Uᵏ, Udotᵏ, Udotdotᵏ, - Fₑₓₜᵏ, Fᵢₙₜᵏ, Fᵢₙₑᵏ, Fᵥᵢₛᵏ, - Kᵏ, Mᵏ, Cᵏ, Kₛᵏ, res_forces, - ϵᵏ, σᵏ, - assembler, - iter_state, - linear_system) + ΔUᵏ, Uᵏ, Udotᵏ, Udotdotᵏ, + Fₑₓₜᵏ, Fᵢₙₜᵏ, Fᵢₙₑᵏ, Fᵥᵢₛᵏ, + Kᵏ, Mᵏ, Cᵏ, Kₛᵏ, res_forces, + ϵᵏ, σᵏ, + assembler, + iter_state, + linear_system) sst_rand_sol = DynamicState(Uᵏ, Udotᵏ, Udotdotᵏ, ϵᵏ, σᵏ) diff --git a/test/structural_analyses/static_analyses.jl b/test/structural_analyses/static_analyses.jl index 925a20bea..8c0bed49b 100644 --- a/test/structural_analyses/static_analyses.jl +++ b/test/structural_analyses/static_analyses.jl @@ -35,7 +35,7 @@ Fⱼ = -2e8 # vertical load in N # ------------------------------- # Materials # ------------------------------- -steel = SVK(; E=E, ν=ν, label="steel") +steel = SVK(; E = E, ν = ν, label = "steel") # ------------------------------- # Geometries # ------------------------------- @@ -103,8 +103,8 @@ res_forces = zeros(2) linear_problem = init(LinearProblem(Kₛᵏ, res_forces)) sst_rand = FullStaticState(free_dofs(s), ΔUᵏ, Uᵏ, Fₑₓₜᵏ, Fᵢₙₜᵏ, Kₛᵏ, res_forces, ϵᵏ, σᵏ, - s_assembler, - iter_residuals, linear_problem) + s_assembler, + iter_residuals, linear_problem) @testset "ONSAS.StructuralAnalyses.StaticAnalyses.FullStaticState" begin @@ -157,9 +157,9 @@ sst_rand = FullStaticState(free_dofs(s), ΔUᵏ, Uᵏ, Fₑₓₜᵏ, Fᵢₙₜ σ_e_1 = rand(3, 3) ϵ_e_1 = Symmetric(rand(3, 3)) assemble!(default_s, fᵢₙₜ_e_1, truss₁) - @test internal_forces(default_s)[1:6] ≈ fᵢₙₜ_e_1 rtol = RTOL + @test internal_forces(default_s)[1:6]≈fᵢₙₜ_e_1 rtol=RTOL assemble!(default_s, k_e_1, truss₁) - @test internal_forces(default_s)[1:6] ≈ fᵢₙₜ_e_1 rtol = RTOL + @test internal_forces(default_s)[1:6]≈fᵢₙₜ_e_1 rtol=RTOL assemble!(default_s, σ_e_1, ϵ_e_1, truss₁) # truss₂ element fᵢₙₜ_e_2 = rand(6) @@ -180,8 +180,8 @@ sst_rand = FullStaticState(free_dofs(s), ΔUᵏ, Uᵏ, Fₑₓₜᵏ, Fᵢₙₜ K_system[1:6, 1:6] += k_e_1 K_system[4:9, 4:9] += k_e_2 - @test internal_forces(default_s) ≈ Fᵢₙₜ rtol = RTOL - @test tangent_matrix(default_s) ≈ K_system rtol = RTOL + @test internal_forces(default_s)≈Fᵢₙₜ rtol=RTOL + @test tangent_matrix(default_s)≈K_system rtol=RTOL @test strain(default_s)[truss₁] == ϵ_e_1 @test strain(default_s)[truss₂] == ϵ_e_2 @test stress(default_s)[truss₁] == σ_e_1 @@ -194,7 +194,7 @@ NSTEPS = 9 init_step = 7 sa = NonLinearStaticAnalysis(s, λ₁; NSTEPS) -sa_init = NonLinearStaticAnalysis(s, λ₁; NSTEPS, initial_step=init_step) +sa_init = NonLinearStaticAnalysis(s, λ₁; NSTEPS, initial_step = init_step) @testset "ONSAS.StructuralAnalyses.StaticAnalyses.NonLinearStaticAnalysis" begin @test structure(sa_init) == s @@ -242,38 +242,41 @@ end dof = Dof(5) vdof = [Dof(1), Dof(4)] - @test displacements(states_sol, dof) == repeat([displacements(sst_rand)[dof]], num_states) + @test displacements(states_sol, dof) == + repeat([displacements(sst_rand)[dof]], num_states) @test displacements(states_sol, vdof) == [repeat([displacements(sst_rand)[vdof[1]]], num_states), - repeat([displacements(sst_rand)[vdof[2]]], num_states)] + repeat([displacements(sst_rand)[vdof[2]]], num_states)] @test displacements(states_sol, n₁) == [repeat([displacements(sst_rand)[dofs(n₁)[:u][1]]], num_states), - repeat([displacements(sst_rand)[dofs(n₁)[:u][2]]], num_states), - repeat([displacements(sst_rand)[dofs(n₁)[:u][3]]], num_states)] + repeat([displacements(sst_rand)[dofs(n₁)[:u][2]]], num_states), + repeat([displacements(sst_rand)[dofs(n₁)[:u][3]]], num_states)] - @test internal_forces(states_sol, dof) == repeat([internal_forces(sst_rand)[dof]], num_states) + @test internal_forces(states_sol, dof) == + repeat([internal_forces(sst_rand)[dof]], num_states) @test internal_forces(states_sol, vdof) == [repeat([internal_forces(sst_rand)[vdof[1]]], num_states), - repeat([internal_forces(sst_rand)[vdof[2]]], num_states)] + repeat([internal_forces(sst_rand)[vdof[2]]], num_states)] @test internal_forces(states_sol, n₁) == [repeat([internal_forces(sst_rand)[dofs(n₁)[:u][1]]], num_states), - repeat([internal_forces(sst_rand)[dofs(n₁)[:u][2]]], num_states), - repeat([internal_forces(sst_rand)[dofs(n₁)[:u][3]]], num_states)] + repeat([internal_forces(sst_rand)[dofs(n₁)[:u][2]]], num_states), + repeat([internal_forces(sst_rand)[dofs(n₁)[:u][3]]], num_states)] - @test external_forces(states_sol, dof) == repeat([external_forces(sst_rand)[dof]], num_states) + @test external_forces(states_sol, dof) == + repeat([external_forces(sst_rand)[dof]], num_states) @test external_forces(states_sol, vdof) == [repeat([external_forces(sst_rand)[vdof[1]]], num_states), - repeat([external_forces(sst_rand)[vdof[2]]], num_states)] + repeat([external_forces(sst_rand)[vdof[2]]], num_states)] @test external_forces(states_sol, n₁) == [repeat([external_forces(sst_rand)[dofs(n₁)[:u][1]]], num_states), - repeat([external_forces(sst_rand)[dofs(n₁)[:u][2]]], num_states), - repeat([external_forces(sst_rand)[dofs(n₁)[:u][3]]], num_states)] + repeat([external_forces(sst_rand)[dofs(n₁)[:u][2]]], num_states), + repeat([external_forces(sst_rand)[dofs(n₁)[:u][3]]], num_states)] iteration_residuals(states_sol) end diff --git a/test/structural_model/structures.jl b/test/structural_model/structures.jl index 7f26546d9..88ba8727f 100644 --- a/test/structural_model/structures.jl +++ b/test/structural_model/structures.jl @@ -24,17 +24,17 @@ E = 2e9 ν = 0.3 # Nodes n₁ = Node(0, 0, 0, - dictionary([:u => [Dof(1), Dof(2), Dof(3)], :θ => [Dof(13), Dof(14), Dof(15)], - :T => [Dof(25)]])) + dictionary([:u => [Dof(1), Dof(2), Dof(3)], :θ => [Dof(13), Dof(14), Dof(15)], + :T => [Dof(25)]])) n₂ = Node(0, 1, 0, - dictionary([:u => [Dof(4), Dof(5), Dof(6)], :θ => [Dof(16), Dof(17), Dof(18)], - :T => [Dof(26)]])) + dictionary([:u => [Dof(4), Dof(5), Dof(6)], :θ => [Dof(16), Dof(17), Dof(18)], + :T => [Dof(26)]])) n₃ = Node(0, 0, 1, - dictionary([:u => [Dof(7), Dof(8), Dof(9)], :θ => [Dof(19), Dof(20), Dof(21)], - :T => [Dof(27)]])) + dictionary([:u => [Dof(7), Dof(8), Dof(9)], :θ => [Dof(19), Dof(20), Dof(21)], + :T => [Dof(27)]])) n₄ = Node(1, 1, 1, - dictionary([:u => [Dof(10), Dof(11), Dof(12)], :θ => [Dof(22), Dof(23), Dof(24)], - :T => [Dof(28)]])) + dictionary([:u => [Dof(10), Dof(11), Dof(12)], :θ => [Dof(22), Dof(23), Dof(24)], + :T => [Dof(28)]])) # Faces face₁ = TriangularFace(n₁, n₂, n₃) face₂ = TriangularFace(n₃, n₄, n₃) @@ -54,7 +54,7 @@ mat_dict = dictionary([steel => [truss₁, truss₃], aluminum => [truss₂]]) s_materials = StructuralMaterial(mat_dict) empty_mat_dict = dictionary([steel => Vector{AbstractElement}(), - aluminum => Vector{AbstractElement}()]) + aluminum => Vector{AbstractElement}()]) empty_materials = StructuralMaterial(empty_mat_dict) @testset "ONSAS.StructuralMaterial" begin @@ -86,9 +86,9 @@ node_bc = dictionary([bc₁ => [n₁, n₃], bc₂ => [n₂], bc₃ => [n₂, n face_bc = dictionary([bc₃ => [face₁], bc₅ => [face₁]]) elem_bc = dictionary([bc₄ => [truss₁, truss₂]]) -s_boundary_conditions_only_nodes = StructuralBoundaryCondition(; node_bcs=node_bc) -s_boundary_conditions_only_faces = StructuralBoundaryCondition(; face_bcs=face_bc) -s_boundary_conditions_only_elements = StructuralBoundaryCondition(; element_bcs=elem_bc) +s_boundary_conditions_only_nodes = StructuralBoundaryCondition(; node_bcs = node_bc) +s_boundary_conditions_only_faces = StructuralBoundaryCondition(; face_bcs = face_bc) +s_boundary_conditions_only_elements = StructuralBoundaryCondition(; element_bcs = elem_bc) s_boundary_conditions = StructuralBoundaryCondition(node_bc, face_bc, elem_bc) @testset "ONSAS.StructuralBoundaryCondition" begin @@ -199,7 +199,7 @@ end n₂ = Node(0, 1, 0) n₃ = Node(0, 0, 1) - s_mesh = Mesh(; nodes=[n₁, n₂, n₃], elements=[truss₁, truss₂, truss₃]) + s_mesh = Mesh(; nodes = [n₁, n₂, n₃], elements = [truss₁, truss₂, truss₃]) set_dofs!(s_mesh, :u, dof_dim) s = Structure(s_mesh, s_materials, s_boundary_conditions) diff --git a/test/structural_solvers/structural_solvers.jl b/test/structural_solvers/structural_solvers.jl index 74dbc471f..1dada0350 100644 --- a/test/structural_solvers/structural_solvers.jl +++ b/test/structural_solvers/structural_solvers.jl @@ -98,16 +98,16 @@ end @test a.I == [1, 2, 1, 2, 2, 3, 2, 3] @test a.J == [1, 1, 2, 2, 2, 2, 3, 3] @test a.V == [ - # Element 1 - Ke[1, 1], - Ke[2, 1], - Ke[1, 2], - Ke[2, 2], - # Element 2 - Ke[1, 1], - Ke[2, 1], - Ke[1, 2], - Ke[2, 2]] + # Element 1 + Ke[1, 1], + Ke[2, 1], + Ke[1, 2], + Ke[2, 2], + # Element 2 + Ke[1, 1], + Ke[2, 1], + Ke[1, 2], + Ke[2, 2]] K_glob_assembler = end_assemble(a) @@ -116,7 +116,8 @@ end end_assemble!(K_to_fill_assembler, a) @test all([K_glob_assembler[ind] == val for (ind, val) in enumerate(K_glob_assembler)]) - @test all([K_glob_assembler[ind] == val for (ind, val) in enumerate(K_to_fill_assembler)]) + @test all([K_glob_assembler[ind] == val + for (ind, val) in enumerate(K_to_fill_assembler)]) reset!(a) @test isempty(a.I) From 6d50f42859b85b7c3d3eea1f5ee337a3738e4a2e Mon Sep 17 00:00:00 2001 From: "mauricio.vanzulli" Date: Sun, 17 Nov 2024 18:30:41 +0100 Subject: [PATCH 7/7] Add all Manifests files (#521) --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index be5d685f6..075f80286 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,8 @@ docs/site/ # It records a fixed state of all packages used by the project. # Since we are not actively develpoing this pkg by now let's commit versions Manifest.toml +test/Manifest.toml +docs/Manifest.toml # Msh files *.msh