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)
  • temp_dir: directory for temporary files (default: system temp directory)
  • 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.224473 - 2.0e-6im rad/m, v = 1538.47 m/s, vₚ = 1539.40 m/s
  mode 2: kᵣ = 1.22333 - 7.0e-6im rad/m, v = 1537.12 m/s, vₚ = 1540.84 m/s
  mode 3: kᵣ = 1.221422 - 1.5e-5im rad/m, v = 1534.85 m/s, vₚ = 1543.25 m/s
  mode 4: kᵣ = 1.218745 - 2.6e-5im rad/m, v = 1531.66 m/s, vₚ = 1546.64 m/s
  mode 5: kᵣ = 1.215292 - 4.0e-5im rad/m, v = 1527.54 m/s, vₚ = 1551.03 m/s
  mode 6: kᵣ = 1.211055 - 5.6e-5im rad/m, v = 1522.48 m/s, vₚ = 1556.46 m/s
  mode 7: kᵣ = 1.206025 - 7.5e-5im rad/m, v = 1516.45 m/s, vₚ = 1562.95 m/s
  mode 8: kᵣ = 1.200191 - 9.7e-5im rad/m, v = 1509.45 m/s, vₚ = 1570.55 m/s
  mode 9: kᵣ = 1.19354 - 0.000121im rad/m, v = 1501.46 m/s, vₚ = 1579.30 m/s
 mode 10: kᵣ = 1.186059 - 0.000149im rad/m, v = 1492.47 m/s, vₚ = 1589.26 m/s
 mode 11: kᵣ = 1.177731 - 0.000181im rad/m, v = 1482.46 m/s, vₚ = 1600.50 m/s
 mode 12: kᵣ = 1.168542 - 0.00022im rad/m, v = 1471.44 m/s, vₚ = 1613.08 m/s
 mode 13: kᵣ = 1.158474 - 0.000269im rad/m, v = 1459.43 m/s, vₚ = 1627.10 m/s
 mode 14: kᵣ = 1.147511 - 0.000336im rad/m, v = 1446.45 m/s, vₚ = 1642.65 m/s
 mode 15: kᵣ = 1.135638 - 0.000437im rad/m, v = 1432.56 m/s, vₚ = 1659.82 m/s
 mode 16: kᵣ = 1.122833 - 0.000617im rad/m, v = 1417.43 m/s, vₚ = 1678.75 m/s
 mode 17: kᵣ = 1.109007 - 0.000952im rad/m, v = 1399.00 m/s, vₚ = 1699.68 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\)). This limitation can be worked around by wrapping the model with Reframe2D, which automatically transforms 2D scenarios specified in world coordinates into the coordinate system required by the model (see the quickstart guide for an example).