Model
AcousticsToolbox.Orca
Description
Orca normal mode model (wrapper)
Language
Fortran
Advantages
Well-established benchmark model
Limitations
Not differentiable
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:
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.