diff --git a/.github/workflows/performance-benchmarking.yml b/.github/workflows/performance-benchmarking.yml index b8c7eb9b..a42a405a 100644 --- a/.github/workflows/performance-benchmarking.yml +++ b/.github/workflows/performance-benchmarking.yml @@ -69,7 +69,7 @@ jobs: run: | if [ "$RUNNER_OS" == "Linux" ]; then sudo apt-get update - sudo apt-get install -y valgrind linux-tools-common + sudo apt-get install -y valgrind linux-tools-common libfontconfig1-dev fi - name: Build benchmarks diff --git a/Cargo.lock b/Cargo.lock index beaff915..1ffb9deb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -37,25 +37,7 @@ checksum = "4f823d037a7ec6ea2197046bafd4ae150e6bc36f9ca347404f46a46823fa84f2" dependencies = [ "approx 0.3.2", "num-complex 0.2.4", - "num-traits 0.2.19", -] - -[[package]] -name = "aligned" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee4508988c62edf04abd8d92897fca0c2995d907ce1dfeaf369dac3716a40685" -dependencies = [ - "as-slice 0.2.1", -] - -[[package]] -name = "aligned-vec" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc890384c8602f339876ded803c97ad529f3842aba97f6392b3dba0dd171769b" -dependencies = [ - "equator", + "num-traits", ] [[package]] @@ -141,7 +123,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0e60b75072ecd4168020818c0107f2857bb6c4e64252d8d3983f6263b40a5c3" dependencies = [ - "num-traits 0.2.19", + "num-traits", ] [[package]] @@ -150,7 +132,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" dependencies = [ - "num-traits 0.2.19", + "num-traits", ] [[package]] @@ -167,50 +149,12 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "arbitrary" -version = "1.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d036a3c4ab069c7b410a2ce876bd74808d2d0888a82667669f8e783a898bf1" - -[[package]] -name = "arg_enum_proc_macro" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ae92a5119aa49cdbcf6b9f893fe4e1d98b04ccbf82ee0584ad948a44a734dea" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" -[[package]] -name = "as-slice" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45403b49e3954a4b8428a0ac21a4b7afadccf92bfd96273f1a58cd4812496ae0" -dependencies = [ - "generic-array 0.12.4", - "generic-array 0.13.3", - "generic-array 0.14.9", - "stable_deref_trait", -] - -[[package]] -name = "as-slice" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "516b6b4f0e40d50dcda9365d53964ec74560ad4284da2e7fc97122cd83174516" -dependencies = [ - "stable_deref_trait", -] - [[package]] name = "ash" version = "0.37.3+1.3.251" @@ -220,70 +164,12 @@ dependencies = [ "libloading 0.7.4", ] -[[package]] -name = "atomic-polyfill" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" -dependencies = [ - "critical-section", -] - [[package]] name = "autocfg" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" -[[package]] -name = "av-scenechange" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f321d77c20e19b92c39e7471cf986812cbb46659d2af674adc4331ef3f18394" -dependencies = [ - "aligned", - "anyhow", - "arg_enum_proc_macro", - "arrayvec", - "log", - "num-rational", - "num-traits 0.2.19", - "pastey", - "rayon", - "thiserror 2.0.18", - "v_frame", - "y4m", -] - -[[package]] -name = "av1-grain" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cfddb07216410377231960af4fcab838eaa12e013417781b78bd95ee22077f8" -dependencies = [ - "anyhow", - "arrayvec", - "log", - "nom 8.0.0", - "num-rational", - "v_frame", -] - -[[package]] -name = "avif-serialize" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "375082f007bd67184fb9c0374614b29f9aaa604ec301635f72338bb65386a53d" -dependencies = [ - "arrayvec", -] - -[[package]] -name = "base64" -version = "0.22.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" - [[package]] name = "bincode" version = "2.0.1" @@ -319,7 +205,7 @@ dependencies = [ "proc-macro2", "quote", "regex", - "rustc-hash 1.1.0", + "rustc-hash", "shlex", "syn 2.0.117", ] @@ -354,12 +240,6 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7" -[[package]] -name = "bit_field" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e4b40c7323adcfc0a41c4b88143ed58346ff65a288fc144329c5c45e05d70c6" - [[package]] name = "bitflags" version = "1.3.2" @@ -372,49 +252,12 @@ version = "2.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af" -[[package]] -name = "bitstream-io" -version = "4.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60d4bd9d1db2c6bdf285e223a7fa369d5ce98ec767dec949c6ca62863ce61757" -dependencies = [ - "core2", -] - [[package]] name = "block" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0d8c1fef690941d3e7788d328517591fecc684c084084702d6ff1641e993699a" -[[package]] -name = "blue2mesh" -version = "0.1.0" -dependencies = [ - "bytemuck", - "cfd-schematics", - "chrono", - "csgrs", - "delaunator", - "env_logger", - "log", - "nalgebra 0.34.1", - "ndarray 0.15.6", - "serde", - "serde_json", - "spade", - "thiserror 1.0.69", -] - -[[package]] -name = "boolmesh" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ede2e53d77b54cd1aae2a8641693c4c65b0ecd0d423194ca4ef78278b53313a" -dependencies = [ - "glam 0.30.10", -] - [[package]] name = "build-probe-mpi" version = "0.1.5" @@ -425,12 +268,6 @@ dependencies = [ "shell-words", ] -[[package]] -name = "built" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4ad8f11f288f48ca24471bbd51ac257aaeaaa07adae295591266b792902ae64" - [[package]] name = "bumpalo" version = "3.20.2" @@ -463,12 +300,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" -[[package]] -name = "byteorder-lite" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" - [[package]] name = "bytes" version = "1.11.1" @@ -499,7 +330,7 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" dependencies = [ - "nom 7.1.3", + "nom", ] [[package]] @@ -511,9 +342,9 @@ dependencies = [ "cfd-core", "cfd-math", "cfd-schematics", - "nalgebra 0.33.2", + "nalgebra", "nalgebra-sparse", - "num-traits 0.2.19", + "num-traits", "petgraph", "proptest", "rand 0.8.5", @@ -539,10 +370,10 @@ dependencies = [ "cfd-schematics", "cfd-validation", "criterion", - "nalgebra 0.33.2", + "nalgebra", "nalgebra-sparse", "num-complex 0.4.6", - "num-traits 0.2.19", + "num-traits", "plotters", "proptest", "rand 0.8.5", @@ -566,9 +397,9 @@ dependencies = [ "cfd-validation", "criterion", "crossbeam", - "nalgebra 0.33.2", + "nalgebra", "nalgebra-sparse", - "num-traits 0.2.19", + "num-traits", "proptest", "rayon", "serde", @@ -588,9 +419,9 @@ dependencies = [ "futures", "indexmap", "mpi", - "nalgebra 0.33.2", + "nalgebra", "nalgebra-sparse", - "num-traits 0.2.19", + "num-traits", "num_cpus", "pollster", "proptest", @@ -615,8 +446,8 @@ dependencies = [ "cfd-core", "cfd-math", "csv", - "nalgebra 0.33.2", - "num-traits 0.2.19", + "nalgebra", + "num-traits", "proptest", "rayon", "serde", @@ -636,10 +467,10 @@ dependencies = [ "cfd-core", "criterion", "futures", - "nalgebra 0.33.2", + "nalgebra", "nalgebra-sparse", "num-complex 0.4.6", - "num-traits 0.2.19", + "num-traits", "pollster", "proptest", "rand 0.8.5", @@ -664,8 +495,8 @@ dependencies = [ "geometry-predicates", "hashbrown 0.15.5", "indexmap", - "nalgebra 0.33.2", - "num-traits 0.2.19", + "nalgebra", + "num-traits", "proptest", "rayon", "serde", @@ -679,7 +510,6 @@ dependencies = [ name = "cfd-optim" version = "0.1.0" dependencies = [ - "blue2mesh", "cfd-1d", "cfd-core", "cfd-schematics", @@ -700,9 +530,9 @@ dependencies = [ "cfd-core", "cfd-mesh", "cfd-validation", - "nalgebra 0.33.2", + "nalgebra", "ndarray 0.15.6", - "num-traits 0.2.19", + "num-traits", "numpy", "pyo3", "serde", @@ -738,9 +568,9 @@ dependencies = [ "chrono", "criterion", "mpi", - "nalgebra 0.33.2", + "nalgebra", "nalgebra-sparse", - "num-traits 0.2.19", + "num-traits", "num_cpus", "petgraph", "plotters", @@ -771,10 +601,10 @@ dependencies = [ "cfd-schematics", "chrono", "criterion", - "nalgebra 0.33.2", + "nalgebra", "nalgebra-sparse", "num-complex 0.4.6", - "num-traits 0.2.19", + "num-traits", "num_cpus", "petgraph", "proptest", @@ -805,22 +635,12 @@ checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0" dependencies = [ "iana-time-zone", "js-sys", - "num-traits 0.2.19", + "num-traits", "serde", "wasm-bindgen", "windows-link", ] -[[package]] -name = "chull" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "977db54e5eec96279bea3032dcf41d3844e90d62e5cfeded48f8d53b1a755d7a" -dependencies = [ - "num-bigint 0.3.3", - "num-traits 0.2.19", -] - [[package]] name = "ciborium" version = "0.2.2" @@ -952,12 +772,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "contour_tracing" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9efef72b4f4049ebc4b690ae8ac98cfb7d3cb50407592745ad2c83106625936" - [[package]] name = "conv" version = "0.3.3" @@ -1019,15 +833,6 @@ dependencies = [ "libc", ] -[[package]] -name = "core2" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b49ba7ef1ad6107f8824dbe97de947cbaac53c44e7f9756a1fba0d37c1eec505" -dependencies = [ - "memchr", -] - [[package]] name = "crc32fast" version = "1.5.0" @@ -1050,7 +855,7 @@ dependencies = [ "criterion-plot", "is-terminal", "itertools 0.10.5", - "num-traits 0.2.19", + "num-traits", "once_cell", "oorandom", "plotters", @@ -1073,12 +878,6 @@ dependencies = [ "itertools 0.10.5", ] -[[package]] -name = "critical-section" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" - [[package]] name = "crossbeam" version = "0.8.4" @@ -1141,39 +940,6 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "460fbee9c2c2f33933d720630a6a0bac33ba7053db5344fac858d4b8952d77d5" -[[package]] -name = "csgrs" -version = "0.21.0" -source = "git+https://github.com/timschmidt/csgrs.git#dca6d01aa93629ab1cefbea3433ff6de118e4395" -dependencies = [ - "base64", - "boolmesh", - "chull", - "contour_tracing", - "core2", - "doc-image-embed", - "dxf", - "either", - "fast-surface-nets", - "geo", - "geo-buf", - "hashbrown 0.15.5", - "hershey", - "image 0.25.9", - "nalgebra 0.34.1", - "nom 7.1.3", - "parry3d-f64", - "rapier3d-f64", - "robust 1.2.0", - "spade", - "stl_io", - "svg", - "thiserror 2.0.18", - "ttf-parser 0.25.1", - "ttf-parser-utils", - "uuid", -] - [[package]] name = "csv" version = "1.4.0" @@ -1212,15 +978,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "delaunator" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ab46e386c7a38300a0d93b0f3e484bc2ee0aded66c47b14762ec9ab383934fa" -dependencies = [ - "robust 0.2.3", -] - [[package]] name = "dirs" version = "6.0.0" @@ -1251,24 +1008,6 @@ dependencies = [ "libloading 0.8.9", ] -[[package]] -name = "doc-image-embed" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b1c7e5bbb92b417588a5e733e095416c27c06eedc051065cc955a0a8c8389d9" -dependencies = [ - "base64", - "proc-macro2", - "quote", - "syn 2.0.117", -] - -[[package]] -name = "downcast-rs" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" - [[package]] name = "dwrote" version = "0.11.5" @@ -1281,99 +1020,12 @@ dependencies = [ "wio", ] -[[package]] -name = "dxf" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db88ab4334d9288e6658b8bb8e7bc9167ae48878b5f92818e01969a5041d294d" -dependencies = [ - "byteorder", - "chrono", - "encoding_rs", - "enum_primitive", - "image 0.25.9", - "itertools 0.13.0", - "num", - "uuid", - "xmltree", -] - -[[package]] -name = "earcutr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79127ed59a85d7687c409e9978547cffb7dc79675355ed22da6b66fd5f6ead01" -dependencies = [ - "itertools 0.11.0", - "num-traits 0.2.19", -] - [[package]] name = "either" version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -[[package]] -name = "ena" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eabffdaee24bd1bf95c5ef7cec31260444317e72ea56c4c91750e8b7ee58d5f1" -dependencies = [ - "log", -] - -[[package]] -name = "encoding_rs" -version = "0.8.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "enum_primitive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4551092f4d519593039259a9ed8daedf0da12e5109c5280338073eaeb81180" -dependencies = [ - "num-traits 0.1.43", -] - -[[package]] -name = "env_logger" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" -dependencies = [ - "humantime", - "is-terminal", - "log", - "regex", - "termcolor", -] - -[[package]] -name = "equator" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4711b213838dfee0117e3be6ac926007d7f433d7bbe33595975d4190cb07e6fc" -dependencies = [ - "equator-macro", -] - -[[package]] -name = "equator-macro" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44f23cf4b44bfce11a86ace86f8a73ffdec849c9fd00a386a53d278bd9e81fb3" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "equivalent" version = "1.0.2" @@ -1390,57 +1042,12 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "exr" -version = "1.74.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4300e043a56aa2cb633c01af81ca8f699a321879a7854d3896a0ba89056363be" -dependencies = [ - "bit_field", - "half", - "lebe", - "miniz_oxide", - "rayon-core", - "smallvec", - "zune-inflate", -] - -[[package]] -name = "fast-surface-nets" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2aef9e8d9e33f51d8120a2e997a819f18239ad7c2735e353ade79208a9a1c442" -dependencies = [ - "glam 0.29.3", - "ndshape", -] - [[package]] name = "fastrand" version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" -[[package]] -name = "fax" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f05de7d48f37cd6730705cbca900770cab77a89f413d23e100ad7fad7795a0ab" -dependencies = [ - "fax_derive", -] - -[[package]] -name = "fax_derive" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0aca10fb742cb43f9e7bb8467c91aa9bcb8e3ffbc6a6f7389bb93ffc920577d" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "fdeflate" version = "0.3.7" @@ -1472,27 +1079,12 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "float-cmp" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" -dependencies = [ - "num-traits 0.2.19", -] - [[package]] name = "float-ord" version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8ce81f49ae8a0482e4c55ea62ebbd7e5a686af544c00b9d090bba3ff9be97b3d" -[[package]] -name = "float_next_after" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8" - [[package]] name = "fnv" version = "1.0.7" @@ -1505,12 +1097,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" -[[package]] -name = "foldhash" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb" - [[package]] name = "font-kit" version = "0.14.3" @@ -1663,91 +1249,8 @@ dependencies = [ ] [[package]] -name = "generic-array" -version = "0.12.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" -dependencies = [ - "typenum", -] - -[[package]] -name = "generic-array" -version = "0.13.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f797e67af32588215eaaab8327027ee8e71b9dd0b2b26996aedf20c030fce309" -dependencies = [ - "typenum", -] - -[[package]] -name = "generic-array" -version = "0.14.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bb6743198531e02858aeaea5398fcc883e71851fcbcb5a2f773e2fb6cb1edf2" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "geo" -version = "0.29.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34f0e6e028c581e82e6822a68869514e94c25e7f8ea669a2d8595bdf7461ccc5" -dependencies = [ - "earcutr", - "float_next_after", - "geo-types", - "geographiclib-rs", - "i_overlay", - "log", - "num-traits 0.2.19", - "robust 1.2.0", - "rstar 0.12.2", - "serde", - "spade", -] - -[[package]] -name = "geo-buf" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3259dd509ae98be7ce49236ec9be30c7d8a0ce84eada28dbefb68bc839b29e66" -dependencies = [ - "geo", - "geo-types", -] - -[[package]] -name = "geo-types" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24f8647af4005fa11da47cd56252c6ef030be8fa97bdbf355e7dfb6348f0a82c" -dependencies = [ - "approx 0.5.1", - "num-traits 0.2.19", - "rayon", - "rstar 0.10.0", - "rstar 0.11.0", - "rstar 0.12.2", - "rstar 0.8.4", - "rstar 0.9.3", - "serde", -] - -[[package]] -name = "geographiclib-rs" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5a7f08910fd98737a6eda7568e7c5e645093e073328eeef49758cfe8b0489c7" -dependencies = [ - "libm", -] - -[[package]] -name = "geometry-predicates" -version = "0.3.0" +name = "geometry-predicates" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8dba84198cf199c11b83f1cb9243eaeb70dc50b719d2835ebf34bf2481bca010" @@ -1787,16 +1290,6 @@ dependencies = [ "wasip3", ] -[[package]] -name = "gif" -version = "0.14.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5df2ba84018d80c213569363bdcd0c64e6933c67fe4c1d60ecf822971a3c35e" -dependencies = [ - "color_quant", - "weezl", -] - [[package]] name = "gl_generator" version = "0.14.0" @@ -1805,105 +1298,9 @@ checksum = "1a95dfc23a2b4a9a2f5ab41d194f8bfda3cabec42af4e39f08c339eb2a0c124d" dependencies = [ "khronos_api", "log", - "xml-rs 0.8.28", + "xml-rs", ] -[[package]] -name = "glam" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "333928d5eb103c5d4050533cec0384302db6be8ef7d3cebd30ec6a35350353da" - -[[package]] -name = "glam" -version = "0.15.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3abb554f8ee44336b72d522e0a7fe86a29e09f839a36022fa869a7dfe941a54b" - -[[package]] -name = "glam" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4126c0479ccf7e8664c36a2d719f5f2c140fbb4f9090008098d2c291fa5b3f16" - -[[package]] -name = "glam" -version = "0.17.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e01732b97afd8508eee3333a541b9f7610f454bb818669e66e90f5f57c93a776" - -[[package]] -name = "glam" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525a3e490ba77b8e326fb67d4b44b4bd2f920f44d4cc73ccec50adc68e3bee34" - -[[package]] -name = "glam" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b8509e6791516e81c1a630d0bd7fbac36d2fa8712a9da8662e716b52d5051ca" - -[[package]] -name = "glam" -version = "0.20.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43e957e744be03f5801a55472f593d43fabdebf25a4585db250f04d86b1675f" - -[[package]] -name = "glam" -version = "0.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518faa5064866338b013ff9b2350dc318e14cc4fcd6cb8206d7e7c9886c98815" - -[[package]] -name = "glam" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12f597d56c1bd55a811a1be189459e8fad2bbc272616375602443bdfb37fa774" - -[[package]] -name = "glam" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e4afd9ad95555081e109fe1d21f2a30c691b5f0919c67dfa690a2e1eb6bd51c" - -[[package]] -name = "glam" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5418c17512bdf42730f9032c74e1ae39afc408745ebb2acf72fbc4691c17945" - -[[package]] -name = "glam" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "151665d9be52f9bb40fc7966565d39666f2d1e69233571b71b87791c7e0528b3" - -[[package]] -name = "glam" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e05e7e6723e3455f4818c7b26e855439f7546cf617ef669d1adedb8669e5cb9" - -[[package]] -name = "glam" -version = "0.28.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "779ae4bf7e8421cf91c0b3b64e7e8b40b862fba4d393f59150042de7c4965a94" - -[[package]] -name = "glam" -version = "0.29.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8babf46d4c1c9d92deac9f7be466f76dfc4482b6452fc5024b5e8daf6ffeb3ee" - -[[package]] -name = "glam" -version = "0.30.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19fc433e8437a212d1b6f1e68c7824af3aed907da60afa994e7f542d18d12aa9" - [[package]] name = "glob" version = "0.3.3" @@ -1994,33 +1391,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "hash32" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4041af86e63ac4298ce40e5cca669066e75b6f1aa3390fe2561ffa5e1d9f4cc" -dependencies = [ - "byteorder", -] - -[[package]] -name = "hash32" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" -dependencies = [ - "byteorder", -] - -[[package]] -name = "hash32" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606" -dependencies = [ - "byteorder", -] - [[package]] name = "hashbrown" version = "0.14.5" @@ -2039,7 +1409,7 @@ checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", - "foldhash 0.1.5", + "foldhash", ] [[package]] @@ -2047,9 +1417,6 @@ name = "hashbrown" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" -dependencies = [ - "foldhash 0.2.0", -] [[package]] name = "hassle-rs" @@ -2066,41 +1433,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "heapless" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "634bd4d29cbf24424d0a4bfcbf80c6960129dc24424752a7d1d1390607023422" -dependencies = [ - "as-slice 0.1.5", - "generic-array 0.14.9", - "hash32 0.1.1", - "stable_deref_trait", -] - -[[package]] -name = "heapless" -version = "0.7.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" -dependencies = [ - "atomic-polyfill", - "hash32 0.2.1", - "rustc_version", - "spin", - "stable_deref_trait", -] - -[[package]] -name = "heapless" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad" -dependencies = [ - "hash32 0.3.1", - "stable_deref_trait", -] - [[package]] name = "heck" version = "0.5.0" @@ -2113,72 +1445,12 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c" -[[package]] -name = "hershey" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d3cafa4047531c5386484c8f03dd90ff59c6dd96f8f011c32e13728692d1bbb" -dependencies = [ - "itertools 0.14.0", - "thiserror 2.0.18", -] - [[package]] name = "hexf-parse" version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" -[[package]] -name = "humantime" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" - -[[package]] -name = "i_float" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775f9961a8d2f879725da8aff789bb20a3ddf297473e0c90af75e69313919490" -dependencies = [ - "serde", -] - -[[package]] -name = "i_key_sort" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "347c253b4748a1a28baf94c9ce133b6b166f08573157e05afe718812bc599fcd" - -[[package]] -name = "i_overlay" -version = "1.9.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01882ce5ed786bf6e8f5167f171a4026cd129ce17d9ff5cbf1e6749b98628ece" -dependencies = [ - "i_float", - "i_key_sort", - "i_shape", - "i_tree", - "rayon", -] - -[[package]] -name = "i_shape" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27dbe9e5238d6b9c694c08415bf00fb370b089949bd818ab01f41f8927b8774c" -dependencies = [ - "i_float", - "serde", -] - -[[package]] -name = "i_tree" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "155181bc97d770181cf9477da51218a19ee92a8e5be642e796661aee2b601139" - [[package]] name = "iana-time-zone" version = "0.1.65" @@ -2219,50 +1491,10 @@ dependencies = [ "byteorder", "color_quant", "jpeg-decoder", - "num-traits 0.2.19", - "png 0.17.16", + "num-traits", + "png", ] -[[package]] -name = "image" -version = "0.25.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6506c6c10786659413faa717ceebcb8f70731c0a60cbae39795fdf114519c1a" -dependencies = [ - "bytemuck", - "byteorder-lite", - "color_quant", - "exr", - "gif", - "image-webp", - "moxcms", - "num-traits 0.2.19", - "png 0.18.1", - "qoi", - "ravif", - "rayon", - "rgb", - "tiff", - "zune-core 0.5.1", - "zune-jpeg 0.5.12", -] - -[[package]] -name = "image-webp" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "525e9ff3e1a4be2fbea1fdf0e98686a6d98b4d8f937e1bf7402245af1909e8c3" -dependencies = [ - "byteorder-lite", - "quick-error 2.0.1", -] - -[[package]] -name = "imgref" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7c5cedc30da3a610cac6b4ba17597bdf7152cf974e8aab3afb3d54455e371c8" - [[package]] name = "include_dir" version = "0.7.4" @@ -2303,17 +1535,6 @@ dependencies = [ "rustversion", ] -[[package]] -name = "interpolate_name" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34819042dc3d3971c46c2190835914dfbe0c3c13f61449b2997f4e9722dfa60" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "is-terminal" version = "0.4.17" @@ -2340,15 +1561,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - [[package]] name = "itertools" version = "0.12.1" @@ -2358,24 +1570,6 @@ dependencies = [ "either", ] -[[package]] -name = "itertools" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.17" @@ -2449,28 +1643,12 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2" -[[package]] -name = "lebe" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a79a3332a6609480d7d0c9eab957bca6b455b91bb84e66d19f5ff66294b85b8" - [[package]] name = "libc" version = "0.2.182" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112" -[[package]] -name = "libfuzzer-sys" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f12a681b7dd8ce12bff52488013ba614b869148d54dd79836ab85aafdd53f08d" -dependencies = [ - "arbitrary", - "cc", -] - [[package]] name = "libloading" version = "0.7.4" @@ -2528,15 +1706,6 @@ version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" -[[package]] -name = "loop9" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fae87c125b03c1d2c0150c90365d7d6bcc53fb73a9acaef207d2d065860f062" -dependencies = [ - "imgref", -] - [[package]] name = "malloc_buf" version = "0.0.6" @@ -2556,16 +1725,6 @@ dependencies = [ "rawpointer", ] -[[package]] -name = "maybe-rayon" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ea1f30cedd69f0a2954655f7188c6a834246d2bcf1e315e2ac40c4b24dc9519" -dependencies = [ - "cfg-if", - "rayon", -] - [[package]] name = "memchr" version = "2.8.0" @@ -2623,16 +1782,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "moxcms" -version = "0.7.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac9557c559cd6fc9867e122e20d2cbefc9ca29d80d027a8e39310920ed2f0a97" -dependencies = [ - "num-traits 0.2.19", - "pxfm", -] - [[package]] name = "mpi" version = "0.8.1" @@ -2670,8 +1819,8 @@ dependencies = [ "hexf-parse", "indexmap", "log", - "num-traits 0.2.19", - "rustc-hash 1.1.0", + "num-traits", + "rustc-hash", "spirv", "termcolor", "thiserror 1.0.69", @@ -2686,43 +1835,10 @@ checksum = "26aecdf64b707efd1310e3544d709c5c0ac61c13756046aaaba41be5c4f66a3b" dependencies = [ "approx 0.5.1", "matrixmultiply", - "nalgebra-macros 0.2.2", + "nalgebra-macros", "num-complex 0.4.6", "num-rational", - "num-traits 0.2.19", - "serde", - "simba", - "typenum", -] - -[[package]] -name = "nalgebra" -version = "0.34.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4d5b3eff5cd580f93da45e64715e8c20a3996342f1e466599cf7a267a0c2f5f" -dependencies = [ - "approx 0.5.1", - "glam 0.14.0", - "glam 0.15.2", - "glam 0.16.0", - "glam 0.17.3", - "glam 0.18.0", - "glam 0.19.0", - "glam 0.20.5", - "glam 0.21.3", - "glam 0.22.0", - "glam 0.23.0", - "glam 0.24.2", - "glam 0.25.0", - "glam 0.27.0", - "glam 0.28.0", - "glam 0.29.3", - "glam 0.30.10", - "matrixmultiply", - "nalgebra-macros 0.3.0", - "num-complex 0.4.6", - "num-rational", - "num-traits 0.2.19", + "num-traits", "serde", "simba", "typenum", @@ -2739,25 +1855,14 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "nalgebra-macros" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "973e7178a678cfd059ccec50887658d482ce16b0aa9da3888ddeab5cd5eb4889" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "nalgebra-sparse" version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1107e2587bc373090389bd5b54e05ac3184fd02d7c102decf5d76b8feb84b2d0" dependencies = [ - "nalgebra 0.33.2", - "num-traits 0.2.19", + "nalgebra", + "num-traits", ] [[package]] @@ -2769,7 +1874,7 @@ dependencies = [ "matrixmultiply", "num-complex 0.4.6", "num-integer", - "num-traits 0.2.19", + "num-traits", "rawpointer", ] @@ -2782,7 +1887,7 @@ dependencies = [ "matrixmultiply", "num-complex 0.4.6", "num-integer", - "num-traits 0.2.19", + "num-traits", "portable-atomic", "portable-atomic-util", "rawpointer", @@ -2797,7 +1902,7 @@ dependencies = [ "matrixmultiply", "num-complex 0.4.6", "num-integer", - "num-traits 0.2.19", + "num-traits", "portable-atomic", "portable-atomic-util", "rawpointer", @@ -2812,21 +1917,6 @@ dependencies = [ "jni-sys", ] -[[package]] -name = "ndshape" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975bce586ad637e27f6dc26ee907c07050686a588695bfd64b7873a9d48a700c" -dependencies = [ - "static_assertions", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - [[package]] name = "nom" version = "7.1.3" @@ -2837,21 +1927,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "nom" -version = "8.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" -dependencies = [ - "memchr", -] - -[[package]] -name = "noop_proc_macro" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0676bb32a98c1a483ce53e500a81ad9c3d5b3f7c920c28c24e9cb0980d0b5bc8" - [[package]] name = "nu-ansi-term" version = "0.50.3" @@ -2861,31 +1936,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "num" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" -dependencies = [ - "num-bigint 0.4.6", - "num-complex 0.4.6", - "num-integer", - "num-iter", - "num-rational", - "num-traits 0.2.19", -] - -[[package]] -name = "num-bigint" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6f7833f2cbf2360a6cfd58cd41a53aa7a90bd4c202f5b1c7dd2ed73c57b2c3" -dependencies = [ - "autocfg", - "num-integer", - "num-traits 0.2.19", -] - [[package]] name = "num-bigint" version = "0.4.6" @@ -2893,7 +1943,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" dependencies = [ "num-integer", - "num-traits 0.2.19", + "num-traits", ] [[package]] @@ -2903,7 +1953,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6b19411a9719e753aff12e5187b74d60d3dc449ec3f4dc21e3989c3f554bc95" dependencies = [ "autocfg", - "num-traits 0.2.19", + "num-traits", ] [[package]] @@ -2912,39 +1962,17 @@ version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" dependencies = [ - "num-traits 0.2.19", + "num-traits", "serde", ] -[[package]] -name = "num-derive" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.117", -] - [[package]] name = "num-integer" version = "0.1.46" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" dependencies = [ - "num-traits 0.2.19", -] - -[[package]] -name = "num-iter" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" -dependencies = [ - "autocfg", - "num-integer", - "num-traits 0.2.19", + "num-traits", ] [[package]] @@ -2953,18 +1981,9 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" dependencies = [ - "num-bigint 0.4.6", + "num-bigint", "num-integer", - "num-traits 0.2.19", -] - -[[package]] -name = "num-traits" -version = "0.1.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" -dependencies = [ - "num-traits 0.2.19", + "num-traits", ] [[package]] @@ -2997,9 +2016,9 @@ dependencies = [ "ndarray 0.16.1", "num-complex 0.4.6", "num-integer", - "num-traits 0.2.19", + "num-traits", "pyo3", - "rustc-hash 1.1.0", + "rustc-hash", ] [[package]] @@ -3045,15 +2064,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" -[[package]] -name = "ordered-float" -version = "5.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f4779c6901a562440c3786d08192c6fbda7c1c2060edd10006b05ee35d10f2d" -dependencies = [ - "num-traits 0.2.19", -] - [[package]] name = "parking_lot" version = "0.12.5" @@ -3067,41 +2077,14 @@ dependencies = [ [[package]] name = "parking_lot_core" version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link", -] - -[[package]] -name = "parry3d-f64" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38fe282b81b60a2aee7f24db25ea73b3c82f6451888eeb5936b621adb87aa653" -dependencies = [ - "approx 0.5.1", - "arrayvec", - "bitflags 2.11.0", - "downcast-rs", - "either", - "ena", - "foldhash 0.2.0", - "hashbrown 0.16.1", - "log", - "nalgebra 0.34.1", - "num-derive", - "num-traits 0.2.19", - "ordered-float", - "rstar 0.12.2", - "simba", - "slab", +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", "smallvec", - "spade", - "thiserror 2.0.18", + "windows-link", ] [[package]] @@ -3110,12 +2093,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" -[[package]] -name = "pastey" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35fb2e5f958ec131621fdd531e9fc186ed768cbe395337403ae56c17a74c68ec" - [[package]] name = "pathfinder_geometry" version = "0.5.1" @@ -3135,12 +2112,6 @@ dependencies = [ "rustc_version", ] -[[package]] -name = "pdqselect" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec91767ecc0a0bbe558ce8c9da33c068066c57ecc8bb8477ef8c1ad3ef77c27" - [[package]] name = "petgraph" version = "0.6.5" @@ -3171,12 +2142,12 @@ checksum = "5aeb6f403d7a4911efb1e33402027fc44f29b5bf6def3effcc22d7bb75f2b747" dependencies = [ "font-kit", "lazy_static", - "num-traits 0.2.19", + "num-traits", "pathfinder_geometry", "plotters-backend", "plotters-bitmap", "plotters-svg", - "ttf-parser 0.20.0", + "ttf-parser", "wasm-bindgen", "web-sys", ] @@ -3193,7 +2164,7 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72ce181e3f6bf82d6c1dc569103ca7b1bd964c60ba03d7e6cdfbb3e3eb7f7405" dependencies = [ - "image 0.24.9", + "image", "plotters-backend", ] @@ -3219,19 +2190,6 @@ dependencies = [ "miniz_oxide", ] -[[package]] -name = "png" -version = "0.18.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60769b8b31b2a9f263dae2776c37b1b28ae246943cf719eb6946a1db05128a61" -dependencies = [ - "bitflags 2.11.0", - "crc32fast", - "fdeflate", - "flate2", - "miniz_oxide", -] - [[package]] name = "pollster" version = "0.3.0" @@ -3316,19 +2274,6 @@ name = "profiling" version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3eb8486b569e12e2c32ad3e204dbaba5e4b5b216e9367044f25f1dba42341773" -dependencies = [ - "profiling-procmacros", -] - -[[package]] -name = "profiling-procmacros" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52717f9a02b6965224f95ca2a81e2e0c5c43baacd28ca057577988930b6c3d5b" -dependencies = [ - "quote", - "syn 2.0.117", -] [[package]] name = "proptest" @@ -3339,7 +2284,7 @@ dependencies = [ "bit-set 0.8.0", "bit-vec 0.8.0", "bitflags 2.11.0", - "num-traits 0.2.19", + "num-traits", "rand 0.9.2", "rand_chacha 0.9.0", "rand_xorshift", @@ -3349,15 +2294,6 @@ dependencies = [ "unarray", ] -[[package]] -name = "pxfm" -version = "0.1.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7186d3822593aa4393561d186d1393b3923e9d6163d3fbfd6e825e3e6cf3e6a8" -dependencies = [ - "num-traits 0.2.19", -] - [[package]] name = "pyo3" version = "0.22.6" @@ -3421,27 +2357,12 @@ dependencies = [ "syn 2.0.117", ] -[[package]] -name = "qoi" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6d64c71eb498fe9eae14ce4ec935c555749aef511cca85b5568910d6e48001" -dependencies = [ - "bytemuck", -] - [[package]] name = "quick-error" version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" -[[package]] -name = "quick-error" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" - [[package]] name = "quote" version = "1.0.44" @@ -3531,80 +2452,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3d6831663a5098ea164f89cff59c6284e95f4e3c76ce9848d4529f5ccca9bde" -[[package]] -name = "rapier3d-f64" -version = "0.31.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b8a807527ff2f1f2486f24a24058bdf7edd5f51d96a75b7a2060907bfbfc88b" -dependencies = [ - "approx 0.5.1", - "arrayvec", - "bit-vec 0.8.0", - "bitflags 2.11.0", - "downcast-rs", - "log", - "nalgebra 0.34.1", - "num-derive", - "num-traits 0.2.19", - "ordered-float", - "parry3d-f64", - "profiling", - "rustc-hash 2.1.1", - "simba", - "static_assertions", - "thiserror 2.0.18", -] - -[[package]] -name = "rav1e" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43b6dd56e85d9483277cde964fd1bdb0428de4fec5ebba7540995639a21cb32b" -dependencies = [ - "aligned-vec", - "arbitrary", - "arg_enum_proc_macro", - "arrayvec", - "av-scenechange", - "av1-grain", - "bitstream-io", - "built", - "cfg-if", - "interpolate_name", - "itertools 0.14.0", - "libc", - "libfuzzer-sys", - "log", - "maybe-rayon", - "new_debug_unreachable", - "noop_proc_macro", - "num-derive", - "num-traits 0.2.19", - "paste", - "profiling", - "rand 0.9.2", - "rand_chacha 0.9.0", - "simd_helpers", - "thiserror 2.0.18", - "v_frame", - "wasm-bindgen", -] - -[[package]] -name = "ravif" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef69c1990ceef18a116855938e74793a5f7496ee907562bd0857b6ac734ab285" -dependencies = [ - "avif-serialize", - "imgref", - "loop9", - "quick-error 2.0.1", - "rav1e", - "rayon", - "rgb", -] - [[package]] name = "raw-window-handle" version = "0.6.2" @@ -3692,103 +2539,18 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" -[[package]] -name = "rgb" -version = "0.8.52" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c6a884d2998352bb4daf0183589aec883f16a6da1f4dde84d8e2e9a5409a1ce" - -[[package]] -name = "robust" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5864e7ef1a6b7bcf1d6ca3f655e65e724ed3b52546a0d0a663c991522f552ea" - -[[package]] -name = "robust" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e27ee8bb91ca0adcf0ecb116293afa12d393f9c2b9b9cd54d33e8078fe19839" - [[package]] name = "rsparse" version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9d65dc8db760bdc8c94f4163c5d09be710f76fc92a4a1f698c441925db83c09e" -[[package]] -name = "rstar" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a45c0e8804d37e4d97e55c6f258bc9ad9c5ee7b07437009dd152d764949a27c" -dependencies = [ - "heapless 0.6.1", - "num-traits 0.2.19", - "pdqselect", - "serde", - "smallvec", -] - -[[package]] -name = "rstar" -version = "0.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b40f1bfe5acdab44bc63e6699c28b74f75ec43afb59f3eda01e145aff86a25fa" -dependencies = [ - "heapless 0.7.17", - "num-traits 0.2.19", - "serde", - "smallvec", -] - -[[package]] -name = "rstar" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f39465655a1e3d8ae79c6d9e007f4953bfc5d55297602df9dc38f9ae9f1359a" -dependencies = [ - "heapless 0.7.17", - "num-traits 0.2.19", - "serde", - "smallvec", -] - -[[package]] -name = "rstar" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73111312eb7a2287d229f06c00ff35b51ddee180f017ab6dec1f69d62ac098d6" -dependencies = [ - "heapless 0.7.17", - "num-traits 0.2.19", - "serde", - "smallvec", -] - -[[package]] -name = "rstar" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "421400d13ccfd26dfa5858199c30a5d76f9c54e0dba7575273025b43c5175dbb" -dependencies = [ - "heapless 0.8.0", - "num-traits 0.2.19", - "serde", - "smallvec", -] - [[package]] name = "rustc-hash" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" -[[package]] -name = "rustc-hash" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" - [[package]] name = "rustc_version" version = "0.4.1" @@ -3824,7 +2586,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cc6bf79ff24e648f6da1f8d1f011e9cac26491b619e6b9280f2b47f1774e6ee2" dependencies = [ "fnv", - "quick-error 1.2.3", + "quick-error", "tempfile", "wait-timeout", ] @@ -3956,7 +2718,7 @@ checksum = "c99284beb21666094ba2b75bbceda012e610f5479dfcc2d6e2426f53197ffd95" dependencies = [ "approx 0.5.1", "num-complex 0.4.6", - "num-traits 0.2.19", + "num-traits", "paste", "wide", ] @@ -3967,15 +2729,6 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e320a6c5ad31d271ad523dcf3ad13e2767ad8b1cb8f047f75a8aeaf8da139da2" -[[package]] -name = "simd_helpers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95890f873bec569a0362c235787f3aca6e1e887302ba4840839bcc6459c42da6" -dependencies = [ - "quote", -] - [[package]] name = "slab" version = "0.4.12" @@ -4007,27 +2760,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "spade" -version = "2.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb313e1c8afee5b5647e00ee0fe6855e3d529eb863a0fdae1d60006c4d1e9990" -dependencies = [ - "hashbrown 0.15.5", - "num-traits 0.2.19", - "robust 1.2.0", - "smallvec", -] - -[[package]] -name = "spin" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -dependencies = [ - "lock_api", -] - [[package]] name = "spirv" version = "0.3.0+sdk-1.3.268.0" @@ -4046,46 +2778,24 @@ dependencies = [ "alga", "ndarray 0.17.2", "num-complex 0.4.6", - "num-traits 0.2.19", + "num-traits", "num_cpus", "rayon", "smallvec", ] -[[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - [[package]] name = "static_assertions" version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "stl_io" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a101fb44c7bbb34473ee14a0a9e2c06ad4b1aa22501b18223279fd21f0affd6" -dependencies = [ - "byteorder", - "float-cmp", -] - [[package]] name = "strsim" version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" -[[package]] -name = "svg" -version = "0.18.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94afda9cd163c04f6bee8b4bf2501c91548deae308373c436f36aeff3cf3c4a3" - [[package]] name = "syn" version = "1.0.109" @@ -4185,20 +2895,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "tiff" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af9605de7fee8d9551863fd692cce7637f548dbd9db9180fcc07ccc6d26c336f" -dependencies = [ - "fax", - "flate2", - "half", - "quick-error 2.0.1", - "weezl", - "zune-jpeg 0.4.21", -] - [[package]] name = "tinytemplate" version = "1.2.1" @@ -4341,21 +3037,6 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17f77d76d837a7830fe1d4f12b7b4ba4192c1888001c7164257e4bc6d21d96b4" -[[package]] -name = "ttf-parser" -version = "0.25.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2df906b07856748fa3f6e0ad0cbaa047052d4a7dd609e231c4f72cee8c36f31" - -[[package]] -name = "ttf-parser-utils" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff2ad77abd4b1ab08adbab7f399be4cc1ff6958421cafa86af75824d9179b5c0" -dependencies = [ - "ttf-parser 0.25.1", -] - [[package]] name = "typenum" version = "1.19.0" @@ -4404,29 +3085,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" -[[package]] -name = "uuid" -version = "1.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb" -dependencies = [ - "getrandom 0.4.1", - "js-sys", - "serde_core", - "wasm-bindgen", -] - -[[package]] -name = "v_frame" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "666b7727c8875d6ab5db9533418d7c764233ac9c0cff1d469aec8fa127597be2" -dependencies = [ - "aligned-vec", - "num-traits 0.2.19", - "wasm-bindgen", -] - [[package]] name = "valuable" version = "0.1.1" @@ -4591,12 +3249,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "weezl" -version = "0.1.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a28ac98ddc8b9274cb41bb4d9d4d5c425b6020c50c46f25559911905610b4a88" - [[package]] name = "wgpu" version = "0.19.4" @@ -4640,7 +3292,7 @@ dependencies = [ "parking_lot", "profiling", "raw-window-handle", - "rustc-hash 1.1.0", + "rustc-hash", "smallvec", "thiserror 1.0.69", "web-sys", @@ -4684,7 +3336,7 @@ dependencies = [ "range-alloc", "raw-window-handle", "renderdoc-sys", - "rustc-hash 1.1.0", + "rustc-hash", "smallvec", "thiserror 1.0.69", "wasm-bindgen", @@ -5082,30 +3734,12 @@ dependencies = [ "wasmparser", ] -[[package]] -name = "xml-rs" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c1cb601d29fe2c2ac60a2b2e5e293994d87a1f6fa9687a31a15270f909be9c2" -dependencies = [ - "bitflags 1.3.2", -] - [[package]] name = "xml-rs" version = "0.8.28" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3ae8337f8a065cfc972643663ea4279e04e7256de865aa66fe25cec5fb912d3f" -[[package]] -name = "xmltree" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff8eaee9d17062850f1e6163b509947969242990ee59a35801af437abe041e70" -dependencies = [ - "xml-rs 0.7.0", -] - [[package]] name = "xshell" version = "0.2.7" @@ -5133,12 +3767,6 @@ dependencies = [ "xshell", ] -[[package]] -name = "y4m" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5a4b21e1a62b67a2970e6831bc091d7b87e119e7f9791aef9702e3bef04448" - [[package]] name = "yeslogic-fontconfig-sys" version = "6.0.0" @@ -5203,42 +3831,3 @@ dependencies = [ "cc", "pkg-config", ] - -[[package]] -name = "zune-core" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" - -[[package]] -name = "zune-core" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb8a0807f7c01457d0379ba880ba6322660448ddebc890ce29bb64da71fb40f9" - -[[package]] -name = "zune-inflate" -version = "0.2.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73ab332fe2f6680068f3582b16a24f90ad7096d5d39b974d1c0aff0125116f02" -dependencies = [ - "simd-adler32", -] - -[[package]] -name = "zune-jpeg" -version = "0.4.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29ce2c8a9384ad323cf564b67da86e21d3cfdff87908bc1223ed5c99bc792713" -dependencies = [ - "zune-core 0.4.12", -] - -[[package]] -name = "zune-jpeg" -version = "0.5.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "410e9ecef634c709e3831c2cfdb8d9c32164fae1c67496d5b68fff728eec37fe" -dependencies = [ - "zune-core 0.5.1", -] diff --git a/crates/cfd-3d/src/fem/problem.rs b/crates/cfd-3d/src/fem/problem.rs index 39bd6b33..9ffeafff 100644 --- a/crates/cfd-3d/src/fem/problem.rs +++ b/crates/cfd-3d/src/fem/problem.rs @@ -92,42 +92,43 @@ impl StokesFlowProblem pub fn get_boundary_nodes(&self) -> Vec { use std::collections::{HashMap, HashSet}; - // Count how many cells reference each face - let mut face_cell_count: HashMap = HashMap::new(); + // 1. Geometric Deduplication Check + // Count how many times each face (defined by sorted vertices) appears in cells + // Key: Sorted list of vertex indices (representing a face) + // Value: Count + let mut face_geo_count: HashMap, usize> = HashMap::new(); + for cell in self.mesh.cells.iter() { for &face_idx in &cell.faces { - *face_cell_count.entry(face_idx).or_insert(0) += 1; + if face_idx < self.mesh.face_count() { + let face = self.mesh.faces.get(FaceId::from_usize(face_idx)); + let mut verts: Vec = face.vertices.iter().map(|v| v.as_usize()).collect(); + verts.sort_unstable(); + *face_geo_count.entry(verts).or_insert(0) += 1; + } } } - // Collect boundary faces: - // 1. Faces explicitly marked as boundaries - let marked_boundary_faces: std::collections::HashSet = - self.mesh.boundary_faces().into_iter().map(|f| f.as_usize()).collect(); - - // 2. Faces referenced by exactly one cell (external boundaries) - let connectivity_boundary_faces: std::collections::HashSet = face_cell_count - .iter() - .filter(|&(_face_idx, &count)| count == 1) - .map(|(&face_idx, _)| face_idx) - .collect(); - - // Union of both sets - let boundary_faces: std::collections::HashSet = marked_boundary_faces - .union(&connectivity_boundary_faces) - .copied() - .collect(); + let mut boundary_vertices: HashSet = HashSet::new(); - let mut boundary_vertices: std::collections::HashSet = std::collections::HashSet::new(); - for &face_idx in &boundary_faces { - if face_idx < self.mesh.face_count() { - let face = self.mesh.faces.get(FaceId::from_usize(face_idx)); - for &v_id in &face.vertices { - boundary_vertices.insert(v_id.as_usize()); + // Add vertices from geometrically unique faces (count == 1) + for (verts, count) in &face_geo_count { + if *count == 1 { + for &v_idx in verts { + boundary_vertices.insert(v_idx); } } } + // 2. Add vertices from explicitly marked boundary faces + // We use boundary_labels directly to avoid relying on topological boundary_faces() + for (face_id, _) in &self.mesh.boundary_labels { + let face = self.mesh.faces.get(*face_id); + for &v_id in &face.vertices { + boundary_vertices.insert(v_id.as_usize()); + } + } + // Convert to sorted vector for deterministic output let mut result: Vec = boundary_vertices.into_iter().collect(); result.sort_unstable(); @@ -161,22 +162,17 @@ mod tests { /// One tetrahedron with 4 triangular faces, all are boundary faces fn create_test_tet_mesh() -> IndexedMesh { let mut mesh = IndexedMesh::new(); - - // Add 4 vertices let v0 = mesh.add_vertex_pos(Point3::new(0.0, 0.0, 0.0)); let v1 = mesh.add_vertex_pos(Point3::new(1.0, 0.0, 0.0)); let v2 = mesh.add_vertex_pos(Point3::new(0.5, 1.0, 0.0)); let v3 = mesh.add_vertex_pos(Point3::new(0.5, 0.5, 1.0)); - // Add 4 triangular faces - let f0 = mesh.add_face(v0, v1, v2).0; // bottom - let f1 = mesh.add_face(v0, v1, v3).0; // front - let f2 = mesh.add_face(v1, v2, v3).0; // right - let f3 = mesh.add_face(v2, v0, v3).0; // left + let f0 = mesh.add_face(v0, v1, v2).0; + let f1 = mesh.add_face(v0, v1, v3).0; + let f2 = mesh.add_face(v1, v2, v3).0; + let f3 = mesh.add_face(v2, v0, v3).0; - // Add 1 tetrahedral cell mesh.add_cell(Cell::tetrahedron(f0 as usize, f1 as usize, f2 as usize, f3 as usize)); - mesh } @@ -194,144 +190,164 @@ mod tests { /// ``` fn create_two_tet_mesh() -> IndexedMesh { let mut mesh = IndexedMesh::new(); - - // Add 5 vertices let v0 = mesh.add_vertex_pos(Point3::new(0.0, 0.0, 0.0)); let v1 = mesh.add_vertex_pos(Point3::new(1.0, 0.0, 0.0)); let v2 = mesh.add_vertex_pos(Point3::new(0.5, 1.0, 0.0)); let v3 = mesh.add_vertex_pos(Point3::new(0.5, 0.5, 1.0)); let v4 = mesh.add_vertex_pos(Point3::new(1.5, 0.5, 1.0)); - // First tetrahedron faces - let f0 = mesh.add_face(v0, v1, v2).0; // bottom tet1 - let f1 = mesh.add_face(v0, v1, v3).0; // front tet1 - let f2 = mesh.add_face(v1, v2, v3).0; // shared face (internal) - let f3 = mesh.add_face(v2, v0, v3).0; // left tet1 + let f0 = mesh.add_face(v0, v1, v2).0; + let f1 = mesh.add_face(v0, v1, v3).0; + let f2 = mesh.add_face(v1, v2, v3).0; // shared + let f3 = mesh.add_face(v2, v0, v3).0; - // Second tetrahedron faces (shares f2) - let f4 = mesh.add_face(v1, v2, v4).0; // right tet2 - let f5 = mesh.add_face(v1, v3, v4).0; // bottom tet2 - let f6 = mesh.add_face(v2, v3, v4).0; // top tet2 + let f4 = mesh.add_face(v1, v2, v4).0; + let f5 = mesh.add_face(v1, v3, v4).0; + let f6 = mesh.add_face(v2, v3, v4).0; - // Add cells mesh.add_cell(Cell::tetrahedron(f0 as usize, f1 as usize, f2 as usize, f3 as usize)); mesh.add_cell(Cell::tetrahedron(f2 as usize, f4 as usize, f5 as usize, f6 as usize)); - mesh } #[test] fn test_boundary_detection_single_tet() { - // Single tetrahedron - all 4 vertices should be on boundary let mesh = create_test_tet_mesh(); let fluid = ConstantPropertyFluid::::water_20c().unwrap(); let boundary_conditions = HashMap::new(); - let problem = StokesFlowProblem::new(mesh, fluid, boundary_conditions, 4); let boundary_nodes = problem.get_boundary_nodes(); - - // All 4 vertices should be boundary nodes assert_eq!(boundary_nodes.len(), 4); - assert_eq!(boundary_nodes, vec![0, 1, 2, 3]); } #[test] fn test_boundary_detection_two_tets() { - // Two tetrahedra sharing a face - shared vertices should still be boundary - // because they are on external faces let mesh = create_two_tet_mesh(); let fluid = ConstantPropertyFluid::::water_20c().unwrap(); let boundary_conditions = HashMap::new(); - let problem = StokesFlowProblem::new(mesh, fluid, boundary_conditions, 5); let boundary_nodes = problem.get_boundary_nodes(); - - // All 5 vertices are on boundary (even shared ones appear on external faces) assert_eq!(boundary_nodes.len(), 5); - assert!(boundary_nodes.contains(&0)); - assert!(boundary_nodes.contains(&1)); - assert!(boundary_nodes.contains(&2)); - assert!(boundary_nodes.contains(&3)); - assert!(boundary_nodes.contains(&4)); } #[test] fn test_boundary_detection_with_markers() { - // Test that explicitly marked boundary faces are detected let mut mesh = create_test_tet_mesh(); - - // Mark face 0 as "inlet" use cfd_mesh::domain::core::index::FaceId; mesh.mark_boundary(FaceId::from_usize(0), "inlet".to_string()); - let fluid = ConstantPropertyFluid::::water_20c().unwrap(); let boundary_conditions = HashMap::new(); - let problem = StokesFlowProblem::new(mesh, fluid, boundary_conditions, 4); let boundary_nodes = problem.get_boundary_nodes(); - - // All 4 vertices should still be boundary nodes assert_eq!(boundary_nodes.len(), 4); - assert_eq!(boundary_nodes, vec![0, 1, 2, 3]); } #[test] fn test_validate_with_missing_boundary_conditions() { - // Test validation catches missing boundary conditions let mesh = create_test_tet_mesh(); let fluid = ConstantPropertyFluid::::water_20c().unwrap(); - let boundary_conditions = HashMap::new(); // Empty - no BCs defined - + let boundary_conditions = HashMap::new(); let problem = StokesFlowProblem::new(mesh, fluid, boundary_conditions, 4); - - // Should fail validation - boundary nodes exist but no BCs - let result = problem.validate(); - assert!(result.is_err()); - - if let Err(Error::InvalidConfiguration(msg)) = result { - assert!(msg.contains("Missing boundary conditions")); - assert!(msg.contains("nodes:")); - } + assert!(problem.validate().is_err()); } #[test] fn test_validate_with_complete_boundary_conditions() { - // Test validation passes when all boundary nodes have BCs let mesh = create_test_tet_mesh(); let fluid = ConstantPropertyFluid::::water_20c().unwrap(); - - // Add BCs for all 4 boundary nodes (simple Dirichlet) let mut boundary_conditions = HashMap::new(); for i in 0..4 { - boundary_conditions.insert( - i, - BoundaryCondition::Dirichlet { - value: 0.0, - component_values: None, - }, - ); + boundary_conditions.insert(i, BoundaryCondition::Dirichlet { value: 0.0, component_values: None }); } - let problem = StokesFlowProblem::new(mesh, fluid, boundary_conditions, 4); - - // Should pass validation - let result = problem.validate(); - assert!(result.is_ok()); + assert!(problem.validate().is_ok()); } #[test] fn test_boundary_nodes_sorted() { - // Test that boundary nodes are returned in sorted order let mesh = create_test_tet_mesh(); let fluid = ConstantPropertyFluid::::water_20c().unwrap(); let boundary_conditions = HashMap::new(); - let problem = StokesFlowProblem::new(mesh, fluid, boundary_conditions, 4); let boundary_nodes = problem.get_boundary_nodes(); - - // Check sorted order let mut sorted = boundary_nodes.clone(); sorted.sort_unstable(); assert_eq!(boundary_nodes, sorted); } + + /// Create a star mesh (12 tets) around a center node, with duplicated faces + fn create_bad_star_mesh() -> IndexedMesh { + let mut mesh = IndexedMesh::new(); + + // Vertices + let c = mesh.add_vertex_pos(Point3::new(0.5, 0.5, 0.5)); // Center (index 0) + let v000 = mesh.add_vertex_pos(Point3::new(0.0, 0.0, 0.0)); // 1 + let v100 = mesh.add_vertex_pos(Point3::new(1.0, 0.0, 0.0)); // 2 + let v110 = mesh.add_vertex_pos(Point3::new(1.0, 1.0, 0.0)); // 3 + let v010 = mesh.add_vertex_pos(Point3::new(0.0, 1.0, 0.0)); // 4 + let v001 = mesh.add_vertex_pos(Point3::new(0.0, 0.0, 1.0)); // 5 + let v101 = mesh.add_vertex_pos(Point3::new(1.0, 0.0, 1.0)); // 6 + let v111 = mesh.add_vertex_pos(Point3::new(1.0, 1.0, 1.0)); // 7 + let v011 = mesh.add_vertex_pos(Point3::new(0.0, 1.0, 1.0)); // 8 + + let corners = [v000, v100, v110, v010, v001, v101, v111, v011]; + // Indices relative to corners array: + // Bottom: 0,1,2,3 -> (0,0,0), (1,0,0), (1,1,0), (0,1,0). + // Top: 4,5,6,7 -> (0,0,1), (1,0,1), (1,1,1), (0,1,1). + + let surface_tris = vec![ + // Bottom (z=0) + (corners[0], corners[3], corners[2]), (corners[0], corners[2], corners[1]), + // Top (z=1) + (corners[4], corners[5], corners[6]), (corners[4], corners[6], corners[7]), + // Front (y=0) + (corners[0], corners[1], corners[5]), (corners[1], corners[5], corners[6]), // No, 1-2-6-5 logic? + // Let's use simpler explicit coords to be sure. + // v000, v100, v101, v001. -> 0,1,5,4. + (corners[0], corners[1], corners[5]), (corners[0], corners[5], corners[4]), + // Back (y=1) + // v010, v110, v111, v011. -> 3,2,6,7. + (corners[3], corners[2], corners[6]), (corners[3], corners[6], corners[7]), + // Left (x=0) + // v000, v001, v011, v010. -> 0,4,7,3. + (corners[0], corners[4], corners[7]), (corners[0], corners[7], corners[3]), + // Right (x=1) + // v100, v110, v111, v101. -> 1,2,6,5. + (corners[1], corners[2], corners[6]), (corners[1], corners[6], corners[5]), + ]; + + for (v1, v2, v3) in surface_tris { + // Create tet connecting Center to this triangle + // Intentionally create NEW faces for each tet + let f0 = mesh.add_face(c, v1, v2); + let f1 = mesh.add_face(c, v2, v3); + let f2 = mesh.add_face(c, v3, v1); + let f3 = mesh.add_face(v1, v2, v3); // Surface face + + mesh.add_cell(Cell::tetrahedron(f0.as_usize(), f1.as_usize(), f2.as_usize(), f3.as_usize())); + } + + mesh + } + + #[test] + fn test_internal_node_is_not_boundary_with_bad_topology() { + // Create a mesh with duplicated faces + let mesh = create_bad_star_mesh(); + + // Node 0 is the center node + let center_node = 0; + + let fluid = ConstantPropertyFluid::::water_20c().unwrap(); + let boundary_conditions = HashMap::new(); + + let problem = StokesFlowProblem::new(mesh, fluid, boundary_conditions, 9); + let boundary_nodes = problem.get_boundary_nodes(); + + // With geometric deduplication, the internal node (0) should NOT be in boundary nodes. + // It is shared by 12 tets. The faces connected to it are internal. + + assert!(!boundary_nodes.contains(¢er_node), + "Internal node {} should NOT be identified as boundary node, even with duplicated faces. Boundary nodes found: {:?}", center_node, boundary_nodes); + } } diff --git a/crates/cfd-optim/Cargo.toml b/crates/cfd-optim/Cargo.toml index ffcbc8b7..daf555a4 100644 --- a/crates/cfd-optim/Cargo.toml +++ b/crates/cfd-optim/Cargo.toml @@ -11,7 +11,7 @@ categories = ["science", "simulation"] [features] default = [] -mesh-export = ["dep:blue2mesh"] +# mesh-export = ["dep:blue2mesh"] [dependencies] serde = { workspace = true, features = ["derive"] } @@ -24,7 +24,7 @@ cfd-core = { workspace = true, default-features = false } cfd-1d.workspace = true cfd-schematics.workspace = true -blue2mesh = { path = "../../../blue2mesh", optional = true, default-features = false, features = ["mesh-generation", "cfd-export", "stl-export"] } +# blue2mesh = { path = "../../../blue2mesh", optional = true, default-features = false, features = ["mesh-generation", "cfd-export", "stl-export"] } [[example]] name = "sdt_top5"