Bellhop.py introduction

Bellhop is an underwater acoustics propagation model that uses ray-tracing to calculate eigenrays between points, their respective arrival properties, and transmission loss throughout a medium. This introduction shows examples of each of these using the bellhop.plot module, which provides a high-level interface to the Bokeh interactive plotting library.

1 Eigenrays

A simple example of the so-called eigenrays between a source and receiver is shown in Figure 1. The source is shown on the left (red marker), the receiver on the right (blue marker), with a flat vacuum-reflective surface at depth \(z=0~\mathrm{m}\), and flat seabed at depth \(z=25~\mathrm{m}\). The rays are coloured according to their total number of bounces to give a visual indication of arrival amplitude (assuming there is absorption for every reflection).

Code
import bellhop as bh
import bellhop.plot as bhp

env = bh.create_env()
erays = bh.compute_eigenrays(env)
bhp.plot_rays(erays,env=env)
Figure 1: A ray plot from an underwater sound source (constant depth and speed of sound).

2 Arrivals

From the eigenrays between the source and receiver, arrival information can be calculated to identify the contributions from each ray and their respective time delays. An example of these are shown in Figure 2.

Code
import bellhop as bh
import bellhop.plot as bhp

env = bh.create_env()
arr = bh.compute_arrivals(env)
bhp.plot_arrivals(arr)
(a) Arrivals plot from an underwater sound source (constant depth and speed of sound).
(b)
Figure 2

3 Transmission loss

The examples of eigenrays and arrival times were for a fixed reciever point. If we consider an array of receiver points across the entire underwater domain, we can calculate the corresponding transmission loss plot shown in Figure 3. The default settings are to calculate transmission loss assuming coherent interference, which explains the interference patterns seen. (Note these patterns are also likely aliased due to the fairly coarse grid used here for efficiency.)

Code
import numpy as np
import bellhop as bh
import bellhop.plot as bhp

env = bh.create_env(
    frequency=1000,
    receiver_range=np.linspace(1,25,200),
    receiver_depth=np.linspace(0,25,200),
)
tl = bh.compute_transmission_loss(env)
bhp.plot_transmission_loss(tl,env=env)
(a) A transmission loss plot from a 1000 Hz underwater sound source (constant depth and speed of sound).
(b)
Figure 3

4 Next steps

Now that you’ve seen how to run simple Bellhop simulations, you will want to see the range of environment configuration options available. These include source and receiver positions, sound speed properties, absorption properties, and so on.

For complex simulations you may wish to run more than one type of computation, or compare the results of computations from varying the environment file. These types of workflows are enabled using the generalised compute() interface.