Kraken

Model AcousticsToolbox.Kraken
Description Kraken and KrakenC normal mode models (wrapper)
Language Fortran
Advantages Well-established benchmark models
Limitations Not differentiable
Kraken(env; kwargs...)

Create a Kraken propagation model.

Supported keyword arguments:

  • nmodes: number of modes to use (default: 9999)
  • mesh_density: number of mesh points per wavelength (default: 0, 0=auto)
  • clow: lower limit of phase speed (default: 1300, 0=auto)
  • chigh: upper limit of phase speed (default: 2500)
  • complex_solver: use KrakenC for finding modes (default: true)
  • robust: use robust (but slow) root finder (default: false)
  • debug: debug mode (default: false)

Enabling debug mode will create a temporary directory with the Kraken input and output files. This allows manual inspection of the files.

A good overview of the Kraken model can be found at:

Tip

The theory of modal models is summarized in a brief note “On modal models”. It provides an overview of key concepts and relevant mathematical formulations.

Examples

Range-independent scenario

Here’s an example showing results for the PEKERIS test problem from the Kraken technical report:

using UnderwaterAcoustics
using AcousticsToolbox
using Plots

env = UnderwaterEnvironment(
  bathymetry = 5000,
  soundspeed = 1500,
  density = 1000,
  seabed = FluidBoundary(2000, 2000)
)
pm = Kraken(env)

tx = AcousticSource(0, -500, 10)
rx = AcousticReceiver(200000, -2500)
modes = arrivals(pm, tx, rx)[1:7]     # first 7 modes
7 element Vector{ModeArrival}:
  mode 1: kᵣ = 0.041883 - 0.0im rad/m, v = 1499.84 m/s, vₚ = 1500.16 m/s
  mode 2: kᵣ = 0.04187 - 0.0im rad/m, v = 1499.36 m/s, vₚ = 1500.66 m/s
  mode 3: kᵣ = 0.041847 - 0.0im rad/m, v = 1498.56 m/s, vₚ = 1501.48 m/s
  mode 4: kᵣ = 0.041815 - 0.0im rad/m, v = 1497.45 m/s, vₚ = 1502.63 m/s
  mode 5: kᵣ = 0.041773 - 0.0im rad/m, v = 1496.01 m/s, vₚ = 1504.12 m/s
  mode 6: kᵣ = 0.041723 - 0.0im rad/m, v = 1494.24 m/s, vₚ = 1505.94 m/s
  mode 7: kᵣ = 0.041663 - 0.0im rad/m, v = 1492.15 m/s, vₚ = 1508.10 m/s
# plot the modes
plot(modes)
rxs = AcousticReceiverGrid2D(200000:10:220000, -2500)
x = transmission_loss(pm, tx, rxs)

plot(200:0.01:220, x; ylims=(70,110), yflip=true, legend=false,
  xlabel="Range (km)", ylabel="Transmission loss (dB)")

Range-dependent scenario with multilayered seabed

While the Kraken model is range-independent by itself, it can be made range-dependent by using AdiabaticExt as shown below:

using UnderwaterAcoustics
using Plots

env = UnderwaterEnvironment(
  bathymetry = SampledField([200, 150, 200]; x=[0, 2000, 5000]),
  soundspeed = 1500,
  density = 1000,
  seabed = MultilayerElasticBoundary([
    (40, 1374, 1520, 0, dBperλ(0.1124), 0),           # 40m thick fluid sediment
    (Inf, 2200, 1730, 800, dBperλ(0.5), dBperλ(0.5))  # hard half-space substrate
  ])
)

# use an adiabatic extension to the Kraken for range-dependence
pm = AdiabaticExt(Kraken, env)

tx = AcousticSource(0, -50, 250)
rx = AcousticReceiver(7000, -25)
modes = arrivals(pm, tx, rx)[1:7]      # first 7 modes
7 element Vector{ModeArrival}:
  mode 1: kᵣ = 1.047089 - 1.0e-6im rad/m, v = 1499.83 m/s, vₚ = 1500.16 m/s
  mode 2: kᵣ = 1.046762 - 3.0e-6im rad/m, v = 1499.30 m/s, vₚ = 1500.62 m/s
  mode 3: kᵣ = 1.046217 - 6.0e-6im rad/m, v = 1498.42 m/s, vₚ = 1501.41 m/s
  mode 4: kᵣ = 1.045452 - 1.0e-5im rad/m, v = 1497.19 m/s, vₚ = 1502.50 m/s
  mode 5: kᵣ = 1.044468 - 1.6e-5im rad/m, v = 1495.60 m/s, vₚ = 1503.92 m/s
  mode 6: kᵣ = 1.043263 - 2.2e-5im rad/m, v = 1493.65 m/s, vₚ = 1505.66 m/s
  mode 7: kᵣ = 1.041837 - 3.1e-5im rad/m, v = 1491.37 m/s, vₚ = 1507.72 m/s
# plot the modes at 7 km range
plot(modes)
hline!([-200])    # seabed location
rxs = AcousticReceiverGrid2D(10:10:7000, -200:-1)
x = transmission_loss(pm, tx, rxs)

plot(rxs, x; crange=50)
plot!(env)

Notes

The Fortran Kraken propagation model requires that the transmitter is located at \((x=0, y=0)\) and all receivers are located in the right half-plane (i.e., \(x>0\) and \(y=0\)). While this limitation can be worked around in the wrapper by a coordinate transformation, automatic transformation is not yet implemented.

Additionally, this wrapper does not yet support all the features of the original Fortran model. In particular, it does NOT support:

  • N2-linear, analytic or quadratic interpolation for sound speed
  • Arbitrary reflection coefficients
  • Twersky scattering

Receivers on an irregular grid are supported, but not currently optimized for speed (by using the irregular grid option in the Fortran model).

Kraken currently does not compute modal group velocities. While KrakenC does compute group velocities, the values are incorrect for multilayer seabeds with elastic sediment layers. In both cases, when group velocities are unavailable, the returned modes will not include group velocity information (will be reported as missing).