Orca

Model AcousticsToolbox.Orca
Description Orca normal mode model (wrapper)
Language Fortran
Advantages Well-established benchmark model
Limitations Not differentiable
Orca(env; kwargs...)

Create a Orca propagation model.

Supported keyword arguments:

  • dz: vertical step size for sampling modes in m (default: 0.1)
  • complex_solver: selects between real/complex solver (default: true)
  • cphmin: minimum phase speed in m/s (default: 0, 0=auto)
  • cphmax: maximum phase speed in m/s (default: 0, 0=auto)
  • rmin: minimum range of interest in m (default: 0, 0=auto)
  • rmax: maximum range of interest in m (default: 0, 0=auto)
  • phfac: phase step parameter (default: 0, 0=auto)
  • db_cut: dB cutoff for weak modes (default: 0, 0=auto)
  • debug: debug mode (default: false)

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

A good overview of the Orca 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 a simple test problem:

using UnderwaterAcoustics
using AcousticsToolbox
using Plots

env = UnderwaterEnvironment(
  bathymetry = 100,
  seabed = FineSand
)
pm = Orca(env)

tx = AcousticSource(0, -50, 300)
rx = AcousticReceiver(5000, -50)
modes = arrivals(pm, tx, rx)
17 element Vector{ModeArrival}:
  mode 1: kᵣ = 1.224472 - 2.0e-6im rad/m, v = 1538.47 m/s, vₚ = 1539.40 m/s
  mode 2: kᵣ = 1.223328 - 7.0e-6im rad/m, v = 1537.11 m/s, vₚ = 1540.84 m/s
  mode 3: kᵣ = 1.221418 - 1.5e-5im rad/m, v = 1534.84 m/s, vₚ = 1543.25 m/s
  mode 4: kᵣ = 1.218738 - 2.6e-5im rad/m, v = 1531.65 m/s, vₚ = 1546.65 m/s
  mode 5: kᵣ = 1.215281 - 3.9e-5im rad/m, v = 1527.52 m/s, vₚ = 1551.04 m/s
  mode 6: kᵣ = 1.211041 - 5.6e-5im rad/m, v = 1522.45 m/s, vₚ = 1556.48 m/s
  mode 7: kᵣ = 1.206007 - 7.4e-5im rad/m, v = 1516.42 m/s, vₚ = 1562.97 m/s
  mode 8: kᵣ = 1.200169 - 9.6e-5im rad/m, v = 1509.42 m/s, vₚ = 1570.57 m/s
  mode 9: kᵣ = 1.193515 - 0.000121im rad/m, v = 1501.43 m/s, vₚ = 1579.33 m/s
 mode 10: kᵣ = 1.18603 - 0.000149im rad/m, v = 1492.44 m/s, vₚ = 1589.30 m/s
 mode 11: kᵣ = 1.177701 - 0.000182im rad/m, v = 1482.44 m/s, vₚ = 1600.54 m/s
 mode 12: kᵣ = 1.16851 - 0.000222im rad/m, v = 1471.43 m/s, vₚ = 1613.13 m/s
 mode 13: kᵣ = 1.158441 - 0.000273im rad/m, v = 1459.43 m/s, vₚ = 1627.15 m/s
 mode 14: kᵣ = 1.147479 - 0.000341im rad/m, v = 1446.48 m/s, vₚ = 1642.69 m/s
 mode 15: kᵣ = 1.135609 - 0.000445im rad/m, v = 1432.62 m/s, vₚ = 1659.86 m/s
 mode 16: kᵣ = 1.122809 - 0.000629im rad/m, v = 1417.53 m/s, vₚ = 1678.79 m/s
 mode 17: kᵣ = 1.10899 - 0.000973im rad/m, v = 1399.09 m/s, vₚ = 1699.70 m/s
# plot the modes
plot(modes)
rxs = AcousticReceiverGrid2D(100:10:5000, -50)
x = transmission_loss(pm, tx, rxs)

plot(100:10:5000, x; ylims=(30,80), yflip=true, legend=false,
  xlabel="Range (km)", ylabel="Transmission loss (dB)")

Range-dependent scenario with multilayered seabed

While the Orca 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 Orca for range-dependence
pm = AdiabaticExt(Orca, 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.59 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 Orca 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.