Kraken

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

Create a Kraken propagation model.

Supported keyword arguments:

  • nmodes: number of modes to use (default: 9999)
  • nmesh: number of mesh points (default: 0, auto)
  • clow: lower limit of phase speed (default: 0, auto)
  • chigh: upper limit of phase speed (default: 1600.0)
  • leaky: use KrakenC for leaky 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 Bellhop model can be found at:

Example

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; chigh=2000)

tx = AcousticSource(0, -500, 10)
rx = AcousticReceiver(200000, -2500)
modes = arrivals(pm, tx, rx)[1:7]     # first 7 modes
7-element Vector{UnderwaterAcoustics.ModeArrival{ComplexF32, UnderwaterAcoustics.SampledFieldZ{Interpolations.Extrapolation{ComplexF64, 1, Interpolations.GriddedInterpolation{ComplexF64, 1, Vector{ComplexF32}, Interpolations.Gridded{Interpolations.Linear{Interpolations.Throw{Interpolations.OnGrid}}}, Tuple{Vector{Float32}}}, Interpolations.Gridded{Interpolations.Linear{Interpolations.Throw{Interpolations.OnGrid}}}, Interpolations.Flat{Nothing}}, Vector{Float32}}, Float32}}:
   mode 1: kᵣ = 0.041883 - 0.0im rad/m (1499.84 m/s)
   mode 2: kᵣ = 0.04187 - 0.0im rad/m (1499.36 m/s)
   mode 3: kᵣ = 0.041847 - 0.0im rad/m (1498.56 m/s)
   mode 4: kᵣ = 0.041815 - 0.0im rad/m (1497.45 m/s)
   mode 5: kᵣ = 0.041773 - 0.0im rad/m (1496.01 m/s)
   mode 6: kᵣ = 0.041723 - 0.0im rad/m (1494.24 m/s)
   mode 7: kᵣ = 0.041663 - 0.0im rad/m (1492.15 m/s)
# plot the modes to a depth of 5 km
plot(modes[1:7], 5000)
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)")

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:

  • Range-dependent environments (adiabatic or coupled mode approximations)
  • N2-linear, analytic or quadratic interpolation for sound speed
  • Arbitrary reflection coefficients
  • Layered seabed
  • Twersky scattering
  • Interfacial roughness

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