Skip to content

Latest commit

 

History

History
69 lines (50 loc) · 3.34 KB

File metadata and controls

69 lines (50 loc) · 3.34 KB

CorrectionFactorMatrixMethod.jl

Docs-stable Docs-dev MIT license CI codecov

Introduction

This package builds matrix-free boundary-element operators that combine a fast multipole approximation of the far interactions with directly assembled near-field corrections. The result behaves like the dense boundary-element matrix under matrix-vector products, but is never assembled explicitly, so it can be used directly inside an iterative solver such as Krylov.gmres.

The generic correction and linear-map machinery lives in the core package. Support for concrete operators and spaces is provided through package extensions for BEAST.jl, CompScienceMeshes.jl, and 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 [1]:

$$\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

Installing CorrectionFactorMatrixMethod is done by entering the package manager (enter ] at the Julia REPL) and issuing:

pkg> add https://github.com/JoshuaTetzner/CorrectionFactorMatrixMethod.jl.git

The supported boundary-element integration requires Julia 1.10 or later.

First steps

Load the optional BEAST, CompScienceMeshes, and ExaFMMt packages, build a boundary-element operator with its test and trial spaces, and assemble the correction-factor operator:

using BEAST, CompScienceMeshes, ExaFMMt
using CorrectionFactorMatrixMethod

mesh = meshsphere(1.0, 0.4)
space = raviartthomas(mesh)
operator = Maxwell3D.singlelayer(; wavenumber=1.0)

matrix = CFMM.assemble(operator, space, space)
result = matrix * rand(scalartype(operator), numfunctions(space))

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.