org-arl / UnderwaterAcoustics.jl

Julia toolbox for underwater acoustic modeling
MIT License
44 stars 13 forks source link

Speed of sound in the depths of the Mediterranean #53

Closed tamasgal closed 6 months ago

tamasgal commented 6 months ago

I am by no means an acoustics expert (let alone underwater) but we are currently trying to improve the simulation of the acoustics position system of an underwater neutrino telescope in the depths of the Mediterranean (3500m deep).

I wanted to plot the sound speed profile but I am a little bit confused about the models and some namings, so forgive my ignorance. If would be awesome if we could somehow simulate the propagation of acoustic pingers (short frequency sweeps) but first things first 😉

I thought that MunkSSP() would give me some reasonable SSP values but I am a bit confused confused.

Btw. for the salanity, we use data from other experiments but it seems I can only provide a fixed number in this package. It probably does not matter much, but again, I am no expert ;)

We are operating in a height-range of about 800m, so e.g. one detector is sitting at a depth of 3500m and the top is at 2700m.

Here, I defined a simple environment to plot the speed profile.

env = UnderwaterEnvironment(
         seasurface = Vacuum,
         seabed = FineSand,
         salinity = 38.72,
         ssp = MunkSSP(),
         bathymetry = ConstantDepth(3450.0)
       )
Screenshot 2024-04-09 at 17 29 05

Now I am wondering since the model we use shows a "big" discrepancy. According to NPL at depths of about 3450m, the velocity with those parameters is areound 1565 m/s, so about 20 m/s or so faster. I used their Calculator:

Screenshot 2024-04-09 at 17 30 26

You can see that there I can also pass the temperature, which has an effect on the same ballpark if I adjust it by a few degrees celsius, so maybe that's the reason? How do I make use of the temperature effect? I see that soundspeed() uses it but am struggling to bring things together: https://org-arl.github.io/UnderwaterAcoustics.jl/stable/uw_basic.html#UnderwaterAcoustics.soundspeed

Happy to hear some feedback from experts :)

mchitre commented 6 months ago

The sound speed estimate from UnderwaterAcoustics.jl agrees with the estimate from NPL:

julia> using UnderwaterAcoustics
julia> soundspeed(14, 38, 3450)
1564.897339843575

The MunkSSP is a specific sound speed profile that is used in many benchmark underwater acoustics problems, but likely not the one you want to use for your simulations. The one you probably want is the SampledSSP, where you can specify sound speed as a function of depth. You can use soundspeed() to compute estimates of sound speed given temperature, salinity and depth, if you don't have measurements. Example:

env = UnderwaterEnvironment(
  seasurface = Vacuum,
  seabed = FineSand,
  ssp = SampledSSP(0:3450, soundspeed.(14, 38, 0:3450)),
  bathymetry = ConstantDepth(3450.0)
)

plot(ssp(env); maxdepth=3450)
image

The above example used a constant temperature of 14 deg C and constant salinity of 38 ppt, in line with the data you entered into the NPL calculator. If you have an idea of the the variability of temperature and/or salinity with depth, you can put that in by replacing the scalar values with vectors in the code above.

P.S. The documentation shows how to simulate a pinger.

tamasgal commented 6 months ago

Ah, understood, makes perfect sense now, thanks!