ApproxFun.jl for Helmholtz equation on cylinder

I am trying to figure out if ApproxFun can be used for solving Helmholtz equation on cylindrical domain.
Naively i hoped for something like Bessel spaces readily available.

May be i have to construct cylinder domain using disk domain?
Could ultraspherical spaces be used insead or may be is there some kind of transfornmation?

I guess my quiestion is very entry level and am sorry for this.

2 Likes

Short answer: no.

Long answer:

A BesselSpace may be a bad idea because it has slow convergence. (This is the same situation as using cos/sin for non-periodic functions.) Though perhaps this is worth it in the high-frequency setting. If you wanted to create your own BesselSpace, I’d be happy to walk you through the process.

Otherwise, there used to be a DiskSpace based on a hierarchy of Zernike-like polynomials but the code has gone dormant. I’d be keen to get it working again but have limited time at the moment. @MikaelSlevinsky FastTransforms gives a fast and stable way of expanding functions in this basis which should be incorporated.

For cylinders, one would then need to tensor DiskSpace with Chebyshev. This is almost functioning.
Even then, one needs to solve the resulting system efficiently. Helmholtz has the nice property that it’s radially symmetric so this reduces to 2-dimensional solves involving BandedBlockBandedMatrix, so hopefully that should be efficient. For high frequencies this will break down, but Euan Spence has some nice work on preconditioners for high frequency Helmholtz.

1 Like

Thhank You for the directions!
While been fascinated by your polished work,
i think, as an experimental physicist, am far from understanding how your magic works.
But will take my time to try reaching user level.

Any progress on this?

Currently looking at solving the Helmholtz equation on a cylinder with Dirichlet boundary conditions on three boundaries, but a homogenous Neumann on the “top” of the cylinder. Would be great if this was as easy as the Helmholtz solution given in the documentation!