While IFGF is (mostly) a kernel-independent method, efficiently implementing your custom kernel requires some work. It would be nice to provide a simple way to compute e.g. single- and double-layer operators for some important and commonly used PDEs such as
Helmholtz
Laplace
Stokes
Maxwell
We can either have many different function names, such as
k = 2
L = helmholtz3d_single_layer(X, Y, k; tol)
or a single constructor but some other structs to dispatch to the right kernel and some specialized methods
pde = Helmholtz(;dim=2,k=2)
K = SingleLayerKernel(pde)
L = assemble_ifgf(K, X, Y; tol)
I have a slight preference for the second approach.
While IFGF is (mostly) a kernel-independent method, efficiently implementing your custom kernel requires some work. It would be nice to provide a simple way to compute e.g. single- and double-layer operators for some important and commonly used PDEs such as
We can either have many different function names, such as
or a single constructor but some other structs to dispatch to the right kernel and some specialized methods
I have a slight preference for the second approach.