using UnderwaterAcoustics
using AcousticRayTracers
using Plots
= UnderwaterEnvironment(
env = SampledField([200, 150]; x=[0, 1000], interp=:linear),
bathymetry = SampledField([1500, 1480, 1495, 1510, 1520]; z=0:-50:-200, interp=:cubic),
soundspeed = SandyClay
seabed
)= RaySolver(env)
pm
= AcousticSource(0, -50, 300)
tx = AcousticReceiver(1000, -100)
rx = arrivals(pm, tx, rx)
rays
plot(env; xlims=(-10, 1010))
plot!(tx)
plot!(rx)
plot!(rays)
RaySolver
Model | AcousticRayTracers.RaySolver |
Description | 2½D acoustic Gaussian beam tracer |
Language | Julia |
Advantages | Differentiable (forward mode) |
Limitations | Tell us and we will fix them! |
Differentiability | ForwardDiff |
RaySolver
is a differentiable 2½D Gaussian beam tracer similar to Bellhop, but fully written in Julia to be compatible with automatic differentiation (AD) tools such as ForwardDiff
. Its implementation is largely based on the description in:
- Jensen, Kuperman, Porter & Schmidt, “Computational Ocean Acoustics,” Springer New York, NY, 2011.
Example
= AcousticReceiverGrid2D(1:1000, -200:0)
rxs = transmission_loss(pm, tx, rxs; mode=:coherent)
x
plot(rxs, x; crange=70)
plot!(env; xlims=(0,1000), linewidth=3)
Notes
The RaySolver
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.