Plane Wave
Definition
An acoustic plane wave with amplitude $a$ and direction of propagation $\hat{\bm d}$ (vectors with a hat denote unit vectors) is defined by the pressure field [BSUA70]
\[p_\mathrm{PW}(\bm r) = a \, \mathrm{e}^{-\mathrm{j} k \hat{\bm d} \cdot \bm r}\]
with the wavenumber $k = \omega \sqrt{\varepsilon \mu}$.
The background medium is defined by the chosen excitation as a Medium(ε, μ), just as for the electromagnetic excitations. For acoustics the two parameters are to be read via the analogy $\mu \rightarrow \rho$ (mass density) and $\varepsilon \rightarrow 1 / (\rho c^2)$ (compressibility), so that the speed of sound is $c = 1 / \sqrt{\varepsilon \mu}$ and the wave impedance is $\rho c = \sqrt{\mu / \varepsilon}$. Since the default is free space, a medium matching the fluid of interest should be provided.
Throughout this package the time convention $\mathrm{e}^{\mathrm{j} \omega t}$ is employed, hence the spherical Hankel functions of the second kind $h_n^{(2)}$ describe outgoing waves.
API
The API provides the following constructor with default values:
SphericalScattering.Acoustic.planeWave — Function
ex = planeWave(;
embedding = Medium(ε0, μ0),
frequency = error("missing argument `frequency`"),
amplitude = 1.0,
direction = SVector{3,typeof(frequency)}(0.0, 0.0, 1.0)
)Constructor for an acoustic plane wave travelling in direction.
The Acoustic Submodule
The constructors of the acoustic excitations are collected in a submodule, so that their names do not clash with the electromagnetic ones:
SphericalScattering.Acoustic — Module
AcousticSubmodule bundling the constructors of the acoustic excitations, so that, e.g., Acoustic.planeWave does not clash with the electromagnetic planeWave.
Incident Field
The pressure of the plane wave is as given above. On a surface with outward unit normal $\hat{\bm n}$ the two Cauchy data (the surface traces) are the Dirichlet trace
\[\gamma_0 p_\mathrm{PW} = p_\mathrm{PW}\]
and, since $\nabla p_\mathrm{PW} = -\mathrm{j} k \hat{\bm d} \, p_\mathrm{PW}$, the Neumann trace
\[\gamma_1 p_\mathrm{PW} = \hat{\bm n} \cdot \nabla p_\mathrm{PW} = -\mathrm{j} k (\hat{\bm d} \cdot \hat{\bm n}) \, p_\mathrm{PW} \,.\]
API
The general API is employed:
p = field(ex, Pressure(point_cart))
γ₀ = field(ex, PressureTrace(point_cart))
γ₁ = field(ex, PressureNormalGradient(point_cart))Without further specification the outward normal $\hat{\bm n} = \hat{\bm r}$ of a sphere centered in the origin is assumed at every location. One normal vector per location may be provided instead, which is required, e.g., for the facets of a surface mesh:
γ₁ = field(ex, PressureNormalGradient(point_cart, normals))See PressureNormalGradient for details.
Scattered Field
The scattered field computation follows [BSUA70]. For the sound-hard and the sound-soft sphere it is obtained by a series in the spherical wave functions, see Acoustic Spheres; for the spheroids and the disc by a series in the spheroidal wave functions, see Spheroidal Solution.
API
The general API is employed:
p = scatteredfield(sp, ex, Pressure(point_cart))
FF = scatteredfield(sp, ex, FarField(point_cart))
γ₀ = scatteredfield(sp, ex, PressureTrace(point_cart))
γ₁ = scatteredfield(sp, ex, PressureNormalGradient(point_cart))where sp is a HardSphere, a SoftSphere, a Spheroid, or a Disc. The traces and the far field are described under Quantities.
For a spheroid, the outward normals have to be provided, PressureNormalGradient(sp, point_cart), see Surface Traces.
The pressure vanishes inside the scatterer, whereas the far field is determined by the direction of observation alone and is, therefore, not suppressed for locations inside the scatterer.
Total Field
API
The general API is employed:
p = field(sp, ex, Pressure(point_cart))
γ₀ = field(sp, ex, PressureTrace(point_cart))
γ₁ = field(sp, ex, PressureNormalGradient(point_cart))