diff --git a/.gitignore b/.gitignore index 6b6bc50..de64ef5 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ lcov.info /docs/Manifest.toml /docs/build/ /docs/site/ +/examples/*.html diff --git a/README.md b/README.md index 37bad6e..1cae8cf 100644 --- a/README.md +++ b/README.md @@ -22,21 +22,18 @@ extensions for [ExaFMMt.jl](https://github.com/JoshuaTetzner/ExaFMMt.jl), which are loaded automatically once these packages are available. +Planned extensions include interfaces to additional FMM backends — a +native Julia implementation and GPU-accelerated variants — as well as support +for two-dimensional problems. + ## Correction-Factor Matrix Method For a boundary-element matrix $A$, the far field is approximated by an FMM-backed map $A_\mathrm{FMM}$. The near interactions are evaluated with the boundary-element quadrature and corrected for the part already represented by -the FMM: - -$$Ax \approx A_\mathrm{FMM}\,x + \left(A_\mathrm{near} - A_\mathrm{FMM,near}\right)x.$$ +the FMM [1]: -The sparse correction blocks are selected from an -[H2Trees.jl](https://github.com/djukic14/H2Trees.jl) tree. A matrix-vector -product evaluates the FMM map first and then adds the sparse near correction. -Transpose and adjoint products follow the corresponding `LinearMaps.jl` -interfaces. Further details are given in the -[documentation](https://JoshuaTetzner.github.io/CorrectionFactorMatrixMethod.jl/dev/details/method/). +$$\boldsymbol{A}\boldsymbol{x} \approx \boldsymbol{A}_\mathrm{FMM}\,\boldsymbol{x} + \left(\boldsymbol{A}_\mathrm{near} - \boldsymbol{A}_\mathrm{FMM,near}\right)\boldsymbol{x}.$$ ## Installation @@ -63,18 +60,10 @@ mesh = meshsphere(1.0, 0.4) space = raviartthomas(mesh) operator = Maxwell3D.singlelayer(; wavenumber=1.0) -matrix = CFMM.assemble(operator, space) +matrix = CFMM.assemble(operator, space, space) result = matrix * rand(scalartype(operator), numfunctions(space)) ``` -[`CFMM.assemble`](https://JoshuaTetzner.github.io/CorrectionFactorMatrixMethod.jl/dev/manual/manual/) -constructs an optimized tree automatically. Existing trees and all lower-level -FMM, quadrature, and scheduler options can be supplied as keywords. The -returned operator implements the `LinearMaps.jl` interface, so it can be passed -straight to an iterative solver. Runnable EFIE and MFIE examples are in the -[`examples/`](examples) directory and in the -[documentation](https://JoshuaTetzner.github.io/CorrectionFactorMatrixMethod.jl/dev/). - ## References - [1] Adelman, Ross, Nail A. Gumerov, and Ramani Duraiswami. *FMM/GPU-Accelerated Boundary Element Method for Computational Magnetics and Electrostatics.* IEEE Transactions on Magnetics 53, no. 12 (December 2017): 1–11. [https://doi.org/10.1109/TMAG.2017.2725951](https://doi.org/10.1109/TMAG.2017.2725951). diff --git a/docs/make.jl b/docs/make.jl index cd0608f..4b5b813 100644 --- a/docs/make.jl +++ b/docs/make.jl @@ -24,6 +24,7 @@ makedocs(; ["General Usage" => "manual/manual.md", "Examples" => "manual/examples.md"], "Details" => [ "Correction-Factor Method" => "details/method.md", + "Supported Operators" => "details/operators.md", "Package Extensions" => "details/extensions.md", ], "Contributing" => "contributing.md", diff --git a/docs/render_examples.jl b/docs/render_examples.jl new file mode 100644 index 0000000..5d63d7b --- /dev/null +++ b/docs/render_examples.jl @@ -0,0 +1,28 @@ +# Regenerate the pre-rendered plot assets embedded in the documentation. +# Run from the package root: +# +# julia --startup-file=no docs/render_examples.jl +# +# Commit the generated files in docs/src/assets/examples/ afterwards. + +using Pkg: Pkg +Pkg.activate(joinpath(@__DIR__, "..", "examples")) +Pkg.develop(; path=joinpath(@__DIR__, "..")) +Pkg.instantiate() + +using BEAST +using CompScienceMeshes +using CorrectionFactorMatrixMethod +using ExaFMMt +using Krylov +using LinearAlgebra +using PlotlyJS + +outdir = joinpath(@__DIR__, "src", "assets", "examples") +mkpath(outdir) +ENV["CFMM_OUTPUT_DIR"] = outdir + +include(joinpath(@__DIR__, "..", "examples", "efie.jl")) +include(joinpath(@__DIR__, "..", "examples", "mfie.jl")) + +@info "Plots written to $outdir" diff --git a/docs/src/assets/examples/efie_results.html b/docs/src/assets/examples/efie_results.html new file mode 100644 index 0000000..35d0b91 --- /dev/null +++ b/docs/src/assets/examples/efie_results.html @@ -0,0 +1,34 @@ + + + +
+ + + + +
+
+ +
+ + + \ No newline at end of file diff --git a/docs/src/assets/examples/mfie_results.html b/docs/src/assets/examples/mfie_results.html new file mode 100644 index 0000000..767a1ec --- /dev/null +++ b/docs/src/assets/examples/mfie_results.html @@ -0,0 +1,34 @@ + + + +
+ + + + +
+
+ +
+ + + \ No newline at end of file diff --git a/docs/src/contributing.md b/docs/src/contributing.md index 9f0c262..9bd2991 100644 --- a/docs/src/contributing.md +++ b/docs/src/contributing.md @@ -1,7 +1,95 @@ # Contributing -Development work targets the `dev` branch. Open a pull request from `dev` to -`main` for stable changes, and merge it with a merge commit. +## What is currently implemented + +CorrectionFactorMatrixMethod.jl provides a matrix-free BEM framework for +**three-dimensional** problems. The following is in place: + +- **Core machinery**: correction-factor assembly driven by an `H2Trees.BlockTree`, + sparse near-field correction via `BlockSparseMatrices.jl`, and a + `LinearMaps.jl`-compatible `PetrovGalerkinCFMM` operator supporting forward, + transpose, and adjoint products. +- **BEAST extension** (`CFMMBEAST`): quadrature, collocation, and corrected-kernel + assembly for all BEAST `IntegralOperator` types; specialisations for + Helmholtz 3D (V, K, K', W) with Lagrange C0D1 basis functions and Maxwell 3D + (T/EFIE, K/MFIE) with Raviart–Thomas basis functions. +- **ExaFMMt extension** (`CFMMExaFMMt`): operator-parameter mapping to + `LaplaceFMMOptions`, `ModifiedHelmholtzFMMOptions`, and `HelmholtzFMMOptions`; + Helmholtz operators with zero wavenumber automatically reduce to the Laplace + path. + +For a complete list of tested operator–basis combinations see the +[Supported Operators](@ref) page. + +## What could be added + +Contributions are welcome in any of the following areas: + +### Additional FMM backends + +The `FMMFunctor` interface is designed to be extended. Adding a new FMM +library requires implementing: + +- `CorrectionFactorMatrixMethod.setup(spoints, tpoints, options)` — set up the + FMM from source and target point matrices. +- `CorrectionFactorMatrixMethod.fmmresult(fmm, x)` — evaluate the FMM + map for a given input vector. + +Potential targets include: + +- **A native Julia FMM**: A pure-Julia implementation would remove the binary + dependency on ExaFMMt and simplify installation, particularly on HPC + systems. +- **FMMLIB2D / FMMLIB3D**: The Fortran-based FMM libraries wrapped for Julia + could serve as an alternative backend. +- **GPU-accelerated FMMs**: An extension that drives a GPU FMM (e.g. via CUDA) + would be a natural fit for the GPU near-field assembler already used for + BEAST. + +### Two-dimensional operator support + +The current collocation and operator implementations target 3D surfaces only. +Extending to 2D would require: + +- A 2D `sources` / `potentials` implementation for 1D boundary curves. +- Operators for the 2D Helmholtz and Laplace kernels + (``G(\boldsymbol{x},\boldsymbol{y}) = \tfrac{i}{4} H_0^{(1)}(k|\boldsymbol{x}-\boldsymbol{y}|)``). +- A 2D-capable FMM backend (e.g. FMMLIB2D). + +### Additional BEM library integrations + +The `CFMMBEAST` extension can serve as a blueprint for integrating other +Julia BEM libraries. Any library that can provide quadrature data and +block assemblers in the same style can be added as a new extension. + +### Further operator–basis combinations + +Some operator–basis pairings (e.g. Helmholtz operators with +Raviart–Thomas basis functions, or Maxwell operators with Lagrange +basis functions for mixed formulations) are architecturally supported but not +yet tested. Contributions that add and verify such combinations are welcome. + +## Regenerating documentation plots + +The interactive plots on the Examples page are pre-rendered HTML files stored +in `docs/src/assets/examples/` and committed to the repository. The CI build +only serves these static files; it does not re-run the examples. + +After changing any file in `examples/`, regenerate the plots from the +repository root: + +```sh +julia --startup-file=no docs/render_examples.jl +``` + +Then commit the updated HTML files alongside your example changes. Running the +test suite locally will emit a `@warn` if the HTML files are older than the +example scripts, so you will not accidentally forget this step. + +## Development workflow + +Development targets the `dev` branch. Open a pull request from `dev` to +`main` for stable releases and merge with a merge commit. Run the package checks locally with: @@ -20,4 +108,5 @@ include("docs/make.jl") ``` Code must pass the formatter, Aqua, JET, and ExplicitImports checks included in -the test suite. +the test suite. The formatter is configured with the `blue` style at a column +margin of 92. diff --git a/docs/src/details/method.md b/docs/src/details/method.md index 38dfc24..b42a219 100644 --- a/docs/src/details/method.md +++ b/docs/src/details/method.md @@ -6,8 +6,8 @@ the boundary-element quadrature and corrected for the interactions already represented by the FMM: ```math -A x \approx A_{\mathrm{FMM}}x + -\left(A_{\mathrm{near}} - A_{\mathrm{FMM,near}}\right)x. +\boldsymbol{A}\boldsymbol{x} \approx \boldsymbol{A}_{\mathrm{FMM}}\boldsymbol{x} + +\left(\boldsymbol{A}_{\mathrm{near}} - \boldsymbol{A}_{\mathrm{FMM,near}}\right)\boldsymbol{x}. ``` The sparse correction blocks are selected from an `H2Trees.BlockTree`. diff --git a/docs/src/details/operators.md b/docs/src/details/operators.md new file mode 100644 index 0000000..43f4426 --- /dev/null +++ b/docs/src/details/operators.md @@ -0,0 +1,69 @@ +# Supported Operators + +All operators currently implemented target **three-dimensional** problems. +Two-dimensional support is a planned future extension. + +The CFMM wrapper is constructed via [`CFMM.assemble`](@ref) (or the lower-level +[`PetrovGalerkinCFMM`](@ref)) once the `CFMMBEAST` and `CFMMExaFMMt` extensions +are loaded. + +## Helmholtz 3D (scalar) + +These operators act on scalar basis functions. +The current implementation supports **Lagrange C0D1** (`lagrangec0d1`) basis +functions on triangulated surfaces. + +The Helmholtz Green's function is + +```math +G(\boldsymbol{x},\boldsymbol{y}) = \frac{e^{ik|\boldsymbol{x}-\boldsymbol{y}|}}{4\pi|\boldsymbol{x}-\boldsymbol{y}|}, +\quad k \in \mathbb{C}. +``` + +Setting `wavenumber = 0` recovers the Laplace Green's function +``G_0(\boldsymbol{x},\boldsymbol{y}) = 1/(4\pi|\boldsymbol{x}-\boldsymbol{y}|)``; the ExaFMMt backend +automatically switches to `LaplaceFMMOptions` in that case. + +| Operator | BEAST constructor | Mathematical form | +|:---------|:------------------|:------------------| +| Single-layer (V) | `Helmholtz3D.singlelayer(; wavenumber)` | ``(V u)(\boldsymbol{x}) = \int_\Gamma G(\boldsymbol{x},\boldsymbol{y})\,u(\boldsymbol{y})\,\mathrm{d}S(\boldsymbol{y})`` | +| Double-layer (K) | `Helmholtz3D.doublelayer(; wavenumber)` | ``(K u)(\boldsymbol{x}) = \int_\Gamma \partial_{\boldsymbol{n}(\boldsymbol{y})} G(\boldsymbol{x},\boldsymbol{y})\,u(\boldsymbol{y})\,\mathrm{d}S(\boldsymbol{y})`` | +| Transposed double-layer (K') | `Helmholtz3D.doublelayer_transposed(; wavenumber)` | ``(K' u)(\boldsymbol{x}) = \int_\Gamma \partial_{\boldsymbol{n}(\boldsymbol{x})} G(\boldsymbol{x},\boldsymbol{y})\,u(\boldsymbol{y})\,\mathrm{d}S(\boldsymbol{y})`` | +| Hypersingular (W) | `Helmholtz3D.hypersingular(; wavenumber)` | ``(W u)(\boldsymbol{x}) = -\partial_{\boldsymbol{n}(\boldsymbol{x})} \int_\Gamma \partial_{\boldsymbol{n}(\boldsymbol{y})} G(\boldsymbol{x},\boldsymbol{y})\,u(\boldsymbol{y})\,\mathrm{d}S(\boldsymbol{y})`` | + +All four operators are tested with `lagrangec0d1` basis functions (Petrov–Galerkin, +square systems). Other scalar basis function types may work but are not +currently verified. + +## Maxwell 3D (vector) + +These operators act on vector basis functions. +The current implementation supports **Raviart–Thomas** (`raviartthomas`) basis +functions on triangulated surfaces. + +| Operator | BEAST constructor | Mathematical form | +|:---------|:------------------|:------------------| +| Single-layer / EFIE (T) | `Maxwell3D.singlelayer(; wavenumber)` | ``(\mathcal{T}\boldsymbol{u})(\boldsymbol{x}) = \alpha\!\int_\Gamma G\,\boldsymbol{u}\,\mathrm{d}S + \beta\,\nabla\!\int_\Gamma G\,\nabla_\Gamma\!\cdot\boldsymbol{u}\,\mathrm{d}S`` | +| Double-layer / MFIE (K) | `Maxwell3D.doublelayer(; wavenumber)` | ``(\mathcal{K}\boldsymbol{u})(\boldsymbol{x}) = \int_\Gamma \nabla G(\boldsymbol{x},\boldsymbol{y})\times\boldsymbol{u}(\boldsymbol{y})\,\mathrm{d}S(\boldsymbol{y})`` | + +Both operators are tested with `raviartthomas` basis functions (Petrov–Galerkin, +square systems). + +## Tested basis-function / operator combinations + +The table below summarises which combinations are covered by the automated +test suite. A ✓ means the forward product, the transpose, and the adjoint +are all verified against a dense BEAST assembly. + +| Operator | `lagrangec0d1` | `raviartthomas` | +|:---------|:--------------:|:---------------:| +| `Helmholtz3D.singlelayer` | ✓ | — | +| `Helmholtz3D.doublelayer` | ✓ | — | +| `Helmholtz3D.doublelayer_transposed` | ✓ | — | +| `Helmholtz3D.hypersingular` | ✓ | — | +| `Maxwell3D.singlelayer` | — | ✓ | +| `Maxwell3D.doublelayer` | — | ✓ | + +Combinations marked — are not supported by the current operator +implementation (the scalar Helmholtz operators require scalar basis functions; +the vector Maxwell operators require vector basis functions). diff --git a/docs/src/manual/examples.md b/docs/src/manual/examples.md index 9b84c2b..fe4b135 100644 --- a/docs/src/manual/examples.md +++ b/docs/src/manual/examples.md @@ -36,16 +36,26 @@ space = raviartthomas(mesh) wavenumber = 1.0 operator = Maxwell3D.singlelayer(; wavenumber) excitation = Maxwell3D.planewave(; - direction=ẑ, polarization=x̂, wavenumber + direction=ẑ, polarization=x̂, wavenumber ) rhs = assemble((n × excitation) × n, space) -matrix = CFMM.assemble(operator, space) +matrix = CFMM.assemble(operator, space, space) current, stats = Krylov.gmres( matrix, rhs; rtol=1.0e-4, itmax=200, history=true, verbose=1 ) ``` +Far-field pattern (top left), scattered electric field magnitude in the ``yz`` +plane (top right), and surface-current magnitude (bottom): + +```@raw html + +``` + The complete runnable example, including the plots, is in `examples/efie.jl`. @@ -67,7 +77,7 @@ wavenumber = frequency * √(permittivity * permeability) operator = Maxwell3D.doublelayer(; wavenumber) excitation = Maxwell3D.planewave(; - direction=ẑ, polarization=x̂, wavenumber + direction=ẑ, polarization=x̂, wavenumber ) magneticfield = -1 / (im * permeability * frequency) * curl(excitation) rhs = assemble((n × magneticfield) × n, testspace) @@ -80,5 +90,15 @@ current, stats = Krylov.gmres( ) ``` +Far-field pattern (top left), scattered electric field magnitude in the ``yz`` +plane (top right), and surface-current magnitude (bottom): + +```@raw html + +``` + The complete runnable example, including the plots, is in `examples/mfie.jl`. diff --git a/examples/Manifest.toml b/examples/Manifest.toml new file mode 100644 index 0000000..f0887cb --- /dev/null +++ b/examples/Manifest.toml @@ -0,0 +1,1524 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.12.6" +manifest_format = "2.0" +project_hash = "2c93076334f39792b022990275c95d8c2a013e46" + +[[deps.AbstractFFTs]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "d92ad398961a3ed262d8bf04a1a2b8340f915fef" +uuid = "621f4979-c628-5d54-868e-fcf4e3e8185c" +version = "1.5.0" + + [deps.AbstractFFTs.extensions] + AbstractFFTsChainRulesCoreExt = "ChainRulesCore" + AbstractFFTsTestExt = "Test" + + [deps.AbstractFFTs.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + +[[deps.AbstractTrees]] +git-tree-sha1 = "2d9c9a55f9c93e8887ad391fbae72f8ef55e1177" +uuid = "1520ce14-60c1-5f80-bbc7-55ef81b5835c" +version = "0.4.5" + +[[deps.Accessors]] +deps = ["CompositionsBase", "ConstructionBase", "Dates", "InverseFunctions", "MacroTools"] +git-tree-sha1 = "7063ad1083578215c7c4bf410368150abe8d5524" +uuid = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" +version = "0.1.45" + + [deps.Accessors.extensions] + AxisKeysExt = "AxisKeys" + IntervalSetsExt = "IntervalSets" + LinearAlgebraExt = "LinearAlgebra" + StaticArraysExt = "StaticArrays" + StructArraysExt = "StructArrays" + TestExt = "Test" + UnitfulExt = "Unitful" + + [deps.Accessors.weakdeps] + AxisKeys = "94b1ba4f-4ee9-5380-92f1-94cde586c3c5" + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + Unitful = "1986cc42-f94f-5a68-af5c-568840ba703d" + +[[deps.ArgTools]] +uuid = "0dad84c5-d112-42e6-8d28-ef12dabb789f" +version = "1.1.2" + +[[deps.ArnoldiMethod]] +deps = ["LinearAlgebra", "Random", "StaticArrays"] +git-tree-sha1 = "d57bd3762d308bded22c3b82d033bff85f6195c6" +uuid = "ec485272-7323-5ecc-a04f-4719b315124d" +version = "0.4.0" + +[[deps.ArrayLayouts]] +deps = ["FillArrays", "LinearAlgebra", "StaticArrays"] +git-tree-sha1 = "e0b47732a192dd59b9d079a06d04235e2f833963" +uuid = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" +version = "1.12.2" +weakdeps = ["SparseArrays"] + + [deps.ArrayLayouts.extensions] + ArrayLayoutsSparseArraysExt = "SparseArrays" + +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" +version = "1.11.0" + +[[deps.AssetRegistry]] +deps = ["JSON", "Pidfile", "SHA"] +git-tree-sha1 = "902b85010203830d4bc02259f5450d2e16b316d8" +uuid = "bf4720bc-e11a-5d0c-854e-bdca1663c893" +version = "0.1.1" + +[[deps.BEAST]] +deps = ["AbstractTrees", "BlockArrays", "CollisionDetection", "Combinatorics", "CompScienceMeshes", "Compat", "ConvolutionOperators", "Distributed", "ExtendableSparse", "FFTW", "FastGaussQuadrature", "FillArrays", "GraphsColoring", "Infiltrator", "InteractiveUtils", "IterativeSolvers", "Krylov", "LiftedMaps", "LinearAlgebra", "LinearMaps", "NestedUnitRanges", "OhMyThreads", "ProgressMeter", "Requires", "SauterSchwab3D", "SauterSchwabQuadrature", "SharedArrays", "SparseArrays", "SpecialFunctions", "StaticArrays", "Suppressor", "TestItems", "WiltonInts84"] +git-tree-sha1 = "32b6bd07ccafda486cbeb5cb593604a203902d0f" +uuid = "bb4162c7-ba94-5a20-af32-d8ec4428bdd1" +version = "2.10.0" +weakdeps = ["PlotlyBase"] + + [deps.BEAST.extensions] + PlotlyBaseExt = ["PlotlyBase"] + +[[deps.BangBang]] +deps = ["Accessors", "ConstructionBase", "InitialValues", "LinearAlgebra"] +git-tree-sha1 = "cceb62468025be98d42a5dc581b163c20896b040" +uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" +version = "0.4.9" + + [deps.BangBang.extensions] + BangBangChainRulesCoreExt = "ChainRulesCore" + BangBangDataFramesExt = "DataFrames" + BangBangStaticArraysExt = "StaticArrays" + BangBangStructArraysExt = "StructArrays" + BangBangTablesExt = "Tables" + BangBangTypedTablesExt = "TypedTables" + + [deps.BangBang.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + StructArrays = "09ab397b-f2b6-538f-b94a-2f83cf4a842a" + Tables = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" + TypedTables = "9d95f2ec-7b3d-5a63-8d20-e2491e220bb9" + +[[deps.Base64]] +uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +version = "1.11.0" + +[[deps.BitFlags]] +git-tree-sha1 = "bbe1079eecf9c9fbb52765193ad2bae27ae09bc8" +uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" +version = "0.1.10" + +[[deps.Blink]] +deps = ["Base64", "Distributed", "HTTP", "JSExpr", "JSON", "Lazy", "Logging", "MacroTools", "Mustache", "Mux", "Pkg", "Reexport", "Sockets", "WebIO"] +git-tree-sha1 = "bc93511973d1f949d45b0ea17878e6cb0ad484a1" +uuid = "ad839575-38b3-5650-b840-f874b8c74a25" +version = "0.12.9" + +[[deps.BlockArrays]] +deps = ["ArrayLayouts", "FillArrays", "LinearAlgebra"] +git-tree-sha1 = "8aa3a63ca1da72b5282db3017e14b33faed9ce97" +uuid = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" +version = "1.9.4" + + [deps.BlockArrays.extensions] + BlockArraysAdaptExt = "Adapt" + BlockArraysBandedMatricesExt = "BandedMatrices" + + [deps.BlockArrays.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" + BandedMatrices = "aae01518-5342-5314-be14-df237901396f" + +[[deps.BlockSparseMatrices]] +deps = ["Graphs", "GraphsColoring", "LinearAlgebra", "LinearMaps", "OhMyThreads", "SparseArrays"] +git-tree-sha1 = "dc6c3beba79e7468ce87d39f46bf8125ba4d2d30" +uuid = "1ef78180-cc57-4e70-b6ec-c3e471307147" +version = "0.3.1" + + [deps.BlockSparseMatrices.extensions] + BlockUnicodePlots = ["UnicodePlots"] + + [deps.BlockSparseMatrices.weakdeps] + UnicodePlots = "b8865327-cd53-5732-bb35-84acbb429228" + +[[deps.BoundingSphere]] +deps = ["InteractiveUtils", "LinearAlgebra", "Random", "Statistics"] +git-tree-sha1 = "9f45d48e55111126a87a8aea1ddffe9ac2e3fbc3" +uuid = "747eb165-47b8-53f2-ad32-9704a7dfc50a" +version = "0.2.0" + +[[deps.Bzip2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1b96ea4a01afe0ea4090c5c8039690672dd13f2e" +uuid = "6e34b625-4abd-537c-b88f-471c36dfa7a0" +version = "1.0.9+0" + +[[deps.Cairo_jll]] +deps = ["Artifacts", "Bzip2_jll", "CompilerSupportLibraries_jll", "Fontconfig_jll", "FreeType2_jll", "Glib_jll", "JLLWrappers", "Libdl", "Pixman_jll", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "1fa950ebc3e37eccd51c6a8fe1f92f7d86263522" +uuid = "83423d85-b0ee-5818-9007-b63ccbeb887a" +version = "1.18.7+0" + +[[deps.ChunkSplitters]] +git-tree-sha1 = "1c52c8e2673edc030191177ff1aee42d25149acb" +uuid = "ae650224-84b6-46f8-82ea-d812ca08434e" +version = "3.2.0" + +[[deps.ClusterTrees]] +deps = ["DelimitedFiles", "LinearAlgebra", "Pkg"] +git-tree-sha1 = "4114d60c95974edf9272d88571d14abeed598942" +uuid = "5100927d-02aa-593a-b4f9-7235df19f0db" +version = "0.2.1" + +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "962834c22b66e32aa10f7611c08c8ca4e20749a9" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.8" + +[[deps.CollisionDetection]] +deps = ["Compat", "LinearAlgebra", "StaticArrays"] +git-tree-sha1 = "4af0e30f357fab30313c87b631b095de2e7d42b1" +uuid = "2b5bf9a6-f3f8-5352-af9c-82bb4af718d8" +version = "0.1.8" + +[[deps.ColorSchemes]] +deps = ["ColorTypes", "ColorVectorSpace", "Colors", "FixedPointNumbers", "PrecompileTools", "Random"] +git-tree-sha1 = "b0fd3f56fa442f81e0a47815c92245acfaaa4e34" +uuid = "35d6a980-a343-548e-a6ea-1d62b119f2f4" +version = "3.31.0" + +[[deps.ColorTypes]] +deps = ["FixedPointNumbers", "Random"] +git-tree-sha1 = "67e11ee83a43eb71ddc950302c53bf33f0690dfe" +uuid = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +version = "0.12.1" +weakdeps = ["StyledStrings"] + + [deps.ColorTypes.extensions] + StyledStringsExt = "StyledStrings" + +[[deps.ColorVectorSpace]] +deps = ["ColorTypes", "FixedPointNumbers", "LinearAlgebra", "Requires", "Statistics", "TensorCore"] +git-tree-sha1 = "8b3b6f87ce8f65a2b4f857528fd8d70086cd72b1" +uuid = "c3611d14-8923-5661-9e6a-0046d554d3a4" +version = "0.11.0" +weakdeps = ["SpecialFunctions"] + + [deps.ColorVectorSpace.extensions] + SpecialFunctionsExt = "SpecialFunctions" + +[[deps.Colors]] +deps = ["ColorTypes", "FixedPointNumbers", "Reexport"] +git-tree-sha1 = "37ea44092930b1811e666c3bc38065d7d87fcc74" +uuid = "5ae59095-9a9b-59fe-a467-6f913c188581" +version = "0.13.1" + +[[deps.Combinatorics]] +git-tree-sha1 = "c761b00e7755700f9cdf5b02039939d1359330e1" +uuid = "861a8166-3701-5b0c-9a16-15d98fcdc6aa" +version = "1.1.0" + +[[deps.CompScienceMeshes]] +deps = ["ClusterTrees", "CollisionDetection", "Combinatorics", "Compat", "DataStructures", "DelimitedFiles", "FastGaussQuadrature", "Gmsh", "GmshTools", "LinearAlgebra", "Permutations", "Requires", "SparseArrays", "StaticArrays", "TestItems"] +git-tree-sha1 = "24009979f0c51bb4bca8a79c9881a40b1821208e" +uuid = "3e66a162-7b8c-5da0-b8f8-124ecd2c3ae1" +version = "0.11.0" + +[[deps.Compat]] +deps = ["TOML", "UUIDs"] +git-tree-sha1 = "9d8a54ce4b17aa5bdce0ea5c34bc5e7c340d16ad" +uuid = "34da2185-b29b-5c13-b0c7-acf172513d20" +version = "4.18.1" +weakdeps = ["Dates", "LinearAlgebra"] + + [deps.Compat.extensions] + CompatLinearAlgebraExt = "LinearAlgebra" + +[[deps.CompilerSupportLibraries_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" +version = "1.3.0+1" + +[[deps.CompositionsBase]] +git-tree-sha1 = "802bb88cd69dfd1509f6670416bd4434015693ad" +uuid = "a33af91c-f02d-484b-be07-31d278c5ca2b" +version = "0.1.2" +weakdeps = ["InverseFunctions"] + + [deps.CompositionsBase.extensions] + CompositionsBaseInverseFunctionsExt = "InverseFunctions" + +[[deps.ConcurrentUtilities]] +deps = ["Serialization", "Sockets"] +git-tree-sha1 = "21d088c496ea22914fe80906eb5bce65755e5ec8" +uuid = "f0e56b4a-5159-44fe-b623-3e5288b988bb" +version = "2.5.1" + +[[deps.ConstructionBase]] +git-tree-sha1 = "b4b092499347b18a015186eae3042f72267106cb" +uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" +version = "1.6.0" + + [deps.ConstructionBase.extensions] + ConstructionBaseIntervalSetsExt = "IntervalSets" + ConstructionBaseLinearAlgebraExt = "LinearAlgebra" + ConstructionBaseStaticArraysExt = "StaticArrays" + + [deps.ConstructionBase.weakdeps] + IntervalSets = "8197267c-284f-5f27-9208-e0e47529a953" + LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + +[[deps.ConvolutionOperators]] +deps = ["LinearAlgebra", "LinearMaps"] +git-tree-sha1 = "ae44e38013c05c7ec59f428b4ea7ad7d34926b63" +uuid = "15927181-a1bb-497c-b745-8dbf505c019d" +version = "0.4.1" + +[[deps.CorrectionFactorMatrixMethod]] +deps = ["BlockSparseMatrices", "H2Trees", "LinearAlgebra", "LinearMaps", "MKL", "OhMyThreads", "SparseArrays"] +path = "/home/jt286/.julia/dev/CorrectionFactorMatrixMethod/docs/.." +uuid = "1b32fdd5-07c8-465a-bf7d-415ac82a78be" +version = "0.1.0" +weakdeps = ["BEAST", "CompScienceMeshes", "ExaFMMt"] + + [deps.CorrectionFactorMatrixMethod.extensions] + CFMMBEAST = ["BEAST", "CompScienceMeshes"] + CFMMExaFMMt = ["ExaFMMt", "BEAST"] + +[[deps.DataAPI]] +git-tree-sha1 = "abe83f3a2f1b857aac70ef8b269080af17764bbe" +uuid = "9a962f9c-6df0-11e9-0e5d-c546b8b5ee8a" +version = "1.16.0" + +[[deps.DataStructures]] +deps = ["OrderedCollections"] +git-tree-sha1 = "6fb53a69613a0b2b68a0d12671717d307ab8b24e" +uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" +version = "0.19.5" + +[[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.DelimitedFiles]] +deps = ["Mmap"] +git-tree-sha1 = "9e2f36d3c96a820c678f2f1f1782582fcf685bae" +uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab" +version = "1.9.1" + +[[deps.Distributed]] +deps = ["Random", "Serialization", "Sockets"] +uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" +version = "1.11.0" + +[[deps.DocStringExtensions]] +git-tree-sha1 = "7442a5dfe1ebb773c29cc2962a8980f47221d76c" +uuid = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" +version = "0.9.5" + +[[deps.Downloads]] +deps = ["ArgTools", "FileWatching", "LibCURL", "NetworkOptions"] +uuid = "f43a241f-c20a-4ad4-852c-f6b1247861c6" +version = "1.7.0" + +[[deps.ExaFMMt]] +deps = ["Exafmmt_jll", "LinearAlgebra", "LinearMaps"] +git-tree-sha1 = "18262aa2d00ee10477a4b9901bf37bbfa983035b" +uuid = "add1291b-d076-47cc-8667-64576de04ee0" +version = "0.1.2" + +[[deps.Exafmmt_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "FFTW_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl", "Pkg", "libblastrampoline_jll"] +git-tree-sha1 = "9115c47d970a73fd080ffd99a9212f7650d51370" +uuid = "eacd9ca4-7f43-55e5-94d9-9be91740ea79" +version = "0.1.1+0" + +[[deps.ExceptionUnwrapping]] +deps = ["Test"] +git-tree-sha1 = "d36f682e590a83d63d1c7dbd287573764682d12a" +uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" +version = "0.1.11" + +[[deps.Expat_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c307cd83373868391f3ac30b41530bc5d5d05d08" +uuid = "2e619515-83b5-522b-bb60-26c02a35a201" +version = "2.8.1+0" + +[[deps.ExtendableSparse]] +deps = ["DocStringExtensions", "ILUZero", "LinearAlgebra", "Printf", "SciMLPublic", "SparseArrays", "Sparspak", "StaticArrays"] +git-tree-sha1 = "8528367ecb8eeb91f5564815226fd0e7123525c7" +uuid = "95c220a8-a1cf-11e9-0c77-dbfce5f500b3" +version = "2.3.0" + + [deps.ExtendableSparse.extensions] + ExtendableSparseIncompleteLUExt = "IncompleteLU" + ExtendableSparseLinearSolveExt = "LinearSolve" + + [deps.ExtendableSparse.weakdeps] + IncompleteLU = "40713840-3770-5561-ab4c-a76e7d0d7895" + LinearSolve = "7ed4a6bd-45f5-4d41-b270-4a48e9bafcae" + +[[deps.FFTW]] +deps = ["AbstractFFTs", "FFTW_jll", "Libdl", "LinearAlgebra", "MKL_jll", "Preferences", "Reexport"] +git-tree-sha1 = "97f08406df914023af55ade2f843c39e99c5d969" +uuid = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341" +version = "1.10.0" + +[[deps.FFTW_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "6866aec60ef98e3164cd8d6855225684207e9dff" +uuid = "f5851436-0d7a-5f13-b9de-f02708fd171a" +version = "3.3.12+0" + +[[deps.FLTK_jll]] +deps = ["Artifacts", "Fontconfig_jll", "FreeType2_jll", "JLLWrappers", "JpegTurbo_jll", "Libdl", "Libglvnd_jll", "Pkg", "Xorg_libX11_jll", "Xorg_libXext_jll", "Xorg_libXfixes_jll", "Xorg_libXft_jll", "Xorg_libXinerama_jll", "Xorg_libXrender_jll", "Zlib_jll", "libpng_jll"] +git-tree-sha1 = "72a4842f93e734f378cf381dae2ca4542f019d23" +uuid = "4fce6fc7-ba6a-5f4c-898f-77e99806d6f8" +version = "1.3.8+0" + +[[deps.FastGaussQuadrature]] +deps = ["LinearAlgebra", "SpecialFunctions", "StaticArrays"] +git-tree-sha1 = "4916117dd032ec5959b7633aedbbac408ca5ddeb" +uuid = "442a2c76-b920-505d-bb47-c5924d526838" +version = "1.3.0" + +[[deps.FileWatching]] +uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" +version = "1.11.0" + +[[deps.FillArrays]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "2f979084d1e13948a3352cf64a25df6bd3b4dca3" +uuid = "1a297f60-69ca-5386-bcde-b61e274b549b" +version = "1.16.0" + + [deps.FillArrays.extensions] + FillArraysPDMatsExt = "PDMats" + FillArraysSparseArraysExt = "SparseArrays" + FillArraysStaticArraysExt = "StaticArrays" + FillArraysStatisticsExt = "Statistics" + + [deps.FillArrays.weakdeps] + PDMats = "90014a1f-27ba-587c-ab20-58faa44d9150" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" + Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[[deps.FixedPointNumbers]] +deps = ["Random", "Statistics"] +git-tree-sha1 = "59af96b98217c6ef4ae0dfe065ac7c20831d1a84" +uuid = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" +version = "0.8.6" + +[[deps.Fontconfig_jll]] +deps = ["Artifacts", "Bzip2_jll", "Expat_jll", "FreeType2_jll", "JLLWrappers", "Libdl", "Libuuid_jll", "Zlib_jll"] +git-tree-sha1 = "f85dac9a96a01087df6e3a749840015a0ca3817d" +uuid = "a3f928ae-7b40-5064-980b-68af3947d34b" +version = "2.17.1+0" + +[[deps.FreeType2_jll]] +deps = ["Artifacts", "Bzip2_jll", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "70329abc09b886fd2c5d94ad2d9527639c421e3e" +uuid = "d7e528f0-a631-5988-bf34-fe36492bcfd7" +version = "2.14.3+1" + +[[deps.FunctionalCollections]] +deps = ["Test"] +git-tree-sha1 = "04cb9cfaa6ba5311973994fe3496ddec19b6292a" +uuid = "de31a74c-ac4f-5751-b3fd-e18cd04993ca" +version = "0.5.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+2" + +[[deps.GettextRuntime_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl", "Libiconv_jll"] +git-tree-sha1 = "45288942190db7c5f760f59c04495064eedf9340" +uuid = "b0724c58-0f36-5564-988d-3bb0596ebc4a" +version = "0.22.4+0" + +[[deps.Glib_jll]] +deps = ["Artifacts", "GettextRuntime_jll", "JLLWrappers", "Libdl", "Libffi_jll", "Libiconv_jll", "Libmount_jll", "PCRE2_jll", "Zlib_jll"] +git-tree-sha1 = "24f6def62397474a297bfcec22384101609142ed" +uuid = "7746bdde-850d-59dc-9ae8-88ece973131d" +version = "2.86.3+0" + +[[deps.Gmsh]] +deps = ["gmsh_jll"] +git-tree-sha1 = "6d815101e62722f4e323514c9fc704007d4da2e3" +uuid = "705231aa-382f-11e9-3f0c-b7cb4346fdeb" +version = "0.3.1" + +[[deps.GmshTools]] +deps = ["Libdl", "gmsh_jll"] +git-tree-sha1 = "299aa66053646db77f8aa7fafcebe0f9e5c0d1dc" +uuid = "82e2f556-b1bd-5f1a-9576-f93c0da5f0ee" +version = "0.5.2" + +[[deps.Graphs]] +deps = ["ArnoldiMethod", "DataStructures", "Inflate", "LinearAlgebra", "Random", "SimpleTraits", "SparseArrays", "Statistics"] +git-tree-sha1 = "7eb45fe833a5b7c51cf6d89c5a841d5967e44be3" +uuid = "86223c79-3864-5bf0-83f7-82e725a168b6" +version = "1.14.0" +weakdeps = ["Distributed", "SharedArrays"] + + [deps.Graphs.extensions] + GraphsSharedArraysExt = "SharedArrays" + +[[deps.GraphsColoring]] +deps = ["DataStructures", "SparseArrays"] +git-tree-sha1 = "4aad683dd8f0ad4073572c7214c6812456fdf797" +uuid = "ed38bb8a-6120-4024-8d1e-8789784f251b" +version = "0.2.0" +weakdeps = ["Graphs"] + + [deps.GraphsColoring.extensions] + GraphsColoringGraphs = ["Graphs"] + +[[deps.GrundmannMoeller]] +deps = ["LinearAlgebra", "StaticArrays", "Test"] +git-tree-sha1 = "e264cf5f081091e4af712a911d3b620567c565e3" +uuid = "36aa67b7-9d79-4e90-bbc0-05abd90a007e" +version = "0.1.2" + +[[deps.H2Trees]] +deps = ["BoundingSphere", "Graphs", "LinearAlgebra", "StaticArrays"] +git-tree-sha1 = "1dbb13138ced81aaf187b4c71ace92a274264316" +uuid = "9db26ae3-82ff-4374-85e9-9ed87405fd16" +version = "0.3.0" + + [deps.H2Trees.extensions] + H2BEASTTrees = ["BEAST"] + H2MetisTrees = ["Metis"] + H2ParallelKMeansTrees = ["ParallelKMeans"] + H2PlotlyJSTrees = "PlotlyJS" + + [deps.H2Trees.weakdeps] + BEAST = "bb4162c7-ba94-5a20-af32-d8ec4428bdd1" + CompScienceMeshes = "3e66a162-7b8c-5da0-b8f8-124ecd2c3ae1" + Metis = "2679e427-3c69-5b7f-982b-ece356f1e94b" + NURBS = "dde13934-061e-461b-aa91-2c0fad390a0d" + ParallelKMeans = "42b8e9d4-006b-409a-8472-7f34b3fb58af" + PlotlyJS = "f0f68f2c-4968-5e81-91da-67840de0976a" + +[[deps.HDF5_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LibCURL_jll", "Libdl", "MPIABI_jll", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "OpenSSL_jll", "TOML", "Zlib_jll", "aws_c_s3_jll", "dlfcn_win32_jll", "libaec_jll", "mpif_jll"] +git-tree-sha1 = "45337643a2d97262d5fe72ce1f13e8a662d13d62" +uuid = "0234f1f7-429e-5d53-9886-15a909be8d59" +version = "2.1.2+0" + +[[deps.HTTP]] +deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "PrecompileTools", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] +git-tree-sha1 = "51059d23c8bb67911a2e6fd5130229113735fc7e" +uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" +version = "1.11.0" + +[[deps.HashArrayMappedTries]] +git-tree-sha1 = "2eaa69a7cab70a52b9687c8bf950a5a93ec895ae" +uuid = "076d061b-32b6-4027-95e0-9a2c6f6d7e74" +version = "0.2.0" + +[[deps.Hiccup]] +deps = ["MacroTools", "Test"] +git-tree-sha1 = "6187bb2d5fcbb2007c39e7ac53308b0d371124bd" +uuid = "9fb69e20-1954-56bb-a84f-559cc56a8ff7" +version = "0.2.2" + +[[deps.Hwloc_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "XML2_jll", "Xorg_libpciaccess_jll"] +git-tree-sha1 = "c35847ca5b4997fc8418836354a56c459bcf48d8" +uuid = "e33a78d0-f292-5ffc-b300-72abe9b543c8" +version = "2.14.0+0" + +[[deps.ILUZero]] +deps = ["LinearAlgebra", "SparseArrays"] +git-tree-sha1 = "b007cfc7f9bee9a958992d2301e9c5b63f332a90" +uuid = "88f59080-6952-5380-9ea5-54057fb9a43f" +version = "0.2.0" + +[[deps.Infiltrator]] +deps = ["InteractiveUtils", "Markdown", "REPL", "UUIDs"] +git-tree-sha1 = "0330ef9ac27dc069bf97fa5ab1a4391be4fcc4f6" +uuid = "5903a43b-9cc3-4c30-8d17-598619ec4e9b" +version = "1.9.11" + +[[deps.Inflate]] +git-tree-sha1 = "d1b1b796e47d94588b3757fe84fbf65a5ec4a80d" +uuid = "d25df0c9-e2be-5dd7-82c8-3ad0b3e990b9" +version = "0.1.5" + +[[deps.InitialValues]] +git-tree-sha1 = "4da0f88e9a39111c2fa3add390ab15f3a44f3ca3" +uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" +version = "0.3.1" + +[[deps.IntelOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "ec1debd61c300961f98064cfb21287613ad7f303" +uuid = "1d5cc7b8-4909-519e-a0f8-d0f5ad9712d0" +version = "2025.2.0+0" + +[[deps.InteractiveUtils]] +deps = ["Markdown"] +uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" +version = "1.11.0" + +[[deps.InverseFunctions]] +git-tree-sha1 = "a779299d77cd080bf77b97535acecd73e1c5e5cb" +uuid = "3587e190-3f89-42d0-90ee-14403ec27112" +version = "0.1.17" +weakdeps = ["Dates", "Test"] + + [deps.InverseFunctions.extensions] + InverseFunctionsDatesExt = "Dates" + InverseFunctionsTestExt = "Test" + +[[deps.IrrationalConstants]] +git-tree-sha1 = "b2d91fe939cae05960e760110b328288867b5758" +uuid = "92d709cd-6900-40b7-9082-c6be49f344b6" +version = "0.2.6" + +[[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 = "7204148362dafe5fe6a273f855b8ccbe4df8173e" +uuid = "692b3bcd-3c85-4b1f-b108-f13ce0eb3210" +version = "1.8.0" + +[[deps.JSExpr]] +deps = ["JSON", "MacroTools", "Observables", "WebIO"] +git-tree-sha1 = "b413a73785b98474d8af24fd4c8a975e31df3658" +uuid = "97c1335a-c9c5-57fe-bc5d-ec35cebe8660" +version = "0.5.4" + +[[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 = "c0c9b76f3520863909825cbecdef58cd63de705a" +uuid = "aacddb02-875f-59d6-b918-886e6ef4fbf8" +version = "3.1.5+0" + +[[deps.JuliaSyntaxHighlighting]] +deps = ["StyledStrings"] +uuid = "ac6e5ff7-fb65-4e79-a425-ec3bc9c03011" +version = "1.12.0" + +[[deps.Kaleido_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "43032da5832754f58d14a91ffbe86d5f176acda9" +uuid = "f7e6163d-2fa5-5f23-b69c-1db539e41963" +version = "0.2.1+0" + +[[deps.Krylov]] +deps = ["LinearAlgebra", "Printf", "SparseArrays"] +git-tree-sha1 = "fc2e5bc665dfa1be33fac60b5762d462bccfae7b" +uuid = "ba0b0d4f-ebba-5204-a429-3ac8c609bfb7" +version = "0.10.8" + +[[deps.LLVMOpenMP_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "eb62a3deb62fc6d8822c0c4bef73e4412419c5d8" +uuid = "1d63c593-3942-5779-bab2-d838dc0a180e" +version = "18.1.8+0" + +[[deps.LaTeXStrings]] +git-tree-sha1 = "dda21b8cbd6a6c40d9d02a73230f9d70fed6918c" +uuid = "b964fa9f-0449-5b57-a5c2-d3ea65f4040f" +version = "1.4.0" + +[[deps.Lazy]] +deps = ["MacroTools"] +git-tree-sha1 = "1370f8202dac30758f3c345f9909b97f53d87d3f" +uuid = "50d2b5c4-7a5e-59d5-8109-a42b560f39c0" +version = "0.15.1" + +[[deps.LazyArtifacts]] +deps = ["Artifacts", "Pkg"] +uuid = "4af54fe1-eca0-43a8-85a7-787d91b784e3" +version = "1.11.0" + +[[deps.LibCURL]] +deps = ["LibCURL_jll", "MozillaCACerts_jll"] +uuid = "b27032c2-a3e7-50c8-80cd-2d36dbcbfd21" +version = "0.6.4" + +[[deps.LibCURL_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll", "Zlib_jll", "nghttp2_jll"] +uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" +version = "8.15.0+0" + +[[deps.LibGit2]] +deps = ["LibGit2_jll", "NetworkOptions", "Printf", "SHA"] +uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" +version = "1.11.0" + +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "OpenSSL_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.9.0+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "OpenSSL_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.3+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" +version = "1.11.0" + +[[deps.Libffi_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "c8da7e6a91781c41a863611c7e966098d783c57a" +uuid = "e9f186c6-92d2-5b65-8a66-fee21dc1b490" +version = "3.4.7+0" + +[[deps.Libglvnd_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll", "Xorg_libXext_jll"] +git-tree-sha1 = "d36c21b9e7c172a44a10484125024495e2625ac0" +uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" +version = "1.7.1+1" + +[[deps.Libiconv_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "be484f5c92fad0bd8acfef35fe017900b0b73809" +uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" +version = "1.18.0+0" + +[[deps.Libmount_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "cc3ad4faf30015a3e8094c9b5b7f19e85bdf2386" +uuid = "4b2f31a3-9ecc-558c-b454-b3730dcb73e9" +version = "2.42.0+0" + +[[deps.Libuuid_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "d620582b1f0cbe2c72dd1d5bd195a9ce73370ab1" +uuid = "38a345b3-de98-5d2b-a5d3-14cd9215e700" +version = "2.42.0+0" + +[[deps.LiftedMaps]] +deps = ["BlockArrays", "LinearAlgebra", "LinearMaps", "TestItems"] +git-tree-sha1 = "c281c917c5cfe380fddaefc7665116167252613e" +uuid = "d22a30c1-52ac-4762-a8c9-5838452405e0" +version = "0.5.2" + +[[deps.LinearAlgebra]] +deps = ["Libdl", "OpenBLAS_jll", "libblastrampoline_jll"] +uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" +version = "1.12.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.LinearMaps]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "7f6be2e4cdaaf558623d93113d6ddade7b916209" +uuid = "7a12625a-238d-50fd-b39a-03d52299707e" +version = "3.11.4" + + [deps.LinearMaps.extensions] + LinearMapsChainRulesCoreExt = "ChainRulesCore" + LinearMapsSparseArraysExt = "SparseArrays" + LinearMapsStatisticsExt = "Statistics" + + [deps.LinearMaps.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" + Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[[deps.LogExpFunctions]] +deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] +git-tree-sha1 = "bba2d9aa057d8f126415de240573e86a8f39d2a1" +uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" +version = "1.0.1" + + [deps.LogExpFunctions.extensions] + LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" + LogExpFunctionsChangesOfVariablesExt = "ChangesOfVariables" + LogExpFunctionsInverseFunctionsExt = "InverseFunctions" + + [deps.LogExpFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + ChangesOfVariables = "9e997f8a-9a97-42d5-a9f1-ce6bfc15e2c0" + InverseFunctions = "3587e190-3f89-42d0-90ee-14403ec27112" + +[[deps.Logging]] +uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" +version = "1.11.0" + +[[deps.LoggingExtras]] +deps = ["Dates", "Logging"] +git-tree-sha1 = "f00544d95982ea270145636c181ceda21c4e2575" +uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" +version = "1.2.0" + +[[deps.METIS_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "2eefa8baa858871ae7770c98c3c2a7e46daba5b4" +uuid = "d00139f3-1899-568f-a2f0-47f597d42d70" +version = "5.1.3+0" + +[[deps.MKL]] +deps = ["Artifacts", "Libdl", "LinearAlgebra", "Logging", "MKL_jll"] +git-tree-sha1 = "7babad0b8cb353d15ed85090342d3c63af5f6819" +uuid = "33e6dc65-8f57-5167-99aa-e5a354878fb2" +version = "0.9.1" + +[[deps.MKL_jll]] +deps = ["Artifacts", "IntelOpenMP_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "oneTBB_jll"] +git-tree-sha1 = "282cadc186e7b2ae0eeadbd7a4dffed4196ae2aa" +uuid = "856f044c-d86e-5d09-b602-aeab76dc8ba7" +version = "2025.2.0+0" + +[[deps.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.MPIABI_jll]] +deps = ["Artifacts", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "9be143b6045719e8fb019d2b3bc2aebad1184fef" +uuid = "b5ada748-db0f-5fc0-8972-9331c762740c" +version = "0.1.5+0" + +[[deps.MPICH_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "07dbec8aab01696edc0151a401a6cdfe95b9b885" +uuid = "7cb0a576-ebde-5e09-9194-50597f1243b4" +version = "5.0.1+0" + +[[deps.MPIPreferences]] +deps = ["Libdl", "Preferences"] +git-tree-sha1 = "8e98d5d80b87403c311fd51e8455d4546ba7a5f8" +uuid = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267" +version = "0.1.12" + +[[deps.MPItrampoline_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML"] +git-tree-sha1 = "675df097f8eeb28998b2cfe3b25655af73d5f7df" +uuid = "f1f71cc9-e9ae-5b93-9b94-4fe0e1ad3748" +version = "5.5.6+0" + +[[deps.MacroTools]] +git-tree-sha1 = "1e0228a030642014fe5cfe68c2c0a818f9e3f522" +uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" +version = "0.5.16" + +[[deps.Markdown]] +deps = ["Base64", "JuliaSyntaxHighlighting", "StyledStrings"] +uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" +version = "1.11.0" + +[[deps.MbedTLS]] +deps = ["Dates", "MbedTLS_jll", "MozillaCACerts_jll", "NetworkOptions", "Random", "Sockets"] +git-tree-sha1 = "8785729fa736197687541f7053f6d8ab7fc44f92" +uuid = "739be429-bea8-5141-9913-cc70e7f3736d" +version = "1.1.10" + +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "ff69a2b1330bcb730b9ac1ab7dd680176f5896b8" +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.1010+0" + +[[deps.MicrosoftMPI_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg"] +git-tree-sha1 = "bc95bf4149bf535c09602e3acdf950d9b4376227" +uuid = "9237b28f-5490-5468-be7b-bb81f5f5e6cf" +version = "10.1.4+3" + +[[deps.Mmap]] +uuid = "a63ad114-7e13-5084-954f-fe012c677804" +version = "1.11.0" + +[[deps.MozillaCACerts_jll]] +uuid = "14a3606d-f60d-562e-9121-12d972cd8159" +version = "2025.11.4" + +[[deps.Mustache]] +deps = ["Printf", "Tables"] +git-tree-sha1 = "3cbd5dda543bc59f2e482607ccf84b633724fc32" +uuid = "ffc61752-8dc7-55ee-8c37-f3e9cdd09e70" +version = "1.0.21" + +[[deps.Mux]] +deps = ["AssetRegistry", "Base64", "HTTP", "Hiccup", "MbedTLS", "Pkg", "Sockets"] +git-tree-sha1 = "7295d849103ac4fcbe3b2e439f229c5cc77b9b69" +uuid = "a975b10e-0019-58db-a62f-e48ff68538c9" +version = "1.0.2" + +[[deps.NestedUnitRanges]] +deps = ["AbstractTrees", "ArrayLayouts", "BlockArrays"] +git-tree-sha1 = "203935f862a28d6bf18a607502287ed42f7a5178" +uuid = "032820ab-dc03-4b49-91f4-7d58d4da98b3" +version = "0.2.4" + +[[deps.NetworkOptions]] +uuid = "ca575930-c2e3-43a9-ace4-1e988b2c1908" +version = "1.3.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 = "b4d728dcd7f9c42862180d2ee881eeb4b471a02a" +uuid = "baad4e97-8daa-5946-aac2-2edac59d34e1" +version = "7.9.3+0" + +[[deps.Observables]] +git-tree-sha1 = "7438a59546cf62428fc9d1bc94729146d37a7225" +uuid = "510215fc-4207-5dde-b226-833fc4488ee2" +version = "0.5.5" + +[[deps.OffsetArrays]] +git-tree-sha1 = "117432e406b5c023f665fa73dc26e79ec3630151" +uuid = "6fe1bfb0-de20-5000-8ca7-80f57d26f881" +version = "1.17.0" + + [deps.OffsetArrays.extensions] + OffsetArraysAdaptExt = "Adapt" + + [deps.OffsetArrays.weakdeps] + Adapt = "79e6a3ab-5dfb-504d-930d-738a2a938a0e" + +[[deps.OhMyThreads]] +deps = ["BangBang", "ChunkSplitters", "ScopedValues", "StableTasks", "TaskLocalValues"] +git-tree-sha1 = "9a07c25c438110500d871fd5309649ec6791ef57" +uuid = "67456a42-1dca-4109-a031-0a68de7e3ad5" +version = "0.8.6" +weakdeps = ["Markdown", "ProgressMeter"] + + [deps.OhMyThreads.extensions] + MarkdownExt = "Markdown" + ProgressMeterExt = "ProgressMeter" + +[[deps.OpenBLAS_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" +version = "0.3.29+0" + +[[deps.OpenLibm_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "05823500-19ac-5b8b-9628-191a04bc5112" +version = "0.8.7+0" + +[[deps.OpenMPI_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Hwloc_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIPreferences", "TOML", "Zlib_jll"] +git-tree-sha1 = "6d6c0ca4824268c1a7dca1f4721c535ac63d9074" +uuid = "fe0851c0-eecd-5654-98d4-656369965a5c" +version = "5.0.11+0" + +[[deps.OpenSSL]] +deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "NetworkOptions", "OpenSSL_jll", "Sockets"] +git-tree-sha1 = "1d1aaa7d449b58415f97d2839c318b70ffb525a0" +uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" +version = "1.6.1" + +[[deps.OpenSSL_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" +version = "3.5.4+0" + +[[deps.OpenSpecFun_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "Libdl"] +git-tree-sha1 = "1346c9208249809840c91b26703912dff463d335" +uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" +version = "0.5.6+0" + +[[deps.OrderedCollections]] +git-tree-sha1 = "94ba93778373a53bfd5a0caaf7d809c445292ff4" +uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" +version = "1.8.2" + +[[deps.PCRE2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" +version = "10.44.0+1" + +[[deps.Parameters]] +deps = ["OrderedCollections", "UnPack"] +git-tree-sha1 = "34c0e9ad262e5f7fc75b10a9952ca7692cfc5fbe" +uuid = "d96e819e-fc66-5662-9728-84c9c7592b0a" +version = "0.12.3" + +[[deps.Parsers]] +deps = ["Dates", "PrecompileTools", "UUIDs"] +git-tree-sha1 = "32a4e09c5f29402573d673901778a0e03b0807b9" +uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" +version = "2.8.6" + +[[deps.Permutations]] +deps = ["Combinatorics", "LinearAlgebra", "Random"] +git-tree-sha1 = "b1f03a4943c62552a12c7f95965b76c3f91cf5b7" +uuid = "2ae35dd2-176d-5d53-8349-f30d82d94d4f" +version = "0.4.23" + +[[deps.Pidfile]] +deps = ["FileWatching", "Test"] +git-tree-sha1 = "2d8aaf8ee10df53d0dfb9b8ee44ae7c04ced2b03" +uuid = "fa939f87-e72e-5be4-a000-7fc836dbe307" +version = "1.3.0" + +[[deps.Pixman_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LLVMOpenMP_jll", "Libdl"] +git-tree-sha1 = "e4a6721aa89e62e5d4217c0b21bd714263779dda" +uuid = "30392449-352a-5448-841d-b1acce4e97dc" +version = "0.46.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.12.1" +weakdeps = ["REPL"] + + [deps.Pkg.extensions] + REPLExt = "REPL" + +[[deps.PlotlyBase]] +deps = ["ColorSchemes", "Colors", "Dates", "DelimitedFiles", "DocStringExtensions", "JSON", "LaTeXStrings", "Logging", "Parameters", "Pkg", "REPL", "Requires", "Statistics", "UUIDs"] +git-tree-sha1 = "6256ab3ee24ef079b3afa310593817e069925eeb" +uuid = "a03496cd-edff-5a9b-9e67-9cda94a718b5" +version = "0.8.23" + + [deps.PlotlyBase.extensions] + DataFramesExt = "DataFrames" + DistributionsExt = "Distributions" + IJuliaExt = "IJulia" + JSON3Ext = "JSON3" + + [deps.PlotlyBase.weakdeps] + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f" + IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" + JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" + +[[deps.PlotlyJS]] +deps = ["Base64", "Blink", "DelimitedFiles", "JSExpr", "JSON", "Kaleido_jll", "Markdown", "Pkg", "PlotlyBase", "PlotlyKaleido", "REPL", "Reexport", "Requires", "WebIO"] +git-tree-sha1 = "4bf6c08295346efba58bb2d5f8c52984efed7f27" +uuid = "f0f68f2c-4968-5e81-91da-67840de0976a" +version = "0.18.18" + + [deps.PlotlyJS.extensions] + CSVExt = "CSV" + DataFramesExt = ["DataFrames", "CSV"] + IJuliaExt = "IJulia" + JSON3Ext = "JSON3" + + [deps.PlotlyJS.weakdeps] + CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" + DataFrames = "a93c6f00-e57d-5684-b7b6-d8193f3e46c0" + IJulia = "7073ff75-c697-5162-941a-fcdaad2a7d2a" + JSON3 = "0f8b85d8-7281-11e9-16c2-39a750bddbf1" + +[[deps.PlotlyKaleido]] +deps = ["Artifacts", "Base64", "JSON", "Kaleido_jll"] +git-tree-sha1 = "c7a270d11881c0709052f8e3def3d60d551e99f3" +uuid = "f2990250-8cf9-495f-b13a-cce12b45703c" +version = "2.3.1" + +[[deps.PrecompileTools]] +deps = ["Preferences"] +git-tree-sha1 = "edbeefc7a4889f528644251bdb5fc9ab5348bc2c" +uuid = "aea7be01-6a6a-4083-8856-8a6e6704d82a" +version = "1.3.4" + +[[deps.Preferences]] +deps = ["TOML"] +git-tree-sha1 = "8b770b60760d4451834fe79dd483e318eee709c4" +uuid = "21216c6a-2e73-6563-6e65-726566657250" +version = "1.5.2" + +[[deps.Printf]] +deps = ["Unicode"] +uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" +version = "1.11.0" + +[[deps.ProgressMeter]] +deps = ["Distributed", "Printf"] +git-tree-sha1 = "fbb92c6c56b34e1a2c4c36058f68f332bec840e7" +uuid = "92933f4c-e287-5a05-a399-4b506db050ca" +version = "1.11.0" + +[[deps.REPL]] +deps = ["InteractiveUtils", "JuliaSyntaxHighlighting", "Markdown", "Sockets", "StyledStrings", "Unicode"] +uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" +version = "1.11.0" + +[[deps.Random]] +deps = ["SHA"] +uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" +version = "1.11.0" + +[[deps.RecipesBase]] +deps = ["PrecompileTools"] +git-tree-sha1 = "5c3d09cc4f31f5fc6af001c250bf1278733100ff" +uuid = "3cdcf5f2-1ef4-517c-9805-6587b60abb01" +version = "1.3.4" + +[[deps.Reexport]] +git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" +uuid = "189a3867-3050-52da-a836-e630ba90ab69" +version = "1.2.2" + +[[deps.Requires]] +deps = ["UUIDs"] +git-tree-sha1 = "62389eeff14780bfe55195b7204c0d8738436d64" +uuid = "ae029012-a4dd-5104-9daa-d747884805df" +version = "1.3.1" + +[[deps.SCOTCH_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Pkg", "Zlib_jll"] +git-tree-sha1 = "7110b749766853054ce8a2afaa73325d72d32129" +uuid = "a8d0f55d-b80e-548d-aff6-1a04c175f0f9" +version = "6.1.3+0" + +[[deps.SHA]] +uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" +version = "0.7.0" + +[[deps.SauterSchwab3D]] +deps = ["FastGaussQuadrature", "GrundmannMoeller", "LinearAlgebra", "ShunnHamQuadrature", "StaticArrays"] +git-tree-sha1 = "8166c8fe142d92db613704c322e2eaf67d3676e4" +uuid = "0a13313b-1c00-422e-8263-562364ed9544" +version = "0.2.0" + +[[deps.SauterSchwabQuadrature]] +deps = ["FastGaussQuadrature", "LinearAlgebra", "StaticArrays", "TestItems"] +git-tree-sha1 = "cf7f7fe18daaa4696f879c822277d8970076a7ea" +uuid = "535c7bfe-2023-5c1d-b712-654ef9d93a38" +version = "2.4.2" + +[[deps.SciMLPublic]] +git-tree-sha1 = "2b1b64add566435a768abdb3b053cac17d19ff3c" +uuid = "431bcebd-1456-4ced-9d72-93c2757fff0b" +version = "1.2.1" + +[[deps.ScopedValues]] +deps = ["HashArrayMappedTries", "Logging"] +git-tree-sha1 = "67a144433c4ce877ee6d1ada69a124d6b1ecf7be" +uuid = "7e506255-f358-4e82-b7e4-beb19740aa63" +version = "1.6.2" + +[[deps.Serialization]] +uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" +version = "1.11.0" + +[[deps.SharedArrays]] +deps = ["Distributed", "Mmap", "Random", "Serialization"] +uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383" +version = "1.11.0" + +[[deps.ShunnHamQuadrature]] +deps = ["LinearAlgebra", "StaticArrays"] +git-tree-sha1 = "dfa53166b13cd6f352d54c99a24124321ef95282" +uuid = "164309f2-5039-4884-b6c7-6da8aa5c66ad" +version = "0.1.0" + +[[deps.SimpleBufferStream]] +git-tree-sha1 = "f305871d2f381d21527c770d4788c06c097c9bc1" +uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" +version = "1.2.0" + +[[deps.SimpleTraits]] +deps = ["InteractiveUtils", "MacroTools"] +git-tree-sha1 = "7ddb0b49c109481b046972c0e4ab02b2127d6a75" +uuid = "699a6c99-e7fa-54fc-8d76-47d257e15c1d" +version = "0.9.6" + +[[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.12.0" + +[[deps.Sparspak]] +deps = ["Libdl", "LinearAlgebra", "Logging", "OffsetArrays", "Printf", "SparseArrays", "Test"] +git-tree-sha1 = "c942cb0b0e929a28eb6fedd5a3cbfb4440633d53" +uuid = "e56a9233-b9d6-4f03-8d0f-1825330902ac" +version = "0.3.15" + +[[deps.SpecialFunctions]] +deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] +git-tree-sha1 = "6547cbdd8ce32efba0d21c5a40fa96d1a3548f9f" +uuid = "276daf66-3868-5448-9aa4-cd146d93841b" +version = "2.8.0" + + [deps.SpecialFunctions.extensions] + SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" + + [deps.SpecialFunctions.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + +[[deps.StableTasks]] +git-tree-sha1 = "c4f6610f85cb965bee5bfafa64cbeeda55a4e0b2" +uuid = "91464d47-22a1-43fe-8b7f-2d57ee82463f" +version = "0.1.7" + +[[deps.StaticArrays]] +deps = ["LinearAlgebra", "PrecompileTools", "Random", "StaticArraysCore"] +git-tree-sha1 = "246a8bb2e6667f832eea063c3a56aef96429a3db" +uuid = "90137ffa-7385-5640-81b9-e52037218182" +version = "1.9.18" + + [deps.StaticArrays.extensions] + StaticArraysChainRulesCoreExt = "ChainRulesCore" + StaticArraysStatisticsExt = "Statistics" + + [deps.StaticArrays.weakdeps] + ChainRulesCore = "d360d2e6-b24c-11e9-a2a3-2a2ae2dbcce4" + Statistics = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" + +[[deps.StaticArraysCore]] +git-tree-sha1 = "6ab403037779dae8c514bad259f32a447262455a" +uuid = "1e83bf80-4336-4d27-bf5d-d5a4f845583c" +version = "1.4.4" + +[[deps.Statistics]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "ae3bb1eb3bba077cd276bc5cfc337cc65c3075c0" +uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" +version = "1.11.1" +weakdeps = ["SparseArrays"] + + [deps.Statistics.extensions] + SparseArraysExt = ["SparseArrays"] + +[[deps.StyledStrings]] +uuid = "f489334b-da3d-4c2e-b8f0-e476e12c162b" +version = "1.11.0" + +[[deps.SuiteSparse_jll]] +deps = ["Artifacts", "Libdl", "libblastrampoline_jll"] +uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" +version = "7.8.3+2" + +[[deps.Suppressor]] +deps = ["Logging"] +git-tree-sha1 = "6dbb5b635c5437c68c28c2ac9e39b87138f37c0a" +uuid = "fd094767-a336-5f1f-9728-57cf17d0bbfb" +version = "0.2.8" + +[[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 = "0f38a06c83f0007bbab3cf911262841c9a0f07e0" +uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" +version = "1.13.0" + +[[deps.Tar]] +deps = ["ArgTools", "SHA"] +uuid = "a4e569a6-e804-4fa4-b0f3-eef7a1d5b13e" +version = "1.10.0" + +[[deps.TaskLocalValues]] +git-tree-sha1 = "67e469338d9ce74fc578f7db1736a74d93a49eb8" +uuid = "ed4db957-447d-4319-bfb6-7fa9ae7ecf34" +version = "0.1.3" + +[[deps.TensorCore]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "1feb45f88d133a655e001435632f019a9a1bcdb6" +uuid = "62fd8b95-f654-4bbd-a8a5-9c27f68ccd50" +version = "0.1.1" + +[[deps.Test]] +deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] +uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +version = "1.11.0" + +[[deps.TestItems]] +git-tree-sha1 = "42fd9023fef18b9b78c8343a4e2f3813ffbcefcb" +uuid = "1c621080-faea-4a02-84b6-bbd5e436b8fe" +version = "1.0.0" + +[[deps.TranscodingStreams]] +git-tree-sha1 = "0c45878dcfdcfa8480052b6ab162cdd138781742" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.11.3" + +[[deps.URIs]] +git-tree-sha1 = "bef26fb046d031353ef97a82e3fdb6afe7f21b1a" +uuid = "5c2747f8-b7ea-4ff2-ba2e-563bfd36b1d4" +version = "1.6.1" + +[[deps.UUIDs]] +deps = ["Random", "SHA"] +uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" +version = "1.11.0" + +[[deps.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.WebIO]] +deps = ["AssetRegistry", "Base64", "Distributed", "FunctionalCollections", "JSON", "Logging", "Observables", "Pkg", "Random", "Requires", "Sockets", "UUIDs", "WebSockets", "Widgets"] +git-tree-sha1 = "0eef0765186f7452e52236fa42ca8c9b3c11c6e3" +uuid = "0f1e0344-ec1d-5b48-a673-e5cf874b6c29" +version = "0.8.21" + +[[deps.WebSockets]] +deps = ["Base64", "Dates", "HTTP", "Logging", "Sockets"] +git-tree-sha1 = "4162e95e05e79922e44b9952ccbc262832e4ad07" +uuid = "104b5d7c-a370-577a-8038-80a2059c5097" +version = "1.6.0" + +[[deps.Widgets]] +deps = ["Colors", "Dates", "Observables", "OrderedCollections"] +git-tree-sha1 = "e9aeb174f95385de31e70bd15fa066a505ea82b9" +uuid = "cc8bc4a8-27d6-5769-a93b-9d913e69aa62" +version = "0.6.7" + +[[deps.WiltonInts84]] +deps = ["LinearAlgebra"] +git-tree-sha1 = "30444f863e76cc609b52d5b8e3e047acd7deaccf" +uuid = "a3e2863e-c0ee-5ff6-a523-307a4cdc8724" +version = "0.2.8" + +[[deps.XML2_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Libiconv_jll", "Zlib_jll"] +git-tree-sha1 = "80d3930c6347cfce7ccf96bd3bafdf079d9c0390" +uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" +version = "2.13.9+0" + +[[deps.Xorg_libX11_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libxcb_jll", "Xorg_xtrans_jll"] +git-tree-sha1 = "808090ede1d41644447dd5cbafced4731c56bd2f" +uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" +version = "1.8.13+0" + +[[deps.Xorg_libXau_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "aa1261ebbac3ccc8d16558ae6799524c450ed16b" +uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" +version = "1.0.13+0" + +[[deps.Xorg_libXdmcp_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "52858d64353db33a56e13c341d7bf44cd0d7b309" +uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" +version = "1.1.6+0" + +[[deps.Xorg_libXext_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "1a4a26870bf1e5d26cd585e38038d399d7e65706" +uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" +version = "1.3.8+0" + +[[deps.Xorg_libXfixes_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "75e00946e43621e09d431d9b95818ee751e6b2ef" +uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" +version = "6.0.2+0" + +[[deps.Xorg_libXft_jll]] +deps = ["Artifacts", "Fontconfig_jll", "JLLWrappers", "Libdl", "Xorg_libXrender_jll"] +git-tree-sha1 = "d893c27836da7986c3248997a2a9535e5e4d8a95" +uuid = "2c808117-e144-5220-80d1-69d4eaa9352c" +version = "2.3.9+0" + +[[deps.Xorg_libXinerama_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXext_jll"] +git-tree-sha1 = "0ba01bc7396896a4ace8aab67db31403c71628f4" +uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" +version = "1.1.7+0" + +[[deps.Xorg_libXrender_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libX11_jll"] +git-tree-sha1 = "7ed9347888fac59a618302ee38216dd0379c480d" +uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" +version = "0.9.12+0" + +[[deps.Xorg_libpciaccess_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "58972370b81423fc546c56a60ed1a009450177c3" +uuid = "a65dc6b1-eb27-53a1-bb3e-dea574b5389e" +version = "0.19.0+0" + +[[deps.Xorg_libxcb_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Xorg_libXau_jll", "Xorg_libXdmcp_jll"] +git-tree-sha1 = "bfcaf7ec088eaba362093393fe11aa141fa15422" +uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" +version = "1.17.1+0" + +[[deps.Xorg_xtrans_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a63799ff68005991f9d9491b6e95bd3478d783cb" +uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" +version = "1.6.0+0" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.3.1+2" + +[[deps.aws_c_auth_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_cal_jll", "aws_c_http_jll", "aws_c_sdkutils_jll"] +git-tree-sha1 = "8cab83c96af80a1be968251ce1a0548a7545484d" +uuid = "2b3700d1-4306-52e2-a478-c162f0c514be" +version = "0.9.6+0" + +[[deps.aws_c_cal_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_common_jll"] +git-tree-sha1 = "22c0f42f4a1f0dc5dcfa8fd267c4ac407c455e7a" +uuid = "70f11efc-bab2-57f1-b0f3-22aad4e67c4b" +version = "0.9.13+0" + +[[deps.aws_c_common_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "a759cb9bf456ad792cc7898a81ae333cce9ef02a" +uuid = "73048d1d-b8c4-5092-a58d-866c5e8d1e50" +version = "0.12.6+0" + +[[deps.aws_c_compression_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_common_jll"] +git-tree-sha1 = "7910c72f45f44afd297c39fe43b99c56d5ed22ec" +uuid = "73a04cd5-f3d7-5bac-9290-e8adb709f224" +version = "0.3.2+0" + +[[deps.aws_c_http_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_compression_jll", "aws_c_io_jll"] +git-tree-sha1 = "e358d5a001ef7afbd4f8c5225322512819cda2f2" +uuid = "3254fc65-9028-534d-aa9d-d76d128babc6" +version = "0.10.13+0" + +[[deps.aws_c_io_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_cal_jll", "aws_c_common_jll", "s2n_tls_jll"] +git-tree-sha1 = "7e481d474b2087ee8bbf55b81bf9119f21e396d9" +uuid = "13c41daa-f319-5298-b5eb-5754e0170d52" +version = "0.26.3+0" + +[[deps.aws_c_s3_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_auth_jll", "aws_c_common_jll", "aws_c_http_jll", "aws_checksums_jll", "s2n_tls_jll"] +git-tree-sha1 = "3e9917ab25114feba657e71be41cad068b9f6595" +uuid = "bd1f34fb-993f-5903-a121-aaf302eed6d4" +version = "0.11.5+0" + +[[deps.aws_c_sdkutils_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_common_jll"] +git-tree-sha1 = "c43dfba2c1ab9ea9f02f2c80e86fa16f6460244e" +uuid = "1282aa60-004d-510b-9f52-12498d409daa" +version = "0.2.4+1" + +[[deps.aws_checksums_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "aws_c_common_jll"] +git-tree-sha1 = "2570c8e23f4771a087b12a47edcaaa670ac05a01" +uuid = "b2a88e68-78e7-5e94-8c20-c02986ec140e" +version = "0.2.10+0" + +[[deps.dlfcn_win32_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "e141d67ffe550eadfb5af1bdbdaf138031e4805f" +uuid = "c4b69c83-5512-53e3-94e6-de98773c479f" +version = "1.4.2+0" + +[[deps.gmsh_jll]] +deps = ["Artifacts", "Cairo_jll", "CompilerSupportLibraries_jll", "FLTK_jll", "FreeType2_jll", "GLU_jll", "GMP_jll", "HDF5_jll", "JLLWrappers", "JpegTurbo_jll", "LLVMOpenMP_jll", "Libdl", "Libglvnd_jll", "METIS_jll", "MMG_jll", "OCCT_jll", "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 = "4b81ac8f1fe6a1a473ac9b980de24e9143fa6211" +uuid = "630162c2-fc9b-58b3-9910-8442a8a132e6" +version = "4.15.2+0" + +[[deps.libaec_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "60f4792734488db6f42e2c7699f1d4594780bd03" +uuid = "477f73a3-ac25-53e9-8cc3-50b2fa2566f0" +version = "1.1.7+0" + +[[deps.libblastrampoline_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" +version = "5.15.0+0" + +[[deps.libpng_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl", "Zlib_jll"] +git-tree-sha1 = "e51150d5ab85cee6fc36726850f0e627ad2e4aba" +uuid = "b53b4c65-9356-5827-b1ea-8c7a1a84506f" +version = "1.6.58+0" + +[[deps.mpif_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "JLLWrappers", "LazyArtifacts", "Libdl", "MPIABI_jll", "MPICH_jll", "MPIPreferences", "MPItrampoline_jll", "MicrosoftMPI_jll", "OpenMPI_jll", "TOML"] +git-tree-sha1 = "a8083ee0737c243c8f40a4ba86a0956997facb73" +uuid = "9aeb927a-4695-514f-a259-621a69f20ec0" +version = "0.1.7+0" + +[[deps.nghttp2_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" +version = "1.64.0+1" + +[[deps.oneTBB_jll]] +deps = ["Artifacts", "JLLWrappers", "LazyArtifacts", "Libdl"] +git-tree-sha1 = "da8c1f6eee04831f14edcfa5dae611d309807e57" +uuid = "1317d2d5-d96f-522e-a858-c73665f53c3e" +version = "2022.3.0+0" + +[[deps.p7zip_jll]] +deps = ["Artifacts", "CompilerSupportLibraries_jll", "Libdl"] +uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" +version = "17.7.0+0" + +[[deps.s2n_tls_jll]] +deps = ["Artifacts", "JLLWrappers", "Libdl"] +git-tree-sha1 = "64ae051c6f03044eb7d98027d1b552b4e21e650c" +uuid = "cddc5d3d-934d-5d3a-9747-62fc12ea3f48" +version = "1.7.3+0" diff --git a/examples/efie.jl b/examples/efie.jl index 033f476..27b8790 100644 --- a/examples/efie.jl +++ b/examples/efie.jl @@ -8,7 +8,7 @@ using PlotlyJS include("plotresults.jl") -mesh = meshsphere(1.0, 0.4) +mesh = meshsphere(1.0, 0.1) space = raviartthomas(mesh) wavenumber = 1.0 @@ -16,10 +16,11 @@ operator = Maxwell3D.singlelayer(; wavenumber) excitation = Maxwell3D.planewave(; direction=ẑ, polarization=x̂, wavenumber) rhs = assemble((n × excitation) × n, space) -matrix = CFMM.assemble(operator, space) +matrix = CFMM.assemble(operator, space, space) current, stats = Krylov.gmres(matrix, rhs; rtol=1.0e-4, itmax=200, history=true, verbose=1) @show stats @show norm(matrix * current - rhs) / norm(rhs) -plotresults(current, space, excitation, wavenumber, joinpath(@__DIR__, "efie_results.html")) +outdir = get(ENV, "CFMM_OUTPUT_DIR", @__DIR__) +plotresults(current, space, excitation, wavenumber, joinpath(outdir, "efie_results.html")) diff --git a/examples/mfie.jl b/examples/mfie.jl index 0a85958..a88b6f4 100644 --- a/examples/mfie.jl +++ b/examples/mfie.jl @@ -8,7 +8,7 @@ using PlotlyJS include("plotresults.jl") -mesh = meshsphere(1.0, 0.4) +mesh = meshsphere(1.0, 0.1) trialspace = raviartthomas(mesh) testspace = buffachristiansen(mesh) @@ -30,6 +30,7 @@ current, stats = Krylov.gmres(matrix, rhs; rtol=1.0e-4, itmax=200, history=true, @show stats @show norm(matrix * current - rhs) / norm(rhs) +outdir = get(ENV, "CFMM_OUTPUT_DIR", @__DIR__) plotresults( - current, trialspace, excitation, wavenumber, joinpath(@__DIR__, "mfie_results.html") + current, trialspace, excitation, wavenumber, joinpath(outdir, "mfie_results.html") ) diff --git a/ext/CFMMExaFMMt/fmmoptions.jl b/ext/CFMMExaFMMt/fmmoptions.jl index 93209ee..16bdd0b 100644 --- a/ext/CFMMExaFMMt/fmmoptions.jl +++ b/ext/CFMMExaFMMt/fmmoptions.jl @@ -3,15 +3,16 @@ function exafmmoptions( ) where {T<:Val{0}} return LaplaceFMMOptions(; p=fmm.p, ncrit=fmm.ncrit) end -#TODO: Write unit tests for the ModifiedHelmholtzFMMOptions function exafmmoptions( gamma::T, fmm::CorrectionFactorMatrixMethod.ExaFMMtFunctor ) where {T<:Real} + iszero(gamma) && return LaplaceFMMOptions(; p=fmm.p, ncrit=fmm.ncrit) return ModifiedHelmholtzFMMOptions(gamma; p=fmm.p, ncrit=fmm.ncrit) end function exafmmoptions( gamma::T, fmm::CorrectionFactorMatrixMethod.ExaFMMtFunctor ) where {T<:Complex} + iszero(gamma) && return LaplaceFMMOptions(; p=fmm.p, ncrit=fmm.ncrit) return HelmholtzFMMOptions(-gamma / im; p=fmm.p, ncrit=fmm.ncrit) end diff --git a/src/CFMM/assemble.jl b/src/CFMM/assemble.jl index 3230458..502a841 100644 --- a/src/CFMM/assemble.jl +++ b/src/CFMM/assemble.jl @@ -20,7 +20,6 @@ using ..CorrectionFactorMatrixMethod: """ assemble(operator, testspace, trialspace; kwargs...) - assemble(operator, space; kwargs...) Assemble a matrix-free correction-factor FMM operator. @@ -59,8 +58,4 @@ function assemble( ) end -function assemble(operator, space; kwargs...) - return assemble(operator, space, space; kwargs...) -end - end diff --git a/src/kernelmatrix/abstractcorrectedkernelmatrix.jl b/src/kernelmatrix/abstractcorrectedkernelmatrix.jl index 076c32a..18893b1 100644 --- a/src/kernelmatrix/abstractcorrectedkernelmatrix.jl +++ b/src/kernelmatrix/abstractcorrectedkernelmatrix.jl @@ -2,5 +2,7 @@ abstract type AbstractCorrectedKernelMatrix{T} end function AbstractCorrectedKernelMatrix(operator, testspace, trialspace; args...) end -function (::AbstractCorrectedKernelMatrix)(matrixblock, tdata, sdata) end +function (::AbstractCorrectedKernelMatrix)(matrixblock, tdata, sdata) + return nothing +end Base.eltype(::AbstractCorrectedKernelMatrix{T}) where {T} = T diff --git a/test/CFMMBEAST/test_CFMMBEAST.jl b/test/CFMMBEAST/test_CFMMBEAST.jl index 6fd2fe1..6a5026f 100644 --- a/test/CFMMBEAST/test_CFMMBEAST.jl +++ b/test/CFMMBEAST/test_CFMMBEAST.jl @@ -84,5 +84,7 @@ ) @test matrix isa matrixtype @test size(matrix) == (length(space), length(space)) + @test size(matrix, 1) == length(space) + @test size(matrix, 2) == length(space) end end diff --git a/test/CFMMExaFMMt/test_CFMMExaFMMt.jl b/test/CFMMExaFMMt/test_CFMMExaFMMt.jl index a82abd9..1ad64bb 100644 --- a/test/CFMMExaFMMt/test_CFMMExaFMMt.jl +++ b/test/CFMMExaFMMt/test_CFMMExaFMMt.jl @@ -7,6 +7,10 @@ @test options isa ExaFMMt.FMMOptions @test (options.p, options.ncrit) == (8, 32) + # Helmholtz with wavenumber=0 must reduce to the Laplace path + @test functor(Helmholtz3D.singlelayer(; wavenumber=0.0)) isa ExaFMMt.LaplaceFMMOptions + @test functor(Helmholtz3D.hypersingular(; wavenumber=0.0)) isa ExaFMMt.LaplaceFMMOptions + sources = [0.0 0.0 0.0; 1.0 0.0 0.0] targets = [0.0 1.0 0.0; 1.0 1.0 0.0] fmm = CFM.setup(sources, targets, options) diff --git a/test/runtests.jl b/test/runtests.jl index d2c5a50..6da894e 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -53,4 +53,21 @@ end nothing end +# Warn locally if pre-rendered documentation plots are older than their source. +# Git sets identical mtimes on checkout so this only fires after a local edit. +let + repo = dirname(@__DIR__) + scripts = map( + f -> joinpath(repo, "examples", f), ["efie.jl", "mfie.jl", "plotresults.jl"] + ) + assets = joinpath(repo, "docs", "src", "assets", "examples") + newest = maximum(mtime, scripts) + for name in ["efie_results.html", "mfie_results.html"] + html = joinpath(assets, name) + isfile(html) && + mtime(html) < newest && + @warn "$name may be stale — run: julia --startup-file=no docs/render_examples.jl" + end +end + @run_package_tests verbose = true diff --git a/test/test_core.jl b/test/test_core.jl index d52d715..bcffe0b 100644 --- a/test/test_core.jl +++ b/test/test_core.jl @@ -26,6 +26,10 @@ end struct TestFMMFunctor <: CFM.FMMFunctor end +# Minimal concrete subtype with no callable override — exercises the base stub. +struct MinimalKernelMatrix{T} <: CFM.AbstractCorrectedKernelMatrix{T} end +Base.size(::MinimalKernelMatrix) = (0, 0) + CFM.scalartype(::TestCorrectionOperator) = Float64 function CFM.AbstractCorrectedKernelMatrix( @@ -57,6 +61,9 @@ end beastmatrix = CFM.BEASTCorrectedKernelMatrix{ComplexF64}(assembler, assembler) @test eltype(beastmatrix) == ComplexF64 @test size(beastmatrix) == (3, 4) + @test size(beastmatrix, 1) == 3 + @test size(beastmatrix, 2) == 4 + @test_throws ErrorException size(beastmatrix, 3) testspace = [SVector(x, 0.0, 0.0) for x in 0.0:3.0] trialspace = [SVector(x, 0.0, 0.0) for x in 0.5:1.0:2.5] @@ -94,11 +101,18 @@ end options = CFM.FMMFunctor(; p=10, ncrit=64) @test (options.p, options.ncrit) == (10, 64) @test CFM.defaultminvalues(options) == 64 + @test CFM.defaultminvalues(TestFMMFunctor()) == 50 # base FMMFunctor fallback matrix = [2.0 1.0; -1.0 3.0] vector = [1.0, 2.0] @test CFM.FMM(matrix) * vector == matrix * vector @test transpose(CFM.FMM(matrix, transpose(matrix))) * vector == transpose(matrix) * vector + # Adjoint is not implemented; use complex types to exercise the error branch + # (for real element types LinearMaps silently routes adjoint through transpose) + cmatrix = ComplexF64[2.0 1.0; -1.0 3.0] + cvector = ComplexF64[1.0, 2.0] + @test_throws ErrorException adjoint(CFM.FMM(cmatrix, transpose(cmatrix))) * cvector + @test_throws ErrorException adjoint(CFM.FMM(cmatrix)) * cvector far = LinearMap(matrix) correction = LinearMap([0.5 -0.5; 1.0 0.0]) @@ -108,4 +122,19 @@ end @test cfmm * vector == (far + correction) * vector @test transpose(cfmm) * vector == transpose(far + correction) * vector @test adjoint(cfmm) * vector == adjoint(far + correction) * vector + + # Stubs that error when no extension is loaded — verify the error is thrown. + @test isnothing(CFM.AbstractCorrectedKernelMatrix(nothing, nothing, nothing)) + @test isnothing(MinimalKernelMatrix{Float64}()(nothing, nothing, nothing)) + @test isnothing(CFM.scalartype(nothing)) + @test_throws ErrorException CFM.defaultnearquadstrat(nothing, nothing, nothing) + @test_throws ErrorException CFM.FMMFunctor()(nothing) + @test CFM.alpha(nothing) == 1.0 + @test CFM.beta(nothing) == 1.0 + @test_throws ErrorException CFM.sources(nothing, 2) + @test_throws ErrorException CFM.potentials(Matrix{Float64}(undef, 0, 0), nothing) + @test_throws ErrorException CFM.curlpotentials(Matrix{Float64}(undef, 0, 0), nothing) + @test_throws ErrorException CFM.divpotentials(Matrix{Float64}(undef, 0, 0), nothing) + @test_throws ErrorException CFM.normals(nothing) + @test_throws ErrorException CFM.setup(nothing, nothing, nothing) end diff --git a/test/test_operators.jl b/test/test_operators.jl index b25cb95..6119261 100644 --- a/test/test_operators.jl +++ b/test/test_operators.jl @@ -22,4 +22,25 @@ dense = assemble(operator, problem.testspace, problem.trialspace) x = ones(ComplexF64, size(matrix, 2)) @test isapprox(matrix * x, dense * x; rtol=problem.tolerance) + + # Static (Laplace, gamma=Val(0)) operators have Float64 scalar type. + # testoperator uses ComplexF64 vectors, triggering the real/complex + # multiplication branch in each HH3D operator. + for operator in ( + Helmholtz3D.singlelayer(), + Helmholtz3D.doublelayer(), + Helmholtz3D.doublelayer_transposed(), + Helmholtz3D.hypersingular(), + ) + testoperator(operator, scalarproblems) + end + + # Matching spaces use the symmetric FMM. + scalar_problem = last(scalarproblems) + operator = Helmholtz3D.singlelayer(; wavenumber=k) + square_matrix = CFMM.assemble( + operator, scalar_problem.testspace, scalar_problem.testspace + ) + @test square_matrix.fmm.fmm isa CorrectionFactorMatrixMethod.SymmetricFMM + @test_throws MethodError CFMM.assemble(operator, scalar_problem.testspace) end