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:
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).