BELLHOP3D computes
acoustic
fields in 3D oceanic environments via beam tracing. The
environment treated consists of an acoustic medium with a sound
speed that may depend on x, y, and z coordinates. Similarly, the
surface and bottom boundaries may vary with x and y coordinates.
It is patterned after the standard BELLHOP program, so more
information about how to run it may be found in the BELLHOP
documentation.
The following programs are used with BELLHOP3D :
BELLHOP3D Main program for doing Gaussian beam tracing
PLOTRAY3D Produces plots of central rays of beams
PLOTBTY3D
Produces plots of the bathymetry surface
ANGLES Given the source and receiver sound speeds, computes the angle of the limiting ray.
PLOTSSP
Plots the sound speed profile
PLOTSSP2D Plots the range-dependent sound speed profile
BELLHOP3D produces pressure fields in the NRL standard format and can therefore be plotted using the MATLAB script, plotshd.m.
The steps in running the program are as follows:
1. Set up your environmental file and run PLOTSSP to make sure the SSP looks reasonable.
2. Do a ray trace. That is,
A. Run BELLHOP3D with the ray trace option to calculate about 50 rays.
B. Run PLOTRAY3D to make sure you have the angular coverage you expect. Do the rays behave irregularly? If so reduce the step-size and try again.
3. Re-run BELLHOP3D using the coherent, incoherent or semicoherent option for transmission loss. (Use the default number of beams.)
4. Run plotshd.m to plot a full range-depth field plot.
5. Double the number of beams and check convergence.
Files:
Name Description
Input
*.ENV
ENVironmental data
*.SSP
Sound Speed
Profile data (optional)
Output
*.PRT
PRinT file
*.RAY
RAY file
*.SHD
SHaDe file
'Munk
profile' ! TITLE
50.0
! FREQ (Hz)
1
! NMEDIA
'CVW'
! SSPOPT (Analytic or C-linear interpolation)
51 0.0 20000.0 !
DEPTH of bottom (m)
0.0 1548.52 /
200.0 1530.29 /
250.0 1526.69 /
400.0 1517.78 /
600.0 1509.49 /
800.0 1504.30 /
1000.0 1501.38 /
1200.0 1500.14 /
1400.0 1500.12 /
1600.0 1501.02 /
1800.0 1502.57 /
2000.0 1504.62 /
2200.0 1507.02 /
2400.0 1509.69 /
2600.0 1512.55 /
2800.0 1515.56 /
3000.0 1518.67 /
3200.0 1521.85 /
3400.0 1525.10 /
3600.0 1528.38 /
3800.0 1531.70 /
4000.0 1535.04 /
4200.0 1538.39 /
4400.0 1541.76 /
4600.0 1545.14 /
4800.0 1548.52 /
5000.0 1551.91 /
20000 1551.91 /
'A' 0.0
20000.0 1600.00 0.0 1.8 0.8 /
1
! NSx number of source coordinates in x
0.0 / !
x coordinate of source (km)
1
! NSy number of source coordinates in y
0.0 / !
y coordinate of source (km)
1
! NSz
1000.0 / !
Sz(1 : NSz) (m)
501
! NRz
0 5000 / ! Rz(1
: NRz) (m)
1001
! NRr
0.0 100.0 / ! Rr(1 : NRr ) (km)
2
! Ntheta (number of bearings)
0.0 1.0 / !
bearing angles (degrees)
'CG
3' !
'R/C/I/S'
51
6
! Nalpha
-14.66 14.66 / ! alpha1, 2 (degrees)
Elevation/declination angle fan
11
46
! Nbeta
-2 2 / !
beta1, beta2 (degrees) bearine angle fan
100.0 100.0 100.0 20500.0 ! STEP (m), Box%x (km) Box%y
(km) Box%z (m)
The first 6 blocks in the ENVFIL
are common to all the programs in the Acoustics Toolbox. The
following blocks should be appended for
BELLHOP:
Syntax:
NSx
Sx(1:NSx)
NSy
Sy(1:NSy)
NRz
Rz(1:NRz)
NR
R(1:NR
)
Ntheta
theta(
1:Ntheta )
Description:
NSx: The number of source x-coordinates
Sx(): The
source x-coordinates (km)
NSy: The number of source x-coordinates
Sy(): The
source y-coordinates (km)
NSz: The number of source depths
Sz(): The
source depths (m)
NRz: The number of receiver depths
Rz(): The
receiver depths (m)
NRr: The number of receiver ranges
Rr(): The
receiver ranges (km)
Ntheta: The number of receiver bearings (radials)
theta(): The receiver bearings (degrees)
This data is read in using list-directed
I/O you can type it just about any way you want, e.g. on one
line or split onto several lines. Also if the depths or
ranges are equally spaced then you can type just the first and
last depths followed by a '/' and the intermediate depths will
be generated automatically.
You can specify a receiver at zero range;
however, the BELLHOP field is singular there--- the pressure is
returned as zero.
Syntax:
OPTION
Description:
OPTION(1:1): 'R' generates a ray file
'E' generates an eigenray file
'A' generates an amplitude-delay file (ascii)
'a' generate an amplitude-delay file (binary)
'C'
Coherent TL calculation
'I Incoherent TL calculation
'S' Semicoherent TL calculation
(Lloyd mirror source pattern)
OPTION(2:2): 'G' Geometric hat
beams in cartesian coordinates (default and
fastest option)
'g' Geometric hat beams in
ray-centered coordinates (slow)
'B' Geometric Gaussian beams in cartesian
coordinates
'b' Geometric Gaussian beams in ray-centered coordinates (slow)
OPTION(3:3):
'*'
read
in
a
source
beam pattern file
' ' don't (default)
OPTION(4:4):
'R'
point
source
(cylindrical
coordinates)
(default)
('X' line source (cartesian coordinates) does not make
sense in 3D and is not implemented)
OPTION(5:5): 'R' rectilinear grid (default)
'I' irregular grid
OPTION(6:6): '2' Nx2D run (default)
'3' 3D run
The ray file and eigenray files have the
same simple ascii format and can be plotted using the Matlab
script plotray.m.
The eigenray option seems to generate a lot
of questions. The way this works is that BELLHOP simply writes
the trajectories for all the beams that contribute at a given
receiver location. To get a useful picture you normally want to
use a very fine fan, only one receiver location, and the
geometric beam option. See the examples in at/tests.
The amplitude-delay file can be used with the Matlab script stackarr.m to 'stack the arrivals', i.e. to convolve them with the source spectrum and plot the channel response. stackarr.m can also be used to simple plot the impulse response.
For TL calculations, the output is in the
shdfil format used by all the codes in the Acoustics Toolbox and
can be plotted using the Matlab script, plotshd.m. (Use toasc.f
to convert the binary shade files to ascii format for use by
plotshd.m or whatever plot package you're using.)
The pressure field is normally calculated
on a rectilinear grid formed by the receiver ranges and depths.
If an irregular grid is selected, then the receiver ranges and
depths are interpreted as a coordinate pair for the receivers.
This option is useful for reverberation calculations where the
receivers need to follow the bottom terrain. This option has not
been used much. The plot routines (plotarr) have not been
modified to accomodate it. There may be some other limitations.
There are actually several different types of Gaussian beam options (OPTION(2:2)) implemented in the code. Only the two described above are fully maintained.
The source beam pattern file has the format
NSBPPts
angle1 power1
angle2 power2
...
with angle following the BELLHOP
convention, i.e. declination angle in degrees (so that 90
degrees points to the bottom). The power is in dB. To match a
standard point source calculation one would used anisotropic
source with 0 dB for all angles. (See at/tests/BeamPattern for
an example.)
Syntax:
Nalpha ISINGLE
alpha(
1 : Nalpha )
Nbeta ISINGLE
beta( 1
: Nbeta )
Description:
Nalpha: Number of beams in
elevation
(use
0
to
have
the
program
calculate
a value automatically, but conservatively).
ISINGLE:
If
the
option
to
compute
a single beam in the fan is selected (top option)
then
this
selects
the
index
of
the beam that is traced.
alpha(): Beam elevation angles (degrees) (negative angles toward
surface)
Nbeta: Number of beams in
azimuth
(use
0
to
have
the
program
calculate
a value automatically, but conservatively).
ISINGLE:
If
the
option
to
compute
a single beam in the fan is selected (top option)
then
this
selects
the
index
of
the beam that is traced.
beta(): Beam azimuth angles (degrees) (math convention with 0 degrees pointing along the x-axis)
For a ray trace you can type in a sequence of angles or you can type the first and last angles followed by a '/'. For a TL calculation, the rays must be equally spaced otherwise the results will be incorrect.
Syntax:
STEP Box%x (km)
Box%y (km) Box%z (m)
Description:
STEP: The step size used for tracing the rays
(m). (Use 0 to let BELLHOP choose the step size.)
Box%x: The maximum distance in the x-direction to trace a
ray (km).
Box%y: The maximum distance in the y-direction to trace a
ray (km).
Box%x: The maximum distance in the z-direction to trace a
ray (m).
The required step size depends on many
factors. This includes frequency, size of features in the
SSP (such as surface ducts), range of receivers, and whether a
coherent or incoherent TL calculation is performed. If you
use STEP=0.0 BELLHOP will use a default step-size and tell you
what it picked. You should then halve the step size until
the results are convergent to your required accuracy. To
obtain a smooth ray trace you should use the spline SSP
interpolation and a step-size less than the smallest distance
between SSP data points.
Rays are traced until they exit the box (
Box%x, Box%y, Box%z ). The box is defined with the source ( x_s,
y_s, 0 ) at the center of the coordinate system. The
z-coordinate of the source, z_s, is not used, so the box is
oriented around the epicenter of the source. You can make
the box a bit (say 1%) roomy too make sure rays are not killed
the moment they hit the bottom or are just reaching your
furthest receiver.
BELLHOP3D assumes that the SSP and bathymetry are
provided everywhere it needs that information for the ray
trace. If a ray gets to an x-y coordinate where the bathymetry
is not defined below the ray, it prints an error message and
aborts the ray trace for that particular ray. Obviously care
also needs to be taken to ensure that SSP and bathymetry are
using the same coordinate system in terms of orientation and
origin. Recall that SSP values between sample
points are calculated by interpolation (unless the analytic
SSP option is used). If your SSP is using dummy values
in locations that are below the bottom, that dummy value can
influence the SSP calculated inside the water column. For
instance, the SSP precisely at the bottom is calculated by
interpolation between the two SSP points that bracket the
bottom depth. The safest way to handle this is for the user to
extrapolate the SSP to provide reasonable numbers into the
bottom, rather than using a dummy value.
Tip: If you're running a problem with cylindrical symmetry
and your TL plot is not symmetric, there can be a few causes.
First, there is some aliasing in the plot routines that
results from taking a polar grid and plotting the data on a
rectangular one. Second, often people will select a fan of
beams in azimuth that does not align with the receiver
bearings. That leads to another sort of aliasing effect. Keep
in mind that if you want beams every 10 degrees, you need to
specify 37 beam azimuths over 360 degrees, not 36. The bearing
at 360 degrees is a duplicate of the bearing a 0 degrees and
is omitted by BELLHOP3D. However, when this problem is
occurring it also indicates that the azimuthal fan is
under-sampled.
BELLHOP3D, like BELLHOP develops artifacts near a boundary
zone that tends to become wider as you go out in range. This
is due to the fact that the beams become fat and there is no
attempt to include an image beam that is needed to satisfy the
pressure release condition at the boundary. It is easy to spot
this effect in a sideview (range-depth) plot. The size of that
boundary zone can usually be reduced by tracing a finer fan of
beams in declination angle, which makes the beams narrower.